认证流程【4】-http_callback_auth()函数


void http_callback_auth(httpd *webserver, request *r)
{
    t_client    *client;
    httpVar * token;
    char    *mac;
    httpVar *logout = httpdGetVariableByName(r, "logout");

    if (wx_link_wifi == 1) {
        debug(LOG_DEBUG, "#####http_callback_auth#######: %s/%s\r\n", r->request.host, r->request.path);
        return;
    }
   
   debug(LOG_DEBUG, "!!!!http_callback_auth!!!\n");

     /* 检查http 报文里有没有token*/
    if ((token = httpdGetVariableByName(r, "token"))) {
        /* They supplied variable "token" */
          /* 然后通过arp_get 拿该报文发送者的ip 对应的MAC 地址*/
        if (!(mac = arp_get(r->clientAddr))) {
            /* We could not get their MAC address */
            debug(LOG_ERR, "Failed to retrieve MAC address for ip %s", r->clientAddr);
            send_http_page(r, "WiFiDog Error", "Failed to retrieve your MAC address");
        } else {
            /* We have their MA
识别并详细讲解图片上关于“android蓝牙连接过程分析(三)--btm_cb.api回调函数的赋值”的代码,讲解具体的函数和方法的调用过程和执行流程以及每个函数或方法的内容都进行详细的讲解。代码内容如下: static void bta_dm_sys_hw_cback(tBTA_SYS_HW_EVT status) { DEV_CLASS dev_class; tBTA_DM_SEC_CBACK *temp_cback; UINT8 key_mask = 0; UINT8 mode = 0; if(status == BTA_SYS_HW_ON_EVT) { if(bta_dm_cb.p_sec_cback && bta_dm_cb.is_bta_dm_active == FALSE) { /* restore the application callback */ temp_cback = bta_dm_cb.p_sec_cback; memset(&bta_dm_cb, 0, sizeof(bta_dm_cb)); bta_dm_cb.p_sec_cback = temp_cback; bta_dm_cb.is_bta_active = TRUE; /* make sure the control block is properly initialized */ if(bta_dm_cb.p_sec_cback && bta_dm_cb.is_bta_dm_active) { /* set the Security callback to the firmware */ bta_dm_cb.p_sec_cback(BTA_DM_SEC_CHG_EVT, &bta_dm_cb); } } } else if(status == BTA_SYS_HW_OFF_EVT) { /* save security callback */ temp_cback = bta_dm_cb.p_sec_cback; memset(&bta_dm_cb, 0, sizeof(bta_dm_cb)); bta_dm_cb.p_sec_cback = temp_cback; bta_dm_cb.is_bta_active = FALSE; } BTM_SecRegister((tBTM_APPL_INFO *)&bta_security); BTM_SetDiscoverability((tBTM_DISC_MODE)bta_dm_cb.disc_mode, bta_dm_cb.disc_duration, bta_dm_cb.disc_interval); bta_dm_cb.cur_policy = bta_dm_cb.policy; BTM_SetLinkPolicy(bta_dm_cb.policy); } 在重要后语中分析bta_dm_sys_hw_cback函数中,在这里里面使用BTM_SecRegister函数来注册一个Security service服务,在这里里面,入参为 bta_security结构体。 tBTM_SecRegister(tBTM_APPL_INFO *p_cb_info) { BT_HDR_INCLUDED == TRUE IF_OCTET16 temp_value = {0}; tBTM_TRACE_EVENT ("BTM_Sec: application registered"); #if BLE_INCLUDED == TRUE && SMP_INCLUDED == TRUE if (p_cb_info->p_le_callback) { BTM_TRACE_ERROR ("BTM_SecRegister: p_cb_info->p_le_callback = 0x%x", p_cb_info->p_le_callback); } #endif if (p_cb_info->p_le_callback) { BTM_TRACE_ERROR ("BTM_SecRegister: DEV_CB.api.p_le_callback = 0x%x", p_cb_info->p_le_callback); } #if SMP_INCLUDED == TRUE if (p_cb_info->p_le_callback) { BTM_TRACE_EVENT ("BTM_Sec: application registered"); } #endif btm_cb.api = *p_cb_info; BTM_TRACE_ERROR ("BTM_SecRegister: p_cb_info->p_le_callback = 0x%x", p_cb_info->p_le_callback); #if SMP_INCLUDED == TRUE if (p_cb_info->p_le_callback) { btm_cb.api.p_le_callback = p_cb_info->p_le_callback; BTM_TRACE_EVENT ("BTM_Sec: application registered"); } #endif } 这是公开的函数列表,函数体内的功能说明,在这里bta_security结构体信息被赋值给btm_cb.api可以看到这是个重要的回调函数。 bta_security callback结构体分析 /* bta_security_callback */ const tBTM_APPL_INFO bta_security = { &bta_dm_authorize_cback, &bta_dm_pin_cback, &bta_dm_new_link_key_cback, &bta_dm_link_key_request_cback, &bta_dm_authentication_complete_cback, NULL, &bta_dm_bond_cancel_complete_cback, #if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) &bta_dm_sp_cback, #else NULL, #endif #if SMP_INCLUDED == TRUE &bta_dm_ble_smp_cback #else NULL #endif &bta_dm_ble_id_key_cback #endif }; 在这里看到bta_security结构体的定义,里面包含了各种回调函数的定义,这是一个重要的结构体,也是整个蓝牙认证过程中非常重要的一环。 const tBTM_APPL_INFO bta_security = { &bta_dm_authorize_cback, &bta_dm_pin_cback, &bta_dm_new_link_key_cback, &bta_dm_link_key_request_cback, &bta_dm_authentication_complete_cback, NULL, &bta_dm_bond_cancel_complete_cback, #if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE) &bta_dm_sp_cback, bta_security结构体的sp_callback定义 #else NULL, #endif #if SMP_INCLUDED == TRUE &bta_dm_ble_smp_cback #else NULL #endif &bta_dm_ble_id_key_cback #endif }; bta_security结构体的sp_callback定义数btm_cb.api.p_sp_callback = bta_dm_sp_cback主要,充当了蓝牙连接过程中的认证
07-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值