From 045ba8fec0b10b936623b66fd334dbbee083a9fb Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Sat, 14 Nov 2015 23:26:59 +0100 Subject: [PATCH] move sdp_emit_service_registered to daemon --- platform/daemon/src/daemon.c | 20 ++++++++++++++++++-- src/classic/sdp.c | 19 +------------------ 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/platform/daemon/src/daemon.c b/platform/daemon/src/daemon.c index 446940f33..8aa0a9222 100644 --- a/platform/daemon/src/daemon.c +++ b/platform/daemon/src/daemon.c @@ -672,11 +672,22 @@ static void send_rfcomm_create_channel_failed(void * connection, bd_addr_t addr, bt_store_16(event, pos, 0); pos += 2; // channel ID bt_store_16(event, pos, 0); pos += 2; // max frame size hci_dump_packet(HCI_EVENT_PACKET, 0, event, sizeof(event)); - hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event)); socket_connection_send_packet(connection, HCI_EVENT_PACKET, 0, event, sizeof(event)); } +// data: event(8), len(8), status(8), service_record_handle(32) +static void sdp_emit_service_registered(void *connection, uint32_t handle, uint8_t status) { + if (!app_packet_handler) return; + uint8_t event[7]; + event[0] = SDP_SERVICE_REGISTERED; + event[1] = sizeof(event) - 2; + event[2] = status; + bt_store_32(event, 3, handle); + hci_dump_packet(HCI_EVENT_PACKET, 0, event, sizeof(event)); + socket_connection_send_packet(connection, HCI_EVENT_PACKET, 0, event, sizeof(event)); +} + linked_list_gatt_client_helper_t * daemon_setup_gatt_client_request(connection_t *connection, uint8_t *packet, int track_active_connection) { hci_con_handle_t handle = READ_BT_16(packet, 3); log_info("daemon_setup_gatt_client_request for handle 0x%02x", handle); @@ -978,7 +989,12 @@ 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]); - daemon_add_client_sdp_service_record_handle(connection, service_record_handle); + if (service_record_handle){ + daemon_add_client_sdp_service_record_handle(connection, service_record_handle); + sdp_emit_service_registered(connection, service_record_handle, 0); + } else { + sdp_emit_service_registered(connection, 0, BTSTACK_MEMORY_ALLOC_FAILED); + } break; case SDP_UNREGISTER_SERVICE_RECORD: service_record_handle = READ_BT_32(packet, 3); diff --git a/src/classic/sdp.c b/src/classic/sdp.c index 23cc52e46..27a14af27 100644 --- a/src/classic/sdp.c +++ b/src/classic/sdp.c @@ -94,18 +94,6 @@ uint32_t sdp_get_service_record_handle(uint8_t * record){ return READ_NET_32(serviceRecordHandleAttribute, 1); } -// data: event(8), len(8), status(8), service_record_handle(32) -static void sdp_emit_service_registered(void *connection, uint32_t handle, uint8_t status) { - if (!app_packet_handler) return; - uint8_t event[7]; - event[0] = SDP_SERVICE_REGISTERED; - event[1] = sizeof(event) - 2; - event[2] = status; - bt_store_32(event, 3, handle); - hci_dump_packet(HCI_EVENT_PACKET, 0, event, sizeof(event)); - (*app_packet_handler)(connection, HCI_EVENT_PACKET, 0, (uint8_t *) event, sizeof(event)); -} - static service_record_item_t * sdp_get_record_for_handle(uint32_t handle){ linked_item_t *it; for (it = (linked_item_t *) sdp_service_records; it ; it = it->next){ @@ -167,9 +155,7 @@ uint32_t sdp_register_service_internal(void *connection, service_record_item_t * // add to linked list linked_list_add(&sdp_service_records, (linked_item_t *) record_item); - - sdp_emit_service_registered(connection, 0, record_item->service_record_handle); - + return record_handle; } @@ -212,7 +198,6 @@ uint32_t sdp_register_service_internal(void *connection, uint8_t * record){ // alloc memory for new service_record_item service_record_item_t * newRecordItem = (service_record_item_t *) malloc(recordSize + sizeof(service_record_item_t)); if (!newRecordItem) { - sdp_emit_service_registered(connection, 0, BTSTACK_MEMORY_ALLOC_FAILED); return 0; } // link new service item to client connection @@ -241,8 +226,6 @@ uint32_t sdp_register_service_internal(void *connection, uint8_t * record){ // add to linked list linked_list_add(&sdp_service_records, (linked_item_t *) newRecordItem); - sdp_emit_service_registered(connection, 0, newRecordItem->service_record_handle); - return record_handle; }