15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 2001-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This file contains BNEP utility functions
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <stdio.h>
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h>
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gki.h"
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_types.h"
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bnep_int.h"
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btu.h"
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btm_int.h"
325cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "bt_utils.h"
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************************************************/
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*              L O C A L    F U N C T I O N     P R O T O T Y P E S            */
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/********************************************************************************/
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 *bnepu_init_hdr (BT_HDR *p_buf, UINT16 hdr_len, UINT8 pkt_type);
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_process_peer_multicast_filter_set (tBNEP_CONN *p_bcb, UINT8 *p_filters, UINT16 len);
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_send_peer_multicast_filter_rsp (tBNEP_CONN *p_bcb, UINT16 response_code);
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_find_bcb_by_cid
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function searches the bcb table for an entry with the
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  passed CID.
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          the BCB address, or NULL if not found.
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBNEP_CONN *bnepu_find_bcb_by_cid (UINT16 cid)
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          xx;
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBNEP_CONN     *p_bcb;
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Look through each connection control block */
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (xx = 0, p_bcb = bnep_cb.bcb; xx < BNEP_MAX_CONNECTIONS; xx++, p_bcb++)
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((p_bcb->con_state != BNEP_STATE_IDLE) && (p_bcb->l2cap_cid == cid))
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return (p_bcb);
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* If here, not found */
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (NULL);
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_find_bcb_by_bd_addr
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function searches the BCB table for an entry with the
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  passed Bluetooth Address.
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          the BCB address, or NULL if not found.
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBNEP_CONN *bnepu_find_bcb_by_bd_addr (UINT8 *p_bda)
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          xx;
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBNEP_CONN     *p_bcb;
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Look through each connection control block */
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (xx = 0, p_bcb = bnep_cb.bcb; xx < BNEP_MAX_CONNECTIONS; xx++, p_bcb++)
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_bcb->con_state != BNEP_STATE_IDLE)
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (!memcmp ((UINT8 *)(p_bcb->rem_bda), p_bda, BD_ADDR_LEN))
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                return (p_bcb);
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* If here, not found */
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (NULL);
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_allocate_bcb
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function allocates a new BCB.
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          BCB address, or NULL if none available.
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBNEP_CONN *bnepu_allocate_bcb (BD_ADDR p_rem_bda)
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          xx;
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBNEP_CONN     *p_bcb;
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Look through each connection control block for a free one */
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (xx = 0, p_bcb = bnep_cb.bcb; xx < BNEP_MAX_CONNECTIONS; xx++, p_bcb++)
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_bcb->con_state == BNEP_STATE_IDLE)
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memset ((UINT8 *)p_bcb, 0, sizeof (tBNEP_CONN));
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->conn_tle.param = (UINT32) p_bcb;
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy ((UINT8 *)(p_bcb->rem_bda), (UINT8 *)p_rem_bda, BD_ADDR_LEN);
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->handle = xx + 1;
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return (p_bcb);
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* If here, no free BCB found */
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (NULL);
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_release_bcb
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function releases a BCB.
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_release_bcb (tBNEP_CONN *p_bcb)
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Ensure timer is stopped */
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_stop_timer (&p_bcb->conn_tle);
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Drop any response pointer we may be holding */
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->con_state        = BNEP_STATE_IDLE;
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->p_pending_data   = NULL;
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Free transmit queue */
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    while (p_bcb->xmit_q.count)
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        GKI_freebuf (GKI_dequeue (&p_bcb->xmit_q));
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnep_send_conn_req
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function sends a BNEP connection request to peer
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnep_send_conn_req (tBNEP_CONN *p_bcb)
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR  *p_buf;
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   *p, *p_start;
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
176d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_DEBUG ("BNEP sending setup req with dst uuid %x", p_bcb->dst_uuid.uu.uuid16);
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *)GKI_getpoolbuf (BNEP_POOL_ID)) == NULL)
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
179d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - not able to send connection request");
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->offset = L2CAP_MIN_OFFSET;
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p = p_start = (UINT8 *)(p_buf + 1) + L2CAP_MIN_OFFSET;
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in BNEP frame type - filter control */
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_FRAME_CONTROL);
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in filter message type - set filters */
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_SETUP_CONNECTION_REQUEST_MSG);
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, p_bcb->dst_uuid.len);
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_bcb->dst_uuid.len == 2)
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT16_TO_BE_STREAM (p, p_bcb->dst_uuid.uu.uuid16);
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT16_TO_BE_STREAM (p, p_bcb->src_uuid.uu.uuid16);
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BNEP_SUPPORTS_ALL_UUID_LENGTHS) && BNEP_SUPPORTS_ALL_UUID_LENGTHS == TRUE)
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else if (p_bcb->dst_uuid.len == 4)
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT32_TO_BE_STREAM (p, p_bcb->dst_uuid.uu.uuid32);
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT32_TO_BE_STREAM (p, p_bcb->src_uuid.uu.uuid32);
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy (p, p_bcb->dst_uuid.uu.uuid128, p_bcb->dst_uuid.len);
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += p_bcb->dst_uuid.len;
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy (p, p_bcb->src_uuid.uu.uuid128, p_bcb->dst_uuid.len);
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += p_bcb->dst_uuid.len;
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->len = (UINT16)(p - p_start);
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bnepu_check_send_packet (p_bcb, p_buf);
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnep_send_conn_responce
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function sends a BNEP setup response to peer
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnep_send_conn_responce (tBNEP_CONN *p_bcb, UINT16 resp_code)
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR  *p_buf;
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   *p;
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
234d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_EVENT ("BNEP - bnep_send_conn_responce for CID: 0x%x", p_bcb->l2cap_cid);
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *)GKI_getpoolbuf (BNEP_POOL_ID)) == NULL)
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
237d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - not able to send connection response");
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->offset = L2CAP_MIN_OFFSET;
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p = (UINT8 *)(p_buf + 1) + L2CAP_MIN_OFFSET;
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in BNEP frame type - filter control */
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_FRAME_CONTROL);
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in filter message type - set filters */
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_SETUP_CONNECTION_RESPONSE_MSG);
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_BE_STREAM (p, resp_code);
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->len = 4;
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bnepu_check_send_packet (p_bcb, p_buf);
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_send_peer_our_filters
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function sends our filters to a peer
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_send_peer_our_filters (tBNEP_CONN *p_bcb)
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BNEP_SUPPORTS_PROT_FILTERS) && BNEP_SUPPORTS_PROT_FILTERS == TRUE)
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR      *p_buf;
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8       *p;
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16      xx;
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
275d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_DEBUG ("BNEP sending peer our filters");
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *)GKI_getpoolbuf (BNEP_POOL_ID)) == NULL)
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
279d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - no buffer send filters");
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->offset = L2CAP_MIN_OFFSET;
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p = (UINT8 *)(p_buf + 1) + L2CAP_MIN_OFFSET;
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in BNEP frame type - filter control */
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_FRAME_CONTROL);
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in filter message type - set filters */
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_FILTER_NET_TYPE_SET_MSG);
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_BE_STREAM (p, (4 * p_bcb->sent_num_filters));
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (xx = 0; xx < p_bcb->sent_num_filters; xx++)
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT16_TO_BE_STREAM (p, p_bcb->sent_prot_filter_start[xx]);
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT16_TO_BE_STREAM (p, p_bcb->sent_prot_filter_end[xx]);
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->len = 4 + (4 * p_bcb->sent_num_filters);
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bnepu_check_send_packet (p_bcb, p_buf);
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->con_flags |= BNEP_FLAGS_FILTER_RESP_PEND;
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Start timer waiting for setup response */
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_start_timer (&p_bcb->conn_tle, BTU_TTYPE_BNEP, BNEP_FILTER_SET_TIMEOUT);
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_send_peer_our_multi_filters
3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function sends our multicast filters to a peer
3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_send_peer_our_multi_filters (tBNEP_CONN *p_bcb)
3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BNEP_SUPPORTS_MULTI_FILTERS) && BNEP_SUPPORTS_MULTI_FILTERS == TRUE)
3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR      *p_buf;
3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8       *p;
3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16      xx;
3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
327d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_DEBUG ("BNEP sending peer our multicast filters");
3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *)GKI_getpoolbuf (BNEP_POOL_ID)) == NULL)
3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
331d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - no buffer to send multicast filters");
3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->offset = L2CAP_MIN_OFFSET;
3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p = (UINT8 *)(p_buf + 1) + L2CAP_MIN_OFFSET;
3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in BNEP frame type - filter control */
3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_FRAME_CONTROL);
3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in filter message type - set filters */
3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_FILTER_MULTI_ADDR_SET_MSG);
3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_BE_STREAM (p, (2 * BD_ADDR_LEN * p_bcb->sent_mcast_filters));
3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (xx = 0; xx < p_bcb->sent_mcast_filters; xx++)
3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy (p, p_bcb->sent_mcast_filter_start[xx], BD_ADDR_LEN);
3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += BD_ADDR_LEN;
3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy (p, p_bcb->sent_mcast_filter_end[xx], BD_ADDR_LEN);
3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += BD_ADDR_LEN;
3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->len = 4 + (2 * BD_ADDR_LEN * p_bcb->sent_mcast_filters);
3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bnepu_check_send_packet (p_bcb, p_buf);
3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->con_flags |= BNEP_FLAGS_MULTI_RESP_PEND;
3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Start timer waiting for setup response */
3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_start_timer (&p_bcb->conn_tle, BTU_TTYPE_BNEP, BNEP_FILTER_SET_TIMEOUT);
3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_send_peer_filter_rsp
3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function sends a filter response to a peer
3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_send_peer_filter_rsp (tBNEP_CONN *p_bcb, UINT16 response_code)
3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR  *p_buf;
3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   *p;
3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
379d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_DEBUG ("BNEP sending filter response");
3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *)GKI_getpoolbuf (BNEP_POOL_ID)) == NULL)
3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
382d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - no buffer filter rsp");
3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->offset = L2CAP_MIN_OFFSET;
3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p = (UINT8 *)(p_buf + 1) + L2CAP_MIN_OFFSET;
3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in BNEP frame type - filter control */
3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_FRAME_CONTROL);
3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in filter message type - set filters */
3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_FILTER_NET_TYPE_RESPONSE_MSG);
3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_BE_STREAM (p, response_code);
3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->len = 4;
3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bnepu_check_send_packet (p_bcb, p_buf);
4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnep_send_command_not_understood
4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function sends a BNEP command not understood message
4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnep_send_command_not_understood (tBNEP_CONN *p_bcb, UINT8 cmd_code)
4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR  *p_buf;
4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   *p;
4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
417d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_EVENT ("BNEP - bnep_send_command_not_understood for CID: 0x%x, cmd 0x%x", p_bcb->l2cap_cid, cmd_code);
4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *)GKI_getpoolbuf (BNEP_POOL_ID)) == NULL)
4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
420d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - not able to send connection response");
4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->offset = L2CAP_MIN_OFFSET;
4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p = (UINT8 *)(p_buf + 1) + L2CAP_MIN_OFFSET;
4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in BNEP frame type - filter control */
4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_FRAME_CONTROL);
4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in filter message type - set filters */
4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_CONTROL_COMMAND_NOT_UNDERSTOOD);
4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, cmd_code);
4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->len = 3;
4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bnepu_check_send_packet (p_bcb, p_buf);
4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_check_send_packet
4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function tries to send a packet to L2CAP.
4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  If L2CAP is flow controlled, it enqueues the
4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  packet to the transmit queue
4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_check_send_packet (tBNEP_CONN *p_bcb, BT_HDR *p_buf)
4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
455d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_EVENT ("BNEP - bnepu_check_send_packet for CID: 0x%x", p_bcb->l2cap_cid);
4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_bcb->con_flags & BNEP_FLAGS_L2CAP_CONGESTED)
4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_bcb->xmit_q.count >= BNEP_MAX_XMITQ_DEPTH)
4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
460d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati            BNEP_TRACE_EVENT ("BNEP - congested, dropping buf, CID: 0x%x", p_bcb->l2cap_cid);
4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            GKI_freebuf (p_buf);
4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            GKI_enqueue (&p_bcb->xmit_q, p_buf);
4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        L2CA_DataWrite (p_bcb->l2cap_cid, p_buf);
4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_build_bnep_hdr
4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function builds the BNEP header for a packet
4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  Extension headers are not sent yet, so there is no
4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  check for that.
4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_build_bnep_hdr (tBNEP_CONN *p_bcb, BT_HDR *p_buf, UINT16 protocol,
4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                           UINT8 *p_src_addr, UINT8 *p_dest_addr, BOOLEAN fw_ext_present)
4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    ext_bit, *p = (UINT8 *)NULL;
4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    type = BNEP_FRAME_COMPRESSED_ETHERNET;
4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ext_bit = fw_ext_present ? 0x80 : 0x00;
4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_src_addr) && (memcmp (p_src_addr, bnep_cb.my_bda, BD_ADDR_LEN)))
4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        type = BNEP_FRAME_COMPRESSED_ETHERNET_SRC_ONLY;
4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (memcmp (p_dest_addr, p_bcb->rem_bda, BD_ADDR_LEN))
4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        type = (type == BNEP_FRAME_COMPRESSED_ETHERNET) ? BNEP_FRAME_COMPRESSED_ETHERNET_DEST_ONLY : BNEP_FRAME_GENERAL_ETHERNET;
5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!p_src_addr)
5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_src_addr = (UINT8 *)bnep_cb.my_bda;
5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (type)
5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_FRAME_GENERAL_ETHERNET:
5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p = bnepu_init_hdr (p_buf, 15, (UINT8)(ext_bit | BNEP_FRAME_GENERAL_ETHERNET));
5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy (p, p_dest_addr, BD_ADDR_LEN);
5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += BD_ADDR_LEN;
5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy (p, p_src_addr, BD_ADDR_LEN);
5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += BD_ADDR_LEN;
5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
5155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_FRAME_COMPRESSED_ETHERNET:
5175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p = bnepu_init_hdr (p_buf, 3, (UINT8)(ext_bit | BNEP_FRAME_COMPRESSED_ETHERNET));
5185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
5195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_FRAME_COMPRESSED_ETHERNET_SRC_ONLY:
5215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p = bnepu_init_hdr (p_buf, 9, (UINT8)(ext_bit | BNEP_FRAME_COMPRESSED_ETHERNET_SRC_ONLY));
5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy (p, p_src_addr, BD_ADDR_LEN);
5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += BD_ADDR_LEN;
5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_FRAME_COMPRESSED_ETHERNET_DEST_ONLY:
5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p = bnepu_init_hdr (p_buf, 9, (UINT8)(ext_bit | BNEP_FRAME_COMPRESSED_ETHERNET_DEST_ONLY));
5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy (p, p_dest_addr, BD_ADDR_LEN);
5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += BD_ADDR_LEN;
5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_BE_STREAM (p, protocol);
5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_init_hdr
5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function initializes the BNEP header
5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          pointer to header in buffer
5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic UINT8 *bnepu_init_hdr (BT_HDR *p_buf, UINT16 hdr_len, UINT8 pkt_type)
5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8    *p = (UINT8 *)(p_buf + 1) + p_buf->offset;
5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* See if we need to make space in the buffer */
5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_buf->offset < (hdr_len + L2CAP_MIN_OFFSET))
5545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT16 xx, diff = BNEP_MINIMUM_OFFSET - p_buf->offset;
5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p = p + p_buf->len - 1;
5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (xx = 0; xx < p_buf->len; xx++, p--)
5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p[diff] = *p;
5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_buf->offset = BNEP_MINIMUM_OFFSET;
5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p = (UINT8 *)(p_buf + 1) + p_buf->offset;
5625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->len    += hdr_len;
5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->offset -= hdr_len;
5665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p             -= hdr_len;
5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    *p++ = pkt_type;
5695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return (p);
5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnep_process_setup_conn_req
5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function processes a peer's setup connection request
5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  message. The destination UUID is verified and response sent
5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  Connection open indication will be given to PAN profile
5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnep_process_setup_conn_req (tBNEP_CONN *p_bcb, UINT8 *p_setup, UINT8 len)
5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
587d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_EVENT ("BNEP - bnep_process_setup_conn_req for CID: 0x%x", p_bcb->l2cap_cid);
5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_bcb->con_state != BNEP_STATE_CONN_SETUP &&
5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_bcb->con_state != BNEP_STATE_SEC_CHECKING &&
5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_bcb->con_state != BNEP_STATE_CONNECTED)
5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
593d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - setup request in bad state %d", p_bcb->con_state);
5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnep_send_conn_responce (p_bcb, BNEP_SETUP_CONN_NOT_ALLOWED);
5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Check if we already initiated security check or if waiting for user responce */
5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_bcb->con_flags & BNEP_FLAGS_SETUP_RCVD)
6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
601d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_EVENT ("BNEP - Duplicate Setup message received while doing security check");
6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Check if peer is the originator */
6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_bcb->con_state != BNEP_STATE_CONNECTED &&
6075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (!(p_bcb->con_flags & BNEP_FLAGS_SETUP_RCVD)) &&
6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (p_bcb->con_flags & BNEP_FLAGS_IS_ORIG))
6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
610d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - setup request when we are originator", p_bcb->con_state);
6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnep_send_conn_responce (p_bcb, BNEP_SETUP_CONN_NOT_ALLOWED);
6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_bcb->con_state == BNEP_STATE_CONNECTED)
6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy ((UINT8 *)&(p_bcb->prv_src_uuid), (UINT8 *)&(p_bcb->src_uuid), sizeof (tBT_UUID));
6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy ((UINT8 *)&(p_bcb->prv_dst_uuid), (UINT8 *)&(p_bcb->dst_uuid), sizeof (tBT_UUID));
6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->dst_uuid.len = p_bcb->src_uuid.len = len;
6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_bcb->dst_uuid.len == 2)
6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* because peer initiated connection keep src uuid as dst uuid */
6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BE_STREAM_TO_UINT16 (p_bcb->src_uuid.uu.uuid16, p_setup);
6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BE_STREAM_TO_UINT16 (p_bcb->dst_uuid.uu.uuid16, p_setup);
6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* If nothing has changed don't bother the profile */
6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_bcb->con_state == BNEP_STATE_CONNECTED &&
6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->src_uuid.uu.uuid16 == p_bcb->prv_src_uuid.uu.uuid16 &&
6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->dst_uuid.uu.uuid16 == p_bcb->prv_dst_uuid.uu.uuid16)
6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bnep_send_conn_responce (p_bcb, BNEP_SETUP_CONN_OK);
6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BNEP_SUPPORTS_ALL_UUID_LENGTHS) && BNEP_SUPPORTS_ALL_UUID_LENGTHS == TRUE)
6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else if (p_bcb->dst_uuid.len == 4)
6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BE_STREAM_TO_UINT32 (p_bcb->src_uuid.uu.uuid32, p_setup);
6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BE_STREAM_TO_UINT32 (p_bcb->dst_uuid.uu.uuid32, p_setup);
6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else if (p_bcb->dst_uuid.len == 16)
6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy (p_bcb->src_uuid.uu.uuid128, p_setup, p_bcb->src_uuid.len);
6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_setup += p_bcb->src_uuid.len;
6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy (p_bcb->dst_uuid.uu.uuid128, p_setup, p_bcb->dst_uuid.len);
6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_setup += p_bcb->dst_uuid.len;
6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
654d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - Bad UID len %d in ConnReq", p_bcb->dst_uuid.len);
6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnep_send_conn_responce (p_bcb, BNEP_SETUP_INVALID_UUID_SIZE);
6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->con_state = BNEP_STATE_SEC_CHECKING;
6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->con_flags |= BNEP_FLAGS_SETUP_RCVD;
6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
662d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_EVENT ("BNEP initiating security check for incoming call for uuid 0x%x", p_bcb->src_uuid.uu.uuid16);
6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (!defined (BNEP_DO_AUTH_FOR_ROLE_SWITCH) || BNEP_DO_AUTH_FOR_ROLE_SWITCH == FALSE)
6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)
6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnep_sec_check_complete (p_bcb->rem_bda, p_bcb, BTM_SUCCESS);
6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btm_sec_mx_access_request (p_bcb->rem_bda, BT_PSM_BNEP, FALSE,
6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               BTM_SEC_PROTO_BNEP, bnep_get_uuid32(&(p_bcb->src_uuid)),
6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                               &bnep_sec_check_complete, p_bcb);
6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
6745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnep_process_setup_conn_responce
6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function processes a peer's setup connection response
6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  message. The response code is verified and
6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  Connection open indication will be given to PAN profile
6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnep_process_setup_conn_responce (tBNEP_CONN *p_bcb, UINT8 *p_setup)
6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBNEP_RESULT    resp;
6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          resp_code;
6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
692d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_DEBUG ("BNEP received setup responce");
6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* The state should be either SETUP or CONNECTED */
6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_bcb->con_state != BNEP_STATE_CONN_SETUP)
6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Should we disconnect ? */
697d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - setup response in bad state %d", p_bcb->con_state);
6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Check if we are the originator */
7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!(p_bcb->con_flags & BNEP_FLAGS_IS_ORIG))
7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
704d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - setup response when we are not originator", p_bcb->con_state);
7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BE_STREAM_TO_UINT16  (resp_code, p_setup);
7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (resp_code)
7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_SETUP_INVALID_SRC_UUID:
7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        resp = BNEP_CONN_FAILED_SRC_UUID;
7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_SETUP_INVALID_DEST_UUID:
7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        resp = BNEP_CONN_FAILED_DST_UUID;
7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_SETUP_INVALID_UUID_SIZE:
7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        resp = BNEP_CONN_FAILED_UUID_SIZE;
7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_SETUP_CONN_NOT_ALLOWED:
7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    default:
7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        resp = BNEP_CONN_FAILED;
7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Check the responce code */
7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (resp_code != BNEP_SETUP_CONN_OK)
7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)
7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
735d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati            BNEP_TRACE_EVENT ("BNEP - role change response is %d", resp_code);
7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Restore the earlier BNEP status */
7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->con_state = BNEP_STATE_CONNECTED;
7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->con_flags &= (~BNEP_FLAGS_SETUP_RCVD);
7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy ((UINT8 *)&(p_bcb->src_uuid), (UINT8 *)&(p_bcb->prv_src_uuid), sizeof (tBT_UUID));
7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy ((UINT8 *)&(p_bcb->dst_uuid), (UINT8 *)&(p_bcb->prv_dst_uuid), sizeof (tBT_UUID));
7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Ensure timer is stopped */
7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            btu_stop_timer (&p_bcb->conn_tle);
7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->re_transmits = 0;
7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Tell the user if he has a callback */
7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (bnep_cb.p_conn_state_cb)
7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (*bnep_cb.p_conn_state_cb) (p_bcb->handle, p_bcb->rem_bda, resp, TRUE);
7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
755d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati            BNEP_TRACE_ERROR ("BNEP - setup response %d is not OK", resp_code);
7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            L2CA_DisconnectReq (p_bcb->l2cap_cid);
7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Tell the user if he has a callback */
7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ((p_bcb->con_flags & BNEP_FLAGS_IS_ORIG) && (bnep_cb.p_conn_state_cb))
7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (*bnep_cb.p_conn_state_cb) (p_bcb->handle, p_bcb->rem_bda, resp, FALSE);
7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bnepu_release_bcb (p_bcb);
7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Received successful responce */
7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bnep_connected (p_bcb);
7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnep_process_control_packet
7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function processes a peer's setup connection request
7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  message. The destination UUID is verified and response sent
7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  Connection open indication will be given to PAN profile
7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 *bnep_process_control_packet (tBNEP_CONN *p_bcb, UINT8 *p, UINT16 *rem_len, BOOLEAN is_ext)
7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
7865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8       control_type;
7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN     bad_pkt = FALSE;
7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16      len, ext_len = 0;
7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (is_ext)
7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ext_len = *p++;
7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *rem_len = *rem_len - 1;
7945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
7965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    control_type = *p++;
7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    *rem_len = *rem_len - 1;
7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
799d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_EVENT ("BNEP processing control packet rem_len %d, is_ext %d, ctrl_type %d", *rem_len, is_ext, control_type);
8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    switch (control_type)
8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_CONTROL_COMMAND_NOT_UNDERSTOOD:
804d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP Received Cmd not understood for ctl pkt type: %d", *p);
8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p++;
8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *rem_len = *rem_len - 1;
8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_SETUP_CONNECTION_REQUEST_MSG:
8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        len = *p++;
8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (*rem_len < ((2 * len) + 1))
8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bad_pkt = TRUE;
814d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati            BNEP_TRACE_ERROR ("BNEP Received Setup message with bad length");
8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!is_ext)
8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bnep_process_setup_conn_req (p_bcb, p, (UINT8)len);
8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += (2 * len);
8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *rem_len = *rem_len - (2 * len) - 1;
8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_SETUP_CONNECTION_RESPONSE_MSG:
8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (!is_ext)
8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bnep_process_setup_conn_responce (p_bcb, p);
8265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += 2;
8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *rem_len = *rem_len - 2;
8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_FILTER_NET_TYPE_SET_MSG:
8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BE_STREAM_TO_UINT16 (len, p);
8325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (*rem_len < (len + 2))
8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bad_pkt = TRUE;
835d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati            BNEP_TRACE_ERROR ("BNEP Received Filter set message with bad length");
8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnepu_process_peer_filter_set (p_bcb, p, len);
8395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += len;
8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *rem_len = *rem_len - len - 2;
8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_FILTER_NET_TYPE_RESPONSE_MSG:
8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnepu_process_peer_filter_rsp (p_bcb, p);
8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += 2;
8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *rem_len = *rem_len - 2;
8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_FILTER_MULTI_ADDR_SET_MSG:
8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BE_STREAM_TO_UINT16 (len, p);
8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (*rem_len < (len + 2))
8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bad_pkt = TRUE;
854d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati            BNEP_TRACE_ERROR ("BNEP Received Multicast Filter Set message with bad length");
8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnepu_process_peer_multicast_filter_set (p_bcb, p, len);
8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += len;
8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *rem_len = *rem_len - len - 2;
8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    case BNEP_FILTER_MULTI_ADDR_RESPONSE_MSG:
8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnepu_process_multicast_filter_rsp (p_bcb, p);
8645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p += 2;
8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *rem_len = *rem_len - 2;
8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    default :
869d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - bad ctl pkt type: %d", control_type);
8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnep_send_command_not_understood (p_bcb, control_type);
8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (is_ext)
8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p += (ext_len - 1);
8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *rem_len -= (ext_len - 1);
8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        break;
8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bad_pkt)
8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
881d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - bad ctl pkt length: %d", *rem_len);
8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        *rem_len = 0;
8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return NULL;
8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return p;
8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_process_peer_filter_set
8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function processes a peer's filter control
8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  'set' message. The filters are stored in the BCB,
8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  and an appropriate filter response message sent.
8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_process_peer_filter_set (tBNEP_CONN *p_bcb, UINT8 *p_filters, UINT16 len)
9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BNEP_SUPPORTS_PROT_FILTERS) && BNEP_SUPPORTS_PROT_FILTERS == TRUE)
9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16      num_filters = 0;
9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16      xx, resp_code = BNEP_FILTER_CRL_OK;
9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16      start, end;
9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8       *p_temp_filters;
9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_bcb->con_state != BNEP_STATE_CONNECTED) &&
9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (!(p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)))
9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
912d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_DEBUG ("BNEP received filter set from peer when there is no connection");
9135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
916d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_DEBUG ("BNEP received filter set from peer");
9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Check for length not a multiple of 4 */
9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (len & 3)
9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
920d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_EVENT ("BNEP - bad filter len: %d", len);
9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnepu_send_peer_filter_rsp (p_bcb, BNEP_FILTER_CRL_BAD_RANGE);
9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (len)
9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_filters = (UINT16) (len >> 2);
9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Validate filter values */
9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (num_filters <= BNEP_MAX_PROT_FILTERS)
9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_temp_filters = p_filters;
9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (xx = 0; xx < num_filters; xx++)
9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BE_STREAM_TO_UINT16  (start, p_temp_filters);
9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BE_STREAM_TO_UINT16  (end,   p_temp_filters);
9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (start > end)
9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                resp_code = BNEP_FILTER_CRL_BAD_RANGE;
9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        resp_code   = BNEP_FILTER_CRL_MAX_REACHED;
9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (resp_code != BNEP_FILTER_CRL_OK)
9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnepu_send_peer_filter_rsp (p_bcb, resp_code);
9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bnep_cb.p_filter_ind_cb)
9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (*bnep_cb.p_filter_ind_cb) (p_bcb->handle, TRUE, 0, len, p_filters);
9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->rcvd_num_filters = num_filters;
9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (xx = 0; xx < num_filters; xx++)
9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BE_STREAM_TO_UINT16  (start, p_filters);
9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        BE_STREAM_TO_UINT16  (end,   p_filters);
9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_bcb->rcvd_prot_filter_start[xx] = start;
9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_bcb->rcvd_prot_filter_end[xx]   = end;
9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bnepu_send_peer_filter_rsp (p_bcb, resp_code);
9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bnepu_send_peer_filter_rsp (p_bcb, BNEP_FILTER_CRL_UNSUPPORTED);
9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_process_peer_filter_rsp
9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function processes a peer's filter control
9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  'response' message.
9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_process_peer_filter_rsp (tBNEP_CONN *p_bcb, UINT8 *p_data)
9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BNEP_SUPPORTS_PROT_FILTERS) && BNEP_SUPPORTS_PROT_FILTERS == TRUE)
9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          resp_code;
9875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBNEP_RESULT    result;
9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
989d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_DEBUG ("BNEP received filter responce");
9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* The state should be  CONNECTED */
9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_bcb->con_state != BNEP_STATE_CONNECTED) &&
9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (!(p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)))
9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
994d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - filter response in bad state %d", p_bcb->con_state);
9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Check if we are the originator */
9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!(p_bcb->con_flags & BNEP_FLAGS_FILTER_RESP_PEND))
10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1001d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - filter response when not expecting");
10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Ensure timer is stopped */
10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_stop_timer (&p_bcb->conn_tle);
10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->con_flags &= ~BNEP_FLAGS_FILTER_RESP_PEND;
10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->re_transmits = 0;
10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BE_STREAM_TO_UINT16  (resp_code, p_data);
10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result = BNEP_SUCCESS;
10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (resp_code != BNEP_FILTER_CRL_OK)
10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result = BNEP_SET_FILTER_FAIL;
10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bnep_cb.p_filter_ind_cb)
10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (*bnep_cb.p_filter_ind_cb) (p_bcb->handle, FALSE, result, 0, NULL);
10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
10265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_process_multicast_filter_rsp
10285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function processes multicast filter control
10305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  'response' message.
10315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
10335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
10355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_process_multicast_filter_rsp (tBNEP_CONN *p_bcb, UINT8 *p_data)
10365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
10375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BNEP_SUPPORTS_MULTI_FILTERS) && BNEP_SUPPORTS_MULTI_FILTERS == TRUE)
10385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          resp_code;
10395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBNEP_RESULT    result;
10405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1041d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_DEBUG ("BNEP received multicast filter responce");
10425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* The state should be  CONNECTED */
10435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_bcb->con_state != BNEP_STATE_CONNECTED) &&
10445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (!(p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)))
10455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1046d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - multicast filter response in bad state %d", p_bcb->con_state);
10475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
10485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Check if we are the originator */
10515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!(p_bcb->con_flags & BNEP_FLAGS_MULTI_RESP_PEND))
10525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1053d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - multicast filter response when not expecting");
10545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
10555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
10565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Ensure timer is stopped */
10585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    btu_stop_timer (&p_bcb->conn_tle);
10595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->con_flags &= ~BNEP_FLAGS_MULTI_RESP_PEND;
10605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->re_transmits = 0;
10615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BE_STREAM_TO_UINT16  (resp_code, p_data);
10635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    result = BNEP_SUCCESS;
10655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (resp_code != BNEP_FILTER_CRL_OK)
10665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result = BNEP_SET_FILTER_FAIL;
10675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bnep_cb.p_mfilter_ind_cb)
10695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (*bnep_cb.p_mfilter_ind_cb) (p_bcb->handle, FALSE, result, 0, NULL);
10705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
10725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
10735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
10745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
10785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_process_peer_multicast_filter_set
10805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function processes a peer's filter control
10825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  'set' message. The filters are stored in the BCB,
10835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  and an appropriate filter response message sent.
10845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
10865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
10875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
10885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_process_peer_multicast_filter_set (tBNEP_CONN *p_bcb, UINT8 *p_filters, UINT16 len)
10895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
10905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BNEP_SUPPORTS_MULTI_FILTERS) && BNEP_SUPPORTS_MULTI_FILTERS == TRUE)
10915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          resp_code = BNEP_FILTER_CRL_OK;
10925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          num_filters, xx;
10935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           *p_temp_filters, null_bda[BD_ADDR_LEN] = {0,0,0,0,0,0};
10945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
10955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_bcb->con_state != BNEP_STATE_CONNECTED) &&
10965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (!(p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)))
10975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1098d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_DEBUG ("BNEP received multicast filter set from peer when there is no connection");
10995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
11005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
11015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (len % 12)
11035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1104d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_EVENT ("BNEP - bad filter len: %d", len);
11055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnepu_send_peer_multicast_filter_rsp (p_bcb, BNEP_FILTER_CRL_BAD_RANGE);
11065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
11075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
11085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (len > (BNEP_MAX_MULTI_FILTERS * 2 * BD_ADDR_LEN))
11105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1111d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_EVENT ("BNEP - Too many filters");
11125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnepu_send_peer_multicast_filter_rsp (p_bcb, BNEP_FILTER_CRL_MAX_REACHED);
11135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
11145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
11155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    num_filters = 0;
11175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (len)
11185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        num_filters = (UINT16) (len / 12);
11195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Validate filter values */
11215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (num_filters <= BNEP_MAX_MULTI_FILTERS)
11225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
11235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_temp_filters = p_filters;
11245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (xx = 0; xx < num_filters; xx++)
11255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
11265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (memcmp (p_temp_filters, p_temp_filters + BD_ADDR_LEN, BD_ADDR_LEN) > 0)
11275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
11285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                bnepu_send_peer_multicast_filter_rsp (p_bcb, BNEP_FILTER_CRL_BAD_RANGE);
11295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                return;
11305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
11315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_temp_filters += (BD_ADDR_LEN * 2);
11335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
11345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
11355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_bcb->rcvd_mcast_filters = num_filters;
11375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (xx = 0; xx < num_filters; xx++)
11385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
11395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy (p_bcb->rcvd_mcast_filter_start[xx], p_filters, BD_ADDR_LEN);
11405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        memcpy (p_bcb->rcvd_mcast_filter_end[xx], p_filters + BD_ADDR_LEN, BD_ADDR_LEN);
11415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_filters += (BD_ADDR_LEN * 2);
11425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Check if any of the ranges have all zeros as both starting and ending addresses */
11445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((memcmp (null_bda, p_bcb->rcvd_mcast_filter_start[xx], BD_ADDR_LEN) == 0) &&
11455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (memcmp (null_bda, p_bcb->rcvd_mcast_filter_end[xx], BD_ADDR_LEN) == 0))
11465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
11475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->rcvd_mcast_filters = 0xFFFF;
11485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            break;
11495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
11505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
11515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1152d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_EVENT ("BNEP multicast filters %d", p_bcb->rcvd_mcast_filters);
11535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bnepu_send_peer_multicast_filter_rsp (p_bcb, resp_code);
11545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bnep_cb.p_mfilter_ind_cb)
11565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (*bnep_cb.p_mfilter_ind_cb) (p_bcb->handle, TRUE, 0, len, p_filters);
11575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
11585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bnepu_send_peer_multicast_filter_rsp (p_bcb, BNEP_FILTER_CRL_UNSUPPORTED);
11595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
11605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
11645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnepu_send_peer_multicast_filter_rsp
11665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function sends a filter response to a peer
11685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
11705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
11715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
11725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnepu_send_peer_multicast_filter_rsp (tBNEP_CONN *p_bcb, UINT16 response_code)
11735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
11745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BT_HDR  *p_buf;
11755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   *p;
11765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1177d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_DEBUG ("BNEP sending multicast filter response %d", response_code);
11785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_buf = (BT_HDR *)GKI_getpoolbuf (BNEP_POOL_ID)) == NULL)
11795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1180d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP - no buffer filter rsp");
11815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
11825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
11835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->offset = L2CAP_MIN_OFFSET;
11855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p = (UINT8 *)(p_buf + 1) + L2CAP_MIN_OFFSET;
11865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in BNEP frame type - filter control */
11885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_FRAME_CONTROL);
11895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Put in filter message type - set filters */
11915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8_TO_BE_STREAM (p, BNEP_FILTER_MULTI_ADDR_RESPONSE_MSG);
11925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16_TO_BE_STREAM (p, response_code);
11945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    p_buf->len = 4;
11965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
11975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    bnepu_check_send_packet (p_bcb, p_buf);
11985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
11995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
12035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnep_sec_check_complete
12055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is registered with BTM and will be called
12075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  after completing the security procedures
12085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
12105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
12115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
12128fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Battavoid bnep_sec_check_complete (BD_ADDR bd_addr, tBT_TRANSPORT trasnport,
12138fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta                                    void *p_ref_data, UINT8 result)
12145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
12155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBNEP_CONN      *p_bcb = (tBNEP_CONN *)p_ref_data;
12165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          resp_code = BNEP_SETUP_CONN_OK;
12175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    BOOLEAN         is_role_change;
12185cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen    UNUSED(bd_addr);
12198fe58875ce67c6e1099e7ba2339dcd2b979491b0Ganesh Ganapathi Batta    UNUSED(trasnport);
12205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1221d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_EVENT ("BNEP security callback returned result %d", result);
12225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)
12235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        is_role_change = TRUE;
12245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
12255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        is_role_change = FALSE;
12265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* check if the port is still waiting for security to complete */
12285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_bcb->con_state != BNEP_STATE_SEC_CHECKING)
12295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1230d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_ERROR ("BNEP Connection in wrong state %d when security is completed", p_bcb->con_state);
12315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
12325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* if it is outgoing call and result is FAILURE return security fail error */
12355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (!(p_bcb->con_flags & BNEP_FLAGS_SETUP_RCVD))
12365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (result != BTM_SUCCESS)
12385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
12395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)
12405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
12415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* Tell the user that role change is failed because of security */
12425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (bnep_cb.p_conn_state_cb)
12435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    (*bnep_cb.p_conn_state_cb) (p_bcb->handle, p_bcb->rem_bda, BNEP_SECURITY_FAIL, is_role_change);
12445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_bcb->con_state = BNEP_STATE_CONNECTED;
12465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy ((UINT8 *)&(p_bcb->src_uuid), (UINT8 *)&(p_bcb->prv_src_uuid), sizeof (tBT_UUID));
12475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                memcpy ((UINT8 *)&(p_bcb->dst_uuid), (UINT8 *)&(p_bcb->prv_dst_uuid), sizeof (tBT_UUID));
12485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                return;
12495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
12505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            L2CA_DisconnectReq (p_bcb->l2cap_cid);
12525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Tell the user if he has a callback */
12545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (bnep_cb.p_conn_state_cb)
12555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (*bnep_cb.p_conn_state_cb) (p_bcb->handle, p_bcb->rem_bda, BNEP_SECURITY_FAIL, is_role_change);
12565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            bnepu_release_bcb (p_bcb);
12585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
12595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
12605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Transition to the next appropriate state, waiting for connection confirm. */
12625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_bcb->con_state = BNEP_STATE_CONN_SETUP;
12635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnep_send_conn_req (p_bcb);
12655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        btu_start_timer (&p_bcb->conn_tle, BTU_TTYPE_BNEP, BNEP_CONN_TIMEOUT);
12665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
12675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* it is an incoming call respond appropriately */
12705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (result != BTM_SUCCESS)
12715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnep_send_conn_responce (p_bcb, BNEP_SETUP_CONN_NOT_ALLOWED);
12735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_bcb->con_flags & BNEP_FLAGS_CONN_COMPLETED)
12745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
12755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Role change is failed because of security. Revert back to connected state */
12765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->con_state = BNEP_STATE_CONNECTED;
12775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->con_flags &= (~BNEP_FLAGS_SETUP_RCVD);
12785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy ((UINT8 *)&(p_bcb->src_uuid), (UINT8 *)&(p_bcb->prv_src_uuid), sizeof (tBT_UUID));
12795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            memcpy ((UINT8 *)&(p_bcb->dst_uuid), (UINT8 *)&(p_bcb->prv_dst_uuid), sizeof (tBT_UUID));
12805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return;
12815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
12825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        L2CA_DisconnectReq (p_bcb->l2cap_cid);
12845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnepu_release_bcb (p_bcb);
12865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return;
12875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
12895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (bnep_cb.p_conn_ind_cb)
12905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_bcb->con_state = BNEP_STATE_CONN_SETUP;
12925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        (*bnep_cb.p_conn_ind_cb) (p_bcb->handle, p_bcb->rem_bda, &p_bcb->dst_uuid, &p_bcb->src_uuid, is_role_change);
12935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
12945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
12955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
12965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Profile didn't register connection indication call back */
12975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnep_send_conn_responce (p_bcb, resp_code);
12985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnep_connected (p_bcb);
12995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return;
13025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
13065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnep_is_packet_allowed
13085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function verifies whether the protocol passes through
13105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  the protocol filters set by the peer
13115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          BNEP_SUCCESS          - if the protocol is allowed
13135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  BNEP_IGNORE_CMD       - if the protocol is filtered out
13145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
13155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
13165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBNEP_RESULT bnep_is_packet_allowed (tBNEP_CONN *p_bcb,
13175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     BD_ADDR p_dest_addr,
13185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT16 protocol,
13195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     BOOLEAN fw_ext_present,
13205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                     UINT8 *p_data)
13215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
13225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BNEP_SUPPORTS_PROT_FILTERS) && BNEP_SUPPORTS_PROT_FILTERS == TRUE)
13235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (p_bcb->rcvd_num_filters)
13245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT16          i, proto;
13265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Findout the actual protocol to check for the filtering */
13285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        proto = protocol;
13295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (proto == BNEP_802_1_P_PROTOCOL)
13305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
13315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (fw_ext_present)
13325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
13335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                UINT8       len, ext;
13345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                /* parse the extension headers and findout actual protocol */
13355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                do {
13365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    ext     = *p_data++;
13385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    len     = *p_data++;
13395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    p_data += len;
13405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                } while (ext & 0x80);
13425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
13435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_data += 2;
13445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            BE_STREAM_TO_UINT16 (proto, p_data);
13455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
13465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (i=0; i<p_bcb->rcvd_num_filters; i++)
13485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
13495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ((p_bcb->rcvd_prot_filter_start[i] <= proto) &&
13505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                (proto <= p_bcb->rcvd_prot_filter_end[i]))
13515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                break;
13525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
13535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (i == p_bcb->rcvd_num_filters)
13555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1356d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati            BNEP_TRACE_DEBUG ("Ignoring protocol 0x%x in BNEP data write", proto);
13575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return BNEP_IGNORE_CMD;
13585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
13595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
13615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BNEP_SUPPORTS_MULTI_FILTERS) && BNEP_SUPPORTS_MULTI_FILTERS == TRUE)
13635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Ckeck for multicast address filtering */
13645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if ((p_dest_addr[0] & 0x01) &&
13655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        p_bcb->rcvd_mcast_filters)
13665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
13675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        UINT16          i;
13685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /* Check if every multicast should be filtered */
13705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (p_bcb->rcvd_mcast_filters != 0xFFFF)
13715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
13725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            /* Check if the address is mentioned in the filter range */
13735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (i = 0; i < p_bcb->rcvd_mcast_filters; i++)
13745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
13755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if ((memcmp (p_bcb->rcvd_mcast_filter_start[i], p_dest_addr, BD_ADDR_LEN) <= 0) &&
13765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    (memcmp (p_bcb->rcvd_mcast_filter_end[i], p_dest_addr, BD_ADDR_LEN) >= 0))
13775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    break;
13785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
13795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
13805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        /*
13825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ** If every multicast should be filtered or the address is not in the filter range
13835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ** drop the packet
13845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        */
13855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ((p_bcb->rcvd_mcast_filters == 0xFFFF) || (i == p_bcb->rcvd_mcast_filters))
13865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1387d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati            BNEP_TRACE_DEBUG ("Ignoring multicast address %x.%x.%x.%x.%x.%x in BNEP data write",
13885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dest_addr[0], p_dest_addr[1], p_dest_addr[2],
13895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                p_dest_addr[3], p_dest_addr[4], p_dest_addr[5]);
13905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            return BNEP_IGNORE_CMD;
13915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
13925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
13935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
13945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return BNEP_SUCCESS;
13965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
13975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
13995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnep_get_uuid32
14055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function returns the 32 bit equivalent of the given UUID
14075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          UINT32          - 32 bit equivalent of the UUID
14095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT32 bnep_get_uuid32 (tBT_UUID *src_uuid)
14125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
14135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32      result;
14145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (src_uuid->len == 2)
14165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return ((UINT32)src_uuid->uu.uuid16);
14175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else if (src_uuid->len == 4)
14185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return (src_uuid->uu.uuid32 & 0x0000FFFF);
14195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
14205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result = src_uuid->uu.uuid128[2];
14225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        result = (result << 8) | (src_uuid->uu.uuid128[3]);
14235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        return result;
14245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
14315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         bnep_dump_status
14335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function dumps the bnep control block and connection
14355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  blocks information
14365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          none
14385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
14395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
14405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bnep_dump_status (void)
14415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
14425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (defined (BNEP_SUPPORTS_DEBUG_DUMP) && BNEP_SUPPORTS_DEBUG_DUMP == TRUE)
14435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16          i;
14445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    char            buff[200];
14455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tBNEP_CONN     *p_bcb;
14465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1447d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_DEBUG ("BNEP my BD Addr %x.%x.%x.%x.%x.%x",
14485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnep_cb.my_bda[0], bnep_cb.my_bda[1], bnep_cb.my_bda[2],
14495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnep_cb.my_bda[3], bnep_cb.my_bda[4], bnep_cb.my_bda[5]);
1450d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati    BNEP_TRACE_DEBUG ("profile registered %d, trace %d, got_my_bd_addr %d",
14515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        bnep_cb.profile_registered, bnep_cb.trace_level, bnep_cb.got_my_bd_addr);
14525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (i = 0, p_bcb = bnep_cb.bcb; i < BNEP_MAX_CONNECTIONS; i++, p_bcb++)
14545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
14555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        sprintf (buff, "%d state %d, flags 0x%x, cid %d, pfilts %d, mfilts %d, src 0x%x, dst 0x%x, BD %x.%x.%x.%x.%x.%x",
14565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            i, p_bcb->con_state, p_bcb->con_flags, p_bcb->l2cap_cid,
14575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->rcvd_num_filters, p_bcb->rcvd_mcast_filters,
14585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->src_uuid.uu.uuid16, p_bcb->dst_uuid.uu.uuid16,
14595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->rem_bda[0], p_bcb->rem_bda[1], p_bcb->rem_bda[2],
14605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            p_bcb->rem_bda[3], p_bcb->rem_bda[4], p_bcb->rem_bda[5]);
14615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1462d6e1b1ee17959461a80936f7308d8129615315d2Sharvil Nanavati        BNEP_TRACE_DEBUG (buff);
14635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
14645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
14655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
14665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
14675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1468