1 /* 2 * Copyright (C) 2014 BlueKitchen GmbH 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of the copyright holders nor the names of 14 * contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 4. Any redistribution, use, or modification is done solely for 17 * personal benefit and not for any commercial purpose or for 18 * monetary gain. 19 * 20 * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BLUEKITCHEN 24 * GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 26 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 27 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 28 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 30 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * Please inquire about commercial licensing options at 34 * [email protected] 35 * 36 */ 37 38 #define BTSTACK_FILE__ "l2cap.c" 39 40 /* 41 * l2cap.c 42 * Logical Link Control and Adaption Protocol (L2CAP) 43 */ 44 45 #include "l2cap.h" 46 #include "hci.h" 47 #include "hci_dump.h" 48 #include "bluetooth_sdp.h" 49 #include "bluetooth_psm.h" 50 #include "btstack_bool.h" 51 #include "btstack_debug.h" 52 #include "btstack_event.h" 53 #include "btstack_memory.h" 54 55 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 56 // TODO avoid dependency on higher layer: used to trigger pairing for outgoing connections 57 #include "ble/sm.h" 58 #endif 59 60 #include <stdarg.h> 61 #include <string.h> 62 63 /* 64 * @brief L2CAP Supervisory function in S-Frames 65 */ 66 typedef enum { 67 L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY = 0, 68 L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT, 69 L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY, 70 L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT 71 } l2cap_supervisory_function_t; 72 73 /** 74 * @brief L2CAP Information Types used in Information Request & Response 75 */ 76 typedef enum { 77 L2CAP_INFO_TYPE_CONNECTIONLESS_MTU = 1, 78 L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED, 79 L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED, 80 } l2cap_info_type_t; 81 82 /** 83 * @brief L2CAP Configuration Option Types used in Configurateion Request & Response 84 */ 85 typedef enum { 86 L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT = 1, 87 L2CAP_CONFIG_OPTION_TYPE_FLUSH_TIMEOUT, 88 L2CAP_CONFIG_OPTION_TYPE_QUALITY_OF_SERVICE, 89 L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL, 90 L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE, 91 L2CAP_CONFIG_OPTION_TYPE_EXTENDED_FLOW_SPECIFICATION, 92 L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE, 93 } l2cap_config_option_type_t; 94 95 96 #define L2CAP_SIG_ID_INVALID 0 97 98 // size of HCI ACL + L2CAP Header for regular data packets (8) 99 #define COMPLETE_L2CAP_HEADER (HCI_ACL_HEADER_SIZE + L2CAP_HEADER_SIZE) 100 101 // L2CAP Configuration Result Codes 102 #define L2CAP_CONF_RESULT_SUCCESS 0x0000 103 #define L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS 0x0001 104 #define L2CAP_CONF_RESULT_REJECT 0x0002 105 #define L2CAP_CONF_RESULT_UNKNOWN_OPTIONS 0x0003 106 #define L2CAP_CONF_RESULT_PENDING 0x0004 107 #define L2CAP_CONF_RESULT_FLOW_SPEC_REJECTED 0x0005 108 109 // L2CAP Reject Result Codes 110 #define L2CAP_REJ_CMD_UNKNOWN 0x0000 111 #define L2CAP_REJ_MTU_EXCEEDED 0x0001 112 #define L2CAP_REJ_INVALID_CID 0x0002 113 114 // Response Timeout eXpired 115 #define L2CAP_RTX_TIMEOUT_MS 10000 116 117 // Extended Response Timeout eXpired 118 #define L2CAP_ERTX_TIMEOUT_MS 120000 119 120 // nr of buffered acl packets in outgoing queue to get max performance 121 #define NR_BUFFERED_ACL_PACKETS 3 122 123 // used to cache l2cap rejects, echo, and informational requests 124 #define NR_PENDING_SIGNALING_RESPONSES 3 125 126 // nr of credits provided to remote if credits fall below watermark 127 #define L2CAP_CREDIT_BASED_FLOW_CONTROL_MODE_AUTOMATIC_CREDITS_WATERMARK 5 128 #define L2CAP_CREDIT_BASED_FLOW_CONTROL_MODE_AUTOMATIC_CREDITS_INCREMENT 5 129 130 // offsets for L2CAP SIGNALING COMMANDS 131 #define L2CAP_SIGNALING_COMMAND_CODE_OFFSET 0 132 #define L2CAP_SIGNALING_COMMAND_SIGID_OFFSET 1 133 #define L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET 2 134 #define L2CAP_SIGNALING_COMMAND_DATA_OFFSET 4 135 136 #if defined(ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE) && !defined(ENABLE_CLASSIC) 137 #error "ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE depends on ENABLE_CLASSIC." 138 #error "Please remove ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE or add ENABLE_CLASSIC in btstack_config.h" 139 #endif 140 141 142 #ifdef ENABLE_LE_DATA_CHANNELS 143 #warning "ENABLE_LE_DATA_CHANNELS has been deprecated." 144 #warning "Please use ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE instead in btstack_config.h" 145 #define ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 146 #endif 147 148 #if defined(ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE) || defined(ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE) 149 #define L2CAP_USES_CREDIT_BASED_CHANNELS 150 #endif 151 152 #if defined(L2CAP_USES_CREDIT_BASED_CHANNELS) || defined(ENABLE_CLASSIC) 153 #define L2CAP_USES_CHANNELS 154 #endif 155 156 // prototypes 157 static void l2cap_run(void); 158 static void l2cap_hci_event_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); 159 static void l2cap_acl_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size ); 160 static void l2cap_notify_channel_can_send(void); 161 static void l2cap_emit_can_send_now(btstack_packet_handler_t packet_handler, uint16_t channel); 162 static uint8_t l2cap_next_sig_id(void); 163 static l2cap_fixed_channel_t * l2cap_fixed_channel_for_channel_id(uint16_t local_cid); 164 #ifdef ENABLE_CLASSIC 165 static void l2cap_handle_security_level_incoming_sufficient(l2cap_channel_t * channel); 166 static int l2cap_security_level_0_allowed_for_PSM(uint16_t psm); 167 static void l2cap_handle_remote_supported_features_received(l2cap_channel_t * channel); 168 static void l2cap_handle_connection_complete(hci_con_handle_t con_handle, l2cap_channel_t * channel); 169 static void l2cap_handle_information_request_complete(hci_connection_t * connection); 170 static inline l2cap_service_t * l2cap_get_service(uint16_t psm); 171 static void l2cap_emit_channel_opened(l2cap_channel_t *channel, uint8_t status); 172 static void l2cap_emit_channel_closed(l2cap_channel_t *channel); 173 static void l2cap_emit_incoming_connection(l2cap_channel_t *channel); 174 static int l2cap_channel_ready_for_open(l2cap_channel_t *channel); 175 static uint8_t l2cap_classic_send(l2cap_channel_t * channel, const uint8_t *data, uint16_t len); 176 #endif 177 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 178 static void l2cap_cbm_emit_channel_opened(l2cap_channel_t *channel, uint8_t status); 179 static void l2cap_cbm_emit_incoming_connection(l2cap_channel_t *channel); 180 static void l2cap_credit_based_notify_channel_can_send(l2cap_channel_t *channel); 181 static void l2cap_cbm_finialize_channel_close(l2cap_channel_t *channel); 182 static inline l2cap_service_t * l2cap_cbm_get_service(uint16_t le_psm); 183 #endif 184 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 185 static uint8_t l2cap_credit_based_send_data(l2cap_channel_t * channel, const uint8_t * data, uint16_t size); 186 static void l2cap_credit_based_send_pdu(l2cap_channel_t *channel); 187 static void l2cap_credit_based_send_credits(l2cap_channel_t *channel); 188 static bool l2cap_credit_based_handle_credit_indication(hci_con_handle_t handle, const uint8_t * command, uint16_t len); 189 static void l2cap_credit_based_handle_pdu(l2cap_channel_t * l2cap_channel, const uint8_t * packet, uint16_t size); 190 #endif 191 #ifdef L2CAP_USES_CHANNELS 192 static uint16_t l2cap_next_local_cid(void); 193 static l2cap_channel_t * l2cap_get_channel_for_local_cid(uint16_t local_cid); 194 static void l2cap_emit_simple_event_with_cid(l2cap_channel_t * channel, uint8_t event_code); 195 static void l2cap_dispatch_to_channel(l2cap_channel_t *channel, uint8_t type, uint8_t * data, uint16_t size); 196 static l2cap_channel_t * l2cap_create_channel_entry(btstack_packet_handler_t packet_handler, l2cap_channel_type_t channel_type, bd_addr_t address, bd_addr_type_t address_type, 197 uint16_t psm, uint16_t local_mtu, gap_security_level_t security_level); 198 static void l2cap_finalize_channel_close(l2cap_channel_t *channel); 199 static void l2cap_free_channel_entry(l2cap_channel_t * channel); 200 #endif 201 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 202 static void l2cap_ertm_notify_channel_can_send(l2cap_channel_t * channel); 203 static void l2cap_ertm_monitor_timeout_callback(btstack_timer_source_t * ts); 204 static void l2cap_ertm_retransmission_timeout_callback(btstack_timer_source_t * ts); 205 #endif 206 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 207 static void l2cap_ecbm_handle_security_level_incoming(l2cap_channel_t *channel); 208 static int l2cap_ecbm_signaling_handler_dispatch(hci_con_handle_t handle, uint16_t signaling_cid, uint8_t * command, uint8_t sig_id); 209 static void l2cap_run_trigger_callback(void * context); 210 #endif 211 212 // l2cap_fixed_channel_t entries 213 #ifdef ENABLE_BLE 214 static l2cap_fixed_channel_t l2cap_fixed_channel_le_att; 215 static l2cap_fixed_channel_t l2cap_fixed_channel_le_sm; 216 #endif 217 #ifdef ENABLE_CLASSIC 218 static l2cap_fixed_channel_t l2cap_fixed_channel_classic_connectionless; 219 static l2cap_fixed_channel_t l2cap_fixed_channel_classic_sm; 220 #endif 221 222 #ifdef ENABLE_CLASSIC 223 static btstack_linked_list_t l2cap_services; 224 static uint8_t l2cap_require_security_level2_for_outgoing_sdp; 225 static bd_addr_t l2cap_outgoing_classic_addr; 226 #endif 227 228 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 229 static btstack_linked_list_t l2cap_le_services; 230 #endif 231 232 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 233 static btstack_linked_list_t l2cap_enhanced_services; 234 static uint16_t l2cap_enhanced_mps_min; 235 static uint16_t l2cap_enhanced_mps_max; 236 static btstack_context_callback_registration_t l2cap_trigger_run_registration; 237 #endif 238 239 // single list of channels for connection-oriented channels (basic, ertm, cbm, ecbf) Classic Connectionless, ATT, and SM 240 static btstack_linked_list_t l2cap_channels; 241 #ifdef L2CAP_USES_CHANNELS 242 // next channel id for new connections 243 static uint16_t l2cap_local_source_cid; 244 #endif 245 // next signaling sequence number 246 static uint8_t l2cap_sig_seq_nr; 247 248 // used to cache l2cap rejects, echo, and informational requests 249 static l2cap_signaling_response_t l2cap_signaling_responses[NR_PENDING_SIGNALING_RESPONSES]; 250 static int l2cap_signaling_responses_pending; 251 static btstack_packet_callback_registration_t l2cap_hci_event_callback_registration; 252 253 static bool l2cap_call_notify_channel_in_run; 254 255 #ifdef ENABLE_BLE 256 // only used for connection parameter update events 257 static uint16_t l2cap_le_custom_max_mtu; 258 #endif 259 260 /* callbacks for events */ 261 static btstack_linked_list_t l2cap_event_handlers; 262 263 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 264 265 // enable for testing 266 // #define L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL 16 267 268 /* 269 * CRC lookup table for generator polynom D^16 + D^15 + D^2 + 1 270 */ 271 static const uint16_t crc16_table[256] = { 272 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 273 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 274 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 275 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 276 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 277 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 278 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 279 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 280 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 281 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 282 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 283 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 284 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 285 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 286 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 287 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040, 288 }; 289 290 static uint16_t crc16_calc(uint8_t * data, uint16_t len){ 291 uint16_t crc = 0; // initial value = 0 292 while (len--){ 293 crc = (crc >> 8) ^ crc16_table[ (crc ^ ((uint16_t) *data++)) & 0x00FF ]; 294 } 295 return crc; 296 } 297 298 static inline uint16_t l2cap_encanced_control_field_for_information_frame(uint8_t tx_seq, int final, uint8_t req_seq, l2cap_segmentation_and_reassembly_t sar){ 299 return (((uint16_t) sar) << 14) | (req_seq << 8) | (final << 7) | (tx_seq << 1) | 0; 300 } 301 302 static inline uint16_t l2cap_encanced_control_field_for_supevisor_frame(l2cap_supervisory_function_t supervisory_function, int poll, int final, uint8_t req_seq){ 303 return (req_seq << 8) | (final << 7) | (poll << 4) | (((int) supervisory_function) << 2) | 1; 304 } 305 306 static int l2cap_next_ertm_seq_nr(int seq_nr){ 307 return (seq_nr + 1) & 0x3f; 308 } 309 310 static bool l2cap_ertm_can_store_packet_now(l2cap_channel_t * channel){ 311 // get num free tx buffers 312 int num_free_tx_buffers = channel->num_tx_buffers - channel->num_stored_tx_frames; 313 // calculate num tx buffers for remote MTU 314 int num_tx_buffers_for_max_remote_mtu; 315 uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps); 316 if (channel->remote_mtu <= effective_mps){ 317 // MTU fits into single packet 318 num_tx_buffers_for_max_remote_mtu = 1; 319 } else { 320 // include SDU Length 321 num_tx_buffers_for_max_remote_mtu = (channel->remote_mtu + 2 + (effective_mps - 1)) / effective_mps; 322 } 323 log_debug("num_free_tx_buffers %u, num_tx_buffers_for_max_remote_mtu %u", num_free_tx_buffers, num_tx_buffers_for_max_remote_mtu); 324 return num_tx_buffers_for_max_remote_mtu <= num_free_tx_buffers; 325 } 326 327 static void l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel_t * l2cap_channel){ 328 log_info("Retransmit unacknowleged frames"); 329 l2cap_channel->unacked_frames = 0;; 330 l2cap_channel->tx_send_index = l2cap_channel->tx_read_index; 331 } 332 333 static void l2cap_ertm_next_tx_write_index(l2cap_channel_t * channel){ 334 channel->tx_write_index++; 335 if (channel->tx_write_index < channel->num_tx_buffers) return; 336 channel->tx_write_index = 0; 337 } 338 339 static void l2cap_ertm_start_monitor_timer(l2cap_channel_t * channel){ 340 log_info("Start Monitor timer"); 341 btstack_run_loop_remove_timer(&channel->monitor_timer); 342 btstack_run_loop_set_timer_handler(&channel->monitor_timer, &l2cap_ertm_monitor_timeout_callback); 343 btstack_run_loop_set_timer_context(&channel->monitor_timer, channel); 344 btstack_run_loop_set_timer(&channel->monitor_timer, channel->local_monitor_timeout_ms); 345 btstack_run_loop_add_timer(&channel->monitor_timer); 346 } 347 348 static void l2cap_ertm_stop_monitor_timer(l2cap_channel_t * channel){ 349 log_info("Stop Monitor timer"); 350 btstack_run_loop_remove_timer(&channel->monitor_timer); 351 } 352 353 static void l2cap_ertm_start_retransmission_timer(l2cap_channel_t * channel){ 354 log_info("Start Retransmission timer"); 355 btstack_run_loop_remove_timer(&channel->retransmission_timer); 356 btstack_run_loop_set_timer_handler(&channel->retransmission_timer, &l2cap_ertm_retransmission_timeout_callback); 357 btstack_run_loop_set_timer_context(&channel->retransmission_timer, channel); 358 btstack_run_loop_set_timer(&channel->retransmission_timer, channel->local_retransmission_timeout_ms); 359 btstack_run_loop_add_timer(&channel->retransmission_timer); 360 } 361 362 static void l2cap_ertm_stop_retransmission_timer(l2cap_channel_t * l2cap_channel){ 363 log_info("Stop Retransmission timer"); 364 btstack_run_loop_remove_timer(&l2cap_channel->retransmission_timer); 365 } 366 367 static void l2cap_ertm_monitor_timeout_callback(btstack_timer_source_t * ts){ 368 log_info("Monitor timeout"); 369 l2cap_channel_t * l2cap_channel = (l2cap_channel_t *) btstack_run_loop_get_timer_context(ts); 370 371 // TODO: we assume that it's the oldest packet 372 l2cap_ertm_tx_packet_state_t * tx_state; 373 tx_state = &l2cap_channel->tx_packets_state[l2cap_channel->tx_read_index]; 374 375 // check retry count 376 if (tx_state->retry_count < l2cap_channel->remote_max_transmit){ 377 // increment retry count 378 tx_state->retry_count++; 379 380 // start retransmit 381 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 382 383 // start monitor timer 384 l2cap_ertm_start_monitor_timer(l2cap_channel); 385 386 // send RR/P=1 387 l2cap_channel->send_supervisor_frame_receiver_ready_poll = 1; 388 } else { 389 log_info("Monitor timer expired & retry count >= max transmit -> disconnect"); 390 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 391 } 392 l2cap_run(); 393 } 394 395 static void l2cap_ertm_retransmission_timeout_callback(btstack_timer_source_t * ts){ 396 log_info("Retransmission timeout"); 397 l2cap_channel_t * l2cap_channel = (l2cap_channel_t *) btstack_run_loop_get_timer_context(ts); 398 399 // TODO: we assume that it's the oldest packet 400 l2cap_ertm_tx_packet_state_t * tx_state; 401 tx_state = &l2cap_channel->tx_packets_state[l2cap_channel->tx_read_index]; 402 403 // set retry count = 1 404 tx_state->retry_count = 1; 405 406 // start retransmit 407 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 408 409 // start monitor timer 410 l2cap_ertm_start_monitor_timer(l2cap_channel); 411 412 // send RR/P=1 413 l2cap_channel->send_supervisor_frame_receiver_ready_poll = 1; 414 l2cap_run(); 415 } 416 417 static int l2cap_ertm_send_information_frame(l2cap_channel_t * channel, int index, int final){ 418 l2cap_ertm_tx_packet_state_t * tx_state = &channel->tx_packets_state[index]; 419 hci_reserve_packet_buffer(); 420 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 421 uint16_t control = l2cap_encanced_control_field_for_information_frame(tx_state->tx_seq, final, channel->req_seq, tx_state->sar); 422 log_info("I-Frame: control 0x%04x", control); 423 little_endian_store_16(acl_buffer, 8, control); 424 (void)memcpy(&acl_buffer[8 + 2], 425 &channel->tx_packets_data[index * channel->local_mps], 426 tx_state->len); 427 // (re-)start retransmission timer on 428 l2cap_ertm_start_retransmission_timer(channel); 429 // send 430 return l2cap_send_prepared(channel->local_cid, 2 + tx_state->len); 431 } 432 433 static void l2cap_ertm_store_fragment(l2cap_channel_t * channel, l2cap_segmentation_and_reassembly_t sar, uint16_t sdu_length, const uint8_t * data, uint16_t len){ 434 // get next index for storing packets 435 int index = channel->tx_write_index; 436 437 l2cap_ertm_tx_packet_state_t * tx_state = &channel->tx_packets_state[index]; 438 tx_state->tx_seq = channel->next_tx_seq; 439 tx_state->sar = sar; 440 tx_state->retry_count = 0; 441 442 uint8_t * tx_packet = &channel->tx_packets_data[index * channel->local_mps]; 443 log_debug("index %u, local mps %u, remote mps %u, packet tx %p, len %u", index, channel->local_mps, channel->remote_mps, tx_packet, len); 444 int pos = 0; 445 if (sar == L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU){ 446 little_endian_store_16(tx_packet, 0, sdu_length); 447 pos += 2; 448 } 449 (void)memcpy(&tx_packet[pos], data, len); 450 tx_state->len = pos + len; 451 452 // update 453 channel->num_stored_tx_frames++; 454 channel->next_tx_seq = l2cap_next_ertm_seq_nr(channel->next_tx_seq); 455 l2cap_ertm_next_tx_write_index(channel); 456 457 log_info("l2cap_ertm_store_fragment: tx_read_index %u, tx_write_index %u, num stored %u", channel->tx_read_index, channel->tx_write_index, channel->num_stored_tx_frames); 458 459 } 460 461 static uint8_t l2cap_ertm_send(l2cap_channel_t * channel, const uint8_t * data, uint16_t len){ 462 if (len > channel->remote_mtu){ 463 log_error("l2cap_ertm_send cid 0x%02x, data length exceeds remote MTU.", channel->local_cid); 464 return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU; 465 } 466 467 if (!l2cap_ertm_can_store_packet_now(channel)){ 468 log_error("l2cap_ertm_send cid 0x%02x, fragment store full", channel->local_cid); 469 return BTSTACK_ACL_BUFFERS_FULL; 470 } 471 472 // check if it needs to get fragmented 473 uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps); 474 if (len > effective_mps){ 475 // fragmentation needed. 476 l2cap_segmentation_and_reassembly_t sar = L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU; 477 uint16_t chunk_len = 0; 478 while (len){ 479 switch (sar){ 480 case L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU: 481 chunk_len = effective_mps - 2; // sdu_length 482 l2cap_ertm_store_fragment(channel, sar, len, data, chunk_len); 483 sar = L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU; 484 break; 485 case L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU: 486 chunk_len = effective_mps; 487 if (chunk_len >= len){ 488 sar = L2CAP_SEGMENTATION_AND_REASSEMBLY_END_OF_L2CAP_SDU; 489 chunk_len = len; 490 } 491 l2cap_ertm_store_fragment(channel, sar, len, data, chunk_len); 492 break; 493 default: 494 btstack_unreachable(); 495 break; 496 } 497 len -= chunk_len; 498 data += chunk_len; 499 } 500 501 } else { 502 l2cap_ertm_store_fragment(channel, L2CAP_SEGMENTATION_AND_REASSEMBLY_UNSEGMENTED_L2CAP_SDU, 0, data, len); 503 } 504 505 // try to send 506 l2cap_notify_channel_can_send(); 507 return ERROR_CODE_SUCCESS; 508 } 509 510 static uint16_t l2cap_setup_options_ertm_request(l2cap_channel_t * channel, uint8_t * config_options){ 511 int pos = 0; 512 config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL; 513 config_options[pos++] = 9; // length 514 config_options[pos++] = (uint8_t) channel->mode; 515 config_options[pos++] = channel->num_rx_buffers; // == TxWindows size 516 config_options[pos++] = channel->local_max_transmit; 517 little_endian_store_16( config_options, pos, channel->local_retransmission_timeout_ms); 518 pos += 2; 519 little_endian_store_16( config_options, pos, channel->local_monitor_timeout_ms); 520 pos += 2; 521 little_endian_store_16( config_options, pos, channel->local_mps); 522 pos += 2; 523 // 524 config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT; 525 config_options[pos++] = 2; // length 526 little_endian_store_16(config_options, pos, channel->local_mtu); 527 pos += 2; 528 529 // Issue: iOS (e.g. 10.2) uses "No FCS" as default while Core 5.0 specifies "FCS" as default 530 // Workaround: try to actively negotiate FCS option 531 config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE; 532 config_options[pos++] = 1; // length 533 config_options[pos++] = channel->fcs_option; 534 return pos; // 11+4+3=18 535 } 536 537 static uint16_t l2cap_setup_options_ertm_response(l2cap_channel_t * channel, uint8_t * config_options){ 538 int pos = 0; 539 config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL; 540 config_options[pos++] = 9; // length 541 config_options[pos++] = (uint8_t) channel->mode; 542 // less or equal to remote tx window size 543 config_options[pos++] = btstack_min(channel->num_tx_buffers, channel->remote_tx_window_size); 544 // max transmit in response shall be ignored -> use sender values 545 config_options[pos++] = channel->remote_max_transmit; 546 // A value for the Retransmission time-out shall be sent in a positive Configuration Response 547 // and indicates the value that will be used by the sender of the Configuration Response -> use our value 548 little_endian_store_16( config_options, pos, channel->local_retransmission_timeout_ms); 549 pos += 2; 550 // A value for the Monitor time-out shall be sent in a positive Configuration Response 551 // and indicates the value that will be used by the sender of the Configuration Response -> use our value 552 little_endian_store_16( config_options, pos, channel->local_monitor_timeout_ms); 553 pos += 2; 554 // less or equal to remote mps 555 uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps); 556 little_endian_store_16( config_options, pos, effective_mps); 557 pos += 2; 558 // 559 config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT; // MTU 560 config_options[pos++] = 2; // length 561 little_endian_store_16(config_options, pos, channel->remote_mtu); 562 pos += 2; 563 #if 0 564 // 565 config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE; 566 config_options[pos++] = 1; // length 567 config_options[pos++] = channel->fcs_option; 568 #endif 569 return pos; // 11+4=15 570 } 571 572 static int l2cap_ertm_send_supervisor_frame(l2cap_channel_t * channel, uint16_t control){ 573 hci_reserve_packet_buffer(); 574 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 575 log_info("S-Frame: control 0x%04x", control); 576 little_endian_store_16(acl_buffer, 8, control); 577 return l2cap_send_prepared(channel->local_cid, 2); 578 } 579 580 static uint8_t l2cap_ertm_validate_local_config(l2cap_ertm_config_t * ertm_config){ 581 582 uint8_t result = ERROR_CODE_SUCCESS; 583 if (ertm_config->max_transmit < 1){ 584 log_error("max_transmit must be >= 1"); 585 result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS; 586 } 587 if (ertm_config->retransmission_timeout_ms < 2000){ 588 log_error("retransmission_timeout_ms must be >= 2000 ms"); 589 result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS; 590 } 591 if (ertm_config->monitor_timeout_ms < 12000){ 592 log_error("monitor_timeout_ms must be >= 12000 ms"); 593 result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS; 594 } 595 if (ertm_config->local_mtu < 48){ 596 log_error("local_mtu must be >= 48"); 597 result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS; 598 } 599 if (ertm_config->num_rx_buffers < 1){ 600 log_error("num_rx_buffers must be >= 1"); 601 result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS; 602 } 603 if (ertm_config->num_tx_buffers < 1){ 604 log_error("num_rx_buffers must be >= 1"); 605 result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS; 606 } 607 return result; 608 } 609 610 static void l2cap_ertm_setup_buffers(l2cap_channel_t * channel, uint8_t * buffer, uint32_t size){ 611 btstack_assert( (((uintptr_t) buffer) & 0x0f) == 0); 612 613 // setup state buffers - use void cast to avoid -Wcast-align warning 614 uint32_t pos = 0; 615 channel->rx_packets_state = (l2cap_ertm_rx_packet_state_t *) (void *) &buffer[pos]; 616 pos += channel->num_rx_buffers * sizeof(l2cap_ertm_rx_packet_state_t); 617 channel->tx_packets_state = (l2cap_ertm_tx_packet_state_t *) (void *) &buffer[pos]; 618 pos += channel->num_tx_buffers * sizeof(l2cap_ertm_tx_packet_state_t); 619 620 // setup reassembly buffer 621 channel->reassembly_buffer = &buffer[pos]; 622 pos += channel->local_mtu; 623 624 // setup rx buffers 625 channel->rx_packets_data = &buffer[pos]; 626 pos += channel->num_rx_buffers * channel->local_mps; 627 628 // setup tx buffers 629 channel->tx_packets_data = &buffer[pos]; 630 pos += channel->num_rx_buffers * channel->remote_mps; 631 632 btstack_assert(pos <= size); 633 UNUSED(pos); 634 } 635 636 static void l2cap_ertm_configure_channel(l2cap_channel_t * channel, l2cap_ertm_config_t * ertm_config, uint8_t * buffer, uint32_t size){ 637 638 channel->mode = L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION; 639 channel->ertm_mandatory = ertm_config->ertm_mandatory; 640 channel->local_max_transmit = ertm_config->max_transmit; 641 channel->local_retransmission_timeout_ms = ertm_config->retransmission_timeout_ms; 642 channel->local_monitor_timeout_ms = ertm_config->monitor_timeout_ms; 643 channel->local_mtu = ertm_config->local_mtu; 644 channel->num_rx_buffers = ertm_config->num_rx_buffers; 645 channel->num_tx_buffers = ertm_config->num_tx_buffers; 646 channel->fcs_option = ertm_config->fcs_option; 647 648 // align buffer to 16-byte boundary to assert l2cap_ertm_rx_packet_state_t is aligned 649 int bytes_till_alignment = 16 - (((uintptr_t) buffer) & 0x0f); 650 buffer += bytes_till_alignment; 651 size -= bytes_till_alignment; 652 653 // calculate space for rx and tx buffers 654 uint32_t state_len = channel->num_rx_buffers * sizeof(l2cap_ertm_rx_packet_state_t) + channel->num_tx_buffers * sizeof(l2cap_ertm_tx_packet_state_t); 655 uint32_t buffer_space = size - state_len - channel->local_mtu; 656 657 // divide rest of data equally for initial config 658 uint16_t mps = buffer_space / (ertm_config->num_rx_buffers + ertm_config->num_tx_buffers); 659 channel->local_mps = mps; 660 channel->remote_mps = mps; 661 l2cap_ertm_setup_buffers(channel, buffer, size); 662 663 log_info("Local MPS: %u", channel->local_mps); 664 } 665 666 uint8_t l2cap_ertm_create_channel(btstack_packet_handler_t packet_handler, bd_addr_t address, uint16_t psm, 667 l2cap_ertm_config_t * ertm_config, uint8_t * buffer, uint32_t size, uint16_t * out_local_cid){ 668 669 log_info("l2cap_ertm_create_channel addr %s, psm 0x%x, local mtu %u", bd_addr_to_str(address), psm, ertm_config->local_mtu); 670 671 // validate local config 672 uint8_t result = l2cap_ertm_validate_local_config(ertm_config); 673 if (result) return result; 674 675 // determine security level based on psm 676 const gap_security_level_t security_level = l2cap_security_level_0_allowed_for_PSM(psm) ? LEVEL_0 : gap_get_security_level(); 677 678 l2cap_channel_t * channel = l2cap_create_channel_entry(packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, address, BD_ADDR_TYPE_ACL, psm, ertm_config->local_mtu, security_level); 679 if (!channel) { 680 return BTSTACK_MEMORY_ALLOC_FAILED; 681 } 682 683 // configure ERTM 684 l2cap_ertm_configure_channel(channel, ertm_config, buffer, size); 685 686 // add to connections list 687 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 688 689 // store local_cid 690 if (out_local_cid){ 691 *out_local_cid = channel->local_cid; 692 } 693 694 // check if hci connection is already usable 695 hci_connection_t * conn = hci_connection_for_bd_addr_and_type(address, BD_ADDR_TYPE_ACL); 696 if (conn){ 697 log_info("l2cap_create_channel, hci connection already exists"); 698 l2cap_handle_connection_complete(conn->con_handle, channel); 699 // check if remote supported fearures are already received 700 if (hci_remote_features_available(conn->con_handle)) { 701 l2cap_handle_remote_supported_features_received(channel); 702 } else { 703 hci_remote_features_query(conn->con_handle); 704 }; 705 } 706 707 l2cap_run(); 708 709 return 0; 710 } 711 712 static void l2cap_ertm_notify_channel_can_send(l2cap_channel_t * channel){ 713 if (l2cap_ertm_can_store_packet_now(channel)){ 714 channel->waiting_for_can_send_now = 0; 715 l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid); 716 } 717 } 718 719 uint8_t l2cap_ertm_accept_connection(uint16_t local_cid, l2cap_ertm_config_t * ertm_config, uint8_t * buffer, uint32_t size){ 720 721 log_info("l2cap_ertm_accept_connection local_cid 0x%x", local_cid); 722 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 723 if (!channel) { 724 log_error("l2cap_accept_connection called but local_cid 0x%x not found", local_cid); 725 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 726 } 727 728 // validate local config 729 uint8_t result = l2cap_ertm_validate_local_config(ertm_config); 730 if (result) return result; 731 732 // configure L2CAP ERTM 733 l2cap_ertm_configure_channel(channel, ertm_config, buffer, size); 734 735 // we need to know if ERTM is supported before sending a config response 736 channel->state = L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES; 737 hci_connection_t * connection = hci_connection_for_handle(channel->con_handle); 738 btstack_assert(connection != NULL); 739 switch (connection->l2cap_state.information_state){ 740 case L2CAP_INFORMATION_STATE_IDLE: 741 connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST; 742 break; 743 case L2CAP_INFORMATION_STATE_DONE: 744 l2cap_handle_information_request_complete(connection); 745 break; 746 default: 747 break; 748 } 749 750 l2cap_run(); 751 752 return ERROR_CODE_SUCCESS; 753 } 754 755 uint8_t l2cap_ertm_decline_connection(uint16_t local_cid){ 756 l2cap_decline_connection(local_cid); 757 return ERROR_CODE_SUCCESS; 758 } 759 760 uint8_t l2cap_ertm_set_busy(uint16_t local_cid){ 761 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid); 762 if (!channel) { 763 log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid); 764 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 765 } 766 if (!channel->local_busy){ 767 channel->local_busy = 1; 768 channel->send_supervisor_frame_receiver_not_ready = 1; 769 l2cap_run(); 770 } 771 return ERROR_CODE_SUCCESS; 772 } 773 774 uint8_t l2cap_ertm_set_ready(uint16_t local_cid){ 775 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid); 776 if (!channel) { 777 log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid); 778 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 779 } 780 if (channel->local_busy){ 781 channel->local_busy = 0; 782 channel->send_supervisor_frame_receiver_ready_poll = 1; 783 l2cap_run(); 784 } 785 return ERROR_CODE_SUCCESS; 786 } 787 788 // Process-ReqSeq 789 static void l2cap_ertm_process_req_seq(l2cap_channel_t * l2cap_channel, uint8_t req_seq){ 790 int num_buffers_acked = 0; 791 l2cap_ertm_tx_packet_state_t * tx_state; 792 log_info("l2cap_ertm_process_req_seq: tx_read_index %u, tx_write_index %u, req_seq %u", l2cap_channel->tx_read_index, l2cap_channel->tx_write_index, req_seq); 793 while (true){ 794 795 // no unack packets left 796 if (l2cap_channel->unacked_frames == 0) { 797 // stop retransmission timer 798 l2cap_ertm_stop_retransmission_timer(l2cap_channel); 799 break; 800 } 801 802 tx_state = &l2cap_channel->tx_packets_state[l2cap_channel->tx_read_index]; 803 // calc delta 804 int delta = (req_seq - tx_state->tx_seq) & 0x03f; 805 if (delta == 0) break; // all packets acknowledged 806 if (delta > l2cap_channel->remote_tx_window_size) break; 807 808 num_buffers_acked++; 809 l2cap_channel->num_stored_tx_frames--; 810 l2cap_channel->unacked_frames--; 811 log_info("RR seq %u => packet with tx_seq %u done", req_seq, tx_state->tx_seq); 812 813 l2cap_channel->tx_read_index++; 814 if (l2cap_channel->tx_read_index >= l2cap_channel->num_rx_buffers){ 815 l2cap_channel->tx_read_index = 0; 816 } 817 } 818 if (num_buffers_acked){ 819 log_info("num_buffers_acked %u", num_buffers_acked); 820 l2cap_ertm_notify_channel_can_send(l2cap_channel); 821 } 822 } 823 824 static l2cap_ertm_tx_packet_state_t * l2cap_ertm_get_tx_state(l2cap_channel_t * l2cap_channel, uint8_t tx_seq){ 825 int i; 826 for (i=0;i<l2cap_channel->num_tx_buffers;i++){ 827 l2cap_ertm_tx_packet_state_t * tx_state = &l2cap_channel->tx_packets_state[i]; 828 if (tx_state->tx_seq == tx_seq) return tx_state; 829 } 830 return NULL; 831 } 832 833 // @param delta number of frames in the future, >= 1 834 // @assumption size <= l2cap_channel->local_mps (checked in l2cap_acl_classic_handler) 835 static void l2cap_ertm_handle_out_of_sequence_sdu(l2cap_channel_t * l2cap_channel, l2cap_segmentation_and_reassembly_t sar, int delta, const uint8_t * payload, uint16_t size){ 836 log_info("Store SDU with delta %u", delta); 837 // get rx state for packet to store 838 int index = l2cap_channel->rx_store_index + delta - 1; 839 if (index > l2cap_channel->num_rx_buffers){ 840 index -= l2cap_channel->num_rx_buffers; 841 } 842 log_info("Index of packet to store %u", index); 843 l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index]; 844 // check if buffer is free 845 if (rx_state->valid){ 846 log_error("Packet buffer already used"); 847 return; 848 } 849 rx_state->valid = 1; 850 rx_state->sar = sar; 851 rx_state->len = size; 852 uint8_t * rx_buffer = &l2cap_channel->rx_packets_data[index]; 853 (void)memcpy(rx_buffer, payload, size); 854 } 855 856 // @assumption size <= l2cap_channel->local_mps (checked in l2cap_acl_classic_handler) 857 static void l2cap_ertm_handle_in_sequence_sdu(l2cap_channel_t * l2cap_channel, l2cap_segmentation_and_reassembly_t sar, const uint8_t * payload, uint16_t size){ 858 uint16_t reassembly_sdu_length; 859 switch (sar){ 860 case L2CAP_SEGMENTATION_AND_REASSEMBLY_UNSEGMENTED_L2CAP_SDU: 861 // assert total packet size <= our mtu 862 if (size > l2cap_channel->local_mtu) break; 863 // packet complete -> disapatch 864 l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, (uint8_t*) payload, size); 865 break; 866 case L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU: 867 // read SDU len 868 reassembly_sdu_length = little_endian_read_16(payload, 0); 869 payload += 2; 870 size -= 2; 871 // assert reassembled size <= our mtu 872 if (reassembly_sdu_length > l2cap_channel->local_mtu) break; 873 // store start segment 874 l2cap_channel->reassembly_sdu_length = reassembly_sdu_length; 875 (void)memcpy(&l2cap_channel->reassembly_buffer[0], payload, size); 876 l2cap_channel->reassembly_pos = size; 877 break; 878 case L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU: 879 // assert size of reassembled data <= our mtu 880 if (l2cap_channel->reassembly_pos + size > l2cap_channel->local_mtu) break; 881 // store continuation segment 882 (void)memcpy(&l2cap_channel->reassembly_buffer[l2cap_channel->reassembly_pos], 883 payload, size); 884 l2cap_channel->reassembly_pos += size; 885 break; 886 case L2CAP_SEGMENTATION_AND_REASSEMBLY_END_OF_L2CAP_SDU: 887 // assert size of reassembled data <= our mtu 888 if (l2cap_channel->reassembly_pos + size > l2cap_channel->local_mtu) break; 889 // store continuation segment 890 (void)memcpy(&l2cap_channel->reassembly_buffer[l2cap_channel->reassembly_pos], 891 payload, size); 892 l2cap_channel->reassembly_pos += size; 893 // assert size of reassembled data matches announced sdu length 894 if (l2cap_channel->reassembly_pos != l2cap_channel->reassembly_sdu_length) break; 895 // packet complete -> disapatch 896 l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, l2cap_channel->reassembly_buffer, l2cap_channel->reassembly_pos); 897 l2cap_channel->reassembly_pos = 0; 898 break; 899 default: 900 btstack_assert(false); 901 break; 902 } 903 } 904 905 static void l2cap_ertm_channel_send_information_frame(l2cap_channel_t * channel){ 906 channel->unacked_frames++; 907 int index = channel->tx_send_index; 908 channel->tx_send_index++; 909 if (channel->tx_send_index >= channel->num_tx_buffers){ 910 channel->tx_send_index = 0; 911 } 912 l2cap_ertm_send_information_frame(channel, index, 0); // final = 0 913 } 914 915 #endif 916 917 #ifdef L2CAP_USES_CHANNELS 918 static uint16_t l2cap_next_local_cid(void){ 919 do { 920 if (l2cap_local_source_cid == 0xfffeu) { 921 l2cap_local_source_cid = 0x40; 922 } else { 923 l2cap_local_source_cid++; 924 } 925 } while (l2cap_get_channel_for_local_cid(l2cap_local_source_cid) != NULL); 926 return l2cap_local_source_cid; 927 } 928 #endif 929 930 static uint8_t l2cap_next_sig_id(void){ 931 if (l2cap_sig_seq_nr == 0xffu) { 932 l2cap_sig_seq_nr = 1; 933 } else { 934 l2cap_sig_seq_nr++; 935 } 936 return l2cap_sig_seq_nr; 937 } 938 939 void l2cap_init(void){ 940 #ifdef L2CAP_USES_CHANNELS 941 l2cap_local_source_cid = 0x40; 942 #endif 943 l2cap_sig_seq_nr = 0xff; 944 945 #ifdef ENABLE_CLASSIC 946 // Setup Connectionless Channel 947 l2cap_fixed_channel_classic_connectionless.local_cid = L2CAP_CID_CONNECTIONLESS_CHANNEL; 948 l2cap_fixed_channel_classic_connectionless.channel_type = L2CAP_CHANNEL_TYPE_CONNECTIONLESS; 949 btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_classic_connectionless); 950 #endif 951 952 #ifdef ENABLE_BLE 953 // Setup fixed ATT Channel 954 l2cap_fixed_channel_le_att.local_cid = L2CAP_CID_ATTRIBUTE_PROTOCOL; 955 l2cap_fixed_channel_le_att.channel_type = L2CAP_CHANNEL_TYPE_FIXED_LE; 956 btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_le_att); 957 958 // Setup fixed SM Channel 959 l2cap_fixed_channel_le_sm.local_cid = L2CAP_CID_SECURITY_MANAGER_PROTOCOL; 960 l2cap_fixed_channel_le_sm.channel_type = L2CAP_CHANNEL_TYPE_FIXED_LE; 961 btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_le_sm); 962 #endif 963 #ifdef ENABLE_CLASSIC 964 // Setup fixed SM Channel 965 l2cap_fixed_channel_classic_sm.local_cid = L2CAP_CID_BR_EDR_SECURITY_MANAGER; 966 l2cap_fixed_channel_classic_sm.channel_type = L2CAP_CHANNEL_TYPE_FIXED_CLASSIC; 967 btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_classic_sm); 968 #endif 969 970 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 971 l2cap_enhanced_mps_min = 0x0001; 972 l2cap_enhanced_mps_max = 0xffff; 973 l2cap_trigger_run_registration.callback = &l2cap_run_trigger_callback; 974 #endif 975 976 // 977 // register callback with HCI 978 // 979 l2cap_hci_event_callback_registration.callback = &l2cap_hci_event_handler; 980 hci_add_event_handler(&l2cap_hci_event_callback_registration); 981 982 hci_register_acl_packet_handler(&l2cap_acl_handler); 983 984 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL 985 #ifdef ENABLE_CLASSIC 986 gap_connectable_control(0); // no services yet 987 #endif 988 #endif 989 } 990 991 /** 992 * @brief De-Init L2CAP 993 */ 994 void l2cap_deinit(void){ 995 l2cap_channels = NULL; 996 l2cap_signaling_responses_pending = 0; 997 #ifdef ENABLE_CLASSIC 998 l2cap_require_security_level2_for_outgoing_sdp = 0; 999 (void)memset(&l2cap_fixed_channel_classic_connectionless, 0, sizeof(l2cap_fixed_channel_classic_connectionless)); 1000 l2cap_services = NULL; 1001 (void)memset(l2cap_outgoing_classic_addr, 0, 6); 1002 (void)memset(&l2cap_fixed_channel_classic_sm, 0, sizeof(l2cap_fixed_channel_classic_sm)); 1003 #endif 1004 #ifdef ENABLE_BLE 1005 l2cap_le_custom_max_mtu = 0; 1006 (void)memset(&l2cap_fixed_channel_le_att, 0, sizeof(l2cap_fixed_channel_le_att)); 1007 (void)memset(&l2cap_fixed_channel_le_sm, 0, sizeof(l2cap_fixed_channel_le_sm)); 1008 #endif 1009 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 1010 l2cap_le_services = NULL; 1011 #endif 1012 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1013 l2cap_enhanced_services = NULL; 1014 #endif 1015 l2cap_event_handlers = NULL; 1016 } 1017 1018 void l2cap_add_event_handler(btstack_packet_callback_registration_t * callback_handler){ 1019 btstack_linked_list_add_tail(&l2cap_event_handlers, (btstack_linked_item_t*) callback_handler); 1020 } 1021 1022 void l2cap_remove_event_handler(btstack_packet_callback_registration_t * callback_handler){ 1023 btstack_linked_list_remove(&l2cap_event_handlers, (btstack_linked_item_t*) callback_handler); 1024 } 1025 1026 static void l2cap_emit_event(uint8_t *event, uint16_t size) { 1027 hci_dump_packet( HCI_EVENT_PACKET, 1, event, size); 1028 // dispatch to all event handlers 1029 btstack_linked_list_iterator_t it; 1030 btstack_linked_list_iterator_init(&it, &l2cap_event_handlers); 1031 while (btstack_linked_list_iterator_has_next(&it)){ 1032 btstack_packet_callback_registration_t * entry = (btstack_packet_callback_registration_t*) btstack_linked_list_iterator_next(&it); 1033 entry->callback(HCI_EVENT_PACKET, 0, event, size); 1034 } 1035 } 1036 1037 void l2cap_request_can_send_fix_channel_now_event(hci_con_handle_t con_handle, uint16_t channel_id){ 1038 UNUSED(con_handle); // ok: there is no con handle 1039 1040 l2cap_fixed_channel_t * channel = l2cap_fixed_channel_for_channel_id(channel_id); 1041 if (!channel) return; 1042 channel->waiting_for_can_send_now = 1; 1043 l2cap_notify_channel_can_send(); 1044 } 1045 1046 bool l2cap_can_send_fixed_channel_packet_now(hci_con_handle_t con_handle, uint16_t channel_id){ 1047 UNUSED(channel_id); // ok: only depends on Controller LE buffers 1048 1049 return hci_can_send_acl_packet_now(con_handle); 1050 } 1051 1052 uint8_t *l2cap_get_outgoing_buffer(void){ 1053 return hci_get_outgoing_packet_buffer() + COMPLETE_L2CAP_HEADER; // 8 bytes 1054 } 1055 1056 // only for L2CAP Basic Channels 1057 bool l2cap_reserve_packet_buffer(void){ 1058 return hci_reserve_packet_buffer(); 1059 } 1060 1061 // only for L2CAP Basic Channels 1062 void l2cap_release_packet_buffer(void){ 1063 hci_release_packet_buffer(); 1064 } 1065 1066 static void l2cap_setup_header(uint8_t * acl_buffer, hci_con_handle_t con_handle, uint8_t packet_boundary, uint16_t remote_cid, uint16_t len){ 1067 // 0 - Connection handle : PB=pb : BC=00 1068 little_endian_store_16(acl_buffer, 0u, con_handle | (packet_boundary << 12u) | (0u << 14u)); 1069 // 2 - ACL length 1070 little_endian_store_16(acl_buffer, 2u, len + 4u); 1071 // 4 - L2CAP packet length 1072 little_endian_store_16(acl_buffer, 4u, len + 0u); 1073 // 6 - L2CAP channel DEST 1074 little_endian_store_16(acl_buffer, 6, remote_cid); 1075 } 1076 1077 // assumption - only on LE connections 1078 uint8_t l2cap_send_prepared_connectionless(hci_con_handle_t con_handle, uint16_t cid, uint16_t len){ 1079 1080 if (!hci_is_packet_buffer_reserved()){ 1081 log_error("l2cap_send_prepared_connectionless called without reserving packet first"); 1082 return BTSTACK_ACL_BUFFERS_FULL; 1083 } 1084 1085 if (!hci_can_send_prepared_acl_packet_now(con_handle)){ 1086 log_info("l2cap_send_prepared_connectionless handle 0x%02x, cid 0x%02x, cannot send", con_handle, cid); 1087 return BTSTACK_ACL_BUFFERS_FULL; 1088 } 1089 1090 log_debug("l2cap_send_prepared_connectionless handle %u, cid 0x%02x", con_handle, cid); 1091 1092 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 1093 l2cap_setup_header(acl_buffer, con_handle, 0, cid, len); 1094 // send 1095 return hci_send_acl_packet_buffer(len+8u); 1096 } 1097 1098 // assumption - only on LE connections 1099 uint8_t l2cap_send_connectionless(hci_con_handle_t con_handle, uint16_t cid, uint8_t *data, uint16_t len){ 1100 1101 if (!hci_can_send_acl_packet_now(con_handle)){ 1102 log_info("l2cap_send cid 0x%02x, cannot send", cid); 1103 return BTSTACK_ACL_BUFFERS_FULL; 1104 } 1105 1106 hci_reserve_packet_buffer(); 1107 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 1108 1109 (void)memcpy(&acl_buffer[8], data, len); 1110 1111 return l2cap_send_prepared_connectionless(con_handle, cid, len); 1112 } 1113 1114 static void l2cap_emit_can_send_now(btstack_packet_handler_t packet_handler, uint16_t channel) { 1115 log_debug("L2CAP_EVENT_CHANNEL_CAN_SEND_NOW local_cid 0x%x", channel); 1116 uint8_t event[4]; 1117 event[0] = L2CAP_EVENT_CAN_SEND_NOW; 1118 event[1] = sizeof(event) - 2u; 1119 little_endian_store_16(event, 2, channel); 1120 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 1121 packet_handler(HCI_EVENT_PACKET, channel, event, sizeof(event)); 1122 } 1123 1124 #ifdef L2CAP_USES_CHANNELS 1125 static void l2cap_dispatch_to_channel(l2cap_channel_t *channel, uint8_t type, uint8_t * data, uint16_t size){ 1126 (* (channel->packet_handler))(type, channel->local_cid, data, size); 1127 } 1128 1129 static void l2cap_emit_simple_event_with_cid(l2cap_channel_t * channel, uint8_t event_code){ 1130 uint8_t event[4]; 1131 event[0] = event_code; 1132 event[1] = sizeof(event) - 2u; 1133 little_endian_store_16(event, 2, channel->local_cid); 1134 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 1135 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 1136 } 1137 #endif 1138 1139 #ifdef ENABLE_CLASSIC 1140 void l2cap_emit_channel_opened(l2cap_channel_t *channel, uint8_t status) { 1141 log_info("L2CAP_EVENT_CHANNEL_OPENED status 0x%x addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x local_mtu %u, remote_mtu %u, flush_timeout %u", 1142 status, bd_addr_to_str(channel->address), channel->con_handle, channel->psm, 1143 channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu, channel->flush_timeout); 1144 uint8_t event[26]; 1145 event[0] = L2CAP_EVENT_CHANNEL_OPENED; 1146 event[1] = sizeof(event) - 2; 1147 event[2] = status; 1148 reverse_bd_addr(channel->address, &event[3]); 1149 little_endian_store_16(event, 9, channel->con_handle); 1150 little_endian_store_16(event, 11, channel->psm); 1151 little_endian_store_16(event, 13, channel->local_cid); 1152 little_endian_store_16(event, 15, channel->remote_cid); 1153 little_endian_store_16(event, 17, channel->local_mtu); 1154 little_endian_store_16(event, 19, channel->remote_mtu); 1155 little_endian_store_16(event, 21, channel->flush_timeout); 1156 event[23] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0; 1157 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1158 log_info("ERTM mode %u, fcs enabled %u", channel->mode, channel->fcs_option); 1159 event[24] = channel->mode; 1160 event[25] = channel->fcs_option; 1161 1162 #else 1163 event[24] = L2CAP_CHANNEL_MODE_BASIC; 1164 event[25] = 0; 1165 #endif 1166 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 1167 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 1168 } 1169 1170 static void l2cap_emit_incoming_connection(l2cap_channel_t *channel) { 1171 log_info("L2CAP_EVENT_INCOMING_CONNECTION addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x", 1172 bd_addr_to_str(channel->address), channel->con_handle, channel->psm, channel->local_cid, channel->remote_cid); 1173 uint8_t event[16]; 1174 event[0] = L2CAP_EVENT_INCOMING_CONNECTION; 1175 event[1] = sizeof(event) - 2; 1176 reverse_bd_addr(channel->address, &event[2]); 1177 little_endian_store_16(event, 8, channel->con_handle); 1178 little_endian_store_16(event, 10, channel->psm); 1179 little_endian_store_16(event, 12, channel->local_cid); 1180 little_endian_store_16(event, 14, channel->remote_cid); 1181 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 1182 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 1183 } 1184 1185 static void l2cap_handle_channel_open_failed(l2cap_channel_t * channel, uint8_t status){ 1186 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1187 // emit ertm buffer released, as it's not needed. if in basic mode, it was either not allocated or already released 1188 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1189 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 1190 } 1191 #endif 1192 l2cap_emit_channel_opened(channel, status); 1193 } 1194 1195 #endif 1196 1197 #ifdef L2CAP_USES_CHANNELS 1198 1199 static void l2cap_emit_channel_closed(l2cap_channel_t *channel) { 1200 log_info("L2CAP_EVENT_CHANNEL_CLOSED local_cid 0x%x", channel->local_cid); 1201 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED); 1202 } 1203 1204 static void l2cap_handle_channel_closed(l2cap_channel_t * channel){ 1205 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1206 // emit ertm buffer released, as it's not needed anymore. if in basic mode, it was either not allocated or already released 1207 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1208 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 1209 } 1210 #endif 1211 l2cap_emit_channel_closed(channel); 1212 } 1213 #endif 1214 1215 static l2cap_fixed_channel_t * l2cap_channel_item_by_cid(uint16_t cid){ 1216 btstack_linked_list_iterator_t it; 1217 btstack_linked_list_iterator_init(&it, &l2cap_channels); 1218 while (btstack_linked_list_iterator_has_next(&it)){ 1219 l2cap_fixed_channel_t * channel = (l2cap_fixed_channel_t*) btstack_linked_list_iterator_next(&it); 1220 if (channel->local_cid == cid) { 1221 return channel; 1222 } 1223 } 1224 return NULL; 1225 } 1226 1227 // used for fixed channels in LE (ATT/SM) and Classic (Connectionless Channel). CID < 0x04 1228 static l2cap_fixed_channel_t * l2cap_fixed_channel_for_channel_id(uint16_t local_cid){ 1229 if (local_cid >= 0x40u) return NULL; 1230 return (l2cap_fixed_channel_t*) l2cap_channel_item_by_cid(local_cid); 1231 } 1232 1233 #ifdef L2CAP_USES_CHANNELS 1234 1235 static int l2cap_is_dynamic_channel_type(l2cap_channel_type_t channel_type) { 1236 switch (channel_type) { 1237 case L2CAP_CHANNEL_TYPE_CLASSIC: 1238 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 1239 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 1240 return 1; 1241 default: 1242 return 0; 1243 } 1244 } 1245 1246 static l2cap_channel_t * l2cap_get_channel_for_local_cid(uint16_t local_cid){ 1247 if (local_cid < 0x40u) return NULL; 1248 return (l2cap_channel_t*) l2cap_channel_item_by_cid(local_cid); 1249 } 1250 1251 static l2cap_channel_t * l2cap_get_channel_for_local_cid_and_handle(uint16_t local_cid, hci_con_handle_t con_handle){ 1252 if (local_cid < 0x40u) return NULL; 1253 l2cap_channel_t * l2cap_channel = (l2cap_channel_t*) l2cap_channel_item_by_cid(local_cid); 1254 if (l2cap_channel == NULL) return NULL; 1255 if (l2cap_channel->con_handle != con_handle) return NULL; 1256 return l2cap_channel; 1257 } 1258 #endif 1259 1260 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 1261 static l2cap_channel_t * l2cap_get_channel_for_remote_handle_and_cid(hci_con_handle_t con_handle, uint16_t remote_cid){ 1262 btstack_linked_list_iterator_t it; 1263 btstack_linked_list_iterator_init(&it, &l2cap_channels); 1264 while (btstack_linked_list_iterator_has_next(&it)){ 1265 l2cap_fixed_channel_t * channel = (l2cap_fixed_channel_t*) btstack_linked_list_iterator_next(&it); 1266 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 1267 l2cap_channel_t * dynamic_channel = (l2cap_channel_t *) channel; 1268 if (dynamic_channel->con_handle != con_handle) continue; 1269 if (dynamic_channel->remote_cid != remote_cid) continue; 1270 return dynamic_channel; 1271 } 1272 return NULL; 1273 } 1274 #endif 1275 1276 #ifdef L2CAP_USES_CHANNELS 1277 uint8_t l2cap_request_can_send_now_event(uint16_t local_cid){ 1278 l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid); 1279 if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 1280 channel->waiting_for_can_send_now = 1; 1281 switch (channel->channel_type){ 1282 case L2CAP_CHANNEL_TYPE_CLASSIC: 1283 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1284 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1285 l2cap_ertm_notify_channel_can_send(channel); 1286 return ERROR_CODE_SUCCESS; 1287 } 1288 #endif 1289 l2cap_notify_channel_can_send(); 1290 break; 1291 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 1292 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 1293 l2cap_credit_based_notify_channel_can_send(channel); 1294 break; 1295 #endif 1296 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1297 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 1298 l2cap_credit_based_notify_channel_can_send(channel); 1299 break; 1300 #endif 1301 default: 1302 break; 1303 } 1304 return ERROR_CODE_SUCCESS; 1305 } 1306 1307 bool l2cap_can_send_packet_now(uint16_t local_cid){ 1308 l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid); 1309 if (!channel) return false; 1310 if (channel->state != L2CAP_STATE_OPEN) return false; 1311 switch (channel->channel_type){ 1312 case L2CAP_CHANNEL_TYPE_CLASSIC: 1313 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1314 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1315 return l2cap_ertm_can_store_packet_now(channel); 1316 } 1317 #endif 1318 return hci_can_send_acl_packet_now(channel->con_handle); 1319 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 1320 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 1321 return channel->send_sdu_buffer == NULL; 1322 #endif 1323 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1324 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 1325 return channel->send_sdu_buffer == NULL; 1326 #endif 1327 default: 1328 return false; 1329 } 1330 } 1331 1332 uint8_t l2cap_send(uint16_t local_cid, const uint8_t *data, uint16_t len){ 1333 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 1334 if (!channel) { 1335 log_error("l2cap_send no channel for cid 0x%02x", local_cid); 1336 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 1337 } 1338 switch (channel->channel_type){ 1339 #ifdef ENABLE_CLASSIC 1340 case L2CAP_CHANNEL_TYPE_CLASSIC: 1341 return l2cap_classic_send(channel, data, len); 1342 #endif 1343 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 1344 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 1345 return l2cap_credit_based_send_data(channel, data, len); 1346 #endif 1347 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1348 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 1349 return l2cap_credit_based_send_data(channel, data, len); 1350 #endif 1351 default: 1352 return ERROR_CODE_UNSPECIFIED_ERROR; 1353 } 1354 } 1355 #endif 1356 1357 #ifdef ENABLE_CLASSIC 1358 bool l2cap_can_send_prepared_packet_now(uint16_t local_cid){ 1359 l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid); 1360 if (!channel) return false; 1361 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1362 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1363 return false; 1364 } 1365 #endif 1366 return hci_can_send_prepared_acl_packet_now(channel->con_handle); 1367 } 1368 1369 #endif 1370 1371 #ifdef L2CAP_USES_CHANNELS 1372 uint16_t l2cap_get_remote_mtu_for_local_cid(uint16_t local_cid){ 1373 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 1374 if (channel) { 1375 return channel->remote_mtu; 1376 } 1377 return 0; 1378 } 1379 #endif 1380 1381 #ifdef ENABLE_CLASSIC 1382 // RTX Timer only exist for dynamic channels 1383 static l2cap_channel_t * l2cap_channel_for_rtx_timer(btstack_timer_source_t * ts){ 1384 btstack_linked_list_iterator_t it; 1385 btstack_linked_list_iterator_init(&it, &l2cap_channels); 1386 while (btstack_linked_list_iterator_has_next(&it)){ 1387 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 1388 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 1389 if (&channel->rtx == ts) { 1390 return channel; 1391 } 1392 } 1393 return NULL; 1394 } 1395 1396 static void l2cap_rtx_timeout(btstack_timer_source_t * ts){ 1397 l2cap_channel_t * channel = l2cap_channel_for_rtx_timer(ts); 1398 if (!channel) return; 1399 1400 log_info("l2cap_rtx_timeout for local cid 0x%02x", channel->local_cid); 1401 1402 // "When terminating the channel, it is not necessary to send a L2CAP_DisconnectReq 1403 // and enter WAIT_DISCONNECT state. Channels can be transitioned directly to the CLOSED state." 1404 // notify client 1405 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_RTX_TIMEOUT); 1406 1407 // discard channel 1408 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 1409 l2cap_free_channel_entry(channel); 1410 } 1411 1412 static uint8_t l2cap_classic_packet_boundary_flag(void){ 1413 return (hci_non_flushable_packet_boundary_flag_supported() && (hci_automatic_flush_timeout() == 0)) ? 0x00 : 0x02; 1414 } 1415 #endif 1416 1417 #ifdef L2CAP_USES_CHANNELS 1418 static void l2cap_stop_rtx(l2cap_channel_t * channel){ 1419 log_info("l2cap_stop_rtx for local cid 0x%02x", channel->local_cid); 1420 btstack_run_loop_remove_timer(&channel->rtx); 1421 } 1422 #endif 1423 1424 static uint8_t l2cap_send_signaling_packet(hci_con_handle_t handle, uint8_t pb_flags, uint16_t cid, L2CAP_SIGNALING_COMMANDS cmd, int identifier, va_list argptr){ 1425 if (!hci_can_send_acl_packet_now(handle)){ 1426 log_info("l2cap_send_classic_signaling_packet, cannot send"); 1427 return BTSTACK_ACL_BUFFERS_FULL; 1428 } 1429 hci_reserve_packet_buffer(); 1430 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 1431 uint16_t len = l2cap_create_signaling_packet(acl_buffer, handle, pb_flags, cid, cmd, identifier, argptr); 1432 va_end(argptr); 1433 return hci_send_acl_packet_buffer(len); 1434 } 1435 1436 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 1437 static int l2cap_send_general_signaling_packet(hci_con_handle_t handle, uint16_t signaling_cid, L2CAP_SIGNALING_COMMANDS cmd, int identifier, ...){ 1438 va_list argptr; 1439 va_start(argptr, identifier); 1440 uint8_t pb_flags = 0x00; 1441 #ifdef ENABLE_CLASSIC 1442 if (signaling_cid == L2CAP_CID_SIGNALING){ 1443 pb_flags = l2cap_classic_packet_boundary_flag(); 1444 } 1445 #endif 1446 uint8_t result = l2cap_send_signaling_packet(handle, pb_flags, signaling_cid, cmd, identifier, argptr); 1447 va_end(argptr); 1448 return result; 1449 } 1450 #endif 1451 1452 #ifdef ENABLE_CLASSIC 1453 1454 static void l2cap_start_rtx(l2cap_channel_t * channel){ 1455 l2cap_stop_rtx(channel); 1456 log_info("l2cap_start_rtx for local cid 0x%02x", channel->local_cid); 1457 btstack_run_loop_set_timer_handler(&channel->rtx, l2cap_rtx_timeout); 1458 btstack_run_loop_set_timer(&channel->rtx, L2CAP_RTX_TIMEOUT_MS); 1459 btstack_run_loop_add_timer(&channel->rtx); 1460 } 1461 1462 static void l2cap_start_ertx(l2cap_channel_t * channel){ 1463 log_info("l2cap_start_ertx for local cid 0x%02x", channel->local_cid); 1464 l2cap_stop_rtx(channel); 1465 btstack_run_loop_set_timer_handler(&channel->rtx, l2cap_rtx_timeout); 1466 btstack_run_loop_set_timer(&channel->rtx, L2CAP_ERTX_TIMEOUT_MS); 1467 btstack_run_loop_add_timer(&channel->rtx); 1468 } 1469 1470 void l2cap_require_security_level_2_for_outgoing_sdp(void){ 1471 l2cap_require_security_level2_for_outgoing_sdp = 1; 1472 } 1473 1474 static int l2cap_security_level_0_allowed_for_PSM(uint16_t psm){ 1475 return (psm == BLUETOOTH_PSM_SDP) && (!l2cap_require_security_level2_for_outgoing_sdp); 1476 } 1477 1478 static int l2cap_send_classic_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, int identifier, ...){ 1479 va_list argptr; 1480 va_start(argptr, identifier); 1481 uint8_t pb_flag = l2cap_classic_packet_boundary_flag(); 1482 uint8_t result = l2cap_send_signaling_packet(handle, pb_flag, L2CAP_CID_SIGNALING, cmd, identifier, argptr); 1483 va_end(argptr); 1484 return result; 1485 } 1486 1487 // assumption - only on Classic connections 1488 // cannot be used for L2CAP ERTM 1489 uint8_t l2cap_send_prepared(uint16_t local_cid, uint16_t len){ 1490 1491 if (!hci_is_packet_buffer_reserved()){ 1492 log_error("l2cap_send_prepared called without reserving packet first"); 1493 return BTSTACK_ACL_BUFFERS_FULL; 1494 } 1495 1496 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 1497 if (!channel) { 1498 log_error("l2cap_send_prepared no channel for cid 0x%02x", local_cid); 1499 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 1500 } 1501 1502 if (!hci_can_send_prepared_acl_packet_now(channel->con_handle)){ 1503 log_info("l2cap_send_prepared cid 0x%02x, cannot send", local_cid); 1504 return BTSTACK_ACL_BUFFERS_FULL; 1505 } 1506 1507 log_debug("l2cap_send_prepared cid 0x%02x, handle %u, 1 credit used", local_cid, channel->con_handle); 1508 1509 int fcs_size = 0; 1510 1511 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1512 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION && channel->fcs_option){ 1513 fcs_size = 2; 1514 } 1515 #endif 1516 1517 // set non-flushable packet boundary flag if supported on Controller 1518 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 1519 uint8_t packet_boundary_flag = l2cap_classic_packet_boundary_flag(); 1520 l2cap_setup_header(acl_buffer, channel->con_handle, packet_boundary_flag, channel->remote_cid, len + fcs_size); 1521 1522 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1523 if (fcs_size){ 1524 // calculate FCS over l2cap data 1525 uint16_t fcs = crc16_calc(acl_buffer + 4, 4 + len); 1526 log_info("I-Frame: fcs 0x%04x", fcs); 1527 little_endian_store_16(acl_buffer, 8 + len, fcs); 1528 } 1529 #endif 1530 1531 // send 1532 return hci_send_acl_packet_buffer(len+8+fcs_size); 1533 } 1534 1535 // assumption - only on Classic connections 1536 static uint8_t l2cap_classic_send(l2cap_channel_t * channel, const uint8_t *data, uint16_t len){ 1537 1538 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1539 // send in ERTM 1540 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1541 return l2cap_ertm_send(channel, data, len); 1542 } 1543 #endif 1544 1545 if (len > channel->remote_mtu){ 1546 log_error("l2cap_send cid 0x%02x, data length exceeds remote MTU.", channel->local_cid); 1547 return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU; 1548 } 1549 1550 if (!hci_can_send_acl_packet_now(channel->con_handle)){ 1551 log_info("l2cap_send cid 0x%02x, cannot send", channel->local_cid); 1552 return BTSTACK_ACL_BUFFERS_FULL; 1553 } 1554 1555 hci_reserve_packet_buffer(); 1556 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 1557 (void)memcpy(&acl_buffer[8], data, len); 1558 return l2cap_send_prepared(channel->local_cid, len); 1559 } 1560 1561 int l2cap_send_echo_request(hci_con_handle_t con_handle, uint8_t *data, uint16_t len){ 1562 return l2cap_send_classic_signaling_packet(con_handle, ECHO_REQUEST, l2cap_next_sig_id(), len, data); 1563 } 1564 1565 static inline void channelStateVarSetFlag(l2cap_channel_t *channel, uint16_t flag){ 1566 channel->state_var = channel->state_var | flag; 1567 } 1568 1569 static inline void channelStateVarClearFlag(l2cap_channel_t *channel, uint16_t flag){ 1570 channel->state_var = channel->state_var & ~flag; 1571 } 1572 #endif 1573 1574 1575 #ifdef ENABLE_BLE 1576 static int l2cap_send_le_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, int identifier, ...){ 1577 va_list argptr; 1578 va_start(argptr, identifier); 1579 uint8_t pb_flags = 0x00; // First non-automatically-flushable packet of a higher layer message 1580 uint8_t result = l2cap_send_signaling_packet(handle, pb_flags, L2CAP_CID_SIGNALING_LE, cmd, identifier, argptr); 1581 va_end(argptr); 1582 return result; 1583 } 1584 #endif 1585 1586 uint16_t l2cap_max_mtu(void){ 1587 return HCI_ACL_PAYLOAD_SIZE - L2CAP_HEADER_SIZE; 1588 } 1589 1590 #ifdef ENABLE_BLE 1591 uint16_t l2cap_max_le_mtu(void){ 1592 if (l2cap_le_custom_max_mtu != 0u) return l2cap_le_custom_max_mtu; 1593 return l2cap_max_mtu(); 1594 } 1595 1596 void l2cap_set_max_le_mtu(uint16_t max_mtu){ 1597 if (max_mtu < l2cap_max_mtu()){ 1598 l2cap_le_custom_max_mtu = max_mtu; 1599 } 1600 } 1601 #endif 1602 1603 #ifdef ENABLE_CLASSIC 1604 1605 static uint16_t l2cap_setup_options_mtu(uint8_t * config_options, uint16_t mtu){ 1606 config_options[0] = L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT; // MTU 1607 config_options[1] = 2; // len param 1608 little_endian_store_16(config_options, 2, mtu); 1609 return 4; 1610 } 1611 1612 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1613 static int l2cap_ertm_mode(l2cap_channel_t * channel){ 1614 hci_connection_t * connection = hci_connection_for_handle(channel->con_handle); 1615 return ((connection->l2cap_state.information_state == L2CAP_INFORMATION_STATE_DONE) 1616 && (connection->l2cap_state.extended_feature_mask & 0x08)); 1617 } 1618 #endif 1619 1620 static uint16_t l2cap_setup_options_request(l2cap_channel_t * channel, uint8_t * config_options){ 1621 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1622 // use ERTM options if supported by remote and channel ready to use it 1623 if (l2cap_ertm_mode(channel) && channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1624 return l2cap_setup_options_ertm_request(channel, config_options); 1625 } 1626 #endif 1627 uint16_t mtu = channel->local_mtu; 1628 return l2cap_setup_options_mtu(config_options, mtu); 1629 } 1630 1631 static uint16_t l2cap_setup_options_mtu_response(l2cap_channel_t * channel, uint8_t * config_options){ 1632 uint16_t mtu = btstack_min(channel->local_mtu, channel->remote_mtu); 1633 return l2cap_setup_options_mtu(config_options, mtu); 1634 } 1635 1636 static uint32_t l2cap_extended_features_mask(void){ 1637 // extended features request supported, features: fixed channels, unicast connectionless data reception 1638 uint32_t features = 0x280; 1639 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1640 features |= 0x0028; 1641 #endif 1642 return features; 1643 } 1644 #endif 1645 1646 // 1647 #ifdef ENABLE_CLASSIC 1648 1649 // returns true if channel was finalized 1650 static bool l2cap_run_for_classic_channel(l2cap_channel_t * channel){ 1651 1652 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1653 uint8_t config_options[18]; 1654 #else 1655 uint8_t config_options[10]; 1656 #endif 1657 1658 switch (channel->state){ 1659 1660 case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE: 1661 case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT: 1662 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1663 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND) { 1664 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND); 1665 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONN_RESP_PEND); 1666 l2cap_send_classic_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, 1667 channel->local_cid, channel->remote_cid, 1, 0); 1668 } 1669 break; 1670 1671 case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION: 1672 if (!hci_can_send_command_packet_now()) break; 1673 // send connection request - set state first 1674 channel->state = L2CAP_STATE_WAIT_CONNECTION_COMPLETE; 1675 // BD_ADDR, Packet_Type, Page_Scan_Repetition_Mode, Reserved, Clock_Offset, Allow_Role_Switch 1676 (void)memcpy(l2cap_outgoing_classic_addr, channel->address, 6); 1677 hci_send_cmd(&hci_create_connection, channel->address, hci_usable_acl_packet_types(), 0, 0, 0, hci_get_allow_role_switch()); 1678 break; 1679 1680 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE: 1681 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1682 channel->state = L2CAP_STATE_INVALID; 1683 l2cap_send_classic_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, 1684 channel->local_cid, channel->remote_cid, channel->reason, 0); 1685 // discard channel - l2cap_finialize_channel_close without sending l2cap close event 1686 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 1687 l2cap_free_channel_entry(channel); 1688 channel = NULL; 1689 break; 1690 1691 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT: 1692 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1693 channel->state = L2CAP_STATE_CONFIG; 1694 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); 1695 l2cap_send_classic_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, 1696 channel->local_cid, channel->remote_cid, 0, 0); 1697 break; 1698 1699 case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST: 1700 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1701 // success, start l2cap handshake 1702 channel->local_sig_id = l2cap_next_sig_id(); 1703 channel->state = L2CAP_STATE_WAIT_CONNECT_RSP; 1704 l2cap_send_classic_signaling_packet(channel->con_handle, CONNECTION_REQUEST, channel->local_sig_id, 1705 channel->psm, channel->local_cid); 1706 l2cap_start_rtx(channel); 1707 break; 1708 1709 case L2CAP_STATE_CONFIG: 1710 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1711 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1712 // fallback to basic mode if ERTM requested but not not supported by remote 1713 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1714 if (!l2cap_ertm_mode(channel)){ 1715 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 1716 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 1717 } 1718 } 1719 #endif 1720 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP){ 1721 uint16_t flags = 0; 1722 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP); 1723 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT) { 1724 flags = 1; 1725 } else { 1726 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP); 1727 } 1728 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID){ 1729 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP); 1730 l2cap_send_classic_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, 1731 channel->remote_cid, flags, L2CAP_CONF_RESULT_UNKNOWN_OPTIONS, 1732 1, &channel->unknown_option); 1733 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1734 } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED){ 1735 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED); 1736 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP); 1737 uint16_t options_size = l2cap_setup_options_ertm_response(channel, config_options); 1738 l2cap_send_classic_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, 1739 channel->remote_cid, flags, 1740 L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS, options_size, 1741 &config_options); 1742 } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM){ 1743 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM); 1744 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU); 1745 uint16_t options_size = l2cap_setup_options_ertm_response(channel, config_options); 1746 l2cap_send_classic_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, 1747 channel->remote_cid, flags, L2CAP_CONF_RESULT_SUCCESS, 1748 options_size, &config_options); 1749 #endif 1750 } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU){ 1751 channelStateVarClearFlag(channel,L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU); 1752 uint16_t options_size = l2cap_setup_options_mtu_response(channel, config_options); 1753 l2cap_send_classic_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, 1754 channel->remote_cid, flags, L2CAP_CONF_RESULT_SUCCESS, 1755 options_size, &config_options); 1756 } else { 1757 l2cap_send_classic_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, 1758 channel->remote_cid, flags, L2CAP_CONF_RESULT_SUCCESS, 0, NULL); 1759 } 1760 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT); 1761 } 1762 else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ){ 1763 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); 1764 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_REQ); 1765 channel->local_sig_id = l2cap_next_sig_id(); 1766 uint16_t options_size = l2cap_setup_options_request(channel, config_options); 1767 l2cap_send_classic_signaling_packet(channel->con_handle, CONFIGURE_REQUEST, channel->local_sig_id, 1768 channel->remote_cid, 0, options_size, &config_options); 1769 l2cap_start_rtx(channel); 1770 } 1771 if (l2cap_channel_ready_for_open(channel)){ 1772 channel->state = L2CAP_STATE_OPEN; 1773 l2cap_emit_channel_opened(channel, 0); // success 1774 } 1775 break; 1776 1777 case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE: 1778 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1779 channel->state = L2CAP_STATE_INVALID; 1780 l2cap_send_classic_signaling_packet(channel->con_handle, DISCONNECTION_RESPONSE, channel->remote_sig_id, 1781 channel->local_cid, channel->remote_cid); 1782 // we don't start an RTX timer for a disconnect - there's no point in closing the channel if the other side doesn't respond :) 1783 l2cap_finalize_channel_close(channel); // -- remove from list 1784 channel = NULL; 1785 break; 1786 1787 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 1788 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1789 channel->local_sig_id = l2cap_next_sig_id(); 1790 channel->state = L2CAP_STATE_WAIT_DISCONNECT; 1791 l2cap_send_classic_signaling_packet(channel->con_handle, DISCONNECTION_REQUEST, channel->local_sig_id, 1792 channel->remote_cid, channel->local_cid); 1793 break; 1794 default: 1795 break; 1796 } 1797 1798 // handle channel finalize on L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE and L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE 1799 return channel == NULL; 1800 } 1801 1802 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1803 static void l2cap_run_for_classic_channel_ertm(l2cap_channel_t * channel){ 1804 1805 // ERTM mode 1806 if (channel->mode != L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) return; 1807 1808 // check if we can still send 1809 if (channel->con_handle == HCI_CON_HANDLE_INVALID) return; 1810 if (!hci_can_send_acl_packet_now(channel->con_handle)) return; 1811 1812 if (channel->send_supervisor_frame_receiver_ready){ 1813 channel->send_supervisor_frame_receiver_ready = 0; 1814 log_info("Send S-Frame: RR %u, final %u", channel->req_seq, channel->set_final_bit_after_packet_with_poll_bit_set); 1815 uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY, 0, channel->set_final_bit_after_packet_with_poll_bit_set, channel->req_seq); 1816 channel->set_final_bit_after_packet_with_poll_bit_set = 0; 1817 l2cap_ertm_send_supervisor_frame(channel, control); 1818 return; 1819 } 1820 if (channel->send_supervisor_frame_receiver_ready_poll){ 1821 channel->send_supervisor_frame_receiver_ready_poll = 0; 1822 log_info("Send S-Frame: RR %u with poll=1 ", channel->req_seq); 1823 uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY, 1, 0, channel->req_seq); 1824 l2cap_ertm_send_supervisor_frame(channel, control); 1825 return; 1826 } 1827 if (channel->send_supervisor_frame_receiver_not_ready){ 1828 channel->send_supervisor_frame_receiver_not_ready = 0; 1829 log_info("Send S-Frame: RNR %u", channel->req_seq); 1830 uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY, 0, 0, channel->req_seq); 1831 l2cap_ertm_send_supervisor_frame(channel, control); 1832 return; 1833 } 1834 if (channel->send_supervisor_frame_reject){ 1835 channel->send_supervisor_frame_reject = 0; 1836 log_info("Send S-Frame: REJ %u", channel->req_seq); 1837 uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT, 0, 0, channel->req_seq); 1838 l2cap_ertm_send_supervisor_frame(channel, control); 1839 return; 1840 } 1841 if (channel->send_supervisor_frame_selective_reject){ 1842 channel->send_supervisor_frame_selective_reject = 0; 1843 log_info("Send S-Frame: SREJ %u", channel->expected_tx_seq); 1844 uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT, 0, channel->set_final_bit_after_packet_with_poll_bit_set, channel->expected_tx_seq); 1845 channel->set_final_bit_after_packet_with_poll_bit_set = 0; 1846 l2cap_ertm_send_supervisor_frame(channel, control); 1847 return; 1848 } 1849 1850 if (channel->srej_active){ 1851 int i; 1852 for (i=0;i<channel->num_tx_buffers;i++){ 1853 l2cap_ertm_tx_packet_state_t * tx_state = &channel->tx_packets_state[i]; 1854 if (tx_state->retransmission_requested) { 1855 tx_state->retransmission_requested = 0; 1856 uint8_t final = channel->set_final_bit_after_packet_with_poll_bit_set; 1857 channel->set_final_bit_after_packet_with_poll_bit_set = 0; 1858 l2cap_ertm_send_information_frame(channel, i, final); 1859 break; 1860 } 1861 } 1862 if (i == channel->num_tx_buffers){ 1863 // no retransmission request found 1864 channel->srej_active = 0; 1865 } else { 1866 // packet was sent 1867 return; 1868 } 1869 } 1870 } 1871 #endif /* ERTM */ 1872 #endif /* Classic */ 1873 1874 static void l2cap_run_signaling_response(void) { 1875 1876 // check pending signaling responses 1877 while (l2cap_signaling_responses_pending){ 1878 1879 hci_con_handle_t handle = l2cap_signaling_responses[0].handle; 1880 1881 if (!hci_can_send_acl_packet_now(handle)) break; 1882 1883 uint8_t sig_id = l2cap_signaling_responses[0].sig_id; 1884 uint8_t response_code = l2cap_signaling_responses[0].code; 1885 uint16_t result = l2cap_signaling_responses[0].data; // CONNECTION_REQUEST, COMMAND_REJECT, REJECT_SM_PAIRING, L2CAP_CREDIT_BASED_CONNECTION_REQUEST 1886 uint8_t buffer[4]; // REJECT_SM_PAIRING, CONFIGURE_REQUEST 1887 uint16_t source_cid = l2cap_signaling_responses[0].cid; // CONNECTION_REQUEST, REJECT_SM_PAIRING, DISCONNECT_REQUEST, CONFIGURE_REQUEST, DISCONNECT_REQUEST 1888 uint16_t dest_cid = l2cap_signaling_responses[0].data; // DISCONNECT_REQUEST 1889 #ifdef ENABLE_CLASSIC 1890 uint16_t info_type = l2cap_signaling_responses[0].data; // INFORMATION_REQUEST 1891 #endif 1892 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1893 uint8_t num_channels = l2cap_signaling_responses[0].cid >> 8; // L2CAP_CREDIT_BASED_CONNECTION_REQUEST 1894 uint16_t signaling_cid = (uint16_t) l2cap_signaling_responses[0].cid & 0xff; // L2CAP_CREDIT_BASED_CONNECTION_REQUEST, L2CAP_CREDIT_BASED_CONNECTION_REQUEST 1895 #endif 1896 1897 // remove first item before sending (to avoid sending response mutliple times) 1898 l2cap_signaling_responses_pending--; 1899 int i; 1900 for (i=0; i < l2cap_signaling_responses_pending; i++){ 1901 (void)memcpy(&l2cap_signaling_responses[i], 1902 &l2cap_signaling_responses[i + 1], 1903 sizeof(l2cap_signaling_response_t)); 1904 } 1905 1906 switch (response_code){ 1907 #ifdef ENABLE_CLASSIC 1908 case CONNECTION_REQUEST: 1909 l2cap_send_classic_signaling_packet(handle, CONNECTION_RESPONSE, sig_id, source_cid, 0, result, 0); 1910 break; 1911 case CONFIGURE_REQUEST: 1912 little_endian_store_16(buffer, 0, source_cid); 1913 little_endian_store_16(buffer, 2, 0); 1914 l2cap_send_classic_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 4, buffer); 1915 break; 1916 case DISCONNECTION_RESPONSE: 1917 l2cap_send_classic_signaling_packet(handle, DISCONNECTION_RESPONSE, sig_id, dest_cid, source_cid); 1918 break; 1919 case ECHO_REQUEST: 1920 l2cap_send_classic_signaling_packet(handle, ECHO_RESPONSE, sig_id, 0, NULL); 1921 break; 1922 case INFORMATION_REQUEST: 1923 switch (info_type){ 1924 case L2CAP_INFO_TYPE_CONNECTIONLESS_MTU: { 1925 uint16_t connectionless_mtu = hci_max_acl_data_packet_length(); 1926 l2cap_send_classic_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, 1927 sizeof(connectionless_mtu), &connectionless_mtu); 1928 } 1929 break; 1930 case L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED: { 1931 uint32_t features = l2cap_extended_features_mask(); 1932 l2cap_send_classic_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, 1933 sizeof(features), &features); 1934 } 1935 break; 1936 case L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED: { 1937 uint8_t map[8]; 1938 memset(map, 0, 8); 1939 // L2CAP Signaling Channel + Connectionless reception 1940 map[0] = (1 << L2CAP_CID_SIGNALING) | (1 << L2CAP_CID_CONNECTIONLESS_CHANNEL); 1941 #if defined (ENABLE_EXPLICIT_BR_EDR_SECURITY_MANAGER) || (defined(ENABLE_BLE) && defined(ENABLE_CROSS_TRANSPORT_KEY_DERIVATION)) 1942 // BR/EDR Security Manager (bit 7) if BR/EDR Secure Connections possible 1943 if (gap_secure_connections_active()){ 1944 map[0] |= (1 << L2CAP_CID_BR_EDR_SECURITY_MANAGER); 1945 } 1946 #endif 1947 l2cap_send_classic_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, 1948 sizeof(map), &map); 1949 } 1950 break; 1951 default: 1952 // all other types are not supported 1953 l2cap_send_classic_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 1, 0, NULL); 1954 break; 1955 } 1956 break; 1957 case COMMAND_REJECT: 1958 l2cap_send_classic_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL); 1959 break; 1960 #endif 1961 #ifdef ENABLE_BLE 1962 case LE_CREDIT_BASED_CONNECTION_REQUEST: 1963 l2cap_send_le_signaling_packet(handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, sig_id, 0, 0, 0, 0, result); 1964 break; 1965 case DISCONNECTION_REQUEST: 1966 // Invalid CID, local cid, remote cid 1967 little_endian_store_16(buffer, 0, result); 1968 little_endian_store_16(buffer, 2, source_cid); 1969 l2cap_send_le_signaling_packet(handle, COMMAND_REJECT, sig_id, 0x0002, 4, buffer); 1970 break; 1971 case COMMAND_REJECT_LE: 1972 l2cap_send_le_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL); 1973 break; 1974 #endif 1975 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1976 case L2CAP_CREDIT_BASED_CONNECTION_REQUEST: { 1977 // send variable size array or cids with each cid being zero 1978 uint16_t cids[6]; 1979 (void) memset(cids, 0xff, sizeof(cids)); 1980 (void) memset(cids, 0x00, num_channels * sizeof(uint16_t)); 1981 l2cap_send_general_signaling_packet(handle, signaling_cid, L2CAP_CREDIT_BASED_CONNECTION_RESPONSE, 1982 sig_id, 0, 0, 0, result, cids); 1983 break; 1984 } 1985 1986 case L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST: 1987 l2cap_send_general_signaling_packet(handle, signaling_cid, L2CAP_CREDIT_BASED_RECONFIGURE_RESPONSE, 1988 sig_id, result); 1989 break; 1990 #endif 1991 case SM_PAIRING_FAILED: 1992 buffer[0] = SM_CODE_PAIRING_FAILED; 1993 buffer[1] = (uint8_t) result; 1994 l2cap_send_connectionless(handle, source_cid, buffer, 2); 1995 break; 1996 default: 1997 // should not happen 1998 break; 1999 } 2000 } 2001 } 2002 2003 #ifdef ENABLE_CLASSIC 2004 static bool l2ap_run_information_requests(void){ 2005 // send l2cap information request if requested 2006 btstack_linked_list_iterator_t it; 2007 hci_connections_get_iterator(&it); 2008 uint8_t info_type; 2009 l2cap_information_state_t new_state; 2010 while(btstack_linked_list_iterator_has_next(&it)){ 2011 hci_connection_t * connection = (hci_connection_t *) btstack_linked_list_iterator_next(&it); 2012 switch (connection->l2cap_state.information_state){ 2013 case L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST: 2014 info_type = L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED; 2015 new_state = L2CAP_INFORMATION_STATE_W4_EXTENDED_FEATURE_RESPONSE; 2016 break; 2017 case L2CAP_INFORMATION_STATE_W2_SEND_FIXED_CHANNELS_REQUEST: 2018 info_type = L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED; 2019 new_state = L2CAP_INFORMATION_STATE_W4_FIXED_CHANNELS_RESPONSE; 2020 break; 2021 default: 2022 continue; 2023 } 2024 if (!hci_can_send_acl_packet_now(connection->con_handle)) break; 2025 2026 connection->l2cap_state.information_state = new_state; 2027 uint8_t sig_id = l2cap_next_sig_id(); 2028 l2cap_send_classic_signaling_packet(connection->con_handle, INFORMATION_REQUEST, sig_id, info_type); 2029 } 2030 return false; 2031 } 2032 #endif 2033 2034 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2035 // returns true if channel has been closed 2036 static bool l2cap_cbm_run_channel(l2cap_channel_t * channel) { 2037 uint16_t mps; 2038 bool channel_closed = false; 2039 // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var); 2040 switch (channel->state){ 2041 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST: 2042 channel->state = L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE; 2043 // le psm, source cid, mtu, mps, initial credits 2044 channel->local_sig_id = l2cap_next_sig_id(); 2045 channel->credits_incoming = channel->new_credits_incoming; 2046 channel->new_credits_incoming = 0; 2047 channel->local_mps = btstack_min(l2cap_max_le_mtu(), channel->local_mtu); 2048 l2cap_send_le_signaling_packet( channel->con_handle, LE_CREDIT_BASED_CONNECTION_REQUEST, 2049 channel->local_sig_id, channel->psm, channel->local_cid, channel->local_mtu, 2050 channel->local_mps, channel->credits_incoming); 2051 break; 2052 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT: 2053 // TODO: support larger MPS 2054 channel->state = L2CAP_STATE_OPEN; 2055 channel->credits_incoming = channel->new_credits_incoming; 2056 channel->new_credits_incoming = 0; 2057 mps = btstack_min(l2cap_max_le_mtu(), channel->local_mtu); 2058 l2cap_send_le_signaling_packet(channel->con_handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->local_mtu, mps, channel->credits_incoming, 0); 2059 // notify client 2060 l2cap_cbm_emit_channel_opened(channel, ERROR_CODE_SUCCESS); 2061 break; 2062 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE: 2063 channel->state = L2CAP_STATE_INVALID; 2064 l2cap_send_le_signaling_packet(channel->con_handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, channel->remote_sig_id, 0, 0, 0, 0, channel->reason); 2065 channel_closed = true; 2066 break; 2067 case L2CAP_STATE_OPEN: 2068 if (channel->new_credits_incoming){ 2069 l2cap_credit_based_send_credits(channel); 2070 } 2071 break; 2072 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 2073 channel->local_sig_id = l2cap_next_sig_id(); 2074 channel->state = L2CAP_STATE_WAIT_DISCONNECT; 2075 l2cap_send_le_signaling_packet( channel->con_handle, DISCONNECTION_REQUEST, channel->local_sig_id, channel->remote_cid, channel->local_cid); 2076 break; 2077 case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE: 2078 channel->state = L2CAP_STATE_INVALID; 2079 l2cap_send_le_signaling_packet( channel->con_handle, DISCONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid); 2080 l2cap_cbm_finialize_channel_close(channel); // -- remove from list 2081 break; 2082 default: 2083 break; 2084 } 2085 return channel_closed; 2086 } 2087 2088 static void l2cap_cbm_run_channels(void){ 2089 btstack_linked_list_iterator_t it; 2090 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2091 while (btstack_linked_list_iterator_has_next(&it)){ 2092 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2093 2094 if (channel->channel_type != L2CAP_CHANNEL_TYPE_CHANNEL_CBM) continue; 2095 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2096 2097 bool channel_closed = l2cap_cbm_run_channel(channel); 2098 if (channel_closed) { 2099 // discard channel - l2cap_finialize_channel_close without sending l2cap close event 2100 btstack_linked_list_iterator_remove(&it); 2101 l2cap_free_channel_entry(channel); 2102 } 2103 } 2104 } 2105 2106 static inline uint8_t l2cap_cbm_status_for_result(uint16_t result) { 2107 switch (result) { 2108 case L2CAP_CBM_CONNECTION_RESULT_SUCCESS: 2109 return ERROR_CODE_SUCCESS; 2110 case L2CAP_CBM_CONNECTION_RESULT_SPSM_NOT_SUPPORTED: 2111 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_PSM; 2112 case L2CAP_CBM_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE: 2113 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_RESOURCES; 2114 case L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_AUTHENTICATION: 2115 case L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_AUTHORIZATION: 2116 case L2CAP_CBM_CONNECTION_RESULT_ENCYRPTION_KEY_SIZE_TOO_SHORT: 2117 case L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_ENCRYPTION: 2118 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY; 2119 default: 2120 // invalid Source CID, Source CID already allocated, unacceptable parameters 2121 return L2CAP_CONNECTION_RESPONSE_UNKNOWN_ERROR; 2122 } 2123 } 2124 2125 #endif 2126 2127 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2128 2129 static void l2cap_run_trigger_callback(void * context){ 2130 UNUSED(context); 2131 l2cap_run(); 2132 } 2133 2134 static void l2cap_run_trigger(void){ 2135 btstack_run_loop_execute_on_main_thread(&l2cap_trigger_run_registration); 2136 } 2137 2138 // 11BH22222 2139 static void l2cap_ecbm_emit_channel_opened(l2cap_channel_t *channel, uint8_t status) { 2140 log_info("opened ecbm channel status 0x%x addr_type %u addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x local_mtu %u, remote_mtu %u", 2141 status, channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm, 2142 channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu); 2143 uint8_t event[23]; 2144 event[0] = L2CAP_EVENT_ECBM_CHANNEL_OPENED; 2145 event[1] = sizeof(event) - 2u; 2146 event[2] = status; 2147 event[3] = channel->address_type; 2148 reverse_bd_addr(channel->address, &event[4]); 2149 little_endian_store_16(event, 10, channel->con_handle); 2150 event[12] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0; 2151 little_endian_store_16(event, 13, channel->psm); 2152 little_endian_store_16(event, 15, channel->local_cid); 2153 little_endian_store_16(event, 17, channel->remote_cid); 2154 little_endian_store_16(event, 19, channel->local_mtu); 2155 little_endian_store_16(event, 21, channel->remote_mtu); 2156 hci_dump_packet(HCI_EVENT_PACKET, 1, event, sizeof(event)); 2157 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 2158 } 2159 2160 static void l2cap_ecbm_emit_reconfigure_complete(l2cap_channel_t *channel, uint16_t result) { 2161 // emit event 2162 uint8_t event[6]; 2163 event[0] = L2CAP_EVENT_ECBM_RECONFIGURATION_COMPLETE; 2164 event[1] = sizeof(event) - 2; 2165 little_endian_store_16(event, 2, channel->local_cid); 2166 little_endian_store_16(event, 4, result); 2167 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 2168 } 2169 2170 static void l2cap_ecbm_run_channels(void) { 2171 hci_con_handle_t con_handle = HCI_CON_HANDLE_INVALID; 2172 // num max channels + 1 for signaling pdu generator 2173 uint16_t cids[L2CAP_ECBM_MAX_CID_ARRAY_SIZE + 1]; 2174 uint8_t num_cids = 0; 2175 uint8_t sig_id; 2176 uint16_t spsm; 2177 L2CAP_STATE matching_state; 2178 bool match_remote_sig_cid; 2179 uint8_t result = 0; 2180 uint16_t local_mtu; 2181 uint16_t initial_credits; 2182 uint16_t signaling_cid; 2183 L2CAP_STATE new_state; 2184 uint16_t local_mps; 2185 2186 // pick first channel that needs to send a combined signaling pdu and setup collection via break 2187 // then collect all others that belong to the same pdu 2188 btstack_linked_list_iterator_t it; 2189 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2190 while (btstack_linked_list_iterator_has_next(&it)) { 2191 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2192 if (channel->channel_type != L2CAP_CHANNEL_TYPE_CHANNEL_ECBM) continue; 2193 if (con_handle == HCI_CON_HANDLE_INVALID) { 2194 switch (channel->state) { 2195 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_REQUEST: 2196 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2197 local_mtu = channel->local_mtu; 2198 local_mps = channel->local_mps; 2199 spsm = channel->psm; 2200 result = channel->reason; 2201 initial_credits = channel->credits_incoming; 2202 sig_id = channel->local_sig_id; 2203 new_state = L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE; 2204 match_remote_sig_cid = false; 2205 break; 2206 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE: 2207 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2208 local_mtu = channel->local_mtu; 2209 local_mps = channel->local_mps; 2210 initial_credits = channel->credits_incoming; 2211 sig_id = channel->remote_sig_id; 2212 new_state = L2CAP_STATE_OPEN; 2213 match_remote_sig_cid = true; 2214 break; 2215 case L2CAP_STATE_WILL_SEND_EHNANCED_RENEGOTIATION_REQUEST: 2216 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2217 sig_id = channel->local_sig_id; 2218 local_mtu = channel->renegotiate_mtu; 2219 local_mps = channel->local_mps; 2220 new_state = L2CAP_STATE_WAIT_ENHANCED_RENEGOTIATION_RESPONSE; 2221 match_remote_sig_cid = false; 2222 break; 2223 case L2CAP_STATE_OPEN: 2224 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2225 if (channel->new_credits_incoming) { 2226 l2cap_credit_based_send_credits(channel); 2227 } 2228 continue; 2229 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 2230 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2231 channel->local_sig_id = l2cap_next_sig_id(); 2232 channel->state = L2CAP_STATE_WAIT_DISCONNECT; 2233 signaling_cid = channel->address_type == BD_ADDR_TYPE_ACL ? L2CAP_CID_SIGNALING : L2CAP_CID_SIGNALING_LE; 2234 l2cap_send_general_signaling_packet(channel->con_handle, signaling_cid, DISCONNECTION_REQUEST, 2235 channel->local_sig_id, channel->remote_cid, channel->local_cid); 2236 continue; 2237 case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE: 2238 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2239 channel->state = L2CAP_STATE_INVALID; 2240 signaling_cid = channel->address_type == BD_ADDR_TYPE_ACL ? L2CAP_CID_SIGNALING : L2CAP_CID_SIGNALING_LE; 2241 l2cap_send_general_signaling_packet(channel->con_handle, signaling_cid, DISCONNECTION_RESPONSE, 2242 channel->remote_sig_id, channel->local_cid, 2243 channel->remote_cid); 2244 l2cap_cbm_finialize_channel_close(channel); // -- remove from list 2245 continue; 2246 default: 2247 continue; 2248 } 2249 2250 // channel picked - setup cid array and collect info 2251 (void) memset(cids, 0xff, sizeof(cids)); 2252 (void) memset(cids, 0, channel->num_cids * sizeof(uint16_t)); 2253 matching_state = channel->state; 2254 con_handle = channel->con_handle; 2255 signaling_cid = channel->address_type == BD_ADDR_TYPE_ACL ? L2CAP_CID_SIGNALING : L2CAP_CID_SIGNALING_LE; 2256 num_cids = channel->num_cids; 2257 2258 } else { 2259 // check if it matches first channel by state, con_handle, and signaling id 2260 if (matching_state != channel->state) continue; 2261 if (channel->con_handle != con_handle) continue; 2262 if (match_remote_sig_cid) { 2263 if (channel->remote_sig_id != sig_id) continue; 2264 } else { 2265 if (channel->local_sig_id != sig_id) continue; 2266 } 2267 } 2268 2269 // add this cid 2270 cids[channel->cid_index] = channel->local_cid; 2271 2272 // set new state 2273 channel->state = new_state; 2274 2275 // handle open for L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE 2276 if (matching_state == L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE) { 2277 if (channel->reason == L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS) { 2278 l2cap_ecbm_emit_channel_opened(channel, ERROR_CODE_SUCCESS); 2279 } else { 2280 result = channel->reason; 2281 btstack_linked_list_iterator_remove(&it); 2282 btstack_memory_l2cap_channel_free(channel); 2283 } 2284 } 2285 } 2286 2287 if (con_handle != HCI_CON_HANDLE_INVALID) { 2288 switch (matching_state) { 2289 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_REQUEST: 2290 log_info("send combined connection request for %u cids", num_cids); 2291 l2cap_send_general_signaling_packet(con_handle, signaling_cid, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, 2292 sig_id, spsm, local_mtu, local_mps, initial_credits, cids); 2293 break; 2294 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE: 2295 log_info("send combined connection response for %u cids", num_cids); 2296 l2cap_send_general_signaling_packet(con_handle, signaling_cid, L2CAP_CREDIT_BASED_CONNECTION_RESPONSE, 2297 sig_id, local_mtu, local_mps, initial_credits, result, cids); 2298 break; 2299 case L2CAP_STATE_WILL_SEND_EHNANCED_RENEGOTIATION_REQUEST: 2300 log_info("send combined renegotiation request for %u cids", num_cids); 2301 l2cap_send_general_signaling_packet(con_handle, signaling_cid, L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST, 2302 sig_id, local_mtu, local_mps, cids); 2303 break; 2304 default: 2305 break; 2306 } 2307 } 2308 } 2309 #endif 2310 2311 // MARK: L2CAP_RUN 2312 // process outstanding signaling tasks 2313 static void l2cap_run(void){ 2314 2315 // log_info("l2cap_run: entered"); 2316 l2cap_run_signaling_response(); 2317 2318 #ifdef ENABLE_CLASSIC 2319 bool done = l2ap_run_information_requests(); 2320 if (done) return; 2321 #endif 2322 2323 #if defined(ENABLE_CLASSIC) || defined(ENABLE_BLE) 2324 btstack_linked_list_iterator_t it; 2325 #endif 2326 2327 #ifdef ENABLE_CLASSIC 2328 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2329 while (btstack_linked_list_iterator_has_next(&it)){ 2330 2331 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2332 2333 if (channel->channel_type != L2CAP_CHANNEL_TYPE_CLASSIC) continue; 2334 2335 // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var); 2336 bool finalized = l2cap_run_for_classic_channel(channel); 2337 2338 if (!finalized) { 2339 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2340 l2cap_run_for_classic_channel_ertm(channel); 2341 #endif 2342 } 2343 } 2344 #endif 2345 2346 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2347 l2cap_cbm_run_channels(); 2348 #endif 2349 2350 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2351 l2cap_ecbm_run_channels(); 2352 #endif 2353 2354 #ifdef ENABLE_BLE 2355 // send l2cap con paramter update if necessary 2356 hci_connections_get_iterator(&it); 2357 while(btstack_linked_list_iterator_has_next(&it)){ 2358 hci_connection_t * connection = (hci_connection_t *) btstack_linked_list_iterator_next(&it); 2359 if (!hci_is_le_connection_type(connection->address_type)) continue; 2360 if (!hci_can_send_acl_packet_now(connection->con_handle)) continue; 2361 switch (connection->le_con_parameter_update_state){ 2362 case CON_PARAMETER_UPDATE_SEND_REQUEST: 2363 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE; 2364 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_REQUEST, l2cap_next_sig_id(), 2365 connection->le_conn_interval_min, connection->le_conn_interval_max, connection->le_conn_latency, connection->le_supervision_timeout); 2366 break; 2367 case CON_PARAMETER_UPDATE_SEND_RESPONSE: 2368 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_CHANGE_HCI_CON_PARAMETERS; 2369 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 0); 2370 break; 2371 case CON_PARAMETER_UPDATE_DENY: 2372 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE; 2373 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 1); 2374 break; 2375 default: 2376 break; 2377 } 2378 } 2379 #endif 2380 2381 if (l2cap_call_notify_channel_in_run){ 2382 l2cap_call_notify_channel_in_run = false; 2383 l2cap_notify_channel_can_send(); 2384 } 2385 2386 // log_info("l2cap_run: exit"); 2387 } 2388 2389 #ifdef ENABLE_CLASSIC 2390 static void l2cap_ready_to_connect(l2cap_channel_t * channel){ 2391 2392 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2393 // assumption: outgoing connection 2394 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 2395 // ERTM requested: trigger information request if not already started then wait for response 2396 hci_connection_t * connection = hci_connection_for_handle(channel->con_handle); 2397 switch (connection->l2cap_state.information_state){ 2398 case L2CAP_INFORMATION_STATE_DONE: 2399 break; 2400 case L2CAP_INFORMATION_STATE_IDLE: 2401 connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST; 2402 /* fall through */ 2403 default: 2404 channel->state = L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES; 2405 return; 2406 } 2407 } 2408 #endif 2409 2410 // fine, go ahead 2411 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST; 2412 } 2413 2414 static void l2cap_handle_connection_complete(hci_con_handle_t con_handle, l2cap_channel_t * channel){ 2415 if ((channel->state == L2CAP_STATE_WAIT_CONNECTION_COMPLETE) || (channel->state == L2CAP_STATE_WILL_SEND_CREATE_CONNECTION)) { 2416 log_info("connection complete con_handle %04x - for channel %p cid 0x%04x", (int) con_handle, channel, channel->local_cid); 2417 channel->con_handle = con_handle; 2418 // query remote features if pairing is required 2419 if (channel->required_security_level > LEVEL_0){ 2420 channel->state = L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES; 2421 hci_remote_features_query(con_handle); 2422 } else { 2423 l2cap_ready_to_connect(channel); 2424 } 2425 } 2426 } 2427 2428 static void l2cap_handle_remote_supported_features_received(l2cap_channel_t * channel){ 2429 if (channel->state != L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES) return; 2430 2431 bool security_required = channel->required_security_level > LEVEL_0; 2432 2433 if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) != 0){ 2434 2435 // Core V5.2, Vol 3, Part C, 5.2.2.2 - Security Mode 4 2436 // When a remote device attempts to access a service offered by a Bluetooth device that is in security mode 4 2437 // and a sufficient link key exists and authentication has not been performed the local device shall authenticate 2438 // the remote device and enable encryption after the channel establishment request is received but before a channel 2439 // establishment confirmation (L2CAP_ConnectRsp with result code of 0x0000 or a higher-level channel establishment 2440 // confirmation such as that of RFCOMM) is sent. 2441 2442 // If the remote device has indicated support for Secure Simple Pairing, a channel establishment request is 2443 // received for a service other than SDP, and encryption has not yet been enabled, then the local device shall 2444 // disconnect the ACL link with error code 0x05 - Authentication Failure. 2445 2446 // => Disconnect if l2cap request received in mode 4 and ssp supported, non-sdp psm, not encrypted, no link key available 2447 if ((gap_get_security_mode() == GAP_SECURITY_MODE_4) 2448 && gap_ssp_supported_on_both_sides(channel->con_handle) 2449 && (channel->psm != PSM_SDP) 2450 && (gap_encryption_key_size(channel->con_handle) == 0)){ 2451 hci_disconnect_security_block(channel->con_handle); 2452 return; 2453 } 2454 2455 // incoming: assert security requirements 2456 channel->state = L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE; 2457 if (channel->required_security_level <= gap_security_level(channel->con_handle)){ 2458 l2cap_handle_security_level_incoming_sufficient(channel); 2459 } else { 2460 // send connection pending if not already done 2461 if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SENT_CONN_RESP_PEND) == 0){ 2462 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND; 2463 } 2464 gap_request_security_level(channel->con_handle, channel->required_security_level); 2465 } 2466 } else { 2467 // outgoing: we have been waiting for remote supported features 2468 if (security_required){ 2469 // request security level 2470 channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE; 2471 gap_request_security_level(channel->con_handle, channel->required_security_level); 2472 } else { 2473 l2cap_ready_to_connect(channel); 2474 } 2475 } 2476 } 2477 #endif 2478 2479 #ifdef L2CAP_USES_CHANNELS 2480 static l2cap_channel_t * l2cap_create_channel_entry(btstack_packet_handler_t packet_handler, l2cap_channel_type_t channel_type, bd_addr_t address, bd_addr_type_t address_type, 2481 uint16_t psm, uint16_t local_mtu, gap_security_level_t security_level){ 2482 2483 l2cap_channel_t * channel = btstack_memory_l2cap_channel_get(); 2484 if (!channel) { 2485 return NULL; 2486 } 2487 2488 // fill in 2489 channel->packet_handler = packet_handler; 2490 channel->channel_type = channel_type; 2491 bd_addr_copy(channel->address, address); 2492 channel->address_type = address_type; 2493 channel->psm = psm; 2494 channel->local_mtu = local_mtu; 2495 channel->remote_mtu = L2CAP_DEFAULT_MTU; 2496 channel->required_security_level = security_level; 2497 2498 // 2499 channel->local_cid = l2cap_next_local_cid(); 2500 channel->con_handle = HCI_CON_HANDLE_INVALID; 2501 2502 // set initial state 2503 channel->state = L2CAP_STATE_WILL_SEND_CREATE_CONNECTION; 2504 channel->state_var = L2CAP_CHANNEL_STATE_VAR_NONE; 2505 channel->remote_sig_id = L2CAP_SIG_ID_INVALID; 2506 channel->local_sig_id = L2CAP_SIG_ID_INVALID; 2507 2508 log_info("create channel %p, local_cid 0x%04x", channel, channel->local_cid); 2509 2510 return channel; 2511 } 2512 2513 static void l2cap_free_channel_entry(l2cap_channel_t * channel){ 2514 log_info("free channel %p, local_cid 0x%04x", channel, channel->local_cid); 2515 // assert all timers are stopped 2516 l2cap_stop_rtx(channel); 2517 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2518 l2cap_ertm_stop_retransmission_timer(channel); 2519 l2cap_ertm_stop_monitor_timer(channel); 2520 #endif 2521 // free memory 2522 btstack_memory_l2cap_channel_free(channel); 2523 } 2524 #endif 2525 2526 #ifdef ENABLE_CLASSIC 2527 2528 /** 2529 * @brief Creates L2CAP channel to the PSM of a remote device with baseband address. A new baseband connection will be initiated if necessary. 2530 * @param packet_handler 2531 * @param address 2532 * @param psm 2533 * @param mtu 2534 * @param local_cid 2535 */ 2536 2537 uint8_t l2cap_create_channel(btstack_packet_handler_t channel_packet_handler, bd_addr_t address, uint16_t psm, uint16_t mtu, uint16_t * out_local_cid){ 2538 // limit MTU to the size of our outgoing HCI buffer 2539 uint16_t local_mtu = btstack_min(mtu, l2cap_max_mtu()); 2540 2541 // determine security level based on psm 2542 const gap_security_level_t security_level = l2cap_security_level_0_allowed_for_PSM(psm) ? LEVEL_0 : gap_get_security_level(); 2543 log_info("create channel addr %s psm 0x%x mtu %u -> local mtu %u, sec level %u", bd_addr_to_str(address), psm, mtu, local_mtu, (int) security_level); 2544 2545 l2cap_channel_t * channel = l2cap_create_channel_entry(channel_packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, address, BD_ADDR_TYPE_ACL, psm, local_mtu, security_level); 2546 if (!channel) { 2547 return BTSTACK_MEMORY_ALLOC_FAILED; 2548 } 2549 2550 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2551 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 2552 #endif 2553 2554 // add to connections list 2555 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 2556 2557 // store local_cid 2558 if (out_local_cid){ 2559 *out_local_cid = channel->local_cid; 2560 } 2561 2562 // state: L2CAP_STATE_WILL_SEND_CREATE_CONNECTION 2563 2564 // check if hci connection is already usable, 2565 hci_connection_t * conn = hci_connection_for_bd_addr_and_type(address, BD_ADDR_TYPE_ACL); 2566 if (conn && conn->state == OPEN){ 2567 // simulate connection complete 2568 l2cap_handle_connection_complete(conn->con_handle, channel); 2569 2570 // state: L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES or L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST 2571 2572 // simulate if remote supported features if requested and already received 2573 if ((channel->state == L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES) && hci_remote_features_available(conn->con_handle)) { 2574 // simulate remote features received 2575 l2cap_handle_remote_supported_features_received(channel); 2576 } 2577 } 2578 2579 l2cap_run(); 2580 2581 return ERROR_CODE_SUCCESS; 2582 } 2583 2584 static void l2cap_handle_connection_failed_for_addr(bd_addr_t address, uint8_t status){ 2585 // mark all channels before emitting open events as these could trigger new connetion requests to the same device 2586 btstack_linked_list_iterator_t it; 2587 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2588 while (btstack_linked_list_iterator_has_next(&it)){ 2589 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2590 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2591 if (bd_addr_cmp( channel->address, address) != 0) continue; 2592 // channel for this address found 2593 switch (channel->state){ 2594 case L2CAP_STATE_WAIT_CONNECTION_COMPLETE: 2595 case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION: 2596 channel->state = L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD; 2597 break; 2598 default: 2599 break; 2600 } 2601 } 2602 // emit and free marked entries. restart loop to deal with list changes 2603 int done = 0; 2604 while (!done) { 2605 done = 1; 2606 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2607 while (btstack_linked_list_iterator_has_next(&it)){ 2608 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2609 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2610 if (channel->state == L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD){ 2611 done = 0; 2612 // failure, forward error code 2613 l2cap_handle_channel_open_failed(channel, status); 2614 // discard channel 2615 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 2616 l2cap_free_channel_entry(channel); 2617 break; 2618 } 2619 } 2620 } 2621 2622 } 2623 2624 static void l2cap_handle_connection_success_for_addr(bd_addr_t address, hci_con_handle_t handle){ 2625 btstack_linked_list_iterator_t it; 2626 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2627 while (btstack_linked_list_iterator_has_next(&it)){ 2628 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2629 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2630 if ( ! bd_addr_cmp( channel->address, address) ){ 2631 l2cap_handle_connection_complete(handle, channel); 2632 } 2633 } 2634 2635 #ifdef ENABLE_L2CAP_INFORMATION_REQUESTS_ON_CONNECT 2636 // trigger query of extended features and fixed channels right away (instead of later) 2637 hci_connection_t * hci_connection = hci_connection_for_handle(handle); 2638 btstack_assert(hci_connection != NULL); 2639 hci_connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST; 2640 #endif 2641 2642 // process 2643 l2cap_run(); 2644 } 2645 #endif 2646 2647 static bool l2cap_channel_ready_to_send(l2cap_channel_t * channel){ 2648 switch (channel->channel_type){ 2649 #ifdef ENABLE_CLASSIC 2650 case L2CAP_CHANNEL_TYPE_CLASSIC: 2651 if (channel->state != L2CAP_STATE_OPEN) return false; 2652 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2653 // send if we have more data and remote windows isn't full yet 2654 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) { 2655 if (channel->unacked_frames >= btstack_min(channel->num_stored_tx_frames, channel->remote_tx_window_size)) return false; 2656 return hci_can_send_acl_packet_now(channel->con_handle); 2657 } 2658 #endif 2659 if (!channel->waiting_for_can_send_now) return false; 2660 return hci_can_send_acl_packet_now(channel->con_handle); 2661 case L2CAP_CHANNEL_TYPE_FIXED_CLASSIC: 2662 case L2CAP_CHANNEL_TYPE_CONNECTIONLESS: 2663 if (!channel->waiting_for_can_send_now) return false; 2664 return hci_can_send_acl_classic_packet_now(); 2665 #endif 2666 #ifdef ENABLE_BLE 2667 case L2CAP_CHANNEL_TYPE_FIXED_LE: 2668 if (!channel->waiting_for_can_send_now) return false; 2669 return hci_can_send_acl_le_packet_now(); 2670 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2671 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 2672 if (channel->state != L2CAP_STATE_OPEN) return false; 2673 if (channel->send_sdu_buffer == NULL) return false; 2674 if (channel->credits_outgoing == 0u) return false; 2675 return hci_can_send_acl_packet_now(channel->con_handle); 2676 #endif 2677 #endif 2678 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2679 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 2680 if (channel->state != L2CAP_STATE_OPEN) return false; 2681 if (channel->send_sdu_buffer == NULL) return false; 2682 if (channel->credits_outgoing == 0u) return false; 2683 return hci_can_send_acl_packet_now(channel->con_handle); 2684 #endif 2685 default: 2686 return false; 2687 } 2688 } 2689 2690 static void l2cap_channel_trigger_send(l2cap_channel_t * channel){ 2691 switch (channel->channel_type){ 2692 #ifdef ENABLE_CLASSIC 2693 case L2CAP_CHANNEL_TYPE_CLASSIC: 2694 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2695 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) { 2696 l2cap_ertm_channel_send_information_frame(channel); 2697 return; 2698 } 2699 #endif 2700 channel->waiting_for_can_send_now = 0; 2701 l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid); 2702 break; 2703 case L2CAP_CHANNEL_TYPE_CONNECTIONLESS: 2704 case L2CAP_CHANNEL_TYPE_FIXED_CLASSIC: 2705 channel->waiting_for_can_send_now = 0; 2706 l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid); 2707 break; 2708 #endif 2709 #ifdef ENABLE_BLE 2710 case L2CAP_CHANNEL_TYPE_FIXED_LE: 2711 channel->waiting_for_can_send_now = 0; 2712 l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid); 2713 break; 2714 #endif 2715 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2716 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 2717 l2cap_credit_based_send_pdu(channel); 2718 break; 2719 #endif 2720 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2721 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 2722 l2cap_credit_based_send_pdu(channel); 2723 break; 2724 #endif 2725 default: 2726 btstack_unreachable(); 2727 break; 2728 } 2729 } 2730 2731 static void l2cap_notify_channel_can_send(void){ 2732 bool done = false; 2733 while (!done){ 2734 done = true; 2735 btstack_linked_list_iterator_t it; 2736 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2737 while (btstack_linked_list_iterator_has_next(&it)){ 2738 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2739 bool ready = l2cap_channel_ready_to_send(channel); 2740 if (!ready) continue; 2741 2742 // requeue channel for fairness 2743 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 2744 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 2745 2746 // trigger sending 2747 l2cap_channel_trigger_send(channel); 2748 2749 // exit inner loop as we just broke the iterator, but try again 2750 done = false; 2751 break; 2752 } 2753 } 2754 } 2755 2756 #ifdef L2CAP_USES_CHANNELS 2757 2758 uint8_t l2cap_disconnect(uint16_t local_cid){ 2759 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 2760 if (!channel) { 2761 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 2762 } 2763 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 2764 l2cap_run(); 2765 return ERROR_CODE_SUCCESS; 2766 } 2767 2768 static int l2cap_send_open_failed_on_hci_disconnect(l2cap_channel_t * channel){ 2769 // open cannot fail for for incoming connections 2770 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) return 0; 2771 2772 // check state 2773 switch (channel->state){ 2774 case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION: 2775 case L2CAP_STATE_WAIT_CONNECTION_COMPLETE: 2776 case L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES: 2777 case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE: 2778 case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT: 2779 case L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES: 2780 case L2CAP_STATE_WAIT_CONNECT_RSP: 2781 case L2CAP_STATE_CONFIG: 2782 case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST: 2783 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST: 2784 case L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE: 2785 case L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD: 2786 return 1; 2787 2788 case L2CAP_STATE_OPEN: 2789 case L2CAP_STATE_CLOSED: 2790 case L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES: 2791 case L2CAP_STATE_WAIT_DISCONNECT: 2792 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_INSUFFICIENT_SECURITY: 2793 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE: 2794 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT: 2795 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 2796 case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE: 2797 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE: 2798 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT: 2799 case L2CAP_STATE_INVALID: 2800 case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE: 2801 return 0; 2802 2803 default: 2804 // get a "warning" about new states 2805 btstack_assert(false); 2806 return 0; 2807 } 2808 } 2809 #endif 2810 2811 #ifdef ENABLE_CLASSIC 2812 static void l2cap_handle_hci_disconnect_event(l2cap_channel_t * channel){ 2813 if (l2cap_send_open_failed_on_hci_disconnect(channel)){ 2814 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT); 2815 } else { 2816 l2cap_handle_channel_closed(channel); 2817 } 2818 l2cap_free_channel_entry(channel); 2819 } 2820 #endif 2821 2822 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2823 static void l2cap_handle_hci_le_disconnect_event(l2cap_channel_t * channel){ 2824 if (l2cap_send_open_failed_on_hci_disconnect(channel)){ 2825 l2cap_cbm_emit_channel_opened(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT); 2826 } else { 2827 l2cap_emit_channel_closed(channel); 2828 } 2829 l2cap_free_channel_entry(channel); 2830 } 2831 #endif 2832 2833 #ifdef ENABLE_CLASSIC 2834 static void l2cap_check_classic_timeout(hci_con_handle_t handle){ 2835 if (gap_get_connection_type(handle) != GAP_CONNECTION_ACL) { 2836 return; 2837 } 2838 if (hci_authentication_active_for_handle(handle)) { 2839 return; 2840 } 2841 bool hci_con_used = false; 2842 btstack_linked_list_iterator_t it; 2843 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2844 while (btstack_linked_list_iterator_has_next(&it)){ 2845 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2846 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2847 if (channel->con_handle != handle) continue; 2848 hci_con_used = true; 2849 break; 2850 } 2851 if (hci_con_used) { 2852 return; 2853 } 2854 if (!hci_can_send_command_packet_now()) { 2855 return; 2856 } 2857 hci_send_cmd(&hci_disconnect, handle, 0x13); // remote closed connection 2858 } 2859 2860 static void l2cap_handle_features_complete(hci_con_handle_t handle){ 2861 if (hci_remote_features_available(handle) == false){ 2862 return; 2863 } 2864 btstack_linked_list_iterator_t it; 2865 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2866 while (btstack_linked_list_iterator_has_next(&it)){ 2867 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2868 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2869 if (channel->con_handle != handle) continue; 2870 log_info("remote supported features, channel %p, cid %04x - state %u", channel, channel->local_cid, channel->state); 2871 l2cap_handle_remote_supported_features_received(channel); 2872 } 2873 } 2874 2875 static void l2cap_handle_security_level_incoming_sufficient(l2cap_channel_t * channel){ 2876 channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT; 2877 l2cap_emit_incoming_connection(channel); 2878 } 2879 2880 static void l2cap_handle_security_level(hci_con_handle_t handle, gap_security_level_t actual_level){ 2881 log_info("security level update for handle 0x%04x", handle); 2882 2883 // trigger l2cap information requests 2884 if (actual_level > LEVEL_0){ 2885 hci_connection_t * hci_connection = hci_connection_for_handle(handle); 2886 btstack_assert(hci_connection != NULL); 2887 if (hci_connection->l2cap_state.information_state == L2CAP_INFORMATION_STATE_IDLE){ 2888 hci_connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST; 2889 } 2890 } 2891 2892 bool done = false; 2893 while (!done){ 2894 done = true; 2895 btstack_linked_list_iterator_t it; 2896 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2897 while (btstack_linked_list_iterator_has_next(&it)){ 2898 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2899 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2900 if (channel->con_handle != handle) continue; 2901 2902 gap_security_level_t required_level = channel->required_security_level; 2903 2904 log_info("channel %p, cid %04x - state %u: actual %u >= required %u?", channel, channel->local_cid, channel->state, actual_level, required_level); 2905 2906 switch (channel->state){ 2907 case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE: 2908 if (actual_level >= required_level){ 2909 l2cap_handle_security_level_incoming_sufficient(channel); 2910 } else { 2911 channel->reason = L2CAP_CONNECTION_RESULT_SECURITY_BLOCK; 2912 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE; 2913 } 2914 break; 2915 2916 case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE: 2917 if (actual_level >= required_level){ 2918 l2cap_ready_to_connect(channel); 2919 } else { 2920 // security level insufficient, report error and free channel 2921 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY); 2922 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 2923 l2cap_free_channel_entry(channel); 2924 } 2925 break; 2926 2927 default: 2928 break; 2929 } 2930 } 2931 } 2932 } 2933 #endif 2934 2935 #ifdef L2CAP_USES_CHANNELS 2936 static void l2cap_handle_disconnection_complete(hci_con_handle_t handle){ 2937 // collect channels to close 2938 btstack_linked_list_t channels_to_close = NULL; 2939 btstack_linked_list_iterator_t it; 2940 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2941 while (btstack_linked_list_iterator_has_next(&it)) { 2942 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2943 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2944 if (channel->con_handle != handle) continue; 2945 btstack_linked_list_iterator_remove(&it); 2946 btstack_linked_list_add(&channels_to_close, (btstack_linked_item_t *) channel); 2947 } 2948 // send l2cap open failed or closed events for all channels on this handle and free them 2949 btstack_linked_list_iterator_init(&it, &channels_to_close); 2950 while (btstack_linked_list_iterator_has_next(&it)) { 2951 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2952 btstack_linked_list_iterator_remove(&it); 2953 switch(channel->channel_type){ 2954 #ifdef ENABLE_CLASSIC 2955 case L2CAP_CHANNEL_TYPE_CLASSIC: 2956 l2cap_handle_hci_disconnect_event(channel); 2957 break; 2958 #endif 2959 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2960 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 2961 l2cap_handle_hci_le_disconnect_event(channel); 2962 break; 2963 #endif 2964 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2965 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 2966 switch (channel->state) { 2967 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_REQUEST: 2968 case L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE: 2969 // emit open failed if disconnected before connection complete 2970 l2cap_ecbm_emit_channel_opened(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT); 2971 break; 2972 case L2CAP_STATE_WILL_SEND_EHNANCED_RENEGOTIATION_REQUEST: 2973 case L2CAP_STATE_WAIT_ENHANCED_RENEGOTIATION_RESPONSE: 2974 // emit reconfigure failure - result = 0xffff 2975 l2cap_ecbm_emit_reconfigure_complete(channel, 0xffff); 2976 break; 2977 default: 2978 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED); 2979 break; 2980 } 2981 l2cap_free_channel_entry(channel); 2982 break; 2983 #endif 2984 default: 2985 break; 2986 } 2987 } 2988 } 2989 #endif 2990 2991 static void l2cap_hci_event_handler(uint8_t packet_type, uint16_t cid, uint8_t *packet, uint16_t size){ 2992 2993 UNUSED(packet_type); // ok: registered with hci_event_callback_registration 2994 UNUSED(cid); // ok: there is no channel 2995 UNUSED(size); // ok: fixed format events read from HCI buffer 2996 2997 #ifdef ENABLE_CLASSIC 2998 bd_addr_t address; 2999 gap_security_level_t security_level; 3000 #endif 3001 #ifdef L2CAP_USES_CHANNELS 3002 hci_con_handle_t handle; 3003 #endif 3004 3005 switch(hci_event_packet_get_type(packet)){ 3006 3007 // Notify channel packet handler if they can send now 3008 case HCI_EVENT_TRANSPORT_PACKET_SENT: 3009 case HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS: 3010 case BTSTACK_EVENT_NR_CONNECTIONS_CHANGED: 3011 #ifdef ENABLE_TESTING_SUPPORT 3012 case HCI_EVENT_NOP: 3013 #endif 3014 l2cap_call_notify_channel_in_run = true; 3015 break; 3016 3017 case HCI_EVENT_COMMAND_STATUS: 3018 #ifdef ENABLE_CLASSIC 3019 // check command status for create connection for errors 3020 if (hci_event_command_status_get_command_opcode(packet) == HCI_OPCODE_HCI_CREATE_CONNECTION){ 3021 // cache outgoing address and reset 3022 (void)memcpy(address, l2cap_outgoing_classic_addr, 6); 3023 memset(l2cap_outgoing_classic_addr, 0, 6); 3024 // error => outgoing connection failed 3025 uint8_t status = hci_event_command_status_get_status(packet); 3026 if (status){ 3027 l2cap_handle_connection_failed_for_addr(address, status); 3028 } 3029 } 3030 #endif 3031 l2cap_run(); // try sending signaling packets first 3032 break; 3033 3034 #ifdef ENABLE_CLASSIC 3035 // handle connection complete events 3036 case HCI_EVENT_CONNECTION_COMPLETE: 3037 reverse_bd_addr(&packet[5], address); 3038 if (packet[2] == 0){ 3039 handle = little_endian_read_16(packet, 3); 3040 l2cap_handle_connection_success_for_addr(address, handle); 3041 } else { 3042 l2cap_handle_connection_failed_for_addr(address, packet[2]); 3043 } 3044 break; 3045 3046 // handle successful create connection cancel command 3047 case HCI_EVENT_COMMAND_COMPLETE: 3048 if (hci_event_command_complete_get_command_opcode(packet) == HCI_OPCODE_HCI_CREATE_CONNECTION_CANCEL) { 3049 if (packet[5] == 0){ 3050 reverse_bd_addr(&packet[6], address); 3051 // CONNECTION TERMINATED BY LOCAL HOST (0X16) 3052 l2cap_handle_connection_failed_for_addr(address, 0x16); 3053 } 3054 } 3055 l2cap_run(); // try sending signaling packets first 3056 break; 3057 #endif 3058 3059 #ifdef L2CAP_USES_CHANNELS 3060 // handle disconnection complete events 3061 case HCI_EVENT_DISCONNECTION_COMPLETE: 3062 handle = little_endian_read_16(packet, 3); 3063 l2cap_handle_disconnection_complete(handle); 3064 break; 3065 #endif 3066 3067 // HCI Connection Timeouts 3068 #ifdef ENABLE_CLASSIC 3069 case L2CAP_EVENT_TIMEOUT_CHECK: 3070 handle = little_endian_read_16(packet, 2); 3071 l2cap_check_classic_timeout(handle); 3072 break; 3073 3074 case HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE: 3075 case HCI_EVENT_READ_REMOTE_EXTENDED_FEATURES_COMPLETE: 3076 handle = little_endian_read_16(packet, 3); 3077 l2cap_handle_features_complete(handle); 3078 break; 3079 3080 case GAP_EVENT_SECURITY_LEVEL: 3081 handle = little_endian_read_16(packet, 2); 3082 security_level = (gap_security_level_t) packet[4]; 3083 l2cap_handle_security_level(handle, security_level); 3084 break; 3085 #endif 3086 default: 3087 break; 3088 } 3089 3090 l2cap_run(); 3091 } 3092 3093 static void l2cap_register_signaling_response(hci_con_handle_t handle, uint8_t code, uint8_t sig_id, uint16_t cid, uint16_t data){ 3094 // Vol 3, Part A, 4.3: "The DCID and SCID fields shall be ignored when the result field indicates the connection was refused." 3095 if (l2cap_signaling_responses_pending < NR_PENDING_SIGNALING_RESPONSES) { 3096 l2cap_signaling_responses[l2cap_signaling_responses_pending].handle = handle; 3097 l2cap_signaling_responses[l2cap_signaling_responses_pending].code = code; 3098 l2cap_signaling_responses[l2cap_signaling_responses_pending].sig_id = sig_id; 3099 l2cap_signaling_responses[l2cap_signaling_responses_pending].cid = cid; 3100 l2cap_signaling_responses[l2cap_signaling_responses_pending].data = data; 3101 l2cap_signaling_responses_pending++; 3102 l2cap_run(); 3103 } 3104 } 3105 3106 #ifdef ENABLE_CLASSIC 3107 static void l2cap_handle_disconnect_request(l2cap_channel_t *channel, uint8_t identifier){ 3108 switch (channel->state){ 3109 case L2CAP_STATE_CONFIG: 3110 case L2CAP_STATE_OPEN: 3111 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 3112 case L2CAP_STATE_WAIT_DISCONNECT: 3113 break; 3114 default: 3115 // ignore in other states 3116 return; 3117 } 3118 3119 channel->remote_sig_id = identifier; 3120 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE; 3121 l2cap_run(); 3122 } 3123 3124 static void l2cap_handle_connection_request(hci_con_handle_t handle, uint8_t sig_id, uint16_t psm, uint16_t source_cid){ 3125 3126 // log_info("l2cap_handle_connection_request for handle %u, psm %u cid 0x%02x", handle, psm, source_cid); 3127 l2cap_service_t *service = l2cap_get_service(psm); 3128 if (!service) { 3129 l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CONNECTION_RESULT_PSM_NOT_SUPPORTED); 3130 return; 3131 } 3132 3133 hci_connection_t * hci_connection = hci_connection_for_handle( handle ); 3134 if (!hci_connection) { 3135 // 3136 log_error("no hci_connection for handle %u", handle); 3137 return; 3138 } 3139 3140 // if SC only mode is active and service requires encryption, reject connection if SC not active or use security level 3141 gap_security_level_t required_level = service->required_security_level; 3142 if (gap_get_secure_connections_only_mode() && (required_level != LEVEL_0)){ 3143 if (gap_secure_connection(handle)){ 3144 required_level = LEVEL_4; 3145 } else { 3146 l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CONNECTION_RESULT_SECURITY_BLOCK); 3147 return; 3148 } 3149 } 3150 3151 // alloc structure 3152 l2cap_channel_t * channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, hci_connection->address, BD_ADDR_TYPE_ACL, 3153 psm, service->mtu, required_level); 3154 if (!channel){ 3155 l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE); 3156 return; 3157 } 3158 3159 channel->con_handle = handle; 3160 channel->remote_cid = source_cid; 3161 channel->remote_sig_id = sig_id; 3162 3163 // limit local mtu to max acl packet length - l2cap header 3164 if (channel->local_mtu > l2cap_max_mtu()) { 3165 channel->local_mtu = l2cap_max_mtu(); 3166 } 3167 3168 // set initial state 3169 channel->state = L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES; 3170 channel->state_var = L2CAP_CHANNEL_STATE_VAR_INCOMING; 3171 3172 // add to connections list 3173 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 3174 3175 // 3176 if (required_level > LEVEL_0){ 3177 // send conn resp pending if remote supported features have not been received yet 3178 if (hci_remote_features_available(handle)) { 3179 l2cap_handle_remote_supported_features_received(channel); 3180 } else { 3181 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND; 3182 hci_remote_features_query(handle); 3183 } 3184 } else { 3185 l2cap_handle_security_level_incoming_sufficient(channel); 3186 } 3187 } 3188 3189 void l2cap_accept_connection(uint16_t local_cid){ 3190 log_info("L2CAP_ACCEPT_CONNECTION local_cid 0x%x", local_cid); 3191 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 3192 if (!channel) { 3193 log_error("accept called but local_cid 0x%x not found", local_cid); 3194 return; 3195 } 3196 3197 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3198 // configure L2CAP Basic mode 3199 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 3200 #endif 3201 3202 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT; 3203 3204 // process 3205 l2cap_run(); 3206 } 3207 3208 void l2cap_decline_connection(uint16_t local_cid){ 3209 log_info("decline local_cid 0x%x", local_cid); 3210 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid); 3211 if (!channel) { 3212 log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid); 3213 return; 3214 } 3215 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE; 3216 channel->reason = L2CAP_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE; 3217 l2cap_run(); 3218 } 3219 3220 // @pre command len is valid, see check in l2cap_signaling_handler_channel 3221 static void l2cap_signaling_handle_configure_request(l2cap_channel_t *channel, uint8_t *command){ 3222 3223 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3224 uint8_t use_fcs = 1; 3225 #endif 3226 3227 channel->remote_sig_id = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET]; 3228 3229 uint16_t flags = little_endian_read_16(command, 6); 3230 if (flags & 1) { 3231 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT); 3232 } 3233 3234 // accept the other's configuration options 3235 uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3236 uint16_t pos = 8; 3237 while (pos < end_pos){ 3238 uint8_t option_hint = command[pos] >> 7; 3239 uint8_t option_type = command[pos] & 0x7f; 3240 // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type); 3241 pos++; 3242 uint8_t length = command[pos++]; 3243 // MTU { type(8): 1, len(8):2, MTU(16) } 3244 if ((option_type == L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT) && (length == 2)){ 3245 channel->remote_mtu = little_endian_read_16(command, pos); 3246 log_info("Remote MTU %u", channel->remote_mtu); 3247 if (channel->remote_mtu > l2cap_max_mtu()){ 3248 log_info("Remote MTU %u larger than outgoing buffer, only using MTU = %u", channel->remote_mtu, l2cap_max_mtu()); 3249 channel->remote_mtu = l2cap_max_mtu(); 3250 } 3251 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU); 3252 } 3253 // Flush timeout { type(8):2, len(8): 2, Flush Timeout(16)} 3254 if ((option_type == L2CAP_CONFIG_OPTION_TYPE_FLUSH_TIMEOUT) && (length == 2)){ 3255 channel->flush_timeout = little_endian_read_16(command, pos); 3256 log_info("Flush timeout: %u ms", channel->flush_timeout); 3257 } 3258 3259 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3260 // Retransmission and Flow Control Option 3261 if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){ 3262 l2cap_channel_mode_t mode = (l2cap_channel_mode_t) command[pos]; 3263 switch(channel->mode){ 3264 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION: 3265 // Store remote config 3266 channel->remote_tx_window_size = command[pos+1]; 3267 channel->remote_max_transmit = command[pos+2]; 3268 channel->remote_retransmission_timeout_ms = little_endian_read_16(command, pos + 3); 3269 channel->remote_monitor_timeout_ms = little_endian_read_16(command, pos + 5); 3270 { 3271 uint16_t remote_mps = little_endian_read_16(command, pos + 7); 3272 // optimize our tx buffer configuration based on actual remote mps if remote mps is smaller than planned 3273 if (remote_mps < channel->remote_mps){ 3274 // get current tx storage 3275 uint16_t num_bytes_per_tx_buffer_before = sizeof(l2cap_ertm_tx_packet_state_t) + channel->remote_mps; 3276 uint16_t tx_storage = channel->num_tx_buffers * num_bytes_per_tx_buffer_before; 3277 3278 channel->remote_mps = remote_mps; 3279 uint16_t num_bytes_per_tx_buffer_now = sizeof(l2cap_ertm_tx_packet_state_t) + channel->remote_mps; 3280 channel->num_tx_buffers = tx_storage / num_bytes_per_tx_buffer_now; 3281 uint32_t total_storage = (sizeof(l2cap_ertm_rx_packet_state_t) + channel->local_mps) * channel->num_rx_buffers + tx_storage + channel->local_mtu; 3282 l2cap_ertm_setup_buffers(channel, (uint8_t *) channel->rx_packets_state, total_storage); 3283 } 3284 // limit remote mtu by our tx buffers. Include 2 bytes SDU Length 3285 uint16_t effective_mtu = channel->remote_mps * channel->num_tx_buffers - 2; 3286 channel->remote_mtu = btstack_min( effective_mtu, channel->remote_mtu); 3287 } 3288 log_info("FC&C config: tx window: %u, max transmit %u, retrans timeout %u, monitor timeout %u, mps %u", 3289 channel->remote_tx_window_size, 3290 channel->remote_max_transmit, 3291 channel->remote_retransmission_timeout_ms, 3292 channel->remote_monitor_timeout_ms, 3293 channel->remote_mps); 3294 // If ERTM mandatory, but remote doens't offer ERTM -> disconnect 3295 if (channel->ertm_mandatory && mode != L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 3296 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3297 } else { 3298 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM); 3299 } 3300 break; 3301 case L2CAP_CHANNEL_MODE_BASIC: 3302 switch (mode){ 3303 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION: 3304 // remote asks for ERTM, but we want basic mode. disconnect if this happens a second time 3305 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED){ 3306 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3307 } 3308 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED); 3309 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED); 3310 break; 3311 default: // case L2CAP_CHANNEL_MODE_BASIC: 3312 // TODO store and evaluate configuration 3313 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM); 3314 break; 3315 } 3316 break; 3317 default: 3318 break; 3319 } 3320 } 3321 if (option_type == L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE && length == 1){ 3322 use_fcs = command[pos]; 3323 } 3324 #endif 3325 // check for unknown options 3326 if ((option_hint == 0) && ((option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT) || (option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE))){ 3327 log_info("l2cap cid %u, unknown option 0x%02x", channel->local_cid, option_type); 3328 channel->unknown_option = option_type; 3329 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID); 3330 } 3331 pos += length; 3332 } 3333 3334 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3335 // "FCS" has precedence over "No FCS" 3336 uint8_t update = channel->fcs_option || use_fcs; 3337 log_info("local fcs: %u, remote fcs: %u -> %u", channel->fcs_option, use_fcs, update); 3338 channel->fcs_option = update; 3339 // If ERTM mandatory, but remote didn't send Retransmission and Flowcontrol options -> disconnect 3340 if (((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM) == 0) & (channel->ertm_mandatory)){ 3341 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3342 } 3343 #endif 3344 } 3345 3346 // @pre command len is valid, see check in l2cap_signaling_handler_channel 3347 static void l2cap_signaling_handle_configure_response(l2cap_channel_t *channel, uint16_t result, uint8_t *command){ 3348 log_info("l2cap_signaling_handle_configure_response"); 3349 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3350 uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3351 uint16_t pos = 10; 3352 while (pos < end_pos){ 3353 uint8_t option_hint = command[pos] >> 7; 3354 uint8_t option_type = command[pos] & 0x7f; 3355 // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type); 3356 pos++; 3357 uint8_t length = command[pos++]; 3358 3359 // Retransmission and Flow Control Option 3360 if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){ 3361 switch (channel->mode){ 3362 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION: 3363 if (channel->ertm_mandatory){ 3364 // ?? 3365 } else { 3366 // On 'Reject - Unacceptable Parameters' to our optional ERTM request, fall back to BASIC mode 3367 if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){ 3368 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 3369 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 3370 } 3371 } 3372 break; 3373 case L2CAP_CHANNEL_MODE_BASIC: 3374 if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){ 3375 // On 'Reject - Unacceptable Parameters' to our Basic mode request, disconnect 3376 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3377 } 3378 break; 3379 default: 3380 break; 3381 } 3382 } 3383 3384 // check for unknown options 3385 if (option_hint == 0 && (option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT || option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE)){ 3386 log_info("l2cap cid %u, unknown option 0x%02x", channel->local_cid, option_type); 3387 channel->unknown_option = option_type; 3388 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID); 3389 } 3390 3391 pos += length; 3392 } 3393 #else 3394 UNUSED(channel); // ok: no code 3395 UNUSED(result); // ok: no code 3396 UNUSED(command); // ok: no code 3397 #endif 3398 } 3399 3400 static int l2cap_channel_ready_for_open(l2cap_channel_t *channel){ 3401 // log_info("l2cap_channel_ready_for_open 0x%02x", channel->state_var); 3402 if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP) == 0) return 0; 3403 if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP) == 0) return 0; 3404 // addition check that fixes re-entrance issue causing l2cap event channel opened twice 3405 if (channel->state == L2CAP_STATE_OPEN) return 0; 3406 return 1; 3407 } 3408 3409 3410 // @pre command len is valid, see check in l2cap_signaling_handler_dispatch 3411 static void l2cap_signaling_handler_channel(l2cap_channel_t *channel, uint8_t *command){ 3412 3413 uint8_t code = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET]; 3414 uint8_t identifier = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET]; 3415 uint16_t cmd_len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3416 uint16_t result = 0; 3417 3418 log_info("L2CAP signaling handler code %u, state %u", code, channel->state); 3419 3420 // handle DISCONNECT REQUESTS seperately 3421 if (code == DISCONNECTION_REQUEST){ 3422 l2cap_handle_disconnect_request(channel, identifier); 3423 return; 3424 } 3425 3426 // @STATEMACHINE(l2cap) 3427 switch (channel->state) { 3428 3429 case L2CAP_STATE_WAIT_CONNECT_RSP: 3430 switch (code){ 3431 case CONNECTION_RESPONSE: 3432 if (cmd_len < 8){ 3433 // command imcomplete 3434 l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN); 3435 break; 3436 } 3437 l2cap_stop_rtx(channel); 3438 result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4); 3439 switch (result) { 3440 case 0: 3441 // successful connection 3442 channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3443 channel->state = L2CAP_STATE_CONFIG; 3444 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); 3445 break; 3446 case 1: 3447 // connection pending. get some coffee, but start the ERTX 3448 l2cap_start_ertx(channel); 3449 break; 3450 default: 3451 // channel closed 3452 channel->state = L2CAP_STATE_CLOSED; 3453 // map l2cap connection response result to BTstack status enumeration 3454 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result); 3455 3456 // drop link key if security block 3457 if ((L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result) == L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY){ 3458 gap_drop_link_key_for_bd_addr(channel->address); 3459 } 3460 3461 // discard channel 3462 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 3463 l2cap_free_channel_entry(channel); 3464 break; 3465 } 3466 break; 3467 3468 default: 3469 //@TODO: implement other signaling packets 3470 break; 3471 } 3472 break; 3473 3474 case L2CAP_STATE_CONFIG: 3475 switch (code) { 3476 case CONFIGURE_REQUEST: 3477 if (cmd_len < 4){ 3478 // command incomplete 3479 l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN); 3480 break; 3481 } 3482 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP); 3483 l2cap_signaling_handle_configure_request(channel, command); 3484 if (!(channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT)){ 3485 // only done if continuation not set 3486 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_REQ); 3487 } 3488 break; 3489 case CONFIGURE_RESPONSE: 3490 if (cmd_len < 6){ 3491 // command incomplete 3492 l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN); 3493 break; 3494 } 3495 result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4); 3496 l2cap_stop_rtx(channel); 3497 l2cap_signaling_handle_configure_response(channel, result, command); 3498 switch (result){ 3499 case 0: // success 3500 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP); 3501 break; 3502 case 4: // pending 3503 l2cap_start_ertx(channel); 3504 break; 3505 default: 3506 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3507 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION && channel->ertm_mandatory){ 3508 // remote does not offer ertm but it's required 3509 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3510 break; 3511 } 3512 #endif 3513 // retry on negative result 3514 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); 3515 break; 3516 } 3517 break; 3518 default: 3519 break; 3520 } 3521 if (l2cap_channel_ready_for_open(channel)){ 3522 3523 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3524 // assert that packet can be stored in fragment buffers in ertm 3525 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 3526 uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps); 3527 uint16_t usable_mtu = channel->num_tx_buffers == 1 ? effective_mps : channel->num_tx_buffers * effective_mps - 2; 3528 if (usable_mtu < channel->remote_mtu){ 3529 log_info("Remote MTU %u > max storable ERTM packet, only using MTU = %u", channel->remote_mtu, usable_mtu); 3530 channel->remote_mtu = usable_mtu; 3531 } 3532 } 3533 #endif 3534 // for open: 3535 channel->state = L2CAP_STATE_OPEN; 3536 l2cap_emit_channel_opened(channel, 0); 3537 } 3538 break; 3539 3540 case L2CAP_STATE_WAIT_DISCONNECT: 3541 switch (code) { 3542 case DISCONNECTION_RESPONSE: 3543 l2cap_finalize_channel_close(channel); 3544 break; 3545 default: 3546 //@TODO: implement other signaling packets 3547 break; 3548 } 3549 break; 3550 3551 case L2CAP_STATE_CLOSED: 3552 // @TODO handle incoming requests 3553 break; 3554 3555 case L2CAP_STATE_OPEN: 3556 //@TODO: implement other signaling packets, e.g. re-configure 3557 break; 3558 default: 3559 break; 3560 } 3561 // log_info("new state %u", channel->state); 3562 } 3563 3564 #ifdef ENABLE_CLASSIC 3565 static void l2cap_handle_information_request_complete(hci_connection_t * connection){ 3566 3567 connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_DONE; 3568 3569 // emit event 3570 uint8_t event[8]; 3571 event[0] = L2CAP_EVENT_INFORMATION_RESPONSE; 3572 event[1] = sizeof(event) - 2; 3573 little_endian_store_16(event, 2, connection->con_handle); 3574 little_endian_store_16(event, 4, connection->l2cap_state.extended_feature_mask); 3575 little_endian_store_16(event, 6, connection->l2cap_state.fixed_channels_supported); 3576 l2cap_emit_event(event, sizeof(event)); 3577 3578 // trigger connection request 3579 btstack_linked_list_iterator_t it; 3580 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3581 while (btstack_linked_list_iterator_has_next(&it)){ 3582 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3583 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 3584 if (channel->con_handle != connection->con_handle) continue; 3585 3586 // incoming connection: information request was triggered after user has accepted connection, 3587 // now: verify channel configuration, esp. if ertm will be mandatory 3588 if (channel->state == L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES){ 3589 // default: continue 3590 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT; 3591 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3592 if ((channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) && ((connection->l2cap_state.extended_feature_mask & 0x08) == 0)){ 3593 // ERTM not possible, select basic mode and release buffer 3594 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 3595 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 3596 3597 // bail if ERTM is mandatory 3598 if (channel->ertm_mandatory){ 3599 // We chose 'no resources available' for "ERTM mandatory but you don't even know ERTM exists" 3600 log_info("ERTM mandatory -> reject connection"); 3601 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE; 3602 channel->reason = L2CAP_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE; 3603 } else { 3604 log_info("ERTM not supported by remote -> use Basic mode"); 3605 } 3606 } 3607 #endif 3608 continue; 3609 } 3610 3611 // outgoing connection: information request is triggered before connection request 3612 if (channel->state == L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES){ 3613 3614 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3615 // if ERTM was requested, but is not listed in extended feature mask: 3616 if ((channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) && ((connection->l2cap_state.extended_feature_mask & 0x08) == 0)){ 3617 3618 if (channel->ertm_mandatory){ 3619 // bail if ERTM is mandatory 3620 channel->state = L2CAP_STATE_CLOSED; 3621 // map l2cap connection response result to BTstack status enumeration 3622 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_ERTM_NOT_SUPPORTED); 3623 // discard channel 3624 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 3625 l2cap_free_channel_entry(channel); 3626 continue; 3627 3628 } else { 3629 // fallback to Basic mode 3630 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 3631 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 3632 } 3633 } 3634 #endif 3635 3636 // respond to connection request 3637 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST; 3638 continue; 3639 } 3640 } 3641 } 3642 #endif 3643 3644 // @pre command len is valid, see check in l2cap_acl_classic_handler 3645 static void l2cap_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command){ 3646 3647 hci_connection_t * connection; 3648 btstack_linked_list_iterator_t it; 3649 3650 // get code, signal identifier and command len 3651 uint8_t code = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET]; 3652 uint8_t sig_id = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET]; 3653 uint16_t cmd_len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3654 3655 // general commands without an assigned channel 3656 switch(code) { 3657 3658 case CONNECTION_REQUEST: 3659 if (cmd_len == 4){ 3660 uint16_t psm = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3661 uint16_t source_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 3662 l2cap_handle_connection_request(handle, sig_id, psm, source_cid); 3663 } else { 3664 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN); 3665 } 3666 return; 3667 3668 case ECHO_REQUEST: 3669 l2cap_register_signaling_response(handle, code, sig_id, 0, 0); 3670 return; 3671 3672 case INFORMATION_REQUEST: 3673 if (cmd_len == 2) { 3674 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3675 l2cap_register_signaling_response(handle, code, sig_id, 0, info_type); 3676 return; 3677 } 3678 break; 3679 3680 case INFORMATION_RESPONSE: 3681 connection = hci_connection_for_handle(handle); 3682 if (!connection) return; 3683 switch (connection->l2cap_state.information_state){ 3684 case L2CAP_INFORMATION_STATE_W4_EXTENDED_FEATURE_RESPONSE: 3685 // get extended features from response if valid 3686 if (cmd_len >= 6) { 3687 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3688 uint16_t result = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 3689 if (result == 0 && info_type == L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED) { 3690 connection->l2cap_state.extended_feature_mask = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4); 3691 } 3692 log_info("extended features mask 0x%02x", connection->l2cap_state.extended_feature_mask); 3693 if ((connection->l2cap_state.extended_feature_mask & 0x80) != 0){ 3694 connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_FIXED_CHANNELS_REQUEST; 3695 } else { 3696 // information request complete 3697 l2cap_handle_information_request_complete(connection); 3698 } 3699 } 3700 break; 3701 case L2CAP_INFORMATION_STATE_W4_FIXED_CHANNELS_RESPONSE: 3702 if (cmd_len >= 12) { 3703 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3704 uint16_t result = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 3705 if (result == 0 && info_type == L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED) { 3706 connection->l2cap_state.fixed_channels_supported = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4); 3707 } 3708 log_info("fixed channels mask 0x%02x", connection->l2cap_state.fixed_channels_supported); 3709 // information request complete 3710 l2cap_handle_information_request_complete(connection); 3711 } 3712 break; 3713 default: 3714 break; 3715 } 3716 return; 3717 3718 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 3719 case L2CAP_CREDIT_BASED_CONNECTION_REQUEST: 3720 case L2CAP_CREDIT_BASED_CONNECTION_RESPONSE: 3721 case L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST: 3722 case L2CAP_CREDIT_BASED_RECONFIGURE_RESPONSE: 3723 l2cap_ecbm_signaling_handler_dispatch(handle, L2CAP_CID_SIGNALING, command, sig_id); 3724 return; 3725 case L2CAP_FLOW_CONTROL_CREDIT_INDICATION: 3726 // return if valid 3727 if (l2cap_credit_based_handle_credit_indication(handle, command, cmd_len)) return; 3728 break; 3729 3730 case COMMAND_REJECT: 3731 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3732 while (btstack_linked_list_iterator_has_next(&it)) { 3733 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3734 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 3735 if (channel->con_handle != handle) continue; 3736 if (channel->local_sig_id != sig_id) continue; 3737 if (channel->state != L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE) continue; 3738 3739 // open failed 3740 channel->state = L2CAP_STATE_CLOSED; 3741 l2cap_ecbm_emit_channel_opened(channel, 3742 ERROR_CODE_CONNECTION_REJECTED_DUE_TO_LIMITED_RESOURCES); 3743 // drop failed channel 3744 btstack_linked_list_iterator_remove(&it); 3745 l2cap_free_channel_entry(channel); 3746 } 3747 break; 3748 #endif 3749 3750 default: 3751 break; 3752 } 3753 3754 if (cmd_len >= 2){ 3755 // Get potential destination CID 3756 uint16_t dest_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3757 3758 // Find channel for this sig_id and connection handle 3759 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3760 while (btstack_linked_list_iterator_has_next(&it)){ 3761 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3762 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 3763 if (channel->con_handle != handle) continue; 3764 if (code & 1) { 3765 // match odd commands (responses) by previous signaling identifier 3766 if (channel->local_sig_id == sig_id) { 3767 l2cap_signaling_handler_channel(channel, command); 3768 return; 3769 } 3770 } else { 3771 // match even commands (requests) by local channel id 3772 if (channel->local_cid == dest_cid) { 3773 l2cap_signaling_handler_channel(channel, command); 3774 return; 3775 } 3776 } 3777 } 3778 } 3779 3780 // If dynamic channel cannot be found, either never set-up or already finalized, assume state CLOSED 3781 // Handle events as described in Core 5.4, Vol 3. Host, 6.1.1 CLOSED state 3782 switch (code){ 3783 case CONNECTION_RESPONSE: 3784 case CONFIGURE_RESPONSE: 3785 case DISCONNECTION_RESPONSE: 3786 // Ignore request 3787 return; 3788 case DISCONNECTION_REQUEST: 3789 if (cmd_len == 4){ 3790 // send disconnect response for received dest and source cids 3791 uint16_t dest_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3792 uint16_t source_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 3793 l2cap_register_signaling_response(handle, DISCONNECTION_RESPONSE, sig_id, source_cid, dest_cid); 3794 return; 3795 } 3796 break; 3797 case CONFIGURE_REQUEST: 3798 if (cmd_len >= 2){ 3799 // send command reject with reason invalid cid 3800 uint16_t dest_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3801 l2cap_register_signaling_response(handle, CONFIGURE_REQUEST, sig_id, dest_cid, L2CAP_REJ_INVALID_CID); 3802 return; 3803 } 3804 break; 3805 default: 3806 break; 3807 } 3808 // otherwise send command reject with reason unknown command 3809 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN); 3810 } 3811 #endif 3812 3813 #ifdef L2CAP_USES_CHANNELS 3814 static l2cap_service_t * l2cap_get_service_internal(btstack_linked_list_t * services, uint16_t psm){ 3815 btstack_linked_list_iterator_t it; 3816 btstack_linked_list_iterator_init(&it, services); 3817 while (btstack_linked_list_iterator_has_next(&it)){ 3818 l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it); 3819 if ( service->psm == psm){ 3820 return service; 3821 }; 3822 } 3823 return NULL; 3824 } 3825 #endif 3826 3827 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 3828 3829 static uint8_t l2cap_ecbm_setup_channels(btstack_linked_list_t * channels, 3830 btstack_packet_handler_t packet_handler, uint8_t num_channels, 3831 hci_connection_t * connection, uint16_t psm, uint16_t mtu, gap_security_level_t security_level){ 3832 uint8_t i; 3833 uint8_t status = ERROR_CODE_SUCCESS; 3834 for (i=0;i<num_channels;i++){ 3835 l2cap_channel_t * channel = l2cap_create_channel_entry(packet_handler, L2CAP_CHANNEL_TYPE_CHANNEL_ECBM, connection->address, connection->address_type, psm, mtu, security_level); 3836 if (!channel) { 3837 status = BTSTACK_MEMORY_ALLOC_FAILED; 3838 break; 3839 } 3840 channel->con_handle = connection->con_handle; 3841 btstack_linked_list_add_tail(channels, (btstack_linked_item_t *) channel); 3842 } 3843 3844 // free channels if not all allocated 3845 if (status != ERROR_CODE_SUCCESS){ 3846 while (true) { 3847 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_pop(channels); 3848 if (channel == NULL) break; 3849 l2cap_free_channel_entry(channel); 3850 } 3851 } 3852 3853 return status; 3854 } 3855 3856 static inline l2cap_service_t * l2cap_ecbm_get_service(uint16_t spsm){ 3857 return l2cap_get_service_internal(&l2cap_enhanced_services, spsm); 3858 } 3859 3860 static inline uint8_t l2cap_ecbm_status_for_result(uint16_t result) { 3861 switch (result) { 3862 case L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS: 3863 return ERROR_CODE_SUCCESS; 3864 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_SPSM_NOT_SUPPORTED: 3865 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_PSM; 3866 case L2CAP_ECBM_CONNECTION_RESULT_SOME_REFUSED_INSUFFICIENT_RESOURCES_AVAILABLE: 3867 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_RESOURCES; 3868 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_AUTHENTICATION: 3869 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_AUTHORIZATION: 3870 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_ENCYRPTION_KEY_SIZE_TOO_SHORT: 3871 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_ENCRYPTION: 3872 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY; 3873 default: 3874 // invalid Source CID, Source CID already allocated, unacceptable parameters 3875 return L2CAP_CONNECTION_RESPONSE_UNKNOWN_ERROR; 3876 } 3877 } 3878 3879 static void 3880 l2cap_ecbm_emit_incoming_connection(l2cap_channel_t *channel, uint8_t num_channels) { 3881 uint8_t event[16]; 3882 event[0] = L2CAP_EVENT_ECBM_INCOMING_CONNECTION; 3883 event[1] = sizeof(event) - 2; 3884 event[2] = channel->address_type; 3885 reverse_bd_addr(channel->address, &event[3]); 3886 little_endian_store_16(event, 9, channel->con_handle); 3887 little_endian_store_16(event, 11, channel->psm); 3888 event[13] = num_channels; 3889 little_endian_store_16(event, 14, channel->local_cid); 3890 hci_dump_packet(HCI_EVENT_PACKET, 1, event, sizeof(event)); 3891 (*channel->packet_handler)(HCI_EVENT_PACKET, 0, event, sizeof(event)); 3892 } 3893 3894 static uint8_t 3895 l2cap_ecbm_security_status_for_connection_request(hci_con_handle_t handle, gap_security_level_t required_security_level, 3896 bool requires_authorization) { 3897 // check security in increasing error priority 3898 uint8_t security_status = L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS; 3899 3900 // security: check encryption 3901 if (required_security_level >= LEVEL_2) { 3902 if (gap_encryption_key_size(handle) < 16) { 3903 security_status = L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_ENCYRPTION_KEY_SIZE_TOO_SHORT; 3904 } 3905 if (gap_encryption_key_size(handle) == 0){ 3906 security_status = L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_ENCRYPTION; 3907 } 3908 } 3909 3910 // security: check authentication 3911 if (required_security_level >= LEVEL_3) { 3912 if (!gap_authenticated(handle)) { 3913 security_status = requires_authorization ? 3914 L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_AUTHORIZATION : 3915 L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_AUTHENTICATION; 3916 } 3917 } 3918 return security_status; 3919 } 3920 3921 static void l2cap_ecbm_handle_security_level_incoming(l2cap_channel_t * channel){ 3922 // count number of l2cap_channels in state L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE with same remote_sig_id 3923 uint8_t sig_id = channel->remote_sig_id; 3924 hci_con_handle_t con_handle = channel->con_handle; 3925 3926 uint8_t security_status = l2cap_ecbm_security_status_for_connection_request(channel->con_handle, 3927 channel->required_security_level, 3928 false); 3929 bool security_sufficient = security_status == L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS; 3930 3931 uint8_t num_channels = 0; 3932 btstack_linked_list_iterator_t it; 3933 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3934 while (btstack_linked_list_iterator_has_next(&it)) { 3935 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3936 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 3937 if (channel->con_handle != con_handle) continue; 3938 if (channel->remote_sig_id != sig_id) continue; 3939 if (channel->state != L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE) continue; 3940 num_channels++; 3941 3942 if (security_sufficient){ 3943 channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT; 3944 } else { 3945 btstack_linked_list_iterator_remove(&it); 3946 btstack_memory_l2cap_channel_free(channel); 3947 } 3948 } 3949 3950 if (security_sufficient){ 3951 l2cap_ecbm_emit_incoming_connection(channel, num_channels); 3952 } else { 3953 // combine signaling cid and number channels for l2cap_register_signaling_response 3954 uint16_t signaling_cid = L2CAP_CID_SIGNALING; 3955 uint16_t num_channels_and_signaling_cid = (num_channels << 8) | signaling_cid; 3956 l2cap_register_signaling_response(con_handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 3957 num_channels_and_signaling_cid, security_status); 3958 } 3959 } 3960 3961 void l2cap_ecbm_trigger_pending_connection_responses(hci_con_handle_t con_handle){ 3962 bool done = false; 3963 while (!done) { 3964 done = true; 3965 btstack_linked_list_iterator_t it; 3966 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3967 while (btstack_linked_list_iterator_has_next(&it)) { 3968 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3969 if (channel->channel_type != L2CAP_CHANNEL_TYPE_CHANNEL_ECBM) continue; 3970 if (channel->con_handle != con_handle) continue; 3971 if (channel->state == L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE) { 3972 l2cap_ecbm_handle_security_level_incoming(channel); 3973 done = false; 3974 }; 3975 } 3976 } 3977 } 3978 3979 static int l2cap_ecbm_signaling_handler_dispatch(hci_con_handle_t handle, uint16_t signaling_cid, uint8_t *command, 3980 uint8_t sig_id) { 3981 3982 hci_connection_t *connection; 3983 btstack_linked_list_iterator_t it; 3984 l2cap_service_t *service; 3985 uint16_t spsm; 3986 uint8_t num_channels; 3987 uint16_t num_channels_and_signaling_cid; 3988 uint8_t i; 3989 uint16_t new_mtu; 3990 uint16_t new_mps; 3991 uint16_t initial_credits; 3992 uint16_t result; 3993 uint8_t status; 3994 3995 uint8_t code = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET]; 3996 uint16_t len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3997 log_info("enhanced dispatch: command 0x%02x, sig id %u, len %u", code, sig_id, len); 3998 3999 switch (code) { 4000 case L2CAP_CREDIT_BASED_CONNECTION_REQUEST: 4001 // check size 4002 if (len < 10u) return 0u; 4003 4004 // get hci connection, bail if not found (must not happen) 4005 connection = hci_connection_for_handle(handle); 4006 btstack_assert(connection != NULL); 4007 4008 // get num channels to establish 4009 num_channels = (len - 8) / sizeof(uint16_t); 4010 4011 // combine signaling cid and number channels for l2cap_register_signaling_response 4012 num_channels_and_signaling_cid = (num_channels << 8) | signaling_cid; 4013 4014 // check if service registered 4015 spsm = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 4016 service = l2cap_ecbm_get_service(spsm); 4017 4018 if (service) { 4019 4020 uint16_t remote_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 4021 uint16_t remote_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4); 4022 uint16_t credits_outgoing = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6); 4023 4024 // param: check remote mtu 4025 if (service->mtu > remote_mtu) { 4026 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4027 num_channels_and_signaling_cid, L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INVALID_PARAMETERS); 4028 return 1; 4029 } 4030 4031 // check if authentication is required and possible 4032 bool send_pending = false; 4033 uint8_t security_status = l2cap_ecbm_security_status_for_connection_request(handle, 4034 service->required_security_level, 4035 service->requires_authorization); 4036 if (security_status != L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS) { 4037 if (gap_get_bondable_mode() != 0) { 4038 // if possible, send pending and continue 4039 send_pending = true; 4040 } else { 4041 // otherwise, send refused and abort 4042 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4043 num_channels_and_signaling_cid, security_status); 4044 return 1; 4045 } 4046 } 4047 4048 // report the last result code != 0 4049 result = 0; 4050 // store one of the local channels for the event 4051 l2cap_channel_t * a_channel = NULL; 4052 for (i = 0; i < num_channels; i++) { 4053 4054 // check source cids 4055 uint16_t source_cid = little_endian_read_16(command, 12 + (i * 2)); 4056 if (source_cid < 0x40u) { 4057 result = L2CAP_ECBM_CONNECTION_RESULT_SOME_REFUSED_INVALID_SOURCE_CID; 4058 continue; 4059 } 4060 4061 // go through list of channels for this ACL connection and check if we get a match 4062 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4063 bool source_cid_allocated = false; 4064 while (btstack_linked_list_iterator_has_next(&it)) { 4065 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4066 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 4067 if (channel->con_handle != handle) continue; 4068 if (channel->remote_cid != source_cid) continue; 4069 source_cid_allocated = true; 4070 break; 4071 } 4072 if (source_cid_allocated) { 4073 result = 0x00a; 4074 continue; 4075 } 4076 4077 // setup channel 4078 l2cap_channel_t *channel = l2cap_create_channel_entry(service->packet_handler, 4079 L2CAP_CHANNEL_TYPE_CHANNEL_ECBM, 4080 connection->address, 4081 connection->address_type, spsm, 4082 service->mtu, 4083 service->required_security_level); 4084 4085 if (channel == NULL) { 4086 // Some connections refused – insufficient resources available 4087 result = 0x004; 4088 continue; 4089 } 4090 4091 // setup state 4092 channel->state = L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE; 4093 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_INCOMING; 4094 channel->con_handle = connection->con_handle; 4095 channel->remote_sig_id = sig_id; 4096 channel->remote_cid = source_cid; 4097 channel->remote_mtu = remote_mtu; 4098 channel->remote_mps = remote_mps; 4099 channel->credits_outgoing = credits_outgoing; 4100 channel->cid_index = i; 4101 channel->num_cids = num_channels; 4102 4103 // if more than one error, we can report any of them 4104 channel->reason = result; 4105 4106 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 4107 4108 a_channel = channel; 4109 } 4110 4111 // if no channels have been created, all have been refused, and we can respond right away 4112 if (a_channel == NULL) { 4113 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4114 num_channels_and_signaling_cid, result); 4115 return 1; 4116 } 4117 4118 // if security is pending, send intermediate response, otherwise, ask user 4119 if (send_pending){ 4120 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4121 num_channels_and_signaling_cid, L2CAP_ECBM_CONNECTION_RESULT_ALL_PENDING_AUTHENTICATION); 4122 } else { 4123 // if security is ok but authorization is required, send intermediate response and ask user 4124 if (service->requires_authorization){ 4125 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4126 num_channels_and_signaling_cid, L2CAP_ECBM_CONNECTION_RESULT_ALL_PENDING_AUTHORIZATION); 4127 } 4128 l2cap_ecbm_handle_security_level_incoming(a_channel); 4129 } 4130 4131 } else { 4132 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4133 num_channels_and_signaling_cid, L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_SPSM_NOT_SUPPORTED); 4134 } 4135 return 1; 4136 4137 case L2CAP_CREDIT_BASED_CONNECTION_RESPONSE: 4138 // check size 4139 if (len < 10u) return 0u; 4140 4141 // get hci connection, ignore if not found 4142 connection = hci_connection_for_handle(handle); 4143 if (connection == NULL) return 0; 4144 4145 // get channel config: mtu, mps, initial credits, result 4146 new_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4147 new_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 4148 initial_credits = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4); 4149 result = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6); 4150 status = l2cap_ecbm_status_for_result(result); 4151 4152 // get num channels to modify 4153 num_channels = (len - 8) / sizeof(uint16_t); 4154 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4155 while (btstack_linked_list_iterator_has_next(&it)) { 4156 uint8_t channel_status = status; 4157 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4158 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 4159 if (channel->con_handle != handle) continue; 4160 if (channel->local_sig_id != sig_id) continue; 4161 if (channel->state != L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE) continue; 4162 if (channel->cid_index < num_channels) { 4163 uint16_t remote_cid = little_endian_read_16(command, 12 + channel->cid_index * sizeof(uint16_t)); 4164 if (remote_cid != 0) { 4165 // check for duplicate remote CIDs 4166 l2cap_channel_t * original_channel = l2cap_get_channel_for_remote_handle_and_cid(handle, remote_cid); 4167 if (original_channel == NULL){ 4168 channel->state = L2CAP_STATE_OPEN; 4169 channel->remote_cid = remote_cid; 4170 channel->remote_mtu = new_mtu; 4171 channel->remote_mps = new_mps; 4172 channel->credits_outgoing = initial_credits; 4173 l2cap_ecbm_emit_channel_opened(channel, ERROR_CODE_SUCCESS); 4174 continue; 4175 } 4176 // close original channel 4177 original_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 4178 channel_status = ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS; 4179 } 4180 } 4181 // open failed 4182 l2cap_ecbm_emit_channel_opened(channel, channel_status); 4183 // drop failed channel 4184 btstack_linked_list_iterator_remove(&it); 4185 btstack_memory_l2cap_channel_free(channel); 4186 } 4187 return 1; 4188 4189 case L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST: 4190 // check minimal size 4191 if (len < 6) return 0u; 4192 4193 // get hci connection, bail if not found (must not happen) 4194 connection = hci_connection_for_handle(handle); 4195 btstack_assert(connection != NULL); 4196 4197 // get num channels to modify 4198 num_channels = (len - 4) / sizeof(uint16_t); 4199 4200 // get new mtu and mps 4201 new_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4202 new_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 4203 4204 // validate request 4205 result = 0; 4206 for (i = 0; i < num_channels; i++) { 4207 // check cid 4208 uint16_t remote_cid = little_endian_read_16(command, 8 + (i * sizeof(uint16_t))); 4209 l2cap_channel_t *channel = l2cap_get_channel_for_remote_handle_and_cid(handle, remote_cid); 4210 if (channel == NULL) { 4211 result = L2CAP_ECBM_RECONFIGURE_FAILED_DESTINATION_CID_INVALID; 4212 break; 4213 } 4214 // check MTU is not reduced 4215 if (channel->remote_mtu > new_mtu) { 4216 result = L2CAP_ECBM_RECONFIGURE_FAILED_MTU_REDUCTION_NOT_ALLOWED; 4217 break; 4218 } 4219 // check MPS reduction 4220 if ((num_channels > 1) && (channel->remote_mps > new_mps)) { 4221 result = L2CAP_ECBM_RECONFIGURE_FAILED_MPS_REDUCTION_MULTIPLE_CHANNELS; 4222 break; 4223 } 4224 // check MPS valid 4225 if (new_mps < l2cap_enhanced_mps_min) { 4226 result = L2CAP_ECBM_RECONFIGURE_FAILED_UNACCEPTABLE_PARAMETERS; 4227 break; 4228 } 4229 } 4230 4231 // send reject 4232 if (result != 0) { 4233 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST, sig_id, signaling_cid, 4234 result); 4235 return 1; 4236 } 4237 4238 // update channels 4239 for (i = 0; i < num_channels; i++) { 4240 uint16_t remote_cid = little_endian_read_16(command, 8 + (i * sizeof(uint16_t))); 4241 l2cap_channel_t *channel = l2cap_get_channel_for_remote_handle_and_cid(handle, remote_cid); 4242 channel->remote_mps = new_mps; 4243 channel->remote_mtu = new_mtu; 4244 // emit event 4245 uint8_t event[8]; 4246 event[0] = L2CAP_EVENT_ECBM_RECONFIGURED; 4247 event[1] = sizeof(event) - 2; 4248 little_endian_store_16(event, 2, channel->local_cid); 4249 little_endian_store_16(event, 4, new_mtu); 4250 little_endian_store_16(event, 6, new_mps); 4251 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 4252 } 4253 4254 // send accept 4255 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST, sig_id, signaling_cid, 0); 4256 return 1; 4257 4258 case L2CAP_CREDIT_BASED_RECONFIGURE_RESPONSE: 4259 // check size 4260 if (len < 2u) return 0u; 4261 4262 result = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4263 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4264 while (btstack_linked_list_iterator_has_next(&it)) { 4265 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4266 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 4267 if (channel->con_handle != handle) continue; 4268 if (channel->local_sig_id != sig_id) continue; 4269 if (channel->state != L2CAP_STATE_WAIT_ENHANCED_RENEGOTIATION_RESPONSE) continue; 4270 // complete request 4271 if (result == 0) { 4272 channel->receive_sdu_buffer = channel->renegotiate_sdu_buffer; 4273 channel->local_mtu = channel->renegotiate_mtu; 4274 } 4275 channel->state = L2CAP_STATE_OPEN; 4276 // emit event 4277 l2cap_ecbm_emit_reconfigure_complete(channel, result); 4278 } 4279 break; 4280 4281 default: 4282 btstack_unreachable(); 4283 break; 4284 } 4285 return 0; 4286 } 4287 4288 #endif 4289 4290 #ifdef ENABLE_BLE 4291 4292 static void l2cap_emit_connection_parameter_update_response(hci_con_handle_t con_handle, uint16_t result){ 4293 uint8_t event[6]; 4294 event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE; 4295 event[1] = 4; 4296 little_endian_store_16(event, 2, con_handle); 4297 little_endian_store_16(event, 4, result); 4298 l2cap_emit_event(event, sizeof(event)); 4299 } 4300 4301 // @return valid 4302 static int l2cap_le_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command, uint8_t sig_id){ 4303 hci_connection_t * connection; 4304 uint16_t result; 4305 uint8_t event[12]; 4306 4307 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 4308 l2cap_channel_t * channel; 4309 btstack_linked_list_iterator_t it; 4310 #endif 4311 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4312 uint16_t local_cid; 4313 uint16_t le_psm; 4314 l2cap_service_t * service; 4315 uint16_t source_cid; 4316 #endif 4317 4318 uint8_t code = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET]; 4319 uint16_t len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 4320 log_info("le dispatch: command 0x%02x, sig id %u, len %u", code, sig_id, len); 4321 4322 switch (code){ 4323 4324 case CONNECTION_PARAMETER_UPDATE_REQUEST: 4325 // check size 4326 if (len < 8u) return 0u; 4327 connection = hci_connection_for_handle(handle); 4328 if (connection != NULL){ 4329 if (connection->role != HCI_ROLE_MASTER){ 4330 // reject command without notifying upper layer when not in master role 4331 return 0; 4332 } 4333 le_connection_parameter_range_t existing_range; 4334 gap_get_connection_parameter_range(&existing_range); 4335 uint16_t le_conn_interval_min = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 4336 uint16_t le_conn_interval_max = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 4337 uint16_t le_conn_latency = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4); 4338 uint16_t le_supervision_timeout = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+6); 4339 4340 int update_parameter = gap_connection_parameter_range_included(&existing_range, le_conn_interval_min, le_conn_interval_max, le_conn_latency, le_supervision_timeout); 4341 if (update_parameter){ 4342 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_SEND_RESPONSE; 4343 connection->le_conn_interval_min = le_conn_interval_min; 4344 connection->le_conn_interval_max = le_conn_interval_max; 4345 connection->le_conn_latency = le_conn_latency; 4346 connection->le_supervision_timeout = le_supervision_timeout; 4347 } else { 4348 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_DENY; 4349 } 4350 connection->le_con_param_update_identifier = sig_id; 4351 } 4352 4353 event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST; 4354 event[1] = 10; 4355 little_endian_store_16(event, 2, handle); 4356 (void)memcpy(&event[4], &command[4], 8); 4357 l2cap_emit_event(event, sizeof(event)); 4358 break; 4359 4360 case CONNECTION_PARAMETER_UPDATE_RESPONSE: 4361 // check size 4362 if (len < 2u) return 0u; 4363 result = little_endian_read_16(command, 4); 4364 l2cap_emit_connection_parameter_update_response(handle, result); 4365 break; 4366 4367 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 4368 case L2CAP_CREDIT_BASED_CONNECTION_REQUEST: 4369 case L2CAP_CREDIT_BASED_CONNECTION_RESPONSE: 4370 case L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST: 4371 case L2CAP_CREDIT_BASED_RECONFIGURE_RESPONSE: 4372 return l2cap_ecbm_signaling_handler_dispatch(handle, L2CAP_CID_SIGNALING_LE, command, sig_id); 4373 #endif 4374 4375 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 4376 case COMMAND_REJECT: 4377 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4378 while (btstack_linked_list_iterator_has_next(&it)){ 4379 channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4380 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 4381 if (channel->con_handle != handle) continue; 4382 if (channel->local_sig_id != sig_id) continue; 4383 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4384 // if received while waiting for le connection response, assume legacy device 4385 if (channel->state == L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE){ 4386 channel->state = L2CAP_STATE_CLOSED; 4387 // no official value for this, use: Connection refused – LE_PSM not supported 4388 l2cap_cbm_emit_channel_opened(channel, L2CAP_CBM_CONNECTION_RESULT_SPSM_NOT_SUPPORTED); 4389 4390 // discard channel 4391 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 4392 l2cap_free_channel_entry(channel); 4393 continue; 4394 } 4395 #endif 4396 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 4397 // if received while waiting for le connection response, assume legacy device 4398 if (channel->state == L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE){ 4399 channel->state = L2CAP_STATE_CLOSED; 4400 // treat as SPSM not supported 4401 l2cap_ecbm_emit_channel_opened(channel, L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_PSM); 4402 4403 // discard channel 4404 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 4405 l2cap_free_channel_entry(channel); 4406 continue; 4407 } 4408 #endif 4409 } 4410 break; 4411 #endif 4412 4413 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4414 case LE_CREDIT_BASED_CONNECTION_REQUEST: 4415 // check size 4416 if (len < 10u) return 0u; 4417 4418 // get hci connection, bail if not found (must not happen) 4419 connection = hci_connection_for_handle(handle); 4420 if (!connection) return 0; 4421 4422 // check if service registered 4423 le_psm = little_endian_read_16(command, 4); 4424 service = l2cap_cbm_get_service(le_psm); 4425 source_cid = little_endian_read_16(command, 6); 4426 4427 if (service){ 4428 if (source_cid < 0x40u){ 4429 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_INVALID_SOURCE_CID); 4430 return 1; 4431 } 4432 4433 // go through list of channels for this ACL connection and check if we get a match 4434 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4435 while (btstack_linked_list_iterator_has_next(&it)){ 4436 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4437 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue; 4438 if (a_channel->con_handle != handle) continue; 4439 if (a_channel->remote_cid != source_cid) continue; 4440 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_SOURCE_CID_ALREADY_ALLOCATED); 4441 return 1; 4442 } 4443 4444 // security: check encryption 4445 if (service->required_security_level >= LEVEL_2){ 4446 if (gap_encryption_key_size(handle) == 0){ 4447 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_ENCRYPTION); 4448 return 1; 4449 } 4450 // anything less than 16 byte key size is insufficient 4451 if (gap_encryption_key_size(handle) < 16){ 4452 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_ENCYRPTION_KEY_SIZE_TOO_SHORT); 4453 return 1; 4454 } 4455 } 4456 4457 // security: check authentication 4458 if (service->required_security_level >= LEVEL_3){ 4459 if (!gap_authenticated(handle)){ 4460 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_AUTHENTICATION); 4461 return 1; 4462 } 4463 } 4464 4465 // security: check authorization 4466 if (service->required_security_level >= LEVEL_4){ 4467 if (gap_authorization_state(handle) != AUTHORIZATION_GRANTED){ 4468 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_AUTHORIZATION); 4469 return 1; 4470 } 4471 } 4472 4473 // allocate channel 4474 channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_CHANNEL_CBM, connection->address, 4475 connection->address_type, le_psm, service->mtu, service->required_security_level); 4476 if (!channel){ 4477 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE); 4478 return 1; 4479 } 4480 4481 channel->con_handle = handle; 4482 channel->remote_cid = source_cid; 4483 channel->remote_sig_id = sig_id; 4484 channel->remote_mtu = little_endian_read_16(command, 8); 4485 channel->remote_mps = little_endian_read_16(command, 10); 4486 channel->credits_outgoing = little_endian_read_16(command, 12); 4487 4488 // set initial state 4489 channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT; 4490 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_INCOMING; 4491 4492 // add to connections list 4493 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 4494 4495 // post connection request event 4496 l2cap_cbm_emit_incoming_connection(channel); 4497 4498 } else { 4499 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_SPSM_NOT_SUPPORTED); 4500 } 4501 break; 4502 4503 case LE_CREDIT_BASED_CONNECTION_RESPONSE: 4504 // check size 4505 if (len < 10u) return 0u; 4506 4507 // Find channel for this sig_id and connection handle 4508 channel = NULL; 4509 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4510 while (btstack_linked_list_iterator_has_next(&it)){ 4511 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4512 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue; 4513 if (a_channel->con_handle != handle) continue; 4514 if (a_channel->local_sig_id != sig_id) continue; 4515 channel = a_channel; 4516 break; 4517 } 4518 if (!channel) break; 4519 4520 // cid + 0 4521 result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+8); 4522 if (result){ 4523 channel->state = L2CAP_STATE_CLOSED; 4524 uint8_t status = l2cap_cbm_status_for_result(result); 4525 l2cap_cbm_emit_channel_opened(channel, status); 4526 4527 // discard channel 4528 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 4529 l2cap_free_channel_entry(channel); 4530 break; 4531 } 4532 4533 // success 4534 channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4535 channel->remote_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 4536 channel->remote_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4); 4537 channel->credits_outgoing = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6); 4538 channel->state = L2CAP_STATE_OPEN; 4539 l2cap_cbm_emit_channel_opened(channel, ERROR_CODE_SUCCESS); 4540 break; 4541 #endif 4542 4543 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 4544 case L2CAP_FLOW_CONTROL_CREDIT_INDICATION: 4545 return l2cap_credit_based_handle_credit_indication(handle, command, len) ? 1 : 0; 4546 4547 case DISCONNECTION_REQUEST: 4548 // check size 4549 if (len < 4u) return 0u; 4550 4551 // find channel 4552 local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4553 channel = l2cap_get_channel_for_local_cid_and_handle(local_cid, handle); 4554 if (!channel) { 4555 l2cap_register_signaling_response(handle, DISCONNECTION_REQUEST, sig_id, 4556 little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2), local_cid); 4557 break; 4558 } 4559 channel->remote_sig_id = sig_id; 4560 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE; 4561 break; 4562 4563 case DISCONNECTION_RESPONSE: 4564 // check size 4565 if (len < 4u) return 0u; 4566 4567 // find channel 4568 local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4569 channel = l2cap_get_channel_for_local_cid_and_handle(local_cid, handle); 4570 if (!channel) break; 4571 if (channel->local_sig_id == sig_id) { 4572 if (channel->state == L2CAP_STATE_WAIT_DISCONNECT){ 4573 l2cap_finalize_channel_close(channel); 4574 } 4575 } 4576 break; 4577 #endif 4578 4579 default: 4580 // command unknown -> reject command 4581 return 0; 4582 } 4583 return 1; 4584 } 4585 #endif 4586 4587 #ifdef ENABLE_CLASSIC 4588 static void l2cap_acl_classic_handler_for_channel(l2cap_channel_t * l2cap_channel, uint8_t * packet, uint16_t size){ 4589 4590 // forward data only in OPEN state 4591 if (l2cap_channel->state != L2CAP_STATE_OPEN) return; 4592 4593 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 4594 if (l2cap_channel->channel_type == L2CAP_CHANNEL_TYPE_CHANNEL_ECBM){ 4595 l2cap_credit_based_handle_pdu(l2cap_channel, packet, size); 4596 return; 4597 } 4598 #endif 4599 4600 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 4601 if (l2cap_channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 4602 4603 int fcs_size = l2cap_channel->fcs_option ? 2 : 0; 4604 4605 // assert control + FCS fields are inside 4606 if (size < COMPLETE_L2CAP_HEADER+2+fcs_size) return; 4607 4608 if (l2cap_channel->fcs_option){ 4609 // verify FCS (required if one side requested it) 4610 uint16_t fcs_calculated = crc16_calc(&packet[4], size - (4+2)); 4611 uint16_t fcs_packet = little_endian_read_16(packet, size-2); 4612 4613 #ifdef L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL 4614 // simulate fcs error 4615 static int counter = 0; 4616 if (++counter == L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL) { 4617 log_info("Simulate fcs error"); 4618 fcs_calculated++; 4619 counter = 0; 4620 } 4621 #endif 4622 4623 if (fcs_calculated == fcs_packet){ 4624 log_info("Packet FCS 0x%04x verified", fcs_packet); 4625 } else { 4626 log_error("FCS mismatch! Packet 0x%04x, calculated 0x%04x", fcs_packet, fcs_calculated); 4627 // ERTM State Machine in Bluetooth Spec does not handle 'I-Frame with invalid FCS' 4628 return; 4629 } 4630 } 4631 4632 // switch on packet type 4633 uint16_t control = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER); 4634 uint8_t req_seq = (control >> 8) & 0x3f; 4635 int final = (control >> 7) & 0x01; 4636 if (control & 1){ 4637 // S-Frame 4638 int poll = (control >> 4) & 0x01; 4639 l2cap_supervisory_function_t s = (l2cap_supervisory_function_t) ((control >> 2) & 0x03); 4640 log_info("Control: 0x%04x => Supervisory function %u, ReqSeq %02u", control, (int) s, req_seq); 4641 l2cap_ertm_tx_packet_state_t * tx_state; 4642 switch (s){ 4643 case L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY: 4644 log_info("L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY"); 4645 l2cap_ertm_process_req_seq(l2cap_channel, req_seq); 4646 if (poll && final){ 4647 // S-frames shall not be transmitted with both the F-bit and the P-bit set to 1 at the same time. 4648 log_error("P=F=1 in S-Frame"); 4649 break; 4650 } 4651 if (poll){ 4652 // check if we did request selective retransmission before <==> we have stored SDU segments 4653 int i; 4654 int num_stored_out_of_order_packets = 0; 4655 for (i=0;i<l2cap_channel->num_rx_buffers;i++){ 4656 int index = l2cap_channel->rx_store_index + i; 4657 if (index >= l2cap_channel->num_rx_buffers){ 4658 index -= l2cap_channel->num_rx_buffers; 4659 } 4660 l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index]; 4661 if (!rx_state->valid) continue; 4662 num_stored_out_of_order_packets++; 4663 } 4664 if (num_stored_out_of_order_packets){ 4665 l2cap_channel->send_supervisor_frame_selective_reject = 1; 4666 } else { 4667 l2cap_channel->send_supervisor_frame_receiver_ready = 1; 4668 } 4669 l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = 1; 4670 } 4671 if (final){ 4672 // Stop-MonitorTimer 4673 l2cap_ertm_stop_monitor_timer(l2cap_channel); 4674 // If UnackedFrames > 0 then Start-RetransTimer 4675 if (l2cap_channel->unacked_frames){ 4676 l2cap_ertm_start_retransmission_timer(l2cap_channel); 4677 } 4678 // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted 4679 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 4680 } 4681 break; 4682 case L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT: 4683 log_info("L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT"); 4684 l2cap_ertm_process_req_seq(l2cap_channel, req_seq); 4685 // restart transmittion from last unacknowledted packet (earlier packets already freed in l2cap_ertm_process_req_seq) 4686 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 4687 break; 4688 case L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY: 4689 log_error("L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY"); 4690 break; 4691 case L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT: 4692 log_info("L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT"); 4693 if (poll){ 4694 l2cap_ertm_process_req_seq(l2cap_channel, req_seq); 4695 } 4696 // find requested i-frame 4697 tx_state = l2cap_ertm_get_tx_state(l2cap_channel, req_seq); 4698 if (tx_state){ 4699 log_info("Retransmission for tx_seq %u requested", req_seq); 4700 l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = poll; 4701 tx_state->retransmission_requested = 1; 4702 l2cap_channel->srej_active = 1; 4703 } 4704 break; 4705 default: 4706 break; 4707 } 4708 } else { 4709 // I-Frame 4710 // get control 4711 l2cap_segmentation_and_reassembly_t sar = (l2cap_segmentation_and_reassembly_t) (control >> 14); 4712 uint8_t tx_seq = (control >> 1) & 0x3f; 4713 log_info("Control: 0x%04x => SAR %u, ReqSeq %02u, R?, TxSeq %02u", control, (int) sar, req_seq, tx_seq); 4714 log_info("SAR: pos %u", l2cap_channel->reassembly_pos); 4715 log_info("State: expected_tx_seq %02u, req_seq %02u", l2cap_channel->expected_tx_seq, l2cap_channel->req_seq); 4716 l2cap_ertm_process_req_seq(l2cap_channel, req_seq); 4717 if (final){ 4718 // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted 4719 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 4720 } 4721 4722 // get SDU 4723 const uint8_t * payload_data = &packet[COMPLETE_L2CAP_HEADER+2]; 4724 uint16_t payload_len = size-(COMPLETE_L2CAP_HEADER+2+fcs_size); 4725 4726 // assert SDU size is smaller or equal to our buffers 4727 uint16_t max_payload_size = 0; 4728 switch (sar){ 4729 case L2CAP_SEGMENTATION_AND_REASSEMBLY_UNSEGMENTED_L2CAP_SDU: 4730 case L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU: 4731 // SDU Length + MPS 4732 max_payload_size = l2cap_channel->local_mps + 2; 4733 break; 4734 case L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU: 4735 case L2CAP_SEGMENTATION_AND_REASSEMBLY_END_OF_L2CAP_SDU: 4736 max_payload_size = l2cap_channel->local_mps; 4737 break; 4738 default: 4739 btstack_assert(false); 4740 break; 4741 } 4742 if (payload_len > max_payload_size){ 4743 log_info("payload len %u > max payload %u -> drop packet", payload_len, max_payload_size); 4744 return; 4745 } 4746 4747 // check ordering 4748 if (l2cap_channel->expected_tx_seq == tx_seq){ 4749 log_info("Received expected frame with TxSeq == ExpectedTxSeq == %02u", tx_seq); 4750 l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq); 4751 l2cap_channel->req_seq = l2cap_channel->expected_tx_seq; 4752 4753 // process SDU 4754 l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, sar, payload_data, payload_len); 4755 4756 // process stored segments 4757 while (true){ 4758 int index = l2cap_channel->rx_store_index; 4759 l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index]; 4760 if (!rx_state->valid) break; 4761 4762 log_info("Processing stored frame with TxSeq == ExpectedTxSeq == %02u", l2cap_channel->expected_tx_seq); 4763 l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq); 4764 l2cap_channel->req_seq = l2cap_channel->expected_tx_seq; 4765 4766 rx_state->valid = 0; 4767 l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, rx_state->sar, &l2cap_channel->rx_packets_data[index], rx_state->len); 4768 4769 // update rx store index 4770 index++; 4771 if (index >= l2cap_channel->num_rx_buffers){ 4772 index = 0; 4773 } 4774 l2cap_channel->rx_store_index = index; 4775 } 4776 4777 // 4778 l2cap_channel->send_supervisor_frame_receiver_ready = 1; 4779 4780 } else { 4781 int delta = (tx_seq - l2cap_channel->expected_tx_seq) & 0x3f; 4782 if (delta < 2){ 4783 // store segment 4784 l2cap_ertm_handle_out_of_sequence_sdu(l2cap_channel, sar, delta, payload_data, payload_len); 4785 4786 log_info("Received unexpected frame TxSeq %u but expected %u -> send S-SREJ", tx_seq, l2cap_channel->expected_tx_seq); 4787 l2cap_channel->send_supervisor_frame_selective_reject = 1; 4788 } else { 4789 log_info("Received unexpected frame TxSeq %u but expected %u -> send S-REJ", tx_seq, l2cap_channel->expected_tx_seq); 4790 l2cap_channel->send_supervisor_frame_reject = 1; 4791 } 4792 } 4793 } 4794 return; 4795 } 4796 #endif 4797 4798 // check size 4799 uint16_t payload_size = size - COMPLETE_L2CAP_HEADER; 4800 if (l2cap_channel->local_mtu < payload_size) return; 4801 4802 l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, &packet[COMPLETE_L2CAP_HEADER], payload_size); 4803 } 4804 #endif 4805 4806 static void l2cap_acl_classic_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){ 4807 #ifdef ENABLE_CLASSIC 4808 l2cap_channel_t * l2cap_channel; 4809 l2cap_fixed_channel_t * l2cap_fixed_channel; 4810 4811 uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet); 4812 uint8_t broadcast_flag = READ_ACL_FLAGS(packet) >> 2; 4813 switch (channel_id) { 4814 4815 case L2CAP_CID_SIGNALING: { 4816 if (broadcast_flag != 0) break; 4817 uint32_t command_offset = 8; 4818 while ((command_offset + L2CAP_SIGNALING_COMMAND_DATA_OFFSET) <= size) { 4819 // assert signaling command is fully inside packet 4820 uint16_t data_len = little_endian_read_16(packet, command_offset + L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 4821 uint32_t next_command_offset = command_offset + L2CAP_SIGNALING_COMMAND_DATA_OFFSET + data_len; 4822 if (next_command_offset > size){ 4823 log_error("signaling command incomplete -> drop"); 4824 break; 4825 } 4826 // handle signaling command 4827 l2cap_signaling_handler_dispatch(handle, &packet[command_offset]); 4828 // go to next command 4829 command_offset = next_command_offset; 4830 } 4831 // handle incomplete packet 4832 if (command_offset < size) { 4833 log_error("signaling command incomplete -> reject"); 4834 l2cap_register_signaling_response(handle, COMMAND_REJECT, 0, 0, L2CAP_REJ_CMD_UNKNOWN); 4835 } 4836 break; 4837 } 4838 4839 case L2CAP_CID_CONNECTIONLESS_CHANNEL: 4840 if (broadcast_flag == 0) break; 4841 l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_CONNECTIONLESS_CHANNEL); 4842 if (!l2cap_fixed_channel) break; 4843 if (!l2cap_fixed_channel->packet_handler) break; 4844 (*l2cap_fixed_channel->packet_handler)(UCD_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER); 4845 break; 4846 4847 #ifdef ENABLE_BLE 4848 case L2CAP_CID_BR_EDR_SECURITY_MANAGER: 4849 l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_BR_EDR_SECURITY_MANAGER); 4850 if ((l2cap_fixed_channel == NULL) || (l2cap_fixed_channel->packet_handler == NULL)){ 4851 // Pairing Failed 4852 l2cap_register_signaling_response(handle, (uint8_t) SM_PAIRING_FAILED, 0, L2CAP_CID_BR_EDR_SECURITY_MANAGER, SM_REASON_PAIRING_NOT_SUPPORTED); 4853 } else { 4854 (*l2cap_fixed_channel->packet_handler)(SM_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER); 4855 } 4856 break; 4857 #endif 4858 4859 default: 4860 if (broadcast_flag != 0) break; 4861 // Find channel for this channel_id and connection handle 4862 l2cap_channel = l2cap_get_channel_for_local_cid_and_handle(channel_id, handle); 4863 if (l2cap_channel != NULL){ 4864 l2cap_acl_classic_handler_for_channel(l2cap_channel, packet, size); 4865 } 4866 break; 4867 } 4868 #else 4869 UNUSED(handle); // ok: no code 4870 UNUSED(packet); // ok: no code 4871 UNUSED(size); // ok: no code 4872 #endif 4873 } 4874 4875 static void l2cap_acl_le_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){ 4876 #ifdef ENABLE_BLE 4877 4878 l2cap_fixed_channel_t * l2cap_fixed_channel; 4879 4880 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4881 l2cap_channel_t * l2cap_channel; 4882 #endif 4883 uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet); 4884 switch (channel_id) { 4885 4886 case L2CAP_CID_SIGNALING_LE: { 4887 uint8_t sig_id = packet[COMPLETE_L2CAP_HEADER + 1]; 4888 uint16_t len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER + 2); 4889 if ((COMPLETE_L2CAP_HEADER + 4u + len) > size) break; 4890 int valid = l2cap_le_signaling_handler_dispatch(handle, &packet[COMPLETE_L2CAP_HEADER], sig_id); 4891 if (!valid){ 4892 l2cap_register_signaling_response(handle, COMMAND_REJECT_LE, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN); 4893 } 4894 break; 4895 } 4896 4897 case L2CAP_CID_ATTRIBUTE_PROTOCOL: 4898 l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_ATTRIBUTE_PROTOCOL); 4899 if (!l2cap_fixed_channel) break; 4900 if (!l2cap_fixed_channel->packet_handler) break; 4901 (*l2cap_fixed_channel->packet_handler)(ATT_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER); 4902 break; 4903 4904 case L2CAP_CID_SECURITY_MANAGER_PROTOCOL: 4905 l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_SECURITY_MANAGER_PROTOCOL); 4906 if ((l2cap_fixed_channel == NULL) || (l2cap_fixed_channel->packet_handler == NULL)){ 4907 // Pairing Failed 4908 l2cap_register_signaling_response(handle, (uint8_t) SM_PAIRING_FAILED, 0, L2CAP_CID_SECURITY_MANAGER_PROTOCOL, SM_REASON_PAIRING_NOT_SUPPORTED); 4909 } else { 4910 (*l2cap_fixed_channel->packet_handler)(SM_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER); 4911 } 4912 break; 4913 4914 default: 4915 4916 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4917 l2cap_channel = l2cap_get_channel_for_local_cid_and_handle(channel_id, handle); 4918 if (l2cap_channel != NULL) { 4919 l2cap_credit_based_handle_pdu(l2cap_channel, packet, size); 4920 } 4921 #endif 4922 break; 4923 } 4924 #else 4925 UNUSED(handle); // ok: no code 4926 UNUSED(packet); // ok: no code 4927 UNUSED(size); // ok: no code 4928 #endif 4929 } 4930 4931 static void l2cap_acl_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ 4932 UNUSED(packet_type); // ok: registered with hci_register_acl_packet_handler 4933 UNUSED(channel); // ok: there is no channel 4934 4935 // Assert full L2CAP header present 4936 if (size < COMPLETE_L2CAP_HEADER) return; 4937 4938 // Dispatch to Classic or LE handler (SCO packets are not dispatched to L2CAP) 4939 hci_con_handle_t handle = READ_ACL_CONNECTION_HANDLE(packet); 4940 hci_connection_t *conn = hci_connection_for_handle(handle); 4941 if (!conn) return; 4942 if (conn->address_type == BD_ADDR_TYPE_ACL){ 4943 l2cap_acl_classic_handler(handle, packet, size); 4944 } else { 4945 l2cap_acl_le_handler(handle, packet, size); 4946 } 4947 4948 l2cap_run(); 4949 } 4950 4951 // Bluetooth 4.0 - allows to register handler for Attribute Protocol and Security Manager Protocol 4952 void l2cap_register_fixed_channel(btstack_packet_handler_t packet_handler, uint16_t channel_id) { 4953 l2cap_fixed_channel_t * channel = l2cap_fixed_channel_for_channel_id(channel_id); 4954 if (!channel) return; 4955 channel->packet_handler = packet_handler; 4956 } 4957 4958 #ifdef L2CAP_USES_CHANNELS 4959 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE 4960 void l2cap_finalize_channel_close(l2cap_channel_t * channel){ 4961 channel->state = L2CAP_STATE_CLOSED; 4962 l2cap_handle_channel_closed(channel); 4963 // discard channel 4964 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 4965 l2cap_free_channel_entry(channel); 4966 } 4967 #endif 4968 4969 #ifdef ENABLE_CLASSIC 4970 static inline l2cap_service_t * l2cap_get_service(uint16_t psm){ 4971 return l2cap_get_service_internal(&l2cap_services, psm); 4972 } 4973 4974 static void l2cap_update_minimal_security_level(void){ 4975 // update minimal service security level 4976 gap_security_level_t minimal_level = LEVEL_1; 4977 btstack_linked_list_iterator_t it; 4978 btstack_linked_list_iterator_init(&it, &l2cap_services); 4979 while (btstack_linked_list_iterator_has_next(&it)){ 4980 l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it); 4981 if (service->required_security_level > minimal_level){ 4982 minimal_level = service->required_security_level; 4983 }; 4984 } 4985 gap_set_minimal_service_security_level(minimal_level); 4986 } 4987 4988 uint8_t l2cap_register_service(btstack_packet_handler_t service_packet_handler, uint16_t psm, uint16_t mtu, gap_security_level_t security_level){ 4989 4990 log_info("L2CAP_REGISTER_SERVICE psm 0x%x mtu %u", psm, mtu); 4991 4992 // check for alread registered psm 4993 l2cap_service_t *service = l2cap_get_service(psm); 4994 if (service) { 4995 log_error("register: PSM %u already registered", psm); 4996 return L2CAP_SERVICE_ALREADY_REGISTERED; 4997 } 4998 4999 // alloc structure 5000 service = btstack_memory_l2cap_service_get(); 5001 if (!service) { 5002 log_error("register: no memory for l2cap_service_t"); 5003 return BTSTACK_MEMORY_ALLOC_FAILED; 5004 } 5005 5006 // fill in 5007 service->psm = psm; 5008 service->mtu = mtu; 5009 service->packet_handler = service_packet_handler; 5010 service->required_security_level = security_level; 5011 5012 // add to services list 5013 btstack_linked_list_add(&l2cap_services, (btstack_linked_item_t *) service); 5014 5015 l2cap_update_minimal_security_level(); 5016 5017 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL 5018 // enable page scan 5019 gap_connectable_control(1); 5020 #endif 5021 5022 5023 return ERROR_CODE_SUCCESS; 5024 } 5025 5026 uint8_t l2cap_unregister_service(uint16_t psm){ 5027 5028 log_info("unregister psm 0x%x", psm); 5029 5030 l2cap_service_t *service = l2cap_get_service(psm); 5031 if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST; 5032 btstack_linked_list_remove(&l2cap_services, (btstack_linked_item_t *) service); 5033 btstack_memory_l2cap_service_free(service); 5034 5035 l2cap_update_minimal_security_level(); 5036 5037 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL 5038 // disable page scan when no services registered 5039 if (btstack_linked_list_empty(&l2cap_services)) { 5040 gap_connectable_control(0); 5041 } 5042 #endif 5043 5044 return ERROR_CODE_SUCCESS; 5045 } 5046 #endif 5047 5048 5049 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 5050 5051 static void l2cap_credit_based_send_pdu(l2cap_channel_t *channel) { 5052 btstack_assert(channel != NULL); 5053 btstack_assert(channel->send_sdu_buffer != NULL); 5054 btstack_assert(channel->credits_outgoing > 0); 5055 5056 // send part of SDU 5057 hci_reserve_packet_buffer(); 5058 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 5059 uint8_t *l2cap_payload = acl_buffer + 8; 5060 uint16_t pos = 0; 5061 if (!channel->send_sdu_pos) { 5062 // store SDU len 5063 channel->send_sdu_pos += 2u; 5064 little_endian_store_16(l2cap_payload, pos, channel->send_sdu_len); 5065 pos += 2u; 5066 } 5067 uint16_t payload_size = btstack_min(channel->send_sdu_len + 2u - channel->send_sdu_pos, channel->remote_mps - pos); 5068 log_info("len %u, pos %u => payload %u, credits %u", channel->send_sdu_len, channel->send_sdu_pos, payload_size, 5069 channel->credits_outgoing); 5070 (void) memcpy(&l2cap_payload[pos], 5071 &channel->send_sdu_buffer[channel->send_sdu_pos - 2u], 5072 payload_size); // -2 for virtual SDU len 5073 pos += payload_size; 5074 channel->send_sdu_pos += payload_size; 5075 l2cap_setup_header(acl_buffer, channel->con_handle, 0, channel->remote_cid, pos); 5076 5077 channel->credits_outgoing--; 5078 5079 // update state (mark SDU as done) before calling hci_send_acl_packet_buffer (trigger l2cap_le_send_pdu again) 5080 bool done = channel->send_sdu_pos >= (channel->send_sdu_len + 2u); 5081 if (done) { 5082 channel->send_sdu_buffer = NULL; 5083 } 5084 5085 hci_send_acl_packet_buffer(8u + pos); 5086 5087 if (done) { 5088 // send done event 5089 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_PACKET_SENT); 5090 // inform about can send now 5091 l2cap_credit_based_notify_channel_can_send(channel); 5092 } 5093 } 5094 5095 static uint8_t l2cap_credit_based_send_data(l2cap_channel_t * channel, const uint8_t * data, uint16_t size){ 5096 5097 if (size > channel->remote_mtu){ 5098 log_error("l2cap send, cid 0x%02x, data length exceeds remote MTU.", channel->local_cid); 5099 return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU; 5100 } 5101 5102 if (channel->send_sdu_buffer){ 5103 log_info("l2cap send, cid 0x%02x, cannot send", channel->local_cid); 5104 return BTSTACK_ACL_BUFFERS_FULL; 5105 } 5106 5107 channel->send_sdu_buffer = data; 5108 channel->send_sdu_len = size; 5109 channel->send_sdu_pos = 0; 5110 5111 l2cap_notify_channel_can_send(); 5112 return ERROR_CODE_SUCCESS; 5113 } 5114 5115 static uint8_t l2cap_credit_based_provide_credits(uint16_t local_cid, uint16_t credits){ 5116 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5117 if (!channel) { 5118 log_error("le credits no channel for cid 0x%02x", local_cid); 5119 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5120 } 5121 5122 // check state 5123 if (channel->state != L2CAP_STATE_OPEN){ 5124 log_error("le credits but channel 0x%02x not open yet", local_cid); 5125 } 5126 5127 // ignore if set to automatic credits 5128 if (channel->automatic_credits) return ERROR_CODE_SUCCESS; 5129 5130 // assert incoming credits + credits <= 0xffff 5131 uint32_t total_credits = channel->credits_incoming; 5132 total_credits += channel->new_credits_incoming; 5133 total_credits += credits; 5134 if (total_credits > 0xffffu){ 5135 log_error("le credits overrun: current %u, scheduled %u, additional %u", channel->credits_incoming, 5136 channel->new_credits_incoming, credits); 5137 } 5138 5139 // set credits_granted 5140 channel->new_credits_incoming += credits; 5141 5142 // go 5143 l2cap_run(); 5144 return ERROR_CODE_SUCCESS; 5145 } 5146 5147 static void l2cap_credit_based_send_credits(l2cap_channel_t *channel) { 5148 log_info("l2cap: sending %u credits", channel->new_credits_incoming); 5149 channel->local_sig_id = l2cap_next_sig_id(); 5150 uint16_t new_credits = channel->new_credits_incoming; 5151 channel->new_credits_incoming = 0; 5152 channel->credits_incoming += new_credits; 5153 uint16_t signaling_cid = channel->address_type == BD_ADDR_TYPE_ACL ? L2CAP_CID_SIGNALING : L2CAP_CID_SIGNALING_LE; 5154 l2cap_send_general_signaling_packet(channel->con_handle, signaling_cid, L2CAP_FLOW_CONTROL_CREDIT_INDICATION, channel->local_sig_id, channel->local_cid, new_credits); 5155 } 5156 5157 // @return valid 5158 static bool l2cap_credit_based_handle_credit_indication(hci_con_handle_t handle, const uint8_t * command, uint16_t len){ 5159 // check size 5160 if (len < 4u) return false; 5161 5162 // find channel 5163 uint16_t remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 5164 l2cap_channel_t * channel = l2cap_get_channel_for_remote_handle_and_cid(handle, remote_cid); 5165 if (!channel) { 5166 log_error("credit: no channel for handle 0x%04x/cid 0x%02x", handle, remote_cid); 5167 return true; 5168 } 5169 uint16_t new_credits = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 5170 uint16_t credits_before = channel->credits_outgoing; 5171 channel->credits_outgoing += new_credits; 5172 // check for credit overrun 5173 if (credits_before > channel->credits_outgoing) { 5174 log_error("credit: new credits caused overrrun for cid 0x%02x, disconnecting", channel->local_cid); 5175 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5176 return true; 5177 } 5178 log_info("credit: %u credits for 0x%02x, now %u", new_credits, channel->local_cid, channel->credits_outgoing); 5179 l2cap_call_notify_channel_in_run = true; 5180 return true; 5181 } 5182 5183 static void l2cap_credit_based_handle_pdu(l2cap_channel_t * l2cap_channel, const uint8_t * packet, uint16_t size){ 5184 // ignore empty packets 5185 if (size == COMPLETE_L2CAP_HEADER) return; 5186 5187 // credit counting 5188 if (l2cap_channel->credits_incoming == 0u){ 5189 log_info("(e)CBM: packet received but no incoming credits"); 5190 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5191 return; 5192 } 5193 l2cap_channel->credits_incoming--; 5194 5195 // automatic credits 5196 if ((l2cap_channel->credits_incoming < L2CAP_CREDIT_BASED_FLOW_CONTROL_MODE_AUTOMATIC_CREDITS_WATERMARK) && l2cap_channel->automatic_credits){ 5197 l2cap_channel->new_credits_incoming = L2CAP_CREDIT_BASED_FLOW_CONTROL_MODE_AUTOMATIC_CREDITS_INCREMENT; 5198 } 5199 5200 // first fragment 5201 uint16_t pos = 0; 5202 if (!l2cap_channel->receive_sdu_len){ 5203 if (size < (COMPLETE_L2CAP_HEADER + 2)) return; 5204 uint16_t sdu_len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER); 5205 if (sdu_len > l2cap_channel->local_mtu) { 5206 log_info("(e)CBM: packet received larger than MTU"); 5207 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5208 return; 5209 } 5210 l2cap_channel->receive_sdu_len = sdu_len; 5211 l2cap_channel->receive_sdu_pos = 0; 5212 pos += 2u; 5213 size -= 2u; 5214 } 5215 5216 uint16_t fragment_size = size-COMPLETE_L2CAP_HEADER; 5217 5218 // check fragment_size 5219 if (fragment_size > l2cap_channel->local_mps) { 5220 log_info("(e)CBM: fragment larger than local MPS"); 5221 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5222 return; 5223 } 5224 5225 // check sdu overrun 5226 if ((l2cap_channel->receive_sdu_pos + fragment_size) > l2cap_channel->receive_sdu_len){ 5227 log_info("(e)CBM: fragments larger than SDU"); 5228 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5229 return; 5230 } 5231 5232 (void)memcpy(&l2cap_channel->receive_sdu_buffer[l2cap_channel->receive_sdu_pos], 5233 &packet[COMPLETE_L2CAP_HEADER + pos], 5234 fragment_size); 5235 l2cap_channel->receive_sdu_pos += fragment_size; 5236 5237 // done? 5238 log_debug("le packet pos %u, len %u", l2cap_channel->receive_sdu_pos, l2cap_channel->receive_sdu_len); 5239 if (l2cap_channel->receive_sdu_pos >= l2cap_channel->receive_sdu_len){ 5240 l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, l2cap_channel->receive_sdu_buffer, l2cap_channel->receive_sdu_len); 5241 l2cap_channel->receive_sdu_len = 0; 5242 } 5243 } 5244 5245 static void l2cap_credit_based_notify_channel_can_send(l2cap_channel_t *channel){ 5246 if (!channel->waiting_for_can_send_now) return; 5247 if (channel->send_sdu_buffer) return; 5248 channel->waiting_for_can_send_now = 0; 5249 log_debug("le can send now, local_cid 0x%x", channel->local_cid); 5250 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CAN_SEND_NOW); 5251 } 5252 #endif 5253 5254 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 5255 // 1BH2222 5256 static void l2cap_cbm_emit_incoming_connection(l2cap_channel_t *channel) { 5257 log_info("le incoming addr_type %u, addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x, remote_mtu %u", 5258 channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm, channel->local_cid, channel->remote_cid, channel->remote_mtu); 5259 uint8_t event[19]; 5260 event[0] = L2CAP_EVENT_CBM_INCOMING_CONNECTION; 5261 event[1] = sizeof(event) - 2u; 5262 event[2] = channel->address_type; 5263 reverse_bd_addr(channel->address, &event[3]); 5264 little_endian_store_16(event, 9, channel->con_handle); 5265 little_endian_store_16(event, 11, channel->psm); 5266 little_endian_store_16(event, 13, channel->local_cid); 5267 little_endian_store_16(event, 15, channel->remote_cid); 5268 little_endian_store_16(event, 17, channel->remote_mtu); 5269 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 5270 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 5271 } 5272 // 11BH22222 5273 static void l2cap_cbm_emit_channel_opened(l2cap_channel_t *channel, uint8_t status) { 5274 log_info("opened le channel status 0x%x addr_type %u addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x local_mtu %u, remote_mtu %u", 5275 status, channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm, 5276 channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu); 5277 uint8_t event[23]; 5278 event[0] = L2CAP_EVENT_CBM_CHANNEL_OPENED; 5279 event[1] = sizeof(event) - 2u; 5280 event[2] = status; 5281 event[3] = channel->address_type; 5282 reverse_bd_addr(channel->address, &event[4]); 5283 little_endian_store_16(event, 10, channel->con_handle); 5284 event[12] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0; 5285 little_endian_store_16(event, 13, channel->psm); 5286 little_endian_store_16(event, 15, channel->local_cid); 5287 little_endian_store_16(event, 17, channel->remote_cid); 5288 little_endian_store_16(event, 19, channel->local_mtu); 5289 little_endian_store_16(event, 21, channel->remote_mtu); 5290 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 5291 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 5292 } 5293 5294 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE 5295 void l2cap_cbm_finialize_channel_close(l2cap_channel_t * channel){ 5296 channel->state = L2CAP_STATE_CLOSED; 5297 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED); 5298 // discard channel 5299 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 5300 l2cap_free_channel_entry(channel); 5301 } 5302 5303 static inline l2cap_service_t * l2cap_cbm_get_service(uint16_t le_psm){ 5304 return l2cap_get_service_internal(&l2cap_le_services, le_psm); 5305 } 5306 5307 uint8_t l2cap_cbm_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, gap_security_level_t security_level){ 5308 5309 log_info("l2cap_cbm_register_service psm 0x%x", psm); 5310 5311 // check for alread registered psm 5312 l2cap_service_t *service = l2cap_cbm_get_service(psm); 5313 if (service) { 5314 return L2CAP_SERVICE_ALREADY_REGISTERED; 5315 } 5316 5317 // alloc structure 5318 service = btstack_memory_l2cap_service_get(); 5319 if (!service) { 5320 log_error("register: no memory for l2cap_service_t"); 5321 return BTSTACK_MEMORY_ALLOC_FAILED; 5322 } 5323 5324 // fill in 5325 service->psm = psm; 5326 service->mtu = 0; 5327 service->packet_handler = packet_handler; 5328 service->required_security_level = security_level; 5329 service->requires_authorization = false; 5330 5331 // add to services list 5332 btstack_linked_list_add(&l2cap_le_services, (btstack_linked_item_t *) service); 5333 5334 // done 5335 return ERROR_CODE_SUCCESS; 5336 } 5337 5338 uint8_t l2cap_cbm_unregister_service(uint16_t psm) { 5339 log_info("l2cap_cbm_unregister_service psm 0x%x", psm); 5340 l2cap_service_t *service = l2cap_cbm_get_service(psm); 5341 if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST; 5342 5343 btstack_linked_list_remove(&l2cap_le_services, (btstack_linked_item_t *) service); 5344 btstack_memory_l2cap_service_free(service); 5345 return ERROR_CODE_SUCCESS; 5346 } 5347 5348 uint8_t l2cap_cbm_accept_connection(uint16_t local_cid, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits){ 5349 // get channel 5350 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5351 if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5352 5353 // validate state 5354 if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){ 5355 return ERROR_CODE_COMMAND_DISALLOWED; 5356 } 5357 5358 // set state accept connection 5359 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT; 5360 channel->receive_sdu_buffer = receive_sdu_buffer; 5361 channel->local_mtu = mtu; 5362 channel->new_credits_incoming = initial_credits; 5363 channel->automatic_credits = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS; 5364 5365 // go 5366 l2cap_run(); 5367 return ERROR_CODE_SUCCESS; 5368 } 5369 5370 uint8_t l2cap_cbm_decline_connection(uint16_t local_cid, uint16_t result) { 5371 // get channel 5372 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5373 if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5374 5375 // validate state 5376 if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){ 5377 return ERROR_CODE_COMMAND_DISALLOWED; 5378 } 5379 5380 // set state decline connection 5381 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE; 5382 channel->reason = result; 5383 l2cap_run(); 5384 return ERROR_CODE_SUCCESS; 5385 } 5386 5387 static gap_security_level_t l2cap_cbm_security_level_for_connection(hci_con_handle_t con_handle){ 5388 uint8_t encryption_key_size = gap_encryption_key_size(con_handle); 5389 if (encryption_key_size == 0) return LEVEL_0; 5390 5391 bool authenticated = gap_authenticated(con_handle); 5392 if (!authenticated) return LEVEL_2; 5393 5394 return encryption_key_size == 16 ? LEVEL_4 : LEVEL_3; 5395 } 5396 5397 // used to handle pairing complete after triggering to increase 5398 static void l2cap_cbm_sm_packet_handler(uint8_t packet_type, uint16_t channel_nr, uint8_t *packet, uint16_t size) { 5399 UNUSED(channel_nr); 5400 UNUSED(size); 5401 UNUSED(packet_type); 5402 btstack_assert(packet_type == HCI_EVENT_PACKET); 5403 if (hci_event_packet_get_type(packet) != SM_EVENT_PAIRING_COMPLETE) return; 5404 hci_con_handle_t con_handle = sm_event_pairing_complete_get_handle(packet); 5405 btstack_linked_list_iterator_t it; 5406 btstack_linked_list_iterator_init(&it, &l2cap_channels); 5407 while (btstack_linked_list_iterator_has_next(&it)) { 5408 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 5409 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 5410 if (channel->con_handle != con_handle) continue; 5411 if (channel->state != L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE) continue; 5412 5413 // found channel, check security level 5414 if (l2cap_cbm_security_level_for_connection(con_handle) < channel->required_security_level){ 5415 // pairing failed or wasn't good enough, inform user 5416 l2cap_cbm_emit_channel_opened(channel, ERROR_CODE_INSUFFICIENT_SECURITY); 5417 // discard channel 5418 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 5419 l2cap_free_channel_entry(channel); 5420 } else { 5421 // send conn request now 5422 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST; 5423 l2cap_run(); 5424 } 5425 } 5426 } 5427 5428 uint8_t l2cap_cbm_create_channel(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, 5429 uint16_t psm, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits, gap_security_level_t security_level, 5430 uint16_t * out_local_cid) { 5431 5432 static btstack_packet_callback_registration_t sm_event_callback_registration; 5433 static bool sm_callback_registered = false; 5434 5435 log_info("create, handle 0x%04x psm 0x%x mtu %u", con_handle, psm, mtu); 5436 5437 hci_connection_t * connection = hci_connection_for_handle(con_handle); 5438 if (!connection) { 5439 log_error("no hci_connection for handle 0x%04x", con_handle); 5440 return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER; 5441 } 5442 5443 l2cap_channel_t * channel = l2cap_create_channel_entry(packet_handler, L2CAP_CHANNEL_TYPE_CHANNEL_CBM, connection->address, connection->address_type, psm, mtu, security_level); 5444 if (!channel) { 5445 return BTSTACK_MEMORY_ALLOC_FAILED; 5446 } 5447 log_info("created %p", channel); 5448 5449 // store local_cid 5450 if (out_local_cid){ 5451 *out_local_cid = channel->local_cid; 5452 } 5453 5454 // setup channel entry 5455 channel->con_handle = con_handle; 5456 channel->receive_sdu_buffer = receive_sdu_buffer; 5457 channel->new_credits_incoming = initial_credits; 5458 channel->automatic_credits = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS; 5459 5460 // add to connections list 5461 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 5462 5463 // check security level 5464 if (l2cap_cbm_security_level_for_connection(con_handle) < channel->required_security_level){ 5465 if (!sm_callback_registered){ 5466 sm_callback_registered = true; 5467 // lazy registration for SM events 5468 sm_event_callback_registration.callback = &l2cap_cbm_sm_packet_handler; 5469 sm_add_event_handler(&sm_event_callback_registration); 5470 } 5471 5472 // start pairing 5473 channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE; 5474 sm_request_pairing(con_handle); 5475 } else { 5476 // send conn request right away 5477 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST; 5478 l2cap_run(); 5479 } 5480 5481 return ERROR_CODE_SUCCESS; 5482 } 5483 5484 uint8_t l2cap_cbm_provide_credits(uint16_t local_cid, uint16_t credits){ 5485 return l2cap_credit_based_provide_credits(local_cid, credits); 5486 } 5487 #endif 5488 5489 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 5490 5491 uint8_t l2cap_ecbm_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, uint16_t min_remote_mtu, 5492 gap_security_level_t security_level, bool authorization_required) { 5493 5494 // check for already registered psm 5495 l2cap_service_t *service = l2cap_ecbm_get_service(psm); 5496 if (service) { 5497 return L2CAP_SERVICE_ALREADY_REGISTERED; 5498 } 5499 5500 // alloc structure 5501 service = btstack_memory_l2cap_service_get(); 5502 if (!service) { 5503 log_error("register: no memory for l2cap_service_t"); 5504 return BTSTACK_MEMORY_ALLOC_FAILED; 5505 } 5506 5507 // fill in 5508 service->psm = psm; 5509 service->mtu = min_remote_mtu; 5510 service->packet_handler = packet_handler; 5511 service->required_security_level = security_level; 5512 service->requires_authorization = authorization_required; 5513 5514 // add to services list 5515 btstack_linked_list_add(&l2cap_enhanced_services, (btstack_linked_item_t *) service); 5516 5517 // done 5518 return ERROR_CODE_SUCCESS; 5519 } 5520 5521 uint8_t l2cap_ecbm_unregister_service(uint16_t psm) { 5522 l2cap_service_t *service = l2cap_ecbm_get_service(psm); 5523 if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST; 5524 5525 btstack_linked_list_remove(&l2cap_enhanced_services, (btstack_linked_item_t *) service); 5526 btstack_memory_l2cap_service_free(service); 5527 return ERROR_CODE_SUCCESS; 5528 } 5529 5530 void l2cap_ecbm_mps_set_min(uint16_t mps_min){ 5531 l2cap_enhanced_mps_min = mps_min; 5532 } 5533 5534 void l2cap_ecbm_mps_set_max(uint16_t mps_max){ 5535 l2cap_enhanced_mps_max = mps_max; 5536 } 5537 5538 uint8_t l2cap_ecbm_create_channels(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, 5539 gap_security_level_t security_level, 5540 uint16_t psm, uint8_t num_channels, uint16_t initial_credits, uint16_t mtu, 5541 uint8_t ** receive_sdu_buffers, uint16_t * out_local_cid){ 5542 5543 log_info("create enhanced, handle 0x%04x psm 0x%x mtu %u", con_handle, psm, mtu); 5544 5545 hci_connection_t * connection = hci_connection_for_handle(con_handle); 5546 if (!connection) { 5547 log_error("no hci_connection for handle 0x%04x", con_handle); 5548 return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER; 5549 } 5550 5551 // setup all channels 5552 btstack_linked_list_t channels = NULL; 5553 uint8_t status = l2cap_ecbm_setup_channels(&channels, packet_handler, num_channels, connection, psm, mtu, 5554 security_level); 5555 uint16_t local_mps = btstack_min(l2cap_enhanced_mps_max, btstack_min(l2cap_max_le_mtu(), mtu)); 5556 5557 // add to connections list and set state + local_sig_id 5558 l2cap_channel_t * channel; 5559 uint8_t i = 0; 5560 uint8_t local_sig_id = l2cap_next_sig_id(); 5561 while (true) { 5562 channel = (l2cap_channel_t *) btstack_linked_list_pop(&channels); 5563 if (channel == NULL) break; 5564 channel->state = L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_REQUEST; 5565 channel->local_sig_id = local_sig_id; 5566 channel->local_mps = local_mps; 5567 channel->cid_index = i; 5568 channel->num_cids = num_channels; 5569 channel->credits_incoming = initial_credits; 5570 channel->automatic_credits = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS; 5571 channel->receive_sdu_buffer = receive_sdu_buffers[i]; 5572 // store local_cid 5573 if (out_local_cid){ 5574 out_local_cid[i] = channel->local_cid; 5575 } 5576 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 5577 i++; 5578 } 5579 5580 #if 0 5581 // check security level 5582 if (l2cap_le_security_level_for_connection(con_handle) < channel->required_security_level){ 5583 if (!sm_callback_registered){ 5584 sm_callback_registered = true; 5585 // lazy registration for SM events 5586 sm_event_callback_registration.callback = &l2cap_sm_packet_handler; 5587 sm_add_event_handler(&sm_event_callback_registration); 5588 } 5589 5590 // start pairing 5591 channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE; 5592 sm_request_pairing(con_handle); 5593 } else { 5594 // send conn request right away 5595 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST; 5596 l2cap_run(); 5597 } 5598 #endif 5599 5600 l2cap_run(); 5601 5602 return status; 5603 } 5604 5605 uint8_t l2cap_ecbm_accept_channels(uint16_t local_cid, uint8_t num_channels, uint16_t initial_credits, 5606 uint16_t receive_buffer_size, uint8_t ** receive_buffers, uint16_t * out_local_cids){ 5607 5608 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5609 if (!channel) { 5610 5611 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5612 } 5613 5614 uint16_t local_mps = btstack_min(l2cap_enhanced_mps_max, btstack_min(l2cap_max_le_mtu(), receive_buffer_size)); 5615 5616 // 5617 hci_con_handle_t con_handle = channel->con_handle; 5618 uint8_t local_sig_id = channel->local_sig_id; 5619 uint8_t channel_index = 0; 5620 btstack_linked_list_iterator_t it; 5621 btstack_linked_list_iterator_init(&it, &l2cap_channels); 5622 while (btstack_linked_list_iterator_has_next(&it)) { 5623 channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 5624 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 5625 if (channel->con_handle != con_handle) continue; 5626 if (channel->local_sig_id != local_sig_id) continue; 5627 if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT) continue; 5628 5629 if (channel_index < num_channels){ 5630 // assign buffer and cid 5631 out_local_cids[channel_index] = channel->local_cid; 5632 channel->receive_sdu_buffer = receive_buffers[channel_index]; 5633 channel->local_mtu = receive_buffer_size; 5634 channel->local_mps = local_mps; 5635 channel->credits_incoming = initial_credits; 5636 channel->automatic_credits = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS; 5637 channel_index++; 5638 } else { 5639 // clear local cid for response packet 5640 channel->local_cid = 0; 5641 channel->reason = L2CAP_ECBM_CONNECTION_RESULT_SOME_REFUSED_INSUFFICIENT_RESOURCES_AVAILABLE; 5642 } 5643 // update state 5644 channel->state = L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE; 5645 } 5646 l2cap_run_trigger(); 5647 return ERROR_CODE_SUCCESS; 5648 } 5649 5650 uint8_t l2cap_ecbm_decline_channels(uint16_t local_cid, uint16_t result){ 5651 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5652 if (!channel) { 5653 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5654 } 5655 // 5656 hci_con_handle_t con_handle = channel->con_handle; 5657 uint8_t local_sig_id = channel->local_sig_id; 5658 btstack_linked_list_iterator_t it; 5659 btstack_linked_list_iterator_init(&it, &l2cap_channels); 5660 while (btstack_linked_list_iterator_has_next(&it)) { 5661 channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 5662 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 5663 if (channel->con_handle != con_handle) continue; 5664 if (channel->local_sig_id != local_sig_id) continue; 5665 if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT) continue; 5666 5667 // prepare response 5668 channel->local_cid = 0; 5669 channel->reason = result; 5670 channel->state = L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE; 5671 } 5672 l2cap_run_trigger(); 5673 return ERROR_CODE_SUCCESS; 5674 } 5675 5676 uint8_t l2cap_ecbm_reconfigure_channels(uint8_t num_cids, uint16_t * local_cids, int16_t receive_buffer_size, uint8_t ** receive_buffers){ 5677 btstack_assert(receive_buffers != NULL); 5678 btstack_assert(local_cids != NULL); 5679 5680 if (num_cids > L2CAP_ECBM_MAX_CID_ARRAY_SIZE){ 5681 return ERROR_CODE_UNACCEPTABLE_CONNECTION_PARAMETERS; 5682 } 5683 5684 // check if all cids exist and have the same con handle 5685 uint8_t i; 5686 hci_con_handle_t con_handle = HCI_CON_HANDLE_INVALID; 5687 for (i = 0 ; i < num_cids ; i++){ 5688 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cids[i]); 5689 if (!channel) { 5690 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5691 } 5692 if (channel->state != L2CAP_STATE_OPEN){ 5693 return ERROR_CODE_COMMAND_DISALLOWED; 5694 } 5695 if (con_handle == HCI_CON_HANDLE_INVALID){ 5696 con_handle = channel->con_handle; 5697 } else if (con_handle != channel->con_handle){ 5698 return ERROR_CODE_UNACCEPTABLE_CONNECTION_PARAMETERS; 5699 } 5700 } 5701 // set renegotiation data and state 5702 uint8_t sig_id = l2cap_next_sig_id(); 5703 for (i = 0 ; i < num_cids ; i++){ 5704 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cids[i]); 5705 channel->cid_index = i; 5706 channel->num_cids = num_cids; 5707 channel->local_sig_id = sig_id; 5708 channel->renegotiate_mtu = receive_buffer_size; 5709 channel->renegotiate_sdu_buffer = receive_buffers[i]; 5710 channel->state = L2CAP_STATE_WILL_SEND_EHNANCED_RENEGOTIATION_REQUEST; 5711 } 5712 5713 5714 l2cap_run(); 5715 return ERROR_CODE_SUCCESS; 5716 } 5717 5718 uint8_t l2cap_ecbm_provide_credits(uint16_t local_cid, uint16_t credits){ 5719 return l2cap_credit_based_provide_credits(local_cid, credits); 5720 } 5721 #endif 5722 5723 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 5724 // @deprecated - please use l2cap_ertm_create_channel 5725 uint8_t l2cap_create_ertm_channel(btstack_packet_handler_t packet_handler, bd_addr_t address, uint16_t psm, 5726 l2cap_ertm_config_t * ertm_contig, uint8_t * buffer, uint32_t size, uint16_t * out_local_cid){ 5727 log_error("deprecated - please use l2cap_ertm_create_channel"); 5728 return l2cap_ertm_create_channel(packet_handler, address, psm, ertm_contig, buffer, size, out_local_cid); 5729 }; 5730 5731 // @deprecated - please use l2cap_ertm_accept_connection 5732 uint8_t l2cap_accept_ertm_connection(uint16_t local_cid, l2cap_ertm_config_t * ertm_contig, uint8_t * buffer, uint32_t size){ 5733 log_error("deprecated - please use l2cap_ertm_accept_connection"); 5734 return l2cap_ertm_accept_connection(local_cid, ertm_contig, buffer, size); 5735 } 5736 #endif 5737 5738 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 5739 // @deprecated - please use l2cap_cbm_register_service 5740 uint8_t l2cap_le_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, gap_security_level_t security_level){ 5741 log_error("deprecated - please use l2cap_cbm_register_service"); 5742 return l2cap_cbm_register_service(packet_handler, psm, security_level); 5743 } 5744 5745 // @deprecated - please use l2cap_cbm_unregister_service 5746 uint8_t l2cap_le_unregister_service(uint16_t psm){ 5747 log_error("deprecated - please use l2cap_cbm_unregister_service"); 5748 return l2cap_cbm_unregister_service(psm); 5749 } 5750 5751 // @deprecated - please use l2cap_cbm_accept_connection 5752 uint8_t l2cap_le_accept_connection(uint16_t local_cid, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits){ 5753 log_error("deprecated - please use l2cap_cbm_accept_connection"); 5754 return l2cap_cbm_accept_connection(local_cid, receive_sdu_buffer, mtu, initial_credits); 5755 } 5756 5757 // @deprecated - please use l2cap_cbm_decline_connection 5758 uint8_t l2cap_le_decline_connection(uint16_t local_cid){ 5759 log_error("deprecated - please use l2cap_cbm_decline_connection"); 5760 return l2cap_cbm_decline_connection(local_cid, L2CAP_CBM_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE); 5761 } 5762 5763 // @deprecated - please use l2cap_cbm_create_channel 5764 uint8_t l2cap_le_create_channel(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, 5765 uint16_t psm, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits, gap_security_level_t security_level, 5766 uint16_t * out_local_cid){ 5767 log_error("deprecated - please use l2cap_cbm_create_channel"); 5768 return l2cap_cbm_create_channel(packet_handler, con_handle, psm, receive_sdu_buffer, mtu, initial_credits, security_level, out_local_cid); 5769 } 5770 5771 // @deprecated - please use l2cap_cbm_provide_credits 5772 uint8_t l2cap_le_provide_credits(uint16_t local_cid, uint16_t credits){ 5773 log_error("deprecated - please use l2cap_cbm_provide_credits"); 5774 return l2cap_cbm_provide_credits(local_cid, credits); 5775 } 5776 5777 // @deprecated - please use l2cap_can_send_packet_now 5778 bool l2cap_le_can_send_now(uint16_t local_cid){ 5779 log_error("deprecated - please use l2cap_can_send_packet_now"); 5780 return l2cap_can_send_packet_now(local_cid); 5781 } 5782 5783 // @deprecated - please use l2cap_request_can_send_now_event 5784 uint8_t l2cap_le_request_can_send_now_event(uint16_t local_cid){ 5785 log_error("deprecated - please use l2cap_request_can_send_now_event"); 5786 return l2cap_request_can_send_now_event(local_cid); 5787 } 5788 5789 // @deprecated - please use l2cap_cbm_send_data 5790 uint8_t l2cap_le_send_data(uint16_t local_cid, const uint8_t * data, uint16_t size){ 5791 log_error("deprecated - please use l2cap_cbm_send_data"); 5792 return l2cap_send(local_cid, data, size); 5793 } 5794 5795 // @deprecated - please use l2cap_disconnect 5796 uint8_t l2cap_le_disconnect(uint16_t local_cid){ 5797 log_error("deprecated - please use l2cap_disconnect"); 5798 return l2cap_disconnect(local_cid); 5799 } 5800 #endif 5801 5802 #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION 5803 static void fuzz_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size) { 5804 } 5805 void l2cap_setup_test_channels_fuzz(void) { 5806 bd_addr_t address; 5807 l2cap_channel_t * channel; 5808 5809 // 0x41 1setup classic basic 5810 channel = l2cap_create_channel_entry(fuzz_packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, address, 5811 BD_ADDR_TYPE_ACL, 0x01, 100, LEVEL_4); 5812 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 5813 5814 // 0x42 setup le cbm 5815 channel = l2cap_create_channel_entry(fuzz_packet_handler, L2CAP_CHANNEL_TYPE_CHANNEL_CBM, address, 5816 BD_ADDR_TYPE_LE_PUBLIC, 0x03, 100, LEVEL_4); 5817 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 5818 5819 // 0x43 setup le ecbm 5820 channel = l2cap_create_channel_entry(fuzz_packet_handler, L2CAP_CHANNEL_TYPE_CHANNEL_ECBM, 5821 address, BD_ADDR_TYPE_LE_PUBLIC, 0x05, 100, LEVEL_4); 5822 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 5823 } 5824 5825 void l2cap_free_channels_fuzz(void){ 5826 btstack_linked_list_iterator_t it; 5827 btstack_linked_list_iterator_init(&it, &l2cap_channels); 5828 while (btstack_linked_list_iterator_has_next(&it)){ 5829 l2cap_channel_t * channel = (l2cap_channel_t*) btstack_linked_list_iterator_next(&it); 5830 bool fixed_channel = false; 5831 switch (channel->channel_type) { 5832 case L2CAP_CHANNEL_TYPE_FIXED_LE: 5833 case L2CAP_CHANNEL_TYPE_FIXED_CLASSIC: 5834 case L2CAP_CHANNEL_TYPE_CONNECTIONLESS: 5835 fixed_channel = true; 5836 break; 5837 default: 5838 break; 5839 } 5840 if (fixed_channel == false) { 5841 btstack_linked_list_iterator_remove(&it); 5842 btstack_memory_l2cap_channel_free(channel); 5843 } 5844 } 5845 } 5846 #endif