drop connection from sdp register/unregister

This commit is contained in:
Matthias Ringwald 2015-11-15 14:02:45 +01:00
parent 9b425432dd
commit f1a4af62ee
16 changed files with 28 additions and 34 deletions

View File

@ -267,12 +267,12 @@ int btstack_main(void)
service_record_item_t * service_record_item = (service_record_item_t *) spp_service_buffer;
sdp_create_spp_service( (uint8_t*) &service_record_item->service_record, RFCOMM_SERVER_CHANNEL, "SPP Counter");
printf("SDP service buffer size: %u\n", (uint16_t) (sizeof(service_record_item_t) + de_get_len((uint8_t*) &service_record_item->service_record)));
sdp_register_service_internal(NULL, service_record_item);
sdp_register_service_internal(service_record_item);
/* LISTING_PAUSE */
#else
sdp_create_spp_service( (uint8_t*)spp_service_buffer, RFCOMM_SERVER_CHANNEL, "SPP Counter");
printf("SDP service record size: %u\n", de_get_len((uint8_t*)spp_service_buffer));
sdp_register_service_internal(NULL, (uint8_t*)spp_service_buffer);
sdp_register_service_internal((uint8_t*)spp_service_buffer);
#endif
/* LISTING_RESUME */

View File

@ -106,12 +106,12 @@ static void spp_service_setup(void){
service_record_item_t * service_record_item = (service_record_item_t *) spp_service_buffer;
sdp_create_spp_service( (uint8_t*) &service_record_item->service_record, RFCOMM_SERVER_CHANNEL, "SPP Counter");
printf("SDP service buffer size: %u\n", (uint16_t) (sizeof(service_record_item_t) + de_get_len((uint8_t*) &service_record_item->service_record)));
sdp_register_service_internal(NULL, service_record_item);
sdp_register_service_internal(service_record_item);
/* LISTING_PAUSE */
#else
sdp_create_spp_service( (uint8_t*) spp_service_buffer, RFCOMM_SERVER_CHANNEL, "SPP Counter");
printf("SDP service record size: %u\n", de_get_len((uint8_t*) spp_service_buffer));
sdp_register_service_internal(NULL, (uint8_t*)spp_service_buffer);
sdp_register_service_internal((uint8_t*)spp_service_buffer);
#endif
/* LISTING_RESUME */
}

View File

@ -96,7 +96,7 @@ static void spp_service_setup(void){
service_record_item_t * service_record_item = (service_record_item_t *) spp_service_buffer;
sdp_create_spp_service( (uint8_t*) &service_record_item->service_record, 1, "SPP Counter");
printf("SDP service buffer size: %u\n\r", (uint16_t) (sizeof(service_record_item_t) + de_get_len((uint8_t*) &service_record_item->service_record)));
sdp_register_service_internal(NULL, service_record_item);
sdp_register_service_internal(service_record_item);
}
/* LISTING_END */

View File

@ -988,7 +988,7 @@ static int btstack_command_handler(connection_t *connection, uint8_t *packet, ui
case SDP_REGISTER_SERVICE_RECORD:
log_info("SDP_REGISTER_SERVICE_RECORD size %u\n", size);
service_record_handle = sdp_register_service_internal(connection, &packet[3]);
service_record_handle = sdp_register_service_internal(&packet[3]);
if (service_record_handle){
daemon_add_client_sdp_service_record_handle(connection, service_record_handle);
sdp_emit_service_registered(connection, service_record_handle, 0);
@ -999,7 +999,7 @@ static int btstack_command_handler(connection_t *connection, uint8_t *packet, ui
case SDP_UNREGISTER_SERVICE_RECORD:
service_record_handle = READ_BT_32(packet, 3);
log_info("SDP_UNREGISTER_SERVICE_RECORD handle 0x%x ", service_record_handle);
sdp_unregister_service_internal(connection, service_record_handle);
sdp_unregister_service_internal(service_record_handle);
daemon_remove_client_sdp_service_record_handle(connection, service_record_handle);
break;
case SDP_CLIENT_QUERY_RFCOMM_SERVICES:

View File

@ -230,7 +230,7 @@ int btstack_main(int argc, const char * argv[]){
service_record_item_t * service_record_item = (service_record_item_t *) spp_service_buffer;
sdp_create_spp_service( (uint8_t*) &service_record_item->service_record, 1, "SPP Counter");
printf("SDP service buffer size: %u\n\r", (uint16_t) (sizeof(service_record_item_t) + de_get_len((uint8_t*) &service_record_item->service_record)));
sdp_register_service_internal(NULL, service_record_item);
sdp_register_service_internal(service_record_item);
// set one-shot timer
timer_source_t heartbeat;

View File

@ -220,7 +220,7 @@ int btstack_main(int argc, const char * argv[]){
service_record_item_t * service_record_item = (service_record_item_t *) spp_service_buffer;
sdp_create_spp_service( (uint8_t*) &service_record_item->service_record, 1, "SPP Accel");
printf("SDP service buffer size: %u\n\r", (uint16_t) (sizeof(service_record_item_t) + de_get_len((uint8_t*) &service_record_item->service_record)));
sdp_register_service_internal(NULL, service_record_item);
sdp_register_service_internal(service_record_item);
// ready - enable irq used in h4 task
__enable_interrupt();

View File

@ -230,7 +230,7 @@ int btstack_main(int argc, const char * argv[]){
service_record_item_t * service_record_item = (service_record_item_t *) spp_service_buffer;
sdp_create_spp_service( (uint8_t*) &service_record_item->service_record, 1, "SPP Counter");
printf("SDP service buffer size: %u\n\r", (uint16_t) (sizeof(service_record_item_t) + de_get_len((uint8_t*) &service_record_item->service_record)));
sdp_register_service_internal(NULL, service_record_item);
sdp_register_service_internal(service_record_item);
// set one-shot timer
timer_source_t heartbeat;

View File

@ -220,7 +220,7 @@ int btstack_main(int argc, const char * argv[]){
service_record_item_t * service_record_item = (service_record_item_t *) spp_service_buffer;
sdp_create_spp_service( (uint8_t*) &service_record_item->service_record, 1, "SPP Accel");
printf("SDP service buffer size: %u\n\r", (uint16_t) (sizeof(service_record_item_t) + de_get_len((uint8_t*) &service_record_item->service_record)));
sdp_register_service_internal(NULL, service_record_item);
sdp_register_service_internal(service_record_item);
// ready - enable irq used in h4 task
__enable_interrupt();

View File

@ -122,7 +122,7 @@ static uint32_t sdp_create_service_record_handle(void){
// pre: ServiceRecordHandle is first attribute and valid
// pre: record
// @returns ServiceRecordHandle or 0 if registration failed
uint32_t sdp_register_service_internal(void *connection, service_record_item_t * record_item){
uint32_t sdp_register_service_internal(service_record_item_t * record_item){
// get user record handle
uint32_t record_handle = record_item->service_record_handle;
// get actual record
@ -167,7 +167,7 @@ static const uint8_t removeServiceRecordHandleAttributeIDList[] = { 0x36, 0x00,
// register service record internally - the normal version creates a copy of the record
// pre: AttributeIDs are in ascending order => ServiceRecordHandle is first attribute if present
// @returns ServiceRecordHandle or 0 if registration failed
uint32_t sdp_register_service_internal(void *connection, uint8_t * record){
uint32_t sdp_register_service_internal(uint8_t * record){
// dump for now
// log_info("Register service record");
@ -200,8 +200,6 @@ uint32_t sdp_register_service_internal(void *connection, uint8_t * record){
if (!newRecordItem) {
return 0;
}
// link new service item to client connection
newRecordItem->connection = connection;
// set new handle
newRecordItem->service_record_handle = record_handle;
@ -235,15 +233,14 @@ uint32_t sdp_register_service_internal(void *connection, uint8_t * record){
//
// makes sure one client cannot remove service records of other clients
//
void sdp_unregister_service_internal(void *connection, uint32_t service_record_handle){
void sdp_unregister_service_internal(uint32_t service_record_handle){
service_record_item_t * record_item = sdp_get_record_for_handle(service_record_handle);
if (record_item && record_item->connection == connection) {
if (!record_item) return;
linked_list_remove(&sdp_service_records, (linked_item_t *) record_item);
#ifndef EMBEDDED
free(record_item);
#endif
}
}
// PDU
// PDU ID (1), Transaction ID (2), Param Length (2), Param 1, Param 2, ..

View File

@ -63,9 +63,6 @@ typedef struct {
// linked list - assert: first field
linked_item_t item;
// client connection
void * connection;
// data is contained in same memory
uint32_t service_record_handle;
uint8_t service_record[1]; // waste 1 byte to allow compilation with older compilers
@ -92,7 +89,7 @@ void sdp_register_packet_handler(void (*handler)(void * connection, uint8_t pack
- ServiceRecordHandle is first attribute and valid.
* @return ServiceRecordHandle or 0 if registration failed.
*/
uint32_t sdp_register_service_internal(void *connection, service_record_item_t * record_item);
uint32_t sdp_register_service_internal(service_record_item_t * record_item);
#endif
#ifndef EMBEDDED
@ -100,13 +97,13 @@ uint32_t sdp_register_service_internal(void *connection, service_record_item_t *
* @brief Register service record internally - this version creates a copy of the record precondition: AttributeIDs are in ascending order => ServiceRecordHandle is first attribute if present.
* @return ServiceRecordHandle or 0 if registration failed
*/
uint32_t sdp_register_service_internal(void *connection, uint8_t * service_record);
uint32_t sdp_register_service_internal(uint8_t * service_record);
#endif
/**
* @brief Unregister service record internally.
*/
void sdp_unregister_service_internal(void *connection, uint32_t service_record_handle);
void sdp_unregister_service_internal(uint32_t service_record_handle);
/* API_END */
#if defined __cplusplus

View File

@ -803,11 +803,11 @@ int btstack_main(int argc, const char * argv[]){
service_record_item_t * service_record_item = (service_record_item_t *) panu_sdp_record;
pan_create_panu_service((uint8_t*) &service_record_item->service_record, network_packet_types, NULL, NULL, BNEP_SECURITY_NONE);
printf("SDP service buffer size: %u\n", (uint16_t) (sizeof(service_record_item_t) + de_get_len((uint8_t*) &service_record_item->service_record)));
sdp_register_service_internal(NULL, service_record_item);
sdp_register_service_internal(service_record_item);
#else
pan_create_panu_service(panu_sdp_record, network_packet_types, NULL, NULL, BNEP_SECURITY_NONE);
printf("SDP service record size: %u\n", de_get_len((uint8_t*) panu_sdp_record));
sdp_register_service_internal(NULL, (uint8_t*)panu_sdp_record);
sdp_register_service_internal((uint8_t*)panu_sdp_record);
#endif
/* Turn on the device */

View File

@ -781,12 +781,12 @@ int btstack_main(int argc, const char * argv[]){
sdp_create_spp_service((uint8_t*) spp_service_buffer, RFCOMM_SERVER_CHANNEL, "SPP Counter");
de_dump_data_element((uint8_t*) spp_service_buffer);
printf("SDP service record size: %u\n\r", de_get_len((uint8_t*)spp_service_buffer));
sdp_register_service_internal(NULL, (uint8_t*)spp_service_buffer);
sdp_register_service_internal((uint8_t*)spp_service_buffer);
memset(dummy_service_buffer, 0, sizeof(dummy_service_buffer));
sdp_create_dummy_service((uint8_t*)dummy_service_buffer, "UUID128 Test");
de_dump_data_element((uint8_t*)dummy_service_buffer);
printf("Dummy service record size: %u\n\r", de_get_len((uint8_t*)dummy_service_buffer));
sdp_register_service_internal(NULL, (uint8_t*)dummy_service_buffer);
sdp_register_service_internal((uint8_t*)dummy_service_buffer);
sdp_query_rfcomm_register_callback(handle_query_rfcomm_event, NULL);

View File

@ -207,7 +207,7 @@ int btstack_main(int argc, const char * argv[]){
memset((uint8_t *)hfp_service_buffer, 0, sizeof(hfp_service_buffer));
hfp_ag_create_sdp_record((uint8_t *)hfp_service_buffer, rfcomm_channel_nr, hfp_ag_service_name, 0, 0);
sdp_register_service_internal(NULL, (uint8_t *)hfp_service_buffer);
sdp_register_service_internal((uint8_t *)hfp_service_buffer);
// turn on!
hci_power_control(HCI_POWER_ON);

View File

@ -240,7 +240,7 @@ int btstack_main(int argc, const char * argv[]){
// init SDP, create record for SPP and register with SDP
memset((uint8_t *)hfp_service_buffer, 0, sizeof(hfp_service_buffer));
hfp_hf_create_sdp_record((uint8_t *)hfp_service_buffer, rfcomm_channel_nr, hfp_hf_service_name, 0);
sdp_register_service_internal(NULL, (uint8_t *)hfp_service_buffer);
sdp_register_service_internal((uint8_t *)hfp_service_buffer);
// turn on!
hci_power_control(HCI_POWER_ON);

View File

@ -192,7 +192,7 @@ int btstack_main(int argc, const char * argv[]){
hsp_ag_register_packet_handler(packet_handler);
sdp_init();
sdp_register_service_internal(NULL, (uint8_t *)hsp_service_buffer);
sdp_register_service_internal((uint8_t *)hsp_service_buffer);
// turn on!
hci_power_control(HCI_POWER_ON);

View File

@ -312,7 +312,7 @@ int btstack_main(int argc, const char * argv[]){
hsp_hs_register_packet_handler(packet_handler);
sdp_init();
sdp_register_service_internal(NULL, (uint8_t *)hsp_service_buffer);
sdp_register_service_internal((uint8_t *)hsp_service_buffer);
hci_discoverable_control(1);
hci_set_class_of_device(0x200418);