From 32c78405d221acf98c549342ba4eb9bfbb8b56f9 Mon Sep 17 00:00:00 2001 From: Milanka Ringwald Date: Fri, 20 Sep 2019 14:06:10 +0200 Subject: [PATCH] avdtp: receive and emit delay report --- src/classic/avdtp.h | 1 + src/classic/avdtp_acceptor.c | 12 ++++++++++++ src/classic/avdtp_initiator.c | 1 + 3 files changed, 14 insertions(+) diff --git a/src/classic/avdtp.h b/src/classic/avdtp.h index 0662cd5ca..e9321de4e 100644 --- a/src/classic/avdtp.h +++ b/src/classic/avdtp.h @@ -310,6 +310,7 @@ typedef enum { AVDTP_ACCEPTOR_STREAM_CONFIG_IDLE, AVDTP_ACCEPTOR_W2_ANSWER_GET_CAPABILITIES, AVDTP_ACCEPTOR_W2_ANSWER_GET_ALL_CAPABILITIES, + AVDTP_ACCEPTOR_W2_ANSWER_DELAY_REPORT, AVDTP_ACCEPTOR_W2_ANSWER_SET_CONFIGURATION, AVDTP_ACCEPTOR_W2_ANSWER_RECONFIGURE, AVDTP_ACCEPTOR_W2_ANSWER_GET_CONFIGURATION, diff --git a/src/classic/avdtp_acceptor.c b/src/classic/avdtp_acceptor.c index 9b58a0ef7..cf5e69420 100644 --- a/src/classic/avdtp_acceptor.c +++ b/src/classic/avdtp_acceptor.c @@ -91,6 +91,7 @@ void avdtp_acceptor_stream_config_subsm(avdtp_connection_t * connection, uint8_t return; } + // handle error cases switch (connection->signaling_packet.signal_identifier){ case AVDTP_SI_DISCOVER: if (connection->state != AVDTP_SIGNALING_CONNECTION_OPENED) return; @@ -107,6 +108,7 @@ void avdtp_acceptor_stream_config_subsm(avdtp_connection_t * connection, uint8_t case AVDTP_SI_ABORT: case AVDTP_SI_OPEN: case AVDTP_SI_RECONFIGURE: + case AVDTP_SI_DELAYREPORT: connection->local_seid = packet[offset++] >> 2; stream_endpoint = avdtp_stream_endpoint_with_seid(connection->local_seid, context); if (!stream_endpoint){ @@ -184,6 +186,12 @@ void avdtp_acceptor_stream_config_subsm(avdtp_connection_t * connection, uint8_t switch (stream_endpoint->acceptor_config_state){ case AVDTP_ACCEPTOR_STREAM_CONFIG_IDLE: switch (connection->signaling_packet.signal_identifier){ + case AVDTP_SI_DELAYREPORT: + log_info("ACP: AVDTP_ACCEPTOR_W2_ANSWER_DELAY_REPORT"); + stream_endpoint->acceptor_config_state = AVDTP_ACCEPTOR_W2_ANSWER_DELAY_REPORT; + avdtp_signaling_emit_delay(context->avdtp_callback, connection->avdtp_cid, connection->local_seid, big_endian_read_16(packet, offset)); + break; + case AVDTP_SI_GET_ALL_CAPABILITIES: log_info("ACP: AVDTP_SI_GET_ALL_CAPABILITIES"); stream_endpoint->acceptor_config_state = AVDTP_ACCEPTOR_W2_ANSWER_GET_ALL_CAPABILITIES; @@ -498,6 +506,10 @@ void avdtp_acceptor_stream_config_subsm_run(avdtp_connection_t * connection, avd } l2cap_send_prepared(cid, pos); break; + case AVDTP_ACCEPTOR_W2_ANSWER_DELAY_REPORT: + log_info("ACP: DONE "); + avdtp_acceptor_send_accept_response(cid, trid, AVDTP_SI_DELAYREPORT); + break; case AVDTP_ACCEPTOR_W2_ANSWER_GET_ALL_CAPABILITIES: avdtp_prepare_capabilities(&connection->signaling_packet, trid, stream_endpoint->sep.registered_service_categories, stream_endpoint->sep.capabilities, AVDTP_SI_GET_ALL_CAPABILITIES); l2cap_reserve_packet_buffer(); diff --git a/src/classic/avdtp_initiator.c b/src/classic/avdtp_initiator.c index 4ea53b6fc..3510ee2c2 100644 --- a/src/classic/avdtp_initiator.c +++ b/src/classic/avdtp_initiator.c @@ -129,6 +129,7 @@ void avdtp_initiator_stream_config_subsm(avdtp_connection_t * connection, uint8_ avdtp_emit_capabilities(context->avdtp_callback, connection->avdtp_cid, connection->local_seid, connection->remote_seid, &sep.capabilities, sep.registered_service_categories); break; case AVDTP_SI_DELAYREPORT: + avdtp_signaling_emit_delay(context->avdtp_callback, connection->avdtp_cid, connection->local_seid, little_endian_read_16(packet, offset)); break; case AVDTP_SI_GET_CONFIGURATION: // sep.configured_service_categories = avdtp_unpack_service_capabilities(connection, &sep.configuration, packet+offset, size-offset);