Home | History | Annotate | Download | only in bnep

Lines Matching refs:p_bcb

40 void bnepu_process_peer_multicast_filter_set (tBNEP_CONN *p_bcb, UINT8 *p_filters, UINT16 len);
41 void bnepu_send_peer_multicast_filter_rsp (tBNEP_CONN *p_bcb, UINT16 response_code);
57 tBNEP_CONN *p_bcb;
60 for (xx = 0, p_bcb = bnep_cb.bcb; xx < BNEP_MAX_CONNECTIONS; xx++, p_bcb++)
62 if ((p_bcb->con_state != BNEP_STATE_IDLE) && (p_bcb->l2cap_cid == cid))
63 return (p_bcb);
84 tBNEP_CONN *p_bcb;
87 for (xx = 0, p_bcb = bnep_cb.bcb; xx < BNEP_MAX_CONNECTIONS; xx++, p_bcb++)
89 if (p_bcb->con_state != BNEP_STATE_IDLE)
91 if (!memcmp ((UINT8 *)(p_bcb->rem_bda), p_bda, BD_ADDR_LEN))
92 return (p_bcb);
113 tBNEP_CONN *p_bcb;
116 for (xx = 0, p_bcb = bnep_cb.bcb; xx < BNEP_MAX_CONNECTIONS; xx++, p_bcb++)
118 if (p_bcb->con_state == BNEP_STATE_IDLE)
120 memset ((UINT8 *)p_bcb, 0, sizeof (tBNEP_CONN));
122 p_bcb->conn_tle.param = (UINT32) p_bcb;
124 memcpy ((UINT8 *)(p_bcb->rem_bda), (UINT8 *)p_rem_bda, BD_ADDR_LEN);
125 p_bcb->handle = xx + 1;
127 return (p_bcb);
145 void bnepu_release_bcb (tBNEP_CONN *p_bcb)
148 btu_stop_timer (&p_bcb->conn_tle);
151 p_bcb->con_state = BNEP_STATE_IDLE;
152 p_bcb->p_pending_data = NULL;
155 while (p_bcb->xmit_q.count)
157 GKI_freebuf (GKI_dequeue (&p_bcb->xmit_q));
171 void bnep_send_conn_req (tBNEP_CONN *p_bcb)
176 BNEP_TRACE_DEBUG ("BNEP sending setup req with dst uuid %x", p_bcb->dst_uuid.uu.uuid16);
192 UINT8_TO_BE_STREAM (p, p_bcb->dst_uuid.len);
194 if (p_bcb->dst_uuid.len == 2)
196 UINT16_TO_BE_STREAM (p, p_bcb->dst_uuid.uu.uuid16);
197 UINT16_TO_BE_STREAM (p, p_bcb->src_uuid.uu.uuid16);
200 else if (p_bcb->dst_uuid.len == 4)
202 UINT32_TO_BE_STREAM (p, p_bcb->dst_uuid.uu.uuid32);
203 UINT32_TO_BE_STREAM (p, p_bcb->src_uuid.uu.uuid32);
207 memcpy (p, p_bcb->dst_uuid.uu.uuid128, p_bcb->dst_uuid.len);
208 p += p_bcb->dst_uuid.len;
209 memcpy (p, p_bcb->src_uuid.uu.uuid128, p_bcb->dst_uuid.len);
210 p += p_bcb->dst_uuid.len;
216 bnepu_check_send_packet (p_bcb, p_buf);
229 void bnep_send_conn_responce (tBNEP_CONN *p_bcb, UINT16 resp_code)
234 BNEP_TRACE_EVENT ("BNEP - bnep_send_conn_responce for CID: 0x%x", p_bcb->l2cap_cid);
254 bnepu_check_send_packet (p_bcb, p_buf);
268 void bnepu_send_peer_our_filters (tBNEP_CONN *p_bcb)
292 UINT16_TO_BE_STREAM (p, (4 * p_bcb->sent_num_filters));
293 for (xx = 0; xx < p_bcb->sent_num_filters; xx++)
295 UINT16_TO_BE_STREAM (p, p_bcb->sent_prot_filter_start[xx]);
296 UINT16_TO_BE_STREAM (p, p_bcb->sent_prot_filter_end[xx]);
299 p_buf->len = 4 + (4 * p_bcb->sent_num_filters);
301 bnepu_check_send_packet (p_bcb, p_buf);
303 p_bcb->con_flags |= BNEP_FLAGS_FILTER_RESP_PEND;
306 btu_start_timer (&p_bcb->conn_tle, BTU_TTYPE_BNEP, BNEP_FILTER_SET_TIMEOUT);
320 void bnepu_send_peer_our_multi_filters (tBNEP_CONN *p_bcb)
344 UINT16_TO_BE_STREAM (p, (2 * BD_ADDR_LEN * p_bcb->sent_mcast_filters));
345 for (xx = 0; xx < p_bcb->sent_mcast_filters; xx++)
347 memcpy (p, p_bcb->sent_mcast_filter_start[xx], BD_ADDR_LEN);
349 memcpy (p, p_bcb->sent_mcast_filter_end[xx], BD_ADDR_LEN);
353 p_buf->len = 4 + (2 * BD_ADDR_LEN * p_bcb->sent_mcast_filters);
355 bnepu_check_send_packet (p_bcb, p_buf);
357 p_bcb->con_flags |= BNEP_FLAGS_MULTI_RESP_PEND;
360 btu_start_timer (&p_bcb->conn_tle, BTU_TTYPE_BNEP, BNEP_FILTER_SET_TIMEOUT);
374 void bnepu_send_peer_filter_rsp (tBNEP_CONN *p_bcb, UINT16 response_code)
399 bnepu_check_send_packet (p_bcb, p_buf);
412 void bnep_send_command_not_understood (tBNEP_CONN *p_bcb, UINT8 cmd_code)
417 BNEP_TRACE_EVENT ("BNEP - bnep_send_command_not_understood for CID: 0x%x, cmd 0x%x", p_bcb->l2cap_cid, cmd_code);
437 bnepu_check_send_packet (p_bcb, p_buf);
453 void bnepu_check_send_packet (tBNEP_CONN *p_bcb, BT_HDR *p_buf)
455 BNEP_TRACE_EVENT ("BNEP - bnepu_check_send_packet for CID: 0x%x", p_bcb->l2cap_cid);
456 if (p_bcb->con_flags & BNEP_FLAGS_L2CAP_CONGESTED)
458 if (p_bcb->xmit_q.count >= BNEP_MAX_XMITQ_DEPTH)
460 BNEP_TRACE_EVENT ("BNEP - congested, dropping buf, CID: 0x%x", p_bcb->l2cap_cid);
466 GKI_enqueue (&p_bcb->xmit_q, p_buf);
471 L2CA_DataWrite (p_bcb->l2cap_cid, p_buf);
487 void bnepu_build_bnep_hdr (tBNEP_CONN *p_bcb, BT_HDR *p_buf, UINT16 protocol,
498 if (memcmp (p_dest_addr, p_bcb->rem_bda, BD_ADDR_LEN))
585 void bnep_process_setup_conn_req (tBNEP_CONN *p_bcb, UINT8 *p_setup, UINT8 len)
587 BNEP_TRACE_EVENT ("BNEP - bnep_process_setup_conn_req for CID: 0x%x", p_bcb->l2cap_cid);
589 if (p_bcb->con_state != BNEP_STATE_CONN_SETUP &&
590 p_bcb->con_state != BNEP_STATE_SEC_CHECKING &&
591 p_bcb->con_state != BNEP_STATE_CONNECTED)
593 BNEP_TRACE_ERROR ("BNEP - setup request in bad state %d", p_bcb->con_state);
594 bnep_send_conn_responce (p_bcb, BNEP_SETUP_CONN_NOT_ALLOWED);
599 if (p_bcb->con_flags & BNEP_FLAGS_SETUP_RCVD)
606 if (p_bcb->con_state != BNEP_STATE_CONNECTED &&
607 (!(p_bcb->con_flags & BNEP_FLAGS_SETUP_RCVD)) &&
608 (p_bcb->con_flags & BNEP_FLAGS_IS_ORIG))
610 BNEP_TRACE_ERROR ("BNEP - setup request when we are originator", p_bcb->con_state);
611 bnep_send_conn_responce (p_bcb, BNEP_SETUP_CONN_NOT_ALLOWED);
615 if (p_bcb->con_state == BNEP_STATE_CONNECTED)
617 memcpy ((UINT8 *)&(p_bcb->prv_src_uuid), (UINT8 *)&(p_bcb->src_uuid), sizeof (tBT_UUID));
618 memcpy ((UINT8 *)&(p_bcb->prv_dst_uuid), (UINT8 *)&(p_bcb->dst_uuid), sizeof (tBT_UUID));
621 p_bcb->dst_uuid.len = p_bcb->src_uuid.len = len;
623 if (p_bcb->dst_uuid.len == 2)
626 BE_STREAM_TO_UINT16 (p_bcb->src_uuid.uu.uuid16, p_setup);
627 BE_STREAM_TO_UINT16 (p_bcb->dst_uuid.uu.uuid16, p_setup);
630 if (p_bcb->con_state == BNEP_STATE_CONNECTED &&
631 p_bcb->src_uuid.uu.uuid16 == p_bcb->prv_src_uuid.uu.uuid16 &&
632 p_bcb->dst_uuid.uu.uuid16 == p_bcb->prv_dst_uuid.uu.uuid16)
634 bnep_send_conn_responce (p_bcb, BNEP_SETUP_CONN_OK);
639 else if (p_bcb->dst_uuid.len == 4)
641 BE_STREAM_TO_UINT32 (p_bcb->src_uuid.uu.uuid32, p_setup);
642 BE_STREAM_TO_UINT32 (p_bcb->dst_uuid.uu.uuid32, p_setup);
644 else if (p_bcb->dst_uuid.len == 16)
646 memcpy (p_bcb->src_uuid.uu.uuid128, p_setup, p_bcb->src_uuid.len);
647 p_setup += p_bcb->src_uuid.len;
648 memcpy (p_bcb->dst_uuid.uu.uuid128, p_setup, p_bcb->dst_uuid.len);
649 p_setup += p_bcb->dst_uuid.len;
654 BNEP_TRACE_ERROR ("BNEP - Bad UID len %d in ConnReq", p_bcb->dst_uuid.len);
655 bnep_send_conn_responce (p_bcb, BNEP_SETUP_INVALID_UUID_SIZE);
659 p_bcb->con_state = BNEP_STATE_SEC_CHECKING;
660 p_bcb->con_flags |= BNEP_FLAGS_SETUP_RCVD;
662 BNEP_TRACE_EVENT ("BNEP initiating security check for incoming call for uuid 0x%x", p_bcb->src_uuid.uu.uuid16);
664 if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)
665 bnep_sec_check_complete (p_bcb->rem_bda, p_bcb, BTM_SUCCESS);
668 btm_sec_mx_access_request (p_bcb->rem_bda, BT_PSM_BNEP, FALSE,
669 BTM_SEC_PROTO_BNEP, bnep_get_uuid32(&(p_bcb->src_uuid)),
670 &bnep_sec_check_complete, p_bcb);
687 void bnep_process_setup_conn_responce (tBNEP_CONN *p_bcb, UINT8 *p_setup)
694 if (p_bcb->con_state != BNEP_STATE_CONN_SETUP)
697 BNEP_TRACE_ERROR ("BNEP - setup response in bad state %d", p_bcb->con_state);
702 if (!(p_bcb->con_flags & BNEP_FLAGS_IS_ORIG))
704 BNEP_TRACE_ERROR ("BNEP - setup response when we are not originator", p_bcb->con_state);
733 if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)
738 p_bcb->con_state = BNEP_STATE_CONNECTED;
739 p_bcb->con_flags &= (~BNEP_FLAGS_SETUP_RCVD);
740 memcpy ((UINT8 *)&(p_bcb->src_uuid), (UINT8 *)&(p_bcb->prv_src_uuid), sizeof (tBT_UUID));
741 memcpy ((UINT8 *)&(p_bcb->dst_uuid), (UINT8 *)&(p_bcb->prv_dst_uuid), sizeof (tBT_UUID));
744 btu_stop_timer (&p_bcb->conn_tle);
745 p_bcb->re_transmits = 0;
749 (*bnep_cb.p_conn_state_cb) (p_bcb->handle, p_bcb->rem_bda, resp, TRUE);
757 L2CA_DisconnectReq (p_bcb->l2cap_cid);
760 if ((p_bcb->con_flags & BNEP_FLAGS_IS_ORIG) && (bnep_cb.p_conn_state_cb))
761 (*bnep_cb.p_conn_state_cb) (p_bcb->handle, p_bcb->rem_bda, resp, FALSE);
763 bnepu_release_bcb (p_bcb);
769 bnep_connected (p_bcb);
784 UINT8 *bnep_process_control_packet (tBNEP_CONN *p_bcb, UINT8 *p, UINT16 *rem_len, BOOLEAN is_ext)
818 bnep_process_setup_conn_req (p_bcb, p, (UINT8)len);
825 bnep_process_setup_conn_responce (p_bcb, p);
838 bnepu_process_peer_filter_set (p_bcb, p, len);
844 bnepu_process_peer_filter_rsp (p_bcb, p);
857 bnepu_process_peer_multicast_filter_set (p_bcb, p, len);
863 bnepu_process_multicast_filter_rsp (p_bcb, p);
870 bnep_send_command_not_understood (p_bcb, control_type);
901 void bnepu_process_peer_filter_set (tBNEP_CONN *p_bcb, UINT8 *p_filters, UINT16 len)
909 if ((p_bcb->con_state != BNEP_STATE_CONNECTED) &&
910 (!(p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)))
921 bnepu_send_peer_filter_rsp (p_bcb, BNEP_FILTER_CRL_BAD_RANGE);
949 bnepu_send_peer_filter_rsp (p_bcb, resp_code);
954 (*bnep_cb.p_filter_ind_cb) (p_bcb->handle, TRUE, 0, len, p_filters);
956 p_bcb->rcvd_num_filters = num_filters;
962 p_bcb->rcvd_prot_filter_start[xx] = start;
963 p_bcb->rcvd_prot_filter_end[xx] = end;
966 bnepu_send_peer_filter_rsp (p_bcb, resp_code);
968 bnepu_send_peer_filter_rsp (p_bcb, BNEP_FILTER_CRL_UNSUPPORTED);
983 void bnepu_process_peer_filter_rsp (tBNEP_CONN *p_bcb, UINT8 *p_data)
991 if ((p_bcb->con_state != BNEP_STATE_CONNECTED) &&
992 (!(p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)))
994 BNEP_TRACE_ERROR ("BNEP - filter response in bad state %d", p_bcb->con_state);
999 if (!(p_bcb->con_flags & BNEP_FLAGS_FILTER_RESP_PEND))
1006 btu_stop_timer (&p_bcb->conn_tle);
1007 p_bcb->con_flags &= ~BNEP_FLAGS_FILTER_RESP_PEND;
1008 p_bcb->re_transmits = 0;
1017 (*bnep_cb.p_filter_ind_cb) (p_bcb->handle, FALSE, result, 0, NULL);
1035 void bnepu_process_multicast_filter_rsp (tBNEP_CONN *p_bcb, UINT8 *p_data)
1043 if ((p_bcb->con_state != BNEP_STATE_CONNECTED) &&
1044 (!(p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)))
1046 p_bcb->con_state);
1051 if (!(p_bcb->con_flags & BNEP_FLAGS_MULTI_RESP_PEND))
1058 btu_stop_timer (&p_bcb->conn_tle);
1059 p_bcb->con_flags &= ~BNEP_FLAGS_MULTI_RESP_PEND;
1060 p_bcb->re_transmits = 0;
1069 (*bnep_cb.p_mfilter_ind_cb) (p_bcb->handle, FALSE, result, 0, NULL);
1088 void bnepu_process_peer_multicast_filter_set (tBNEP_CONN *p_bcb, UINT8 *p_filters, UINT16 len)
1095 if ((p_bcb->con_state != BNEP_STATE_CONNECTED) &&
1096 (!(p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)))
1105 bnepu_send_peer_multicast_filter_rsp (p_bcb, BNEP_FILTER_CRL_BAD_RANGE);
1112 bnepu_send_peer_multicast_filter_rsp (p_bcb, BNEP_FILTER_CRL_MAX_REACHED);
1128 bnepu_send_peer_multicast_filter_rsp (p_bcb, BNEP_FILTER_CRL_BAD_RANGE);
1136 p_bcb->rcvd_mcast_filters = num_filters;
1139 memcpy (p_bcb->rcvd_mcast_filter_start[xx], p_filters, BD_ADDR_LEN);
1140 memcpy (p_bcb->rcvd_mcast_filter_end[xx], p_filters + BD_ADDR_LEN, BD_ADDR_LEN);
1144 if ((memcmp (null_bda, p_bcb->rcvd_mcast_filter_start[xx], BD_ADDR_LEN) == 0) &&
1145 (memcmp (null_bda, p_bcb->rcvd_mcast_filter_end[xx], BD_ADDR_LEN) == 0))
1147 p_bcb->rcvd_mcast_filters = 0xFFFF;
1152 BNEP_TRACE_EVENT ("BNEP multicast filters %d", p_bcb->rcvd_mcast_filters);
1153 bnepu_send_peer_multicast_filter_rsp (p_bcb, resp_code);
1156 (*bnep_cb.p_mfilter_ind_cb) (p_bcb->handle, TRUE, 0, len, p_filters);
1158 bnepu_send_peer_multicast_filter_rsp (p_bcb, BNEP_FILTER_CRL_UNSUPPORTED);
1172 void bnepu_send_peer_multicast_filter_rsp (tBNEP_CONN *p_bcb, UINT16 response_code)
1197 bnepu_check_send_packet (p_bcb, p_buf);
1215 tBNEP_CONN *p_bcb = (tBNEP_CONN *)p_ref_data;
1222 if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)
1228 if (p_bcb->con_state != BNEP_STATE_SEC_CHECKING)
1230 BNEP_TRACE_ERROR ("BNEP Connection in wrong state %d when security is completed", p_bcb->con_state);
1235 if (!(p_bcb->con_flags & BNEP_FLAGS_SETUP_RCVD))
1239 if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)
1243 (*bnep_cb.p_conn_state_cb) (p_bcb->handle, p_bcb->rem_bda, BNEP_SECURITY_FAIL, is_role_change);
1245 p_bcb->con_state = BNEP_STATE_CONNECTED;
1246 memcpy ((UINT8 *)&(p_bcb->src_uuid), (UINT8 *)&(p_bcb->prv_src_uuid), sizeof (tBT_UUID));
1247 memcpy ((UINT8 *)&(p_bcb->dst_uuid), (UINT8 *)&(p_bcb->prv_dst_uuid), sizeof (tBT_UUID));
1251 L2CA_DisconnectReq (p_bcb->l2cap_cid);
1255 (*bnep_cb.p_conn_state_cb) (p_bcb->handle, p_bcb->rem_bda, BNEP_SECURITY_FAIL, is_role_change);
1257 bnepu_release_bcb (p_bcb);
1262 p_bcb->con_state = BNEP_STATE_CONN_SETUP;
1264 bnep_send_conn_req (p_bcb);
1265 btu_start_timer (&p_bcb->conn_tle, BTU_TTYPE_BNEP, BNEP_CONN_TIMEOUT);
1272 bnep_send_conn_responce (p_bcb, BNEP_SETUP_CONN_NOT_ALLOWED);
1273 if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)
1276 p_bcb->con_state = BNEP_STATE_CONNECTED;
1277 p_bcb->con_flags &= (~BNEP_FLAGS_SETUP_RCVD);
1278 memcpy ((UINT8 *)&(p_bcb->src_uuid), (UINT8 *)&(p_bcb->prv_src_uuid), sizeof (tBT_UUID));
1279 memcpy ((UINT8 *)&(p_bcb->dst_uuid), (UINT8 *)&(p_bcb->prv_dst_uuid), sizeof (tBT_UUID));
1283 L2CA_DisconnectReq (p_bcb->l2cap_cid);
1285 bnepu_release_bcb (p_bcb);
1291 p_bcb->con_state = BNEP_STATE_CONN_SETUP;
1292 (*bnep_cb.p_conn_ind_cb) (p_bcb->handle, p_bcb->rem_bda, &p_bcb->dst_uuid, &p_bcb->src_uuid, is_role_change);
1297 bnep_send_conn_responce (p_bcb, resp_code);
1298 bnep_connected (p_bcb);
1316 tBNEP_RESULT bnep_is_packet_allowed (tBNEP_CONN *p_bcb,
1323 if (p_bcb->rcvd_num_filters)
1347 for (i=0; i<p_bcb->rcvd_num_filters; i++)
1349 if ((p_bcb->rcvd_prot_filter_start[i] <= proto) &&
1350 (proto <= p_bcb->rcvd_prot_filter_end[i]))
1354 if (i == p_bcb->rcvd_num_filters)
1365 p_bcb->rcvd_mcast_filters)
1370 if (p_bcb->rcvd_mcast_filters != 0xFFFF)
1373 for (i = 0; i < p_bcb->rcvd_mcast_filters; i++)
1375 if ((memcmp (p_bcb->rcvd_mcast_filter_start[i], p_dest_addr, BD_ADDR_LEN) <= 0) &&
1376 (memcmp (p_bcb->rcvd_mcast_filter_end[i], p_dest_addr, BD_ADDR_LEN) >= 0))
1385 if ((p_bcb->rcvd_mcast_filters == 0xFFFF) || (i == p_bcb->rcvd_mcast_filters))
1445 tBNEP_CONN *p_bcb;
1453 for (i = 0, p_bcb = bnep_cb.bcb; i < BNEP_MAX_CONNECTIONS; i++, p_bcb++)
1456 i, p_bcb->con_state, p_bcb->con_flags, p_bcb->l2cap_cid,
1457 p_bcb->rcvd_num_filters, p_bcb->rcvd_mcast_filters,
1458 p_bcb->src_uuid.uu.uuid16, p_bcb->dst_uuid.uu.uuid16,
1459 p_bcb->rem_bda[0], p_bcb->rem_bda[1], p_bcb->rem_bda[2],
1460 p_bcb->rem_bda[3], p_bcb->rem_bda[4], p_bcb->rem_bda[5]);