mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-29 04:20:20 +00:00
drop connection from sdp register/unregister
This commit is contained in:
parent
9b425432dd
commit
f1a4af62ee
@ -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 */
|
||||
|
||||
|
@ -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 */
|
||||
}
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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,14 +233,13 @@ 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) {
|
||||
linked_list_remove(&sdp_service_records, (linked_item_t *) record_item);
|
||||
if (!record_item) return;
|
||||
linked_list_remove(&sdp_service_records, (linked_item_t *) record_item);
|
||||
#ifndef EMBEDDED
|
||||
free(record_item);
|
||||
free(record_item);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
// PDU
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user