mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-21 12:40:42 +00:00
sdp_parser: drop sdp_query_event_t finally
This commit is contained in:
parent
4225393c87
commit
a874746709
@ -134,7 +134,7 @@ static btstack_data_source_t tap_dev_ds;
|
||||
|
||||
/* LISTING_START(PanuSetup): Panu setup */
|
||||
static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
|
||||
static void handle_sdp_client_query_result(sdp_query_event_t *event);
|
||||
static void handle_sdp_client_query_result(uint8_t packet_type, uint8_t *packet, uint16_t size);
|
||||
|
||||
static void panu_setup(void){
|
||||
// Initialize L2CAP
|
||||
@ -317,30 +317,26 @@ static char * get_string_from_data_element(uint8_t * element){
|
||||
* @text The SDP parsers retrieves the BNEP PAN UUID as explained in
|
||||
* Section [on SDP BNEP Query example](#sec:sdpbnepqueryExample}.
|
||||
*/
|
||||
static void handle_sdp_client_query_result(sdp_query_event_t *event)
|
||||
{
|
||||
const uint8_t * complete_event;
|
||||
const uint8_t *value_event;
|
||||
static void handle_sdp_client_query_result(uint8_t packet_type, uint8_t *packet, uint16_t size) {
|
||||
|
||||
des_iterator_t des_list_it;
|
||||
des_iterator_t prot_it;
|
||||
char *str;
|
||||
|
||||
switch (event->type){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_ATTRIBUTE_VALUE:
|
||||
value_event = (const uint8_t *) event;
|
||||
|
||||
// Handle new SDP record
|
||||
if (sdp_query_attribute_value_event_get_record_id(value_event) != record_id) {
|
||||
record_id = sdp_query_attribute_value_event_get_record_id(value_event);
|
||||
if (sdp_query_attribute_value_event_get_record_id(packet) != record_id) {
|
||||
record_id = sdp_query_attribute_value_event_get_record_id(packet);
|
||||
printf("SDP Record: Nr: %d\n", record_id);
|
||||
}
|
||||
|
||||
if (sdp_query_attribute_value_event_get_attribute_length(value_event) <= attribute_value_buffer_size) {
|
||||
attribute_value[sdp_query_attribute_value_event_get_data_offset(value_event)] = sdp_query_attribute_value_event_get_data(value_event);
|
||||
if (sdp_query_attribute_value_event_get_attribute_length(packet) <= attribute_value_buffer_size) {
|
||||
attribute_value[sdp_query_attribute_value_event_get_data_offset(packet)] = sdp_query_attribute_value_event_get_data(packet);
|
||||
|
||||
if ((uint16_t)(sdp_query_attribute_value_event_get_data_offset(value_event)+1) == sdp_query_attribute_value_event_get_attribute_length(value_event)) {
|
||||
if ((uint16_t)(sdp_query_attribute_value_event_get_data_offset(packet)+1) == sdp_query_attribute_value_event_get_attribute_length(packet)) {
|
||||
|
||||
switch(sdp_query_attribute_value_event_get_attribute_id(value_event)) {
|
||||
switch(sdp_query_attribute_value_event_get_attribute_id(packet)) {
|
||||
case SDP_ServiceClassIDList:
|
||||
if (de_get_element_type(attribute_value) != DE_DES) break;
|
||||
for (des_iterator_init(&des_list_it, attribute_value); des_iterator_has_more(&des_list_it); des_iterator_next(&des_list_it)) {
|
||||
@ -351,7 +347,7 @@ static void handle_sdp_client_query_result(sdp_query_event_t *event)
|
||||
case SDP_PANU:
|
||||
case SDP_NAP:
|
||||
case SDP_GN:
|
||||
printf("SDP Attribute 0x%04x: BNEP PAN protocol UUID: %04x\n", sdp_query_attribute_value_event_get_attribute_id(value_event), uuid);
|
||||
printf("SDP Attribute 0x%04x: BNEP PAN protocol UUID: %04x\n", sdp_query_attribute_value_event_get_attribute_id(packet), uuid);
|
||||
bnep_remote_uuid = uuid;
|
||||
break;
|
||||
default:
|
||||
@ -362,11 +358,11 @@ static void handle_sdp_client_query_result(sdp_query_event_t *event)
|
||||
case 0x0100:
|
||||
case 0x0101:
|
||||
str = get_string_from_data_element(attribute_value);
|
||||
printf("SDP Attribute: 0x%04x: %s\n", sdp_query_attribute_value_event_get_attribute_id(value_event), str);
|
||||
printf("SDP Attribute: 0x%04x: %s\n", sdp_query_attribute_value_event_get_attribute_id(packet), str);
|
||||
free(str);
|
||||
break;
|
||||
case 0x0004: {
|
||||
printf("SDP Attribute: 0x%04x\n", sdp_query_attribute_value_event_get_attribute_id(value_event));
|
||||
printf("SDP Attribute: 0x%04x\n", sdp_query_attribute_value_event_get_attribute_id(packet));
|
||||
|
||||
for (des_iterator_init(&des_list_it, attribute_value); des_iterator_has_more(&des_list_it); des_iterator_next(&des_list_it)) {
|
||||
uint8_t *des_element;
|
||||
@ -408,13 +404,12 @@ static void handle_sdp_client_query_result(sdp_query_event_t *event)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "SDP attribute value buffer size exceeded: available %d, required %d\n", attribute_value_buffer_size, sdp_query_attribute_value_event_get_attribute_length(value_event));
|
||||
fprintf(stderr, "SDP attribute value buffer size exceeded: available %d, required %d\n", attribute_value_buffer_size, sdp_query_attribute_value_event_get_attribute_length(packet));
|
||||
}
|
||||
break;
|
||||
|
||||
case SDP_QUERY_COMPLETE:
|
||||
complete_event = (const uint8_t *) event;
|
||||
fprintf(stderr, "General query done with status %d.\n", sdp_query_complete_event_get_status(complete_event));
|
||||
fprintf(stderr, "General query done with status %d.\n", sdp_query_complete_event_get_status(packet));
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -72,8 +72,6 @@ static const int attribute_value_buffer_size = sizeof(attribute_value);
|
||||
|
||||
static bd_addr_t remote = {0x04,0x0C,0xCE,0xE4,0x85,0xD3};
|
||||
|
||||
static void handle_sdp_client_query_result(sdp_query_event_t * event);
|
||||
|
||||
static void assertBuffer(int size){
|
||||
if (size > attribute_value_buffer_size){
|
||||
printf("SDP attribute value buffer size exceeded: available %d, required %d", attribute_value_buffer_size, size);
|
||||
@ -91,7 +89,7 @@ static void assertBuffer(int size){
|
||||
|
||||
/* LISTING_START(SDPClientInit): SDP client setup */
|
||||
static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
|
||||
static void handle_sdp_client_query_result(sdp_query_event_t * event);
|
||||
static void handle_sdp_client_query_result(uint8_t packet_type, uint8_t *packet, uint16_t size);
|
||||
|
||||
static void sdp_client_init(void){
|
||||
// init L2CAP
|
||||
@ -162,35 +160,31 @@ static char * get_string_from_data_element(uint8_t * element){
|
||||
*/
|
||||
|
||||
/* LISTING_START(HandleSDPQUeryResult): Extracting BNEP Protcol UUID and L2CAP PSM */
|
||||
static void handle_sdp_client_query_result(sdp_query_event_t * event){
|
||||
static void handle_sdp_client_query_result(uint8_t packet_type, uint8_t *packet, uint16_t size){
|
||||
/* LISTING_PAUSE */
|
||||
const uint8_t * ve;
|
||||
const uint8_t * ce;
|
||||
des_iterator_t des_list_it;
|
||||
des_iterator_t prot_it;
|
||||
char *str;
|
||||
|
||||
switch (event->type){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_ATTRIBUTE_VALUE:
|
||||
ve = (const uint8_t *) event;
|
||||
|
||||
// handle new record
|
||||
if (sdp_query_attribute_value_event_get_record_id(ve) != record_id){
|
||||
record_id = sdp_query_attribute_value_event_get_record_id(ve);
|
||||
if (sdp_query_attribute_value_event_get_record_id(packet) != record_id){
|
||||
record_id = sdp_query_attribute_value_event_get_record_id(packet);
|
||||
printf("\n---\nRecord nr. %u\n", record_id);
|
||||
}
|
||||
|
||||
assertBuffer(sdp_query_attribute_value_event_get_attribute_length(ve));
|
||||
assertBuffer(sdp_query_attribute_value_event_get_attribute_length(packet));
|
||||
|
||||
attribute_value[sdp_query_attribute_value_event_get_data_offset(ve)] = sdp_query_attribute_value_event_get_data(ve);
|
||||
if ((uint16_t)(sdp_query_attribute_value_event_get_data_offset(ve)+1) == sdp_query_attribute_value_event_get_attribute_length(ve)){
|
||||
attribute_value[sdp_query_attribute_value_event_get_data_offset(packet)] = sdp_query_attribute_value_event_get_data(packet);
|
||||
if ((uint16_t)(sdp_query_attribute_value_event_get_data_offset(packet)+1) == sdp_query_attribute_value_event_get_attribute_length(packet)){
|
||||
|
||||
/* LISTING_RESUME */
|
||||
/* @text The Service Class ID List is a Data Element Sequence (DES) of UUIDs.
|
||||
* The BNEP PAN protocol UUID is within this list.
|
||||
*/
|
||||
|
||||
switch(sdp_query_attribute_value_event_get_attribute_id(ve)){
|
||||
switch(sdp_query_attribute_value_event_get_attribute_id(packet)){
|
||||
// 0x0001 "Service Class ID List"
|
||||
case SDP_ServiceClassIDList:
|
||||
if (de_get_element_type(attribute_value) != DE_DES) break;
|
||||
@ -202,7 +196,7 @@ static void handle_sdp_client_query_result(sdp_query_event_t * event){
|
||||
case PANU_UUID:
|
||||
case NAP_UUID:
|
||||
case GN_UUID:
|
||||
printf(" ** Attribute 0x%04x: BNEP PAN protocol UUID: %04x\n", sdp_query_attribute_value_event_get_attribute_id(ve), uuid);
|
||||
printf(" ** Attribute 0x%04x: BNEP PAN protocol UUID: %04x\n", sdp_query_attribute_value_event_get_attribute_id(packet), uuid);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -215,7 +209,7 @@ static void handle_sdp_client_query_result(sdp_query_event_t * event){
|
||||
// 0x0101 "Service Description"
|
||||
case 0x0101:
|
||||
str = get_string_from_data_element(attribute_value);
|
||||
printf(" ** Attribute 0x%04x: %s\n", sdp_query_attribute_value_event_get_attribute_id(ve), str);
|
||||
printf(" ** Attribute 0x%04x: %s\n", sdp_query_attribute_value_event_get_attribute_id(packet), str);
|
||||
free(str);
|
||||
break;
|
||||
|
||||
@ -226,7 +220,7 @@ static void handle_sdp_client_query_result(sdp_query_event_t * event){
|
||||
* and another DES with the BNEP UUID and the the BNEP version.
|
||||
*/
|
||||
case SDP_ProtocolDescriptorList:{
|
||||
printf(" ** Attribute 0x%04x: ", sdp_query_attribute_value_event_get_attribute_id(ve));
|
||||
printf(" ** Attribute 0x%04x: ", sdp_query_attribute_value_event_get_attribute_id(packet));
|
||||
|
||||
uint16_t l2cap_psm = 0;
|
||||
uint16_t bnep_version = 0;
|
||||
@ -263,8 +257,7 @@ static void handle_sdp_client_query_result(sdp_query_event_t * event){
|
||||
}
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
ce = (const uint8_t *) event;
|
||||
printf("General query done with status %d.\n\n", sdp_query_complete_event_get_status(ce));
|
||||
printf("General query done with status %d.\n\n", sdp_query_complete_event_get_status(packet));
|
||||
break;
|
||||
}
|
||||
/* LISTING_RESUME */
|
||||
|
@ -79,7 +79,7 @@ static const int attribute_value_buffer_size = sizeof(attribute_value);
|
||||
|
||||
/* LISTING_START(SDPClientInit): SDP client setup */
|
||||
static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
|
||||
static void handle_sdp_client_query_result(sdp_query_event_t * event);
|
||||
static void handle_sdp_client_query_result(uint8_t packet_type, uint8_t *packet, uint16_t size);
|
||||
|
||||
static void sdp_client_init(void){
|
||||
// init L2CAP
|
||||
@ -144,31 +144,25 @@ static void assertBuffer(int size){
|
||||
*/
|
||||
|
||||
/* LISTING_START(HandleSDPQUeryResult): Handling query result chunks. */
|
||||
static void handle_sdp_client_query_result(sdp_query_event_t * event){
|
||||
const uint8_t * ve;
|
||||
const uint8_t * ce;
|
||||
|
||||
switch (event->type){
|
||||
static void handle_sdp_client_query_result(uint8_t packet_type, uint8_t *packet, uint16_t size){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_ATTRIBUTE_VALUE:
|
||||
ve = (const uint8_t *) event;
|
||||
|
||||
// handle new record
|
||||
if (sdp_query_attribute_value_event_get_record_id(ve) != record_id){
|
||||
record_id = sdp_query_attribute_value_event_get_record_id(ve);
|
||||
if (sdp_query_attribute_value_event_get_record_id(packet) != record_id){
|
||||
record_id = sdp_query_attribute_value_event_get_record_id(packet);
|
||||
printf("\n---\nRecord nr. %u\n", record_id);
|
||||
}
|
||||
|
||||
assertBuffer(sdp_query_attribute_value_event_get_attribute_length(ve));
|
||||
assertBuffer(sdp_query_attribute_value_event_get_attribute_length(packet));
|
||||
|
||||
attribute_value[sdp_query_attribute_value_event_get_data_offset(ve)] = sdp_query_attribute_value_event_get_data(ve);
|
||||
if ((uint16_t)(sdp_query_attribute_value_event_get_data_offset(ve)+1) == sdp_query_attribute_value_event_get_attribute_length(ve)){
|
||||
printf("Attribute 0x%04x: ", sdp_query_attribute_value_event_get_attribute_id(ve));
|
||||
attribute_value[sdp_query_attribute_value_event_get_data_offset(packet)] = sdp_query_attribute_value_event_get_data(packet);
|
||||
if ((uint16_t)(sdp_query_attribute_value_event_get_data_offset(packet)+1) == sdp_query_attribute_value_event_get_attribute_length(packet)){
|
||||
printf("Attribute 0x%04x: ", sdp_query_attribute_value_event_get_attribute_id(packet));
|
||||
de_dump_data_element(attribute_value);
|
||||
}
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
ce = (const uint8_t *) event;
|
||||
printf("General query done with status %d.\n\n", sdp_query_complete_event_get_status(ce));
|
||||
printf("General query done with status %d.\n\n", sdp_query_complete_event_get_status(packet));
|
||||
exit(0);
|
||||
break;
|
||||
}
|
||||
|
@ -108,14 +108,11 @@ static void report_found_services(void){
|
||||
printf(" ***\n\n");
|
||||
}
|
||||
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
const uint8_t * ve;
|
||||
|
||||
switch (event->type){
|
||||
static void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (const uint8_t *) event;
|
||||
store_found_service(sdp_query_rfcomm_service_event_get_name(ve),
|
||||
sdp_query_rfcomm_service_event_get_rfcomm_channel(ve));
|
||||
store_found_service(sdp_query_rfcomm_service_event_get_name(packet),
|
||||
sdp_query_rfcomm_service_event_get_rfcomm_channel(packet));
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
report_found_services();
|
||||
|
@ -161,14 +161,11 @@ static void handle_found_service(const char * name, uint8_t port){
|
||||
state = W4_SDP_COMPLETE;
|
||||
}
|
||||
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
const uint8_t * ve;
|
||||
|
||||
switch (event->type){
|
||||
static void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (const uint8_t *) event;
|
||||
handle_found_service(sdp_query_rfcomm_service_event_get_name(ve),
|
||||
sdp_query_rfcomm_service_event_get_rfcomm_channel(ve));
|
||||
handle_found_service(sdp_query_rfcomm_service_event_get_name(packet),
|
||||
sdp_query_rfcomm_service_event_get_rfcomm_channel(packet));
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
if (state != W4_SDP_COMPLETE){
|
||||
|
@ -160,8 +160,8 @@ typedef struct btstack_linked_list_gatt_client_helper{
|
||||
} btstack_linked_list_gatt_client_helper_t;
|
||||
|
||||
// MARK: prototypes
|
||||
static void handle_sdp_rfcomm_service_result(sdp_query_event_t * event, void * context);
|
||||
static void handle_sdp_client_query_result(sdp_query_event_t * event);
|
||||
static void handle_sdp_rfcomm_service_result(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context);
|
||||
static void handle_sdp_client_query_result(uint8_t packet_type, uint8_t *packet, uint16_t size);
|
||||
static void dummy_bluetooth_status_handler(BLUETOOTH_STATE state);
|
||||
static client_state_t * client_for_connection(connection_t *connection);
|
||||
static int clients_require_power_on(void);
|
||||
@ -1574,15 +1574,13 @@ static void rfcomm_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t
|
||||
daemon_packet_handler(NULL, packet_type, channel, packet, size);
|
||||
}
|
||||
|
||||
static void handle_sdp_rfcomm_service_result(sdp_query_event_t * rfcomm_event, void * context){
|
||||
switch (rfcomm_event->type){
|
||||
static void handle_sdp_rfcomm_service_result(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_RFCOMM_SERVICE: {
|
||||
case SDP_QUERY_COMPLETE: {
|
||||
// already an HCI Event
|
||||
const uint8_t * event = (const uint8_t *) event;
|
||||
int event_len = 2 + event[1];
|
||||
hci_dump_packet(HCI_EVENT_PACKET, 0, event, event_len);
|
||||
socket_connection_send_packet(context, HCI_EVENT_PACKET, 0, event, event_len);
|
||||
// already HCI Events, just forward them
|
||||
hci_dump_packet(HCI_EVENT_PACKET, 0, packet, size);
|
||||
socket_connection_send_packet(context, HCI_EVENT_PACKET, 0, packet, size);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@ -1597,39 +1595,32 @@ static void sdp_client_assert_buffer(int size){
|
||||
}
|
||||
|
||||
// define new packet type SDP_CLIENT_PACKET
|
||||
static void handle_sdp_client_query_result(sdp_query_event_t * event){
|
||||
const uint8_t * ve;
|
||||
const uint8_t * complete_event;
|
||||
static void handle_sdp_client_query_result(uint8_t packet_type, uint8_t *packet, uint16_t size){
|
||||
int event_len;
|
||||
|
||||
switch (event->type){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_ATTRIBUTE_VALUE:
|
||||
ve = (const uint8_t*) event;
|
||||
|
||||
sdp_client_assert_buffer(sdp_query_attribute_value_event_get_attribute_length(ve));
|
||||
sdp_client_assert_buffer(sdp_query_attribute_value_event_get_attribute_length(packet));
|
||||
attribute_value[sdp_query_attribute_value_event_get_data_offset(packet)] = sdp_query_attribute_value_event_get_data(packet);
|
||||
if ((uint16_t)(sdp_query_attribute_value_event_get_data_offset(packet)+1) == sdp_query_attribute_value_event_get_attribute_length(packet)){
|
||||
hexdump(attribute_value, sdp_query_attribute_value_event_get_attribute_length(packet));
|
||||
|
||||
attribute_value[sdp_query_attribute_value_event_get_data_offset(ve)] = ve->data;
|
||||
|
||||
if ((uint16_t)(sdp_query_attribute_value_event_get_data_offset(ve)+1) == sdp_query_attribute_value_event_get_attribute_length(ve)){
|
||||
hexdump(attribute_value, sdp_query_attribute_value_event_get_attribute_length(ve));
|
||||
|
||||
int event_len = 1 + 3 * 2 + sdp_query_attribute_value_event_get_attribute_length(ve);
|
||||
int event_len = 1 + 3 * 2 + sdp_query_attribute_value_event_get_attribute_length(packet);
|
||||
uint8_t event[event_len];
|
||||
event[0] = SDP_QUERY_ATTRIBUTE_VALUE;
|
||||
bt_store_16(event, 1, sdp_query_attribute_value_event_get_record_id(ve));
|
||||
bt_store_16(event, 3, sdp_query_attribute_value_event_get_attribute_id(ve));
|
||||
bt_store_16(event, 5, (uint16_t)sdp_query_attribute_value_event_get_attribute_length(ve));
|
||||
memcpy(&event[7], attribute_value, sdp_query_attribute_value_event_get_attribute_length(ve));
|
||||
bt_store_16(event, 1, sdp_query_attribute_value_event_get_record_id(packet));
|
||||
bt_store_16(event, 3, sdp_query_attribute_value_event_get_attribute_id(packet));
|
||||
bt_store_16(event, 5, (uint16_t)sdp_query_attribute_value_event_get_attribute_length(packet));
|
||||
memcpy(&event[7], attribute_value, sdp_query_attribute_value_event_get_attribute_length(packet));
|
||||
hci_dump_packet(SDP_CLIENT_PACKET, 0, event, event_len);
|
||||
socket_connection_send_packet(sdp_client_query_connection, SDP_CLIENT_PACKET, 0, event, event_len);
|
||||
}
|
||||
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
complete_event = (const uint8_t*) event;
|
||||
event_len = complete_event[1] + 2;
|
||||
hci_dump_packet(HCI_EVENT_PACKET, 0, complete_event, event_len);
|
||||
socket_connection_send_packet(sdp_client_query_connection, HCI_EVENT_PACKET, 0, complete_event, event_len);
|
||||
event_len = packet[1] + 2;
|
||||
hci_dump_packet(HCI_EVENT_PACKET, 0, packet, event_len);
|
||||
socket_connection_send_packet(sdp_client_query_connection, HCI_EVENT_PACKET, 0, packet, event_len);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -414,33 +414,29 @@ void hfp_create_sdp_record(uint8_t * service, uint32_t service_record_handle, ui
|
||||
}
|
||||
|
||||
static hfp_connection_t * connection_doing_sdp_query = NULL;
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
const uint8_t * ve;
|
||||
const uint8_t * ce;
|
||||
|
||||
static void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){
|
||||
hfp_connection_t * connection = connection_doing_sdp_query;
|
||||
|
||||
if ( connection->state != HFP_W4_SDP_QUERY_COMPLETE) return;
|
||||
|
||||
switch (event->type){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (const uint8_t *) event;
|
||||
if (!connection) {
|
||||
log_error("handle_query_rfcomm_event alloc connection for RFCOMM port %u failed", sdp_query_rfcomm_service_event_get_rfcomm_channel(ve));
|
||||
log_error("handle_query_rfcomm_event alloc connection for RFCOMM port %u failed", sdp_query_rfcomm_service_event_get_rfcomm_channel(packet));
|
||||
return;
|
||||
}
|
||||
connection->rfcomm_channel_nr = sdp_query_rfcomm_service_event_get_rfcomm_channel(ve);
|
||||
connection->rfcomm_channel_nr = sdp_query_rfcomm_service_event_get_rfcomm_channel(packet);
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
connection_doing_sdp_query = NULL;
|
||||
ce = (const uint8_t*) event;
|
||||
|
||||
if (connection->rfcomm_channel_nr > 0){
|
||||
connection->state = HFP_W4_RFCOMM_CONNECTED;
|
||||
log_info("HFP: SDP_QUERY_COMPLETE context %p, addr %s, state %d", connection, bd_addr_to_str( connection->remote_addr), connection->state);
|
||||
rfcomm_create_channel(connection->remote_addr, connection->rfcomm_channel_nr, NULL);
|
||||
break;
|
||||
}
|
||||
log_info("rfcomm service not found, status %u.", sdp_query_complete_event_get_status(ce));
|
||||
log_info("rfcomm service not found, status %u.", sdp_query_complete_event_get_status(packet));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -118,7 +118,7 @@ static hsp_ag_callback_t hsp_ag_callback;
|
||||
|
||||
static void hsp_run();
|
||||
static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context);
|
||||
static void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context);
|
||||
|
||||
static void dummy_notify(uint8_t * event, uint16_t size){}
|
||||
|
||||
@ -625,19 +625,13 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
|
||||
hsp_run();
|
||||
}
|
||||
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
const uint8_t * ve;
|
||||
const uint8_t * ce;
|
||||
|
||||
static void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){
|
||||
switch (event->type){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (const uint8_t *) event;
|
||||
channel_nr = sdp_query_rfcomm_service_event_get_rfcomm_channel(ve);
|
||||
printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_name(ve), channel_nr);
|
||||
channel_nr = sdp_query_rfcomm_service_event_get_rfcomm_channel(packet);
|
||||
printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_name(packet), channel_nr);
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
ce = (const uint8_t*) event;
|
||||
|
||||
if (channel_nr > 0){
|
||||
hsp_state = HSP_W4_RFCOMM_CONNECTED;
|
||||
printf("RFCOMM create channel. state %d\n", HSP_W4_RFCOMM_CONNECTED);
|
||||
@ -645,9 +639,9 @@ static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context)
|
||||
break;
|
||||
}
|
||||
hsp_ag_reset_state();
|
||||
printf("Service not found, status %u.\n", sdp_query_complete_event_get_status(ce));
|
||||
if (ce->status){
|
||||
emit_event(HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE, sdp_query_complete_event_get_status(ce));
|
||||
printf("Service not found, status %u.\n", sdp_query_complete_event_get_status(packet));
|
||||
if (sdp_query_complete_event_get_status(packet)){
|
||||
emit_event(HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE, sdp_query_complete_event_get_status(packet));
|
||||
} else {
|
||||
emit_event(HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE, SDP_SERVICE_NOT_FOUND);
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ static hsp_state_t hsp_state = HSP_IDLE;
|
||||
|
||||
static void hsp_run(void);
|
||||
static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context);
|
||||
static void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context);
|
||||
|
||||
static hsp_hs_callback_t hsp_hs_callback;
|
||||
static void dummy_notify(uint8_t * event, uint16_t size){}
|
||||
@ -573,19 +573,13 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
|
||||
hsp_run();
|
||||
}
|
||||
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
const uint8_t * ve;
|
||||
const uint8_t * ce;
|
||||
|
||||
switch (event->type){
|
||||
static void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (const uint8_t*) event;
|
||||
channel_nr = sdp_query_rfcomm_service_event_get_rfcomm_channel(ve);
|
||||
printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_name(ve), channel_nr);
|
||||
channel_nr = sdp_query_rfcomm_service_event_get_rfcomm_channel(packet);
|
||||
printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_name(packet), channel_nr);
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
ce = (const uint8_t*) event;
|
||||
|
||||
if (channel_nr > 0){
|
||||
hsp_state = HSP_W4_RFCOMM_CONNECTED;
|
||||
printf("RFCOMM create channel.\n");
|
||||
@ -593,7 +587,7 @@ static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context)
|
||||
break;
|
||||
}
|
||||
hsp_hs_reset_state();
|
||||
printf("Service not found, status %u.\n", sdp_query_complete_event_get_status(ce));
|
||||
printf("Service not found, status %u.\n", sdp_query_complete_event_get_status(packet));
|
||||
exit(0);
|
||||
break;
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ static int record_counter = 0;
|
||||
static uint32_t record_handle;
|
||||
#endif
|
||||
|
||||
static void (*sdp_query_callback)(sdp_query_event_t * event);
|
||||
static void (*sdp_query_callback)(uint8_t packet_type, uint8_t *packet, uint16_t size);
|
||||
|
||||
// Low level parser
|
||||
static de_state_t de_header_state;
|
||||
@ -107,9 +107,9 @@ int de_state_size(uint8_t eventByte, de_state_t *de_state){
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void dummy_notify(sdp_query_event_t* event){}
|
||||
static void dummy_notify(uint8_t packet_type, uint8_t *packet, uint16_t size){}
|
||||
|
||||
void sdp_parser_register_callback(void (*sdp_callback)(sdp_query_event_t* event)){
|
||||
void sdp_parser_register_callback(void (*sdp_callback)(uint8_t packet_type, uint8_t *packet, uint16_t size)){
|
||||
sdp_query_callback = dummy_notify;
|
||||
if (sdp_callback != NULL){
|
||||
sdp_query_callback = sdp_callback;
|
||||
@ -125,7 +125,7 @@ static void emit_value_byte(uint8_t event_byte){
|
||||
bt_store_16(event, 6, attribute_value_size);
|
||||
bt_store_16(event, 8, attribute_bytes_delivered);
|
||||
event[10] = event_byte;
|
||||
(*sdp_query_callback)((sdp_query_event_t*)&event);
|
||||
(*sdp_query_callback)(HCI_EVENT_PACKET, event, sizeof(event));
|
||||
}
|
||||
|
||||
static void parse(uint8_t eventByte){
|
||||
@ -259,7 +259,7 @@ void sdp_parser_handle_service_search(uint8_t * data, uint16_t total_count, uint
|
||||
bt_store_16(event, 2, total_count);
|
||||
bt_store_16(event, 4, record_counter);
|
||||
bt_store_32(event, 6, record_handle);
|
||||
(*sdp_query_callback)((sdp_query_event_t*)&event);
|
||||
(*sdp_query_callback)(HCI_EVENT_PACKET, event, sizeof(event));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -269,5 +269,5 @@ void sdp_parser_handle_done(uint8_t status){
|
||||
event[0] = SDP_QUERY_COMPLETE;
|
||||
event[1] = 1;
|
||||
event[2] = status;
|
||||
(*sdp_query_callback)((sdp_query_event_t*)&event);
|
||||
(*sdp_query_callback)(HCI_EVENT_PACKET, event, sizeof(event));
|
||||
}
|
||||
|
@ -70,13 +70,6 @@ int de_state_size(uint8_t eventByte, de_state_t *de_state);
|
||||
|
||||
/* API_START */
|
||||
|
||||
// SDP Parser
|
||||
// Basic SDP Query event type
|
||||
typedef struct sdp_query_event {
|
||||
uint8_t type;
|
||||
void * dummy; // force sdp_query_event struct to be word aligned -> avoid -Wcast-align warning
|
||||
} sdp_query_event_t;
|
||||
|
||||
/*
|
||||
* @brief
|
||||
*/
|
||||
@ -85,7 +78,7 @@ void sdp_parser_init(void);
|
||||
/*
|
||||
* @brief Registers a callback to receive attribute value data and parse complete event.
|
||||
*/
|
||||
void sdp_parser_register_callback(void (*sdp_callback)(sdp_query_event_t * event));
|
||||
void sdp_parser_register_callback(void (*sdp_callback)(uint8_t packet_type, uint8_t *packet, uint16_t size));
|
||||
|
||||
/*
|
||||
* @brief
|
||||
|
@ -56,7 +56,7 @@ void sdp_query_rfcomm_init(void);
|
||||
// called by test/sdp_client
|
||||
void sdp_query_rfcomm_init(void);
|
||||
|
||||
static void dummy_notify_app(sdp_query_event_t* event, void * context);
|
||||
static void dummy_notify_app(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context);
|
||||
|
||||
typedef enum {
|
||||
GET_PROTOCOL_LIST_LENGTH = 1,
|
||||
@ -90,11 +90,11 @@ static de_state_t de_header_state;
|
||||
static de_state_t sn_de_header_state;
|
||||
|
||||
static void *sdp_app_context;
|
||||
static void (*sdp_app_callback)(sdp_query_event_t * event, void * context) = dummy_notify_app;
|
||||
static void (*sdp_app_callback)(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context) = dummy_notify_app;
|
||||
|
||||
//
|
||||
|
||||
static void dummy_notify_app(sdp_query_event_t* event, void * context){}
|
||||
static void dummy_notify_app(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){}
|
||||
|
||||
static void emit_service(void){
|
||||
uint8_t event[3+SDP_SERVICE_NAME_LEN+1];
|
||||
@ -103,11 +103,11 @@ static void emit_service(void){
|
||||
event[2] = sdp_rfcomm_channel_nr;
|
||||
memcpy(&event[3], sdp_service_name, sdp_service_name_len);
|
||||
event[3+sdp_service_name_len] = 0;
|
||||
(*sdp_app_callback)((sdp_query_event_t*)event, sdp_app_context);
|
||||
(*sdp_app_callback)(HCI_EVENT_PACKET, event, sizeof(event), sdp_app_context);
|
||||
sdp_rfcomm_channel_nr = 0;
|
||||
}
|
||||
|
||||
void sdp_query_rfcomm_register_callback(void (*sdp_callback)(sdp_query_event_t* event, void * context), void * context){
|
||||
void sdp_query_rfcomm_register_callback(void (*sdp_callback)(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context), void * context){
|
||||
sdp_app_callback = dummy_notify_app;
|
||||
if (sdp_callback != NULL){
|
||||
sdp_app_callback = sdp_callback;
|
||||
@ -256,9 +256,8 @@ static void handleServiceNameData(uint32_t attribute_value_length, uint32_t data
|
||||
}
|
||||
}
|
||||
|
||||
static void handle_sdp_parser_event(sdp_query_event_t * event){
|
||||
const uint8_t * ve;
|
||||
switch (event->type){
|
||||
static void handle_sdp_parser_event(uint8_t packet_type, uint8_t *packet, uint16_t size){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_SERVICE_RECORD_HANDLE:
|
||||
// handle service without a name
|
||||
if (sdp_rfcomm_channel_nr){
|
||||
@ -270,18 +269,21 @@ static void handle_sdp_parser_event(sdp_query_event_t * event){
|
||||
sdp_service_name[0] = 0;
|
||||
break;
|
||||
case SDP_QUERY_ATTRIBUTE_VALUE:
|
||||
ve = (const uint8_t *) event;
|
||||
// log_info("handle_sdp_parser_event [ AID, ALen, DOff, Data] : [%x, %u, %u] BYTE %02x",
|
||||
// ve->attribute_id, sdp_query_attribute_value_event_get_attribute_length(ve),sdp_query_attribute_value_event_get_data_offset(ve), sdp_query_attribute_value_event_get_data(ve));
|
||||
|
||||
switch (sdp_query_attribute_value_event_get_attribute_id(ve)){
|
||||
// log_info("handle_sdp_parser_event [ AID, ALen, DOff, Data] : [%x, %u, %u] BYTE %02x",
|
||||
// ve->attribute_id, sdp_query_attribute_value_event_get_attribute_length(packet),
|
||||
// sdp_query_attribute_value_event_get_data_offset(packet), sdp_query_attribute_value_event_get_data(packet));
|
||||
switch (sdp_query_attribute_value_event_get_attribute_id(packet)){
|
||||
case SDP_ProtocolDescriptorList:
|
||||
// find rfcomm channel
|
||||
handleProtocolDescriptorListData(sdp_query_attribute_value_event_get_attribute_length(ve),sdp_query_attribute_value_event_get_data_offset(ve), sdp_query_attribute_value_event_get_data(ve));
|
||||
handleProtocolDescriptorListData(sdp_query_attribute_value_event_get_attribute_length(packet),
|
||||
sdp_query_attribute_value_event_get_data_offset(packet),
|
||||
sdp_query_attribute_value_event_get_data(packet));
|
||||
break;
|
||||
case 0x0100:
|
||||
// get service name
|
||||
handleServiceNameData(sdp_query_attribute_value_event_get_attribute_length(ve),sdp_query_attribute_value_event_get_data_offset(ve), sdp_query_attribute_value_event_get_data(ve));
|
||||
handleServiceNameData(sdp_query_attribute_value_event_get_attribute_length(packet),
|
||||
sdp_query_attribute_value_event_get_data_offset(packet),
|
||||
sdp_query_attribute_value_event_get_data(packet));
|
||||
break;
|
||||
default:
|
||||
// give up
|
||||
@ -293,7 +295,7 @@ static void handle_sdp_parser_event(sdp_query_event_t * event){
|
||||
if (sdp_rfcomm_channel_nr){
|
||||
emit_service();
|
||||
}
|
||||
(*sdp_app_callback)(event, sdp_app_context);
|
||||
(*sdp_app_callback)(HCI_EVENT_PACKET, packet, size, sdp_app_context);
|
||||
break;
|
||||
}
|
||||
// insert higher level code HERE
|
||||
|
@ -57,7 +57,7 @@ extern "C" {
|
||||
/**
|
||||
* @brief Registers a callback to receive RFCOMM service and query complete event.
|
||||
*/
|
||||
void sdp_query_rfcomm_register_callback(void(*sdp_app_callback)(sdp_query_event_t * event, void * context), void * context);
|
||||
void sdp_query_rfcomm_register_callback(void(*sdp_app_callback)(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context), void * context);
|
||||
|
||||
/**
|
||||
* @brief Searches SDP records on a remote device for RFCOMM services with a given UUID.
|
||||
|
@ -71,7 +71,7 @@ static uint8_t rfcomm_reserved_buffer[1000];
|
||||
hfp_connection_t * hfp_context;
|
||||
|
||||
void (*registered_rfcomm_packet_handler)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
|
||||
void (*registered_sdp_app_callback)(sdp_query_event_t * event, void * context);
|
||||
void (*registered_sdp_app_callback)(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context);
|
||||
|
||||
uint8_t * get_rfcomm_payload(){
|
||||
return &rfcomm_payload[0];
|
||||
@ -201,7 +201,7 @@ int hci_send_cmd(const hci_cmd_t *cmd, ...){
|
||||
}
|
||||
|
||||
|
||||
void sdp_query_rfcomm_register_callback(void(*sdp_app_callback)(sdp_query_event_t * event, void * context), void * context){
|
||||
void sdp_query_rfcomm_register_callback(void(*sdp_app_callback)(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context), void * context){
|
||||
registered_sdp_app_callback = sdp_app_callback;
|
||||
registered_sdp_app_context = context;
|
||||
}
|
||||
@ -211,7 +211,7 @@ static void sdp_query_complete_response(uint8_t status){
|
||||
event[0] = SDP_QUERY_COMPLETE;
|
||||
event[1] = 1;
|
||||
event[2] = status;
|
||||
(*registered_sdp_app_callback)((sdp_query_event_t*)&event, registered_sdp_app_context);
|
||||
(*registered_sdp_app_callback)(HCI_EVENT_PACKET, event, sizeof(event), registered_sdp_app_context);
|
||||
}
|
||||
|
||||
static void sdp_query_rfcomm_service_response(uint8_t status){
|
||||
@ -222,7 +222,7 @@ static void sdp_query_rfcomm_service_response(uint8_t status){
|
||||
event[2] = sdp_rfcomm_channel_nr;
|
||||
memcpy(&event[3], sdp_rfcomm_service_name, sdp_service_name_len);
|
||||
event[3+sdp_service_name_len] = 0;
|
||||
(*registered_sdp_app_callback)((sdp_query_event_t*)&event, registered_sdp_app_context);
|
||||
(*registered_sdp_app_callback)(HCI_EVENT_PACKET, event, sizeof(event), registered_sdp_app_context);
|
||||
}
|
||||
|
||||
void sdp_query_rfcomm_channel_and_name_for_uuid(bd_addr_t remote, uint16_t uuid){
|
||||
|
@ -395,14 +395,11 @@ static void handle_found_service(char * name, uint8_t port){
|
||||
rfcomm_channel_nr = port;
|
||||
}
|
||||
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
const uint8_t * ve;
|
||||
|
||||
switch (event->type){
|
||||
static void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (const uint8_t*) event;
|
||||
handle_found_service(sdp_query_rfcomm_service_event_get_name(ve),
|
||||
sdp_query_rfcomm_service_event_get_rfcomm_channel(ve));
|
||||
handle_found_service(sdp_query_rfcomm_service_event_get_name(packet),
|
||||
sdp_query_rfcomm_service_event_get_rfcomm_channel(packet));
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
printf("SDP SPP Query complete\n");
|
||||
|
@ -139,19 +139,13 @@ static void packet_handler(void * connection, uint8_t packet_type, uint16_t chan
|
||||
}
|
||||
}
|
||||
|
||||
void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
const uint8_t * ve;
|
||||
const uint8_t * ce;
|
||||
|
||||
void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){
|
||||
switch (event->type){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (const uint8_t*) event;
|
||||
channel_nr = sdp_query_rfcomm_service_event_get_name(ve);
|
||||
printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_rfcomm_channel(ve), channel_nr);
|
||||
channel_nr = sdp_query_rfcomm_service_event_get_name(packet);
|
||||
printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_rfcomm_channel(packet), channel_nr);
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
ce = (const uint8_t*) event;
|
||||
|
||||
if (channel_nr > 0) {
|
||||
printf("RFCOMM create channel.\n");
|
||||
rfcomm_create_channel_internal(NULL, remote, channel_nr);
|
||||
|
@ -109,62 +109,55 @@ void assertBuffer(int size){
|
||||
}
|
||||
}
|
||||
|
||||
static void test_attribute_value_event(const uint8_t * ve){
|
||||
static void test_attribute_value_event(const uint8_t * event){
|
||||
static int recordId = 0;
|
||||
static int attributeId = 0;
|
||||
static int attributeOffset = 0;
|
||||
static int attributeLength = 0;
|
||||
|
||||
CHECK_EQUAL(ve[0], SDP_QUERY_ATTRIBUTE_VALUE);
|
||||
CHECK_EQUAL(event[0], SDP_QUERY_ATTRIBUTE_VALUE);
|
||||
|
||||
// record ids are sequential
|
||||
if (sdp_query_attribute_value_event_get_record_id(ve) != recordId){
|
||||
if (sdp_query_attribute_value_event_get_record_id(event) != recordId){
|
||||
recordId++;
|
||||
}
|
||||
CHECK_EQUAL(sdp_query_attribute_value_event_get_record_id(ve), recordId);
|
||||
CHECK_EQUAL(sdp_query_attribute_value_event_get_record_id(event), recordId);
|
||||
|
||||
// is attribute value complete
|
||||
if (sdp_query_attribute_value_event_get_attribute_id(ve) != attributeId ){
|
||||
if (sdp_query_attribute_value_event_get_attribute_id(event) != attributeId ){
|
||||
if (attributeLength > 0){
|
||||
CHECK_EQUAL(attributeLength, attributeOffset+1);
|
||||
}
|
||||
attributeId = sdp_query_attribute_value_event_get_attribute_id(ve);
|
||||
attributeId = sdp_query_attribute_value_event_get_attribute_id(event);
|
||||
attributeOffset = 0;
|
||||
}
|
||||
|
||||
// count attribute value bytes
|
||||
if (sdp_query_attribute_value_event_get_data_offset(ve) != attributeOffset){
|
||||
if (sdp_query_attribute_value_event_get_data_offset(event) != attributeOffset){
|
||||
attributeOffset++;
|
||||
}
|
||||
attributeLength = sdp_query_attribute_value_event_get_attribute_length(ve);
|
||||
attributeLength = sdp_query_attribute_value_event_get_attribute_length(event);
|
||||
|
||||
CHECK_EQUAL(sdp_query_attribute_value_event_get_data_offset(ve), attributeOffset);
|
||||
CHECK_EQUAL(sdp_query_attribute_value_event_get_data_offset(event), attributeOffset);
|
||||
}
|
||||
|
||||
|
||||
static void handle_sdp_parser_event(sdp_query_event_t * event){
|
||||
|
||||
const uint8_t * ve;
|
||||
const uint8_t * ce;
|
||||
|
||||
switch (event->type){
|
||||
static void handle_sdp_parser_event(uint8_t packet_type, uint8_t *packet, uint16_t size){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_ATTRIBUTE_VALUE:
|
||||
ve = (const uint8_t*) event;
|
||||
|
||||
test_attribute_value_event(ve);
|
||||
test_attribute_value_event(packet);
|
||||
|
||||
// handle new record
|
||||
if (sdp_query_attribute_value_event_get_record_id(ve) != record_id){
|
||||
record_id = sdp_query_attribute_value_event_get_record_id(ve);
|
||||
if (sdp_query_attribute_value_event_get_record_id(packet) != record_id){
|
||||
record_id = sdp_query_attribute_value_event_get_record_id(packet);
|
||||
}
|
||||
// buffer data
|
||||
assertBuffer(sdp_query_attribute_value_event_get_attribute_length(ve));
|
||||
attribute_value[sdp_query_attribute_value_event_get_data_offset(ve)] = sdp_query_attribute_value_event_get_data(ve);
|
||||
assertBuffer(sdp_query_attribute_value_event_get_attribute_length(packet));
|
||||
attribute_value[sdp_query_attribute_value_event_get_data_offset(packet)] = sdp_query_attribute_value_event_get_data(packet);
|
||||
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
ce = (const uint8_t *) event;
|
||||
printf("General query done with status %d.\n", sdp_query_complete_event_get_status(ce));
|
||||
printf("General query done with status %d.\n", sdp_query_complete_event_get_status(packet));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -90,21 +90,17 @@ extern "C" void sdp_client_query(bd_addr_t remote, uint8_t * des_serviceSearchPa
|
||||
void sdp_query_rfcomm_init();
|
||||
|
||||
|
||||
void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
const uint8_t * ce;
|
||||
uint8_t * ve = (uint8_t *) event;
|
||||
|
||||
switch (event->type){
|
||||
void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
channel_nr[service_index] = sdp_query_rfcomm_service_event_get_rfcomm_channel(ve);
|
||||
channel_nr[service_index] = sdp_query_rfcomm_service_event_get_rfcomm_channel(packet);
|
||||
service_name[service_index] = (char*) malloc(SDP_SERVICE_NAME_LEN+1);
|
||||
strncpy(service_name[service_index], sdp_query_rfcomm_service_event_get_name(ve), SDP_SERVICE_NAME_LEN);
|
||||
strncpy(service_name[service_index], sdp_query_rfcomm_service_event_get_name(packet), SDP_SERVICE_NAME_LEN);
|
||||
service_name[service_index][SDP_SERVICE_NAME_LEN] = 0;
|
||||
// printf("CALLBACK: Service name: '%s', RFCOMM port %u, service index %d\n", service_name[service_index], channel_nr[service_index], service_index);
|
||||
service_index++;
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
ce = (const uint8_t*) event;
|
||||
// printf("CALLBACK: Client query response done. \n");
|
||||
break;
|
||||
}
|
||||
|
@ -87,29 +87,22 @@ static void test_attribute_value_event(const uint8_t * event){
|
||||
}
|
||||
|
||||
|
||||
static void handle_sdp_parser_event(sdp_query_event_t * event){
|
||||
|
||||
const uint8_t * ve;
|
||||
const uint8_t * ce;
|
||||
|
||||
switch (event->type){
|
||||
static void handle_sdp_parser_event(uint8_t packet_type, uint8_t *packet, uint16_t size){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_ATTRIBUTE_VALUE:
|
||||
ve = (const uint8_t *) event;
|
||||
|
||||
test_attribute_value_event(ve);
|
||||
test_attribute_value_event(packet);
|
||||
|
||||
// handle new record
|
||||
if (sdp_query_attribute_value_event_get_record_id(ve) != record_id){
|
||||
record_id = sdp_query_attribute_value_event_get_record_id(ve);
|
||||
if (sdp_query_attribute_value_event_get_record_id(packet) != record_id){
|
||||
record_id = sdp_query_attribute_value_event_get_record_id(packet);
|
||||
}
|
||||
// buffer data
|
||||
assertBuffer(sdp_query_attribute_value_event_get_attribute_length(ve));
|
||||
attribute_value[sdp_query_attribute_value_event_get_data_offset(ve)] = sdp_query_attribute_value_event_get_data(ve);
|
||||
assertBuffer(sdp_query_attribute_value_event_get_attribute_length(packet));
|
||||
attribute_value[sdp_query_attribute_value_event_get_data_offset(packet)] = sdp_query_attribute_value_event_get_data(packet);
|
||||
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
ce = (const uint8_t*) event;
|
||||
printf("General query done with status %d.\n", sdp_query_complete_event_get_status(ce));
|
||||
printf("General query done with status %d.\n", sdp_query_complete_event_get_status(packet));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -40,24 +40,15 @@ static uint8_t sdp_test_record_list[] = {
|
||||
};
|
||||
|
||||
|
||||
static void handle_sdp_parser_event(sdp_query_event_t * event){
|
||||
const uint8_t * ve;
|
||||
const uint8_t * ce;
|
||||
|
||||
static void handle_sdp_parser_event(uint8_t packet_type, uint8_t *packet, uint16_t size){
|
||||
static uint32_t record_handle = sdp_test_record_list[0];
|
||||
|
||||
switch (event->type){
|
||||
switch (packet[0]){
|
||||
case SDP_QUERY_SERVICE_RECORD_HANDLE:
|
||||
ve = (const uint8_t*) event;
|
||||
|
||||
CHECK_EQUAL(sdp_query_service_record_handle_event_get_record_handle(ve), record_handle);
|
||||
CHECK_EQUAL(sdp_query_service_record_handle_event_get_record_handle(packet), record_handle);
|
||||
record_handle++;
|
||||
|
||||
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
ce = (const uint8_t *) event;
|
||||
printf("General query done with status %d.\n", sdp_query_complete_event_get_status(ce));
|
||||
printf("General query done with status %d.\n", sdp_query_complete_event_get_status(packet));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user