Hi list, I am trying to add a attribute "Public Key" (20 bytes length) to the description of a service, but I get a segfault (see code below). Following some examples in the bluez source code (and in http://people.csail.mit.edu/people/albert/pubs/ashuang-sm-thesis-2005.pdf) I have managed to add successfully the PSM and the protocol version attributes to the service description, but I could not find examples of adding "custom" parameters. I am sure that I still have to provide an identifier to the attribute, but could not find out how to do it. Any further help will be appreciated. Here is the code : ---- snip ---- int main() { int ret = 0; uint32_t service_uuid_int[] = { 0, 0, 0, 0x00FF }; uint16_t l2cap_psm = 1111, ver = 0x001; uuid_t root_uuid, l2cap_uuid, svc_uuid; sdp_list_t *l2cap_list = 0 , *root_list = 0 , *proto_list = 0 , *access_proto_list = 0 ; sdp_data_t *psm = 0 , *version = 0, *psha1 = 0; const char *service_name = "new service"; const char *service_dsc = "description of my service" ; const char *service_prov = "Bluetooth Access Point" ; // this is the key I want to put in the parameter const char *pubsha1 = "0123456789abcdef6789" ; sdp_record_t *record = sdp_record_alloc(); // set the general service ID sdp_uuid128_create (&svc_uuid, &service_uuid_int) ; sdp_set_service_id (record, svc_uuid) ; // make the service record publicly browsable sdp_uuid16_create (&root_uuid, PUBLIC_BROWSE_GROUP) ; root_list = sdp_list_append (0, &root_uuid) ; sdp_set_browse_groups (record, root_list) ; sdp_list_free (root_list, 0); // set l2cap information sdp_uuid16_create (&l2cap_uuid, L2CAP_UUID) ; l2cap_list = sdp_list_append (0, &l2cap_uuid) ; // set PSM information psm = sdp_data_alloc (SDP_UINT16, &l2cap_psm) ; l2cap_list = sdp_list_append (l2cap_list, psm) ; // set protocol version version = sdp_data_alloc(SDP_UINT16, &ver); l2cap_list = sdp_list_append(l2cap_list, version); // set key parameter psha1 = sdp_data_alloc(SDP_TEXT_STR16, pubsha1) ; l2cap_list = sdp_list_append (l2cap_list, psha1) ; proto_list = sdp_list_append (0 , l2cap_list) ; // attach protocol information to service record access_proto_list = sdp_list_append ( 0 , proto_list ) ; printf("The next line causes segmentation fault\n"); sdp_set_access_protos ( record, access_proto_list ) ; printf("not reached\n"); // set the name, provider , and description sdp_set_info_attr (record, service_name, service_prov, service_dsc ) ; // connect to the local SDP server and register the service record sdp_session_t *session = 0 ; session = sdp_connect ( BDADDR_ANY, BDADDR_LOCAL, SDP_RETRY_IF_BUSY ) ; ret = sdp_record_register ( session , record , SDP_RECORD_PERSIST ) ; if (ret < 0) { printf("Service Record registration failed\n"); ret = -1; } printf("Service registration completed\n"); // cleanup sdp_list_free (l2cap_list, 0); sdp_list_free (access_proto_list, 0); sdp_record_free (record); return ret; } --- snap --- Best regards, Jordi