Lines Matching refs:att_server

82 static void att_run_for_context(att_server_t * att_server, att_connection_t * att_connection);
86 static void att_server_persistent_ccc_restore(att_server_t * att_server, att_connection_t * att_con…
87 static void att_server_persistent_ccc_clear(att_server_t * att_server);
88 static void att_server_handle_att_pdu(att_server_t * att_server, att_connection_t * att_connection,…
131 if (hci_connection->att_server.state == state) { in att_server_connections_for_state()
132 *att_server_out = &hci_connection->att_server; in att_server_connections_for_state()
142 if (eatt_bearer->att_server.state == state) { in att_server_connections_for_state()
143 *att_server_out = &eatt_bearer->att_server; in att_server_connections_for_state()
154 static void att_server_request_can_send_now(att_server_t * att_server, att_connection_t * att_conne… in att_server_request_can_send_now() argument
155 switch (att_server->bearer_type){ in att_server_request_can_send_now()
165 l2cap_request_can_send_now_event(att_server->l2cap_cid); in att_server_request_can_send_now()
174 static bool att_server_can_send_packet(att_server_t * att_server, att_connection_t * att_connection… in att_server_can_send_packet() argument
175 switch (att_server->bearer_type) { in att_server_can_send_packet()
184 return l2cap_can_send_packet_now(att_server->l2cap_cid); in att_server_can_send_packet()
248 static void att_emit_connected_event(att_server_t * att_server, att_connection_t * att_connection){ in att_emit_connected_event() argument
253 event[pos++] = att_server->peer_addr_type; in att_emit_connected_event()
254 reverse_bd_addr(att_server->peer_address, &event[pos]); in att_emit_connected_event()
283 att_server_t * att_server = &hci_connection->att_server; in att_handle_value_indication_timeout() local
284 uint16_t att_handle = att_server->value_indication_handle; in att_handle_value_indication_timeout()
294 att_server_t * att_server; in att_server_event_packet_handler() local
309 att_server = &hci_connection->att_server; in att_server_event_packet_handler()
311att_server->peer_addr_type = gap_subevent_le_connection_complete_get_peer_address_type(packet); in att_server_event_packet_handler()
312 … gap_subevent_le_connection_complete_get_peer_address(packet, att_server->peer_address); in att_server_event_packet_handler()
316 att_server->state = ATT_SERVER_IDLE; in att_server_event_packet_handler()
317 att_server->bearer_type = ATT_BEARER_UNENHANCED_LE; in att_server_event_packet_handler()
327 att_server->ir_le_device_db_index = sm_le_device_index(con_handle); in att_server_event_packet_handler()
328 att_server->ir_lookup_active = false; in att_server_event_packet_handler()
329 att_server->pairing_active = false; in att_server_event_packet_handler()
331 att_emit_connected_event(att_server, att_connection); in att_server_event_packet_handler()
359 att_server = &hci_connection->att_server; in att_server_event_packet_handler()
369 att_server_persistent_ccc_restore(att_server, att_connection); in att_server_event_packet_handler()
372 att_run_for_context(att_server, att_connection); in att_server_event_packet_handler()
380 att_server = &hci_connection->att_server; in att_server_event_packet_handler()
384 att_server->pairing_active = false; in att_server_event_packet_handler()
385 att_server->state = ATT_SERVER_IDLE; in att_server_event_packet_handler()
386 if (att_server->value_indication_handle != 0u){ in att_server_event_packet_handler()
387 btstack_run_loop_remove_timer(&att_server->value_indication_timer); in att_server_event_packet_handler()
388 uint16_t att_handle = att_server->value_indication_handle; in att_server_event_packet_handler()
389 att_server->value_indication_handle = 0u; // reset error state in att_server_event_packet_handler()
403 att_server = &hci_connection->att_server; in att_server_event_packet_handler()
405 att_server->ir_lookup_active = true; in att_server_event_packet_handler()
412 att_server = &hci_connection->att_server; in att_server_event_packet_handler()
413 att_server->ir_lookup_active = false; in att_server_event_packet_handler()
414att_server->ir_le_device_db_index = sm_event_identity_resolving_succeeded_get_index(packet); in att_server_event_packet_handler()
416 att_run_for_context(att_server, att_connection); in att_server_event_packet_handler()
423 att_server = &hci_connection->att_server; in att_server_event_packet_handler()
425 att_server->ir_lookup_active = false; in att_server_event_packet_handler()
426 att_server->ir_le_device_db_index = -1; in att_server_event_packet_handler()
427 att_run_for_context(att_server, att_connection); in att_server_event_packet_handler()
440 att_server = &hci_connection->att_server; in att_server_event_packet_handler()
442 att_server->pairing_active = true; in att_server_event_packet_handler()
443 if (att_server->ir_le_device_db_index < 0) break; in att_server_event_packet_handler()
444 att_server_persistent_ccc_clear(att_server); in att_server_event_packet_handler()
446 att_server->ir_le_device_db_index = -1; in att_server_event_packet_handler()
455 att_server = &hci_connection->att_server; in att_server_event_packet_handler()
456 att_server->pairing_active = false; in att_server_event_packet_handler()
457 att_server->ir_le_device_db_index = sm_event_identity_created_get_index(packet); in att_server_event_packet_handler()
458 att_run_for_context(att_server, att_connection); in att_server_event_packet_handler()
467 att_server = &hci_connection->att_server; in att_server_event_packet_handler()
468 att_server->pairing_active = false; in att_server_event_packet_handler()
469 att_run_for_context(att_server, att_connection); in att_server_event_packet_handler()
478 att_server = &hci_connection->att_server; in att_server_event_packet_handler()
480 att_server_request_can_send_now(att_server, att_connection); in att_server_event_packet_handler()
493 att_server_send_prepared(const att_server_t *att_server, const att_connection_t *att_connection, ui… in att_server_send_prepared() argument
497 switch (att_server->bearer_type) { in att_server_send_prepared()
503 status = l2cap_send_prepared(att_server->l2cap_cid, size); in att_server_send_prepared()
509 status = l2cap_send(att_server->l2cap_cid, buffer, size); in att_server_send_prepared()
521 att_server_t * att_server = NULL; in att_signed_write_handle_cmac_result() local
523 …t_server_connections_for_state(ATT_SERVER_W4_SIGNED_WRITE_VALIDATION, &att_server, &att_connection… in att_signed_write_handle_cmac_result()
531 if (memcmp(hash_flipped, &att_server->request_buffer[att_server->request_size-8], 8) != 0){ in att_signed_write_handle_cmac_result()
536 att_server->state = ATT_SERVER_IDLE; in att_signed_write_handle_cmac_result()
545 …uint32_t counter_packet = little_endian_read_32(att_server->request_buffer, att_server->request_si… in att_signed_write_handle_cmac_result()
546 le_device_db_remote_counter_set(att_server->ir_le_device_db_index, counter_packet+1); in att_signed_write_handle_cmac_result()
547 att_server->state = ATT_SERVER_REQUEST_RECEIVED_AND_VALIDATED; in att_signed_write_handle_cmac_result()
548 att_server_request_can_send_now(att_server, att_connection); in att_signed_write_handle_cmac_result()
553 static void att_server_handle_response_pending(att_server_t *att_server, const att_connection_t *at… in att_server_handle_response_pending() argument
557 att_server->state = ATT_SERVER_RESPONSE_PENDING; in att_server_handle_response_pending()
591 att_server_process_validated_request(att_server_t *att_server, att_connection_t *att_connection, ui… in att_server_process_validated_request() argument
603 …if ((att_server->bearer_type != ATT_BEARER_UNENHANCED_LE) && (att_server->request_buffer[0] == ATT… in att_server_process_validated_request()
611 …att_response_size = att_handle_request(att_connection, att_server->request_buffer, att_server->req… in att_server_process_validated_request()
616 … att_server_handle_response_pending(att_server, att_connection, eatt_buffer, att_response_size); in att_server_process_validated_request()
644 att_server->state = ATT_SERVER_IDLE; in att_server_process_validated_request()
652 (void) att_server_send_prepared(att_server, att_connection, eatt_buffer, att_response_size); in att_server_process_validated_request()
665 att_server_t * att_server = &hci_connection->att_server; in att_server_response_ready() local
667 if (att_server->state != ATT_SERVER_RESPONSE_PENDING) return ERROR_CODE_COMMAND_DISALLOWED; in att_server_response_ready()
669 att_server->state = ATT_SERVER_REQUEST_RECEIVED_AND_VALIDATED; in att_server_response_ready()
670 att_server_request_can_send_now(att_server, att_connection); in att_server_response_ready()
675 static void att_run_for_context(att_server_t * att_server, att_connection_t * att_connection){ in att_run_for_context() argument
676 switch (att_server->state){ in att_run_for_context()
678 switch (att_server->bearer_type){ in att_run_for_context()
702 if (att_server->pairing_active) break; in att_run_for_context()
705 if (att_server->request_buffer[0] == ATT_SIGNED_WRITE_COMMAND){ in att_run_for_context()
709 att_server->state = ATT_SERVER_IDLE; in att_run_for_context()
712 if (att_server->request_size < (3 + 12)) { in att_run_for_context()
714 att_server->state = ATT_SERVER_IDLE; in att_run_for_context()
717 if (att_server->ir_lookup_active){ in att_run_for_context()
720 if (att_server->ir_le_device_db_index < 0){ in att_run_for_context()
722 att_server->state = ATT_SERVER_IDLE; in att_run_for_context()
727 …uint32_t counter_packet = little_endian_read_32(att_server->request_buffer, att_server->request_si… in att_run_for_context()
728 … uint32_t counter_db = le_device_db_remote_counter_get(att_server->ir_le_device_db_index); in att_run_for_context()
732 att_server->state = ATT_SERVER_IDLE; in att_run_for_context()
738 le_device_db_remote_csrk_get(att_server->ir_le_device_db_index, csrk); in att_run_for_context()
739 att_server->state = ATT_SERVER_W4_SIGNED_WRITE_VALIDATION; in att_run_for_context()
741 log_info_hexdump( &att_server->request_buffer[att_server->request_size-8], 8); in att_run_for_context()
742 uint16_t attribute_handle = little_endian_read_16(att_server->request_buffer, 1); in att_run_for_context()
743 …_cmac_signed_write_start(csrk, att_server->request_buffer[0], attribute_handle, att_server->reques… in att_run_for_context()
748 att_server->state = ATT_SERVER_REQUEST_RECEIVED_AND_VALIDATED; in att_run_for_context()
749 att_server_request_can_send_now(att_server, att_connection); in att_run_for_context()
757 static bool att_server_data_ready_for_phase(att_server_t * att_server, att_server_run_phase_t phas… in att_server_data_ready_for_phase() argument
760 return att_server->state == ATT_SERVER_REQUEST_RECEIVED_AND_VALIDATED; in att_server_data_ready_for_phase()
762 …return (!btstack_linked_list_empty(&att_server->indication_requests) && (att_server->value_indicat… in att_server_data_ready_for_phase()
764 return (!btstack_linked_list_empty(&att_server->notification_requests)); in att_server_data_ready_for_phase()
771 static void att_server_trigger_send_for_phase(att_server_t * att_server, att_connection_t * att_con… in att_server_trigger_send_for_phase() argument
775 att_server_process_validated_request(att_server, att_connection, NULL); in att_server_trigger_send_for_phase()
778 client = (btstack_context_callback_registration_t*) att_server->indication_requests; in att_server_trigger_send_for_phase()
779 … btstack_linked_list_remove(&att_server->indication_requests, (btstack_linked_item_t *) client); in att_server_trigger_send_for_phase()
783 client = (btstack_context_callback_registration_t*) att_server->notification_requests; in att_server_trigger_send_for_phase()
784 … btstack_linked_list_remove(&att_server->notification_requests, (btstack_linked_item_t *) client); in att_server_trigger_send_for_phase()
808 att_server_t * att_server = &connection->att_server; in att_server_handle_can_send_now() local
811 bool data_ready = att_server_data_ready_for_phase(att_server, phase); in att_server_handle_can_send_now()
828 att_server_trigger_send_for_phase(att_server, att_connection, phase); in att_server_handle_can_send_now()
830 can_send_now = att_server_can_send_packet(att_server, att_connection); in att_server_handle_can_send_now()
831 data_ready = att_server_data_ready_for_phase(att_server, phase); in att_server_handle_can_send_now()
862 att_server_t * att_server = &request_hci_connection->att_server; in att_server_handle_can_send_now() local
864 att_server_request_can_send_now(att_server, att_connection); in att_server_handle_can_send_now()
867 static void att_server_handle_att_pdu(att_server_t * att_server, att_connection_t * att_connection,… in att_server_handle_att_pdu() argument
880 if ((opcode == ATT_HANDLE_VALUE_CONFIRMATION) && (att_server->value_indication_handle != 0u)){ in att_server_handle_att_pdu()
881 btstack_run_loop_remove_timer(&att_server->value_indication_timer); in att_server_handle_att_pdu()
882 uint16_t att_handle = att_server->value_indication_handle; in att_server_handle_att_pdu()
883 att_server->value_indication_handle = 0u; in att_server_handle_att_pdu()
885 att_server_request_can_send_now(att_server, att_connection); in att_server_handle_att_pdu()
897 if (size > sizeof(att_server->request_buffer)) { in att_server_handle_att_pdu()
898 …ize %u > att_server->request_buffer %u", packet[0], size, (int) sizeof(att_server->request_buffer)… in att_server_handle_att_pdu()
904 if (att_server->state == ATT_SERVER_W4_SIGNED_WRITE_VALIDATION){ in att_server_handle_att_pdu()
910 att_server->state = ATT_SERVER_IDLE; in att_server_handle_att_pdu()
915 if (att_server->state != ATT_SERVER_IDLE){ in att_server_handle_att_pdu()
916 log_info("skip att pdu 0x%02x as server not idle (state %u)", packet[0], att_server->state); in att_server_handle_att_pdu()
921 att_server->state = ATT_SERVER_REQUEST_RECEIVED; in att_server_handle_att_pdu()
922 att_server->request_size = size; in att_server_handle_att_pdu()
923 (void)memcpy(att_server->request_buffer, packet, size); in att_server_handle_att_pdu()
925 att_run_for_context(att_server, att_connection); in att_server_handle_att_pdu()
931 att_server_t * att_server; in att_server_dispatch_packet_handler() local
946 att_server = &hci_connection->att_server; in att_server_dispatch_packet_handler()
948 att_server->bearer_type = ATT_BEARER_UNENHANCED_CLASSIC; in att_server_dispatch_packet_handler()
949 att_server->peer_addr_type = BD_ADDR_TYPE_ACL; in att_server_dispatch_packet_handler()
950 l2cap_event_channel_opened_get_address(packet, att_server->peer_address); in att_server_dispatch_packet_handler()
954 att_server->state = ATT_SERVER_IDLE; in att_server_dispatch_packet_handler()
961 …onnection opened %s, l2cap cid %04x, mtu %u", bd_addr_to_str(address), att_server->l2cap_cid, att_… in att_server_dispatch_packet_handler()
971 att_emit_connected_event(att_server, att_connection); in att_server_dispatch_packet_handler()
975 att_server_persistent_ccc_restore(att_server, att_connection); in att_server_dispatch_packet_handler()
978 att_server->pairing_active = 0; in att_server_dispatch_packet_handler()
1001 att_server = &hci_connection->att_server; in att_server_dispatch_packet_handler()
1003 att_server_handle_att_pdu(att_server, att_connection, packet, size); in att_server_dispatch_packet_handler()
1011 att_server = &hci_connection->att_server; in att_server_dispatch_packet_handler()
1013 if (att_server->l2cap_cid == channel) { in att_server_dispatch_packet_handler()
1014 att_server_handle_att_pdu(att_server, att_connection, packet, size); in att_server_dispatch_packet_handler()
1036 att_server_t * att_server = &hci_connection->att_server; in att_server_persistent_ccc_write() local
1037 int le_device_index = att_server->ir_le_device_db_index; in att_server_persistent_ccc_write()
1038 …%04x of remote %s, le device id %d", value, att_handle, bd_addr_to_str(att_server->peer_address), … in att_server_persistent_ccc_write()
1127 static void att_server_persistent_ccc_clear(att_server_t * att_server){ in att_server_persistent_ccc_clear() argument
1128 int le_device_index = att_server->ir_le_device_db_index; in att_server_persistent_ccc_clear()
1129 …log_info("Clear CCC values of remote %s, le device id %d", bd_addr_to_str(att_server->peer_address… in att_server_persistent_ccc_clear()
1151 static void att_server_persistent_ccc_restore(att_server_t * att_server, att_connection_t * att_con… in att_server_persistent_ccc_restore() argument
1152 int le_device_index = att_server->ir_le_device_db_index; in att_server_persistent_ccc_restore()
1153 …log_info("Restore CCC values of remote %s, le device id %d", bd_addr_to_str(att_server->peer_addre… in att_server_persistent_ccc_restore()
1335 att_server_t * att_server = &hci_connection->att_server; in att_server_can_send_packet_now() local
1337 return att_server_can_send_packet(att_server, att_connection); in att_server_can_send_packet_now()
1353 att_server_t * att_server = &hci_connection->att_server; in att_server_request_to_send_notification() local
1355 …bool added = btstack_linked_list_add_tail(&att_server->notification_requests, (btstack_linked_item… in att_server_request_to_send_notification()
1356 att_server_request_can_send_now(att_server, att_connection); in att_server_request_to_send_notification()
1367 att_server_t * att_server = &hci_connection->att_server; in att_server_request_to_send_indication() local
1369 …bool added = btstack_linked_list_add_tail(&att_server->indication_requests, (btstack_linked_item_t… in att_server_request_to_send_indication()
1370 att_server_request_can_send_now(att_server, att_connection); in att_server_request_to_send_indication()
1380 att_server_t * att_server = NULL; in att_server_prepare_server_message() local
1388 att_server = &eatt_bearer->att_server; in att_server_prepare_server_message()
1396 att_server = &hci_connection->att_server; in att_server_prepare_server_message()
1401 if (att_server == NULL) return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER; in att_server_prepare_server_message()
1402 if (!att_server_can_send_packet(att_server, att_connection)) return BTSTACK_ACL_BUFFERS_FULL; in att_server_prepare_server_message()
1410 *out_att_server = att_server; in att_server_prepare_server_message()
1416 att_server_t * att_server = NULL; in att_server_notify() local
1420 …uint8_t status = att_server_prepare_server_message(con_handle, &att_server, &att_connection, &pack… in att_server_notify()
1427 return att_server_send_prepared(att_server, att_connection, NULL, size); in att_server_notify()
1442 att_server_t * att_server = NULL; in att_server_multiple_notify() local
1446 …uint8_t status = att_server_prepare_server_message(con_handle, &att_server, &att_connection, &pack… in att_server_multiple_notify()
1453 return att_server_send_prepared(att_server, att_connection, packet_buffer, size); in att_server_multiple_notify()
1458 att_server_t * att_server = NULL; in att_server_indicate() local
1462 …uint8_t status = att_server_prepare_server_message(con_handle, &att_server, &att_connection, &pack… in att_server_indicate()
1467 if (att_server->value_indication_handle != 0u) { in att_server_indicate()
1469 if (att_server->bearer_type == ATT_BEARER_ENHANCED_LE){ in att_server_indicate()
1476 att_server->value_indication_handle = attribute_handle; in att_server_indicate()
1477 …btstack_run_loop_set_timer_handler(&att_server->value_indication_timer, att_handle_value_indicatio… in att_server_indicate()
1478 btstack_run_loop_set_timer(&att_server->value_indication_timer, ATT_TRANSACTION_TIMEOUT_MS); in att_server_indicate()
1479 btstack_run_loop_add_timer(&att_server->value_indication_timer); in att_server_indicate()
1483 return att_server_send_prepared(att_server, att_connection, NULL, size); in att_server_indicate()
1513 if (eatt_bearer->att_server.l2cap_cid == cid) { in att_server_eatt_bearer_for_cid()
1545 att_server_t * att_server; in att_server_eatt_handler() local
1555 att_server = &eatt_bearer->att_server; in att_server_eatt_handler()
1557 att_server_handle_att_pdu(att_server, att_connection, packet, size); in att_server_eatt_handler()
1567 att_server = &eatt_bearer->att_server; in att_server_eatt_handler()
1570 btstack_assert(att_server->state == ATT_SERVER_REQUEST_RECEIVED_AND_VALIDATED); in att_server_eatt_handler()
1571 … att_server_process_validated_request(att_server, att_connection, eatt_bearer->send_buffer); in att_server_eatt_handler()
1578 att_server = &eatt_bearer->att_server; in att_server_eatt_handler()
1580 att_server_handle_att_pdu(att_server, att_connection, packet, size); in att_server_eatt_handler()
1590 if (hci_connection->att_server.eatt_outgoing_active) { in att_server_eatt_handler()
1591 hci_connection->att_server.incoming_connection_request = true; in att_server_eatt_handler()
1602 eatt_bearers[i]->att_server.bearer_type = ATT_BEARER_ENHANCED_LE; in att_server_eatt_handler()
1612 eatt_bearers[i]->att_server.l2cap_cid = cids[i]; in att_server_eatt_handler()