Home | History | Annotate | Download | only in bnep

Lines Matching defs:p_bcb

44 void bnepu_process_peer_multicast_filter_set(tBNEP_CONN* p_bcb,
46 void bnepu_send_peer_multicast_filter_rsp(tBNEP_CONN* p_bcb,
61 tBNEP_CONN* p_bcb;
64 for (xx = 0, p_bcb = bnep_cb.bcb; xx < BNEP_MAX_CONNECTIONS; xx++, p_bcb++) {
65 if ((p_bcb->con_state != BNEP_STATE_IDLE) && (p_bcb->l2cap_cid == cid))
66 return (p_bcb);
85 tBNEP_CONN* p_bcb;
88 for (xx = 0, p_bcb = bnep_cb.bcb; xx < BNEP_MAX_CONNECTIONS; xx++, p_bcb++) {
89 if (p_bcb->con_state != BNEP_STATE_IDLE) {
90 if (!memcmp((uint8_t*)(p_bcb->rem_bda), p_bda, BD_ADDR_LEN))
91 return (p_bcb);
110 tBNEP_CONN* p_bcb;
113 for (xx = 0, p_bcb = bnep_cb.bcb; xx < BNEP_MAX_CONNECTIONS; xx++, p_bcb++) {
114 if (p_bcb->con_state == BNEP_STATE_IDLE) {
115 alarm_free(p_bcb->conn_timer);
116 memset((uint8_t*)p_bcb, 0, sizeof(tBNEP_CONN));
117 p_bcb->conn_timer = alarm_new("bnep.conn_timer");
119 memcpy((uint8_t*)(p_bcb->rem_bda), (uint8_t*)p_rem_bda, BD_ADDR_LEN);
120 p_bcb->handle = xx + 1;
121 p_bcb->xmit_q = fixed_queue_new(SIZE_MAX);
123 return (p_bcb);
140 void bnepu_release_bcb(tBNEP_CONN* p_bcb) {
142 alarm_free(p_bcb->conn_timer);
143 p_bcb->conn_timer = NULL;
146 p_bcb->con_state = BNEP_STATE_IDLE;
147 p_bcb->p_pending_data = NULL;
150 while (!fixed_queue_is_empty(p_bcb->xmit_q)) {
151 osi_free(fixed_queue_try_dequeue(p_bcb->xmit_q));
153 fixed_queue_free(p_bcb->xmit_q, NULL);
154 p_bcb->xmit_q = NULL;
166 void bnep_send_conn_req(tBNEP_CONN* p_bcb) {
171 p_bcb->dst_uuid.uu.uuid16);
182 UINT8_TO_BE_STREAM(p, p_bcb->dst_uuid.len);
184 if (p_bcb->dst_uuid.len == 2) {
185 UINT16_TO_BE_STREAM(p, p_bcb->dst_uuid.uu.uuid16);
186 UINT16_TO_BE_STREAM(p, p_bcb->src_uuid.uu.uuid16);
187 } else if (p_bcb->dst_uuid.len == 4) {
188 UINT32_TO_BE_STREAM(p, p_bcb->dst_uuid.uu.uuid32);
189 UINT32_TO_BE_STREAM(p, p_bcb->src_uuid.uu.uuid32);
190 } else if (p_bcb->dst_uuid.len == 16) {
191 memcpy(p, p_bcb->dst_uuid.uu.uuid128, p_bcb->dst_uuid.len);
192 p += p_bcb->dst_uuid.len;
193 memcpy(p, p_bcb->src_uuid.uu.uuid128, p_bcb->dst_uuid.len);
194 p += p_bcb->dst_uuid.len;
197 p_bcb->dst_uuid.uu.uuid16, p_bcb->dst_uuid.len);
202 bnepu_check_send_packet(p_bcb, p_buf);
214 void bnep_send_conn_responce(tBNEP_CONN* p_bcb, uint16_t resp_code) {
219 p_bcb->l2cap_cid);
234 bnepu_check_send_packet(p_bcb, p_buf);
246 void bnepu_send_peer_our_filters(tBNEP_CONN* p_bcb) {
262 UINT16_TO_BE_STREAM(p, (4 * p_bcb->sent_num_filters));
263 for (xx = 0; xx < p_bcb->sent_num_filters; xx++) {
264 UINT16_TO_BE_STREAM(p, p_bcb->sent_prot_filter_start[xx]);
265 UINT16_TO_BE_STREAM(p, p_bcb->sent_prot_filter_end[xx]);
268 p_buf->len = 4 + (4 * p_bcb->sent_num_filters);
270 bnepu_check_send_packet(p_bcb, p_buf);
272 p_bcb->con_flags |= BNEP_FLAGS_FILTER_RESP_PEND;
275 alarm_set_on_queue(p_bcb->conn_timer, BNEP_FILTER_SET_TIMEOUT_MS,
276 bnep_conn_timer_timeout, p_bcb, btu_general_alarm_queue);
288 void bnepu_send_peer_our_multi_filters(tBNEP_CONN* p_bcb) {
304 UINT16_TO_BE_STREAM(p, (2 * BD_ADDR_LEN * p_bcb->sent_mcast_filters));
305 for (xx = 0; xx < p_bcb->sent_mcast_filters; xx++) {
306 memcpy(p, p_bcb->sent_mcast_filter_start[xx], BD_ADDR_LEN);
308 memcpy(p, p_bcb->sent_mcast_filter_end[xx], BD_ADDR_LEN);
312 p_buf->len = 4 + (2 * BD_ADDR_LEN * p_bcb->sent_mcast_filters);
314 bnepu_check_send_packet(p_bcb, p_buf);
316 p_bcb->con_flags |= BNEP_FLAGS_MULTI_RESP_PEND;
319 alarm_set_on_queue(p_bcb->conn_timer, BNEP_FILTER_SET_TIMEOUT_MS,
320 bnep_conn_timer_timeout, p_bcb, btu_general_alarm_queue);
332 void bnepu_send_peer_filter_rsp(tBNEP_CONN* p_bcb, uint16_t response_code) {
351 bnepu_check_send_packet(p_bcb, p_buf);
363 void bnep_send_command_not_understood(tBNEP_CONN* p_bcb, uint8_t cmd_code) {
369 p_bcb->l2cap_cid, cmd_code);
384 bnepu_check_send_packet(p_bcb, p_buf);
398 void bnepu_check_send_packet(tBNEP_CONN* p_bcb, BT_HDR* p_buf) {
400 p_bcb->l2cap_cid);
401 if (p_bcb->con_flags & BNEP_FLAGS_L2CAP_CONGESTED) {
402 if (fixed_queue_length(p_bcb->xmit_q) >= BNEP_MAX_XMITQ_DEPTH) {
404 p_bcb->l2cap_cid);
408 fixed_queue_enqueue(p_bcb->xmit_q, p_buf);
411 L2CA_DataWrite(p_bcb->l2cap_cid, p_buf);
426 void bnepu_build_bnep_hdr(tBNEP_CONN* p_bcb, BT_HDR* p_buf, uint16_t protocol,
439 if (memcmp(p_dest_addr, p_bcb->rem_bda, BD_ADDR_LEN))
528 void bnep_process_setup_conn_req(tBNEP_CONN* p_bcb, uint8_t* p_setup,
531 p_bcb->l2cap_cid);
533 if (p_bcb->con_state != BNEP_STATE_CONN_SETUP &&
534 p_bcb->con_state != BNEP_STATE_SEC_CHECKING &&
535 p_bcb->con_state != BNEP_STATE_CONNECTED) {
536 BNEP_TRACE_ERROR("BNEP - setup request in bad state %d", p_bcb->con_state);
537 bnep_send_conn_responce(p_bcb, BNEP_SETUP_CONN_NOT_ALLOWED);
543 if (p_bcb->con_flags & BNEP_FLAGS_SETUP_RCVD) {
550 if (p_bcb->con_state != BNEP_STATE_CONNECTED &&
551 (!(p_bcb->con_flags & BNEP_FLAGS_SETUP_RCVD)) &&
552 (p_bcb->con_flags & BNEP_FLAGS_IS_ORIG)) {
554 p_bcb->con_state);
555 bnep_send_conn_responce(p_bcb, BNEP_SETUP_CONN_NOT_ALLOWED);
559 if (p_bcb->con_state == BNEP_STATE_CONNECTED) {
560 memcpy((uint8_t*)&(p_bcb->prv_src_uuid), (uint8_t*)&(p_bcb->src_uuid),
562 memcpy((uint8_t*)&(p_bcb->prv_dst_uuid), (uint8_t*)&(p_bcb->dst_uuid),
566 p_bcb->dst_uuid.len = p_bcb->src_uuid.len = len;
568 if (p_bcb->dst_uuid.len == 2) {
570 BE_STREAM_TO_UINT16(p_bcb->src_uuid.uu.uuid16, p_setup);
571 BE_STREAM_TO_UINT16(p_bcb->dst_uuid.uu.uuid16, p_setup);
574 if (p_bcb->con_state == BNEP_STATE_CONNECTED &&
575 p_bcb->src_uuid.uu.uuid16 == p_bcb->prv_src_uuid.uu.uuid16 &&
576 p_bcb->dst_uuid.uu.uuid16 == p_bcb->prv_dst_uuid.uu.uuid16) {
577 bnep_send_conn_responce(p_bcb, BNEP_SETUP_CONN_OK);
580 } else if (p_bcb->dst_uuid.len == 4) {
581 BE_STREAM_TO_UINT32(p_bcb->src_uuid.uu.uuid32, p_setup);
582 BE_STREAM_TO_UINT32(p_bcb->dst_uuid.uu.uuid32, p_setup);
583 } else if (p_bcb->dst_uuid.len == 16) {
584 memcpy(p_bcb->src_uuid.uu.uuid128, p_setup, p_bcb->src_uuid.len);
585 p_setup += p_bcb->src_uuid.len;
586 memcpy(p_bcb->dst_uuid.uu.uuid128, p_setup, p_bcb->dst_uuid.len);
587 p_setup += p_bcb->dst_uuid.len;
589 BNEP_TRACE_ERROR("BNEP - Bad UID len %d in ConnReq", p_bcb->dst_uuid.len);
590 bnep_send_conn_responce(p_bcb, BNEP_SETUP_INVALID_UUID_SIZE);
594 p_bcb->con_state = BNEP_STATE_SEC_CHECKING;
595 p_bcb->con_flags |= BNEP_FLAGS_SETUP_RCVD;
599 p_bcb->src_uuid.uu.uuid16);
601 if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)
602 bnep_sec_check_complete(p_bcb->rem_bda, p_bcb, BTM_SUCCESS);
606 p_bcb->rem_bda, BT_PSM_BNEP, false, BTM_SEC_PROTO_BNEP,
607 bnep_get_uuid32(&(p_bcb->src_uuid)), &bnep_sec_check_complete, p_bcb);
623 void bnep_process_setup_conn_responce(tBNEP_CONN* p_bcb, uint8_t* p_setup) {
629 if (p_bcb->con_state != BNEP_STATE_CONN_SETUP) {
631 BNEP_TRACE_ERROR("BNEP - setup response in bad state %d", p_bcb->con_state);
636 if (!(p_bcb->con_flags & BNEP_FLAGS_IS_ORIG)) {
638 p_bcb->con_state);
665 if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED) {
669 p_bcb->con_state = BNEP_STATE_CONNECTED;
670 p_bcb->con_flags &= (~BNEP_FLAGS_SETUP_RCVD);
671 memcpy((uint8_t*)&(p_bcb->src_uuid), (uint8_t*)&(p_bcb->prv_src_uuid),
673 memcpy((uint8_t*)&(p_bcb->dst_uuid), (uint8_t*)&(p_bcb->prv_dst_uuid),
677 alarm_cancel(p_bcb->conn_timer);
678 p_bcb->re_transmits = 0;
682 (*bnep_cb.p_conn_state_cb)(p_bcb->handle, p_bcb->rem_bda, resp, true);
688 L2CA_DisconnectReq(p_bcb->l2cap_cid);
691 if ((p_bcb->con_flags & BNEP_FLAGS_IS_ORIG) && (bnep_cb.p_conn_state_cb))
692 (*bnep_cb.p_conn_state_cb)(p_bcb->handle, p_bcb->rem_bda, resp, false);
694 bnepu_release_bcb(p_bcb);
700 bnep_connected(p_bcb);
714 uint8_t* bnep_process_control_packet(tBNEP_CONN* p_bcb, uint8_t* p,
747 if (!is_ext) bnep_process_setup_conn_req(p_bcb, p, (uint8_t)len);
753 if (!is_ext) bnep_process_setup_conn_responce(p_bcb, p);
765 bnepu_process_peer_filter_set(p_bcb, p, len);
771 bnepu_process_peer_filter_rsp(p_bcb, p);
784 bnepu_process_peer_multicast_filter_set(p_bcb, p, len);
790 bnepu_process_multicast_filter_rsp(p_bcb, p);
797 bnep_send_command_not_understood(p_bcb, control_type);
825 void bnepu_process_peer_filter_set(tBNEP_CONN* p_bcb, uint8_t* p_filters,
832 if ((p_bcb->con_state != BNEP_STATE_CONNECTED) &&
833 (!(p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED))) {
843 bnepu_send_peer_filter_rsp(p_bcb, BNEP_FILTER_CRL_BAD_RANGE);
865 bnepu_send_peer_filter_rsp(p_bcb, resp_code);
870 (*bnep_cb.p_filter_ind_cb)(p_bcb->handle, true, 0, len, p_filters);
872 p_bcb->rcvd_num_filters = num_filters;
877 p_bcb->rcvd_prot_filter_start[xx] = start;
878 p_bcb->rcvd_prot_filter_end[xx] = end;
881 bnepu_send_peer_filter_rsp(p_bcb, resp_code);
894 void bnepu_process_peer_filter_rsp(tBNEP_CONN* p_bcb, uint8_t* p_data) {
900 if ((p_bcb->con_state != BNEP_STATE_CONNECTED) &&
901 (!(p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED))) {
903 p_bcb->con_state);
908 if (!(p_bcb->con_flags & BNEP_FLAGS_FILTER_RESP_PEND)) {
914 alarm_cancel(p_bcb->conn_timer);
915 p_bcb->con_flags &= ~BNEP_FLAGS_FILTER_RESP_PEND;
916 p_bcb->re_transmits = 0;
924 (*bnep_cb.p_filter_ind_cb)(p_bcb->handle, false, result, 0, NULL);
937 void bnepu_process_multicast_filter_rsp(tBNEP_CONN* p_bcb, uint8_t* p_data) {
943 if ((p_bcb->con_state != BNEP_STATE_CONNECTED) &&
944 (!(p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED))) {
946 p_bcb->con_state);
951 if (!(p_bcb->con_flags & BNEP_FLAGS_MULTI_RESP_PEND)) {
957 alarm_cancel(p_bcb->conn_timer);
958 p_bcb->con_flags &= ~BNEP_FLAGS_MULTI_RESP_PEND;
959 p_bcb->re_transmits = 0;
967 (*bnep_cb.p_mfilter_ind_cb)(p_bcb->handle, false, result, 0, NULL);
981 void bnepu_process_peer_multicast_filter_set(tBNEP_CONN* p_bcb,
987 if ((p_bcb->con_state != BNEP_STATE_CONNECTED) &&
988 (!(p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED))) {
997 bnepu_send_peer_multicast_filter_rsp(p_bcb, BNEP_FILTER_CRL_BAD_RANGE);
1003 bnepu_send_peer_multicast_filter_rsp(p_bcb, BNEP_FILTER_CRL_MAX_REACHED);
1016 bnepu_send_peer_multicast_filter_rsp(p_bcb, BNEP_FILTER_CRL_BAD_RANGE);
1024 p_bcb->rcvd_mcast_filters = num_filters;
1026 memcpy(p_bcb->rcvd_mcast_filter_start[xx], p_filters, BD_ADDR_LEN);
1027 memcpy(p_bcb->rcvd_mcast_filter_end[xx], p_filters + BD_ADDR_LEN,
1033 if ((memcmp(null_bda, p_bcb->rcvd_mcast_filter_start[xx], BD_ADDR_LEN) ==
1035 (memcmp(null_bda, p_bcb->rcvd_mcast_filter_end[xx], BD_ADDR_LEN) ==
1037 p_bcb->rcvd_mcast_filters = 0xFFFF;
1042 BNEP_TRACE_EVENT("BNEP multicast filters %d", p_bcb->rcvd_mcast_filters);
1043 bnepu_send_peer_multicast_filter_rsp(p_bcb, resp_code);
1046 (*bnep_cb.p_mfilter_ind_cb)(p_bcb->handle, true, 0, len, p_filters);
1058 void bnepu_send_peer_multicast_filter_rsp(tBNEP_CONN* p_bcb,
1078 bnepu_check_send_packet(p_bcb, p_buf);
1094 tBNEP_CONN* p_bcb = (tBNEP_CONN*)p_ref_data;
1099 if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)
1105 if (p_bcb->con_state != BNEP_STATE_SEC_CHECKING) {
1108 p_bcb->con_state);
1113 if (!(p_bcb->con_flags & BNEP_FLAGS_SETUP_RCVD)) {
1115 if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED) {
1118 (*bnep_cb.p_conn_state_cb)(p_bcb->handle, p_bcb->rem_bda,
1121 p_bcb->con_state = BNEP_STATE_CONNECTED;
1122 memcpy((uint8_t*)&(p_bcb->src_uuid), (uint8_t*)&(p_bcb->prv_src_uuid),
1124 memcpy((uint8_t*)&(p_bcb->dst_uuid), (uint8_t*)&(p_bcb->prv_dst_uuid),
1129 L2CA_DisconnectReq(p_bcb->l2cap_cid);
1133 (*bnep_cb.p_conn_state_cb)(p_bcb->handle, p_bcb->rem_bda,
1136 bnepu_release_bcb(p_bcb);
1142 p_bcb->con_state = BNEP_STATE_CONN_SETUP;
1144 bnep_send_conn_req(p_bcb);
1145 alarm_set_on_queue(p_bcb->conn_timer, BNEP_CONN_TIMEOUT_MS,
1146 bnep_conn_timer_timeout, p_bcb, btu_general_alarm_queue);
1152 bnep_send_conn_responce(p_bcb, BNEP_SETUP_CONN_NOT_ALLOWED);
1153 if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED) {
1156 p_bcb->con_state = BNEP_STATE_CONNECTED;
1157 p_bcb->con_flags &= (~BNEP_FLAGS_SETUP_RCVD);
1158 memcpy((uint8_t*)&(p_bcb->src_uuid), (uint8_t*)&(p_bcb->prv_src_uuid),
1160 memcpy((uint8_t*)&(p_bcb->dst_uuid), (uint8_t*)&(p_bcb->prv_dst_uuid),
1165 L2CA_DisconnectReq(p_bcb->l2cap_cid);
1167 bnepu_release_bcb(p_bcb);
1172 p_bcb->con_state = BNEP_STATE_CONN_SETUP;
1173 (*bnep_cb.p_conn_ind_cb)(p_bcb->handle, p_bcb->rem_bda, &p_bcb->dst_uuid,
1174 &p_bcb->src_uuid, is_role_change);
1177 bnep_send_conn_responce(p_bcb, resp_code);
1178 bnep_connected(p_bcb);
1195 tBNEP_RESULT bnep_is_packet_allowed(tBNEP_CONN* p_bcb, BD_ADDR p_dest_addr,
1198 if (p_bcb->rcvd_num_filters) {
1218 for (i = 0; i < p_bcb->rcvd_num_filters; i++) {
1219 if ((p_bcb->rcvd_prot_filter_start[i] <= proto) &&
1220 (proto <= p_bcb->rcvd_prot_filter_end[i]))
1224 if (i == p_bcb->rcvd_num_filters) {
1231 if ((p_dest_addr[0] & 0x01) && p_bcb->rcvd_mcast_filters) {
1235 if (p_bcb->rcvd_mcast_filters != 0xFFFF) {
1237 for (i = 0; i < p_bcb->rcvd_mcast_filters; i++) {
1238 if ((memcmp(p_bcb->rcvd_mcast_filter_start[i], p_dest_addr,
1240 (memcmp(p_bcb->rcvd_mcast_filter_end[i], p_dest_addr,
1251 if ((p_bcb->rcvd_mcast_filters == 0xFFFF) ||
1252 (i == p_bcb->rcvd_mcast_filters)) {