授权(mining.authorize)与 auth_stratum函数

一、授权(mining.authorize)命令
  矿机收到矿池的订阅响应消息后,接着向矿池发送授权消息,消息内容如下:

  {"id":2,"method":"mining.authorize","params":["zsc.1","x"]}

  params包含两部分,第一部分是矿工名,第二部分是矿工密码(随意)。

  矿池收到矿机的授权消息后,先对矿工名进行验证,矿工名的第一部分(“.”左边的部分)为用户名或子账号名,若该用户名不存在,则授权失败,返回error,消息内容如下:

  {"id":2,"result":null,"error":[29,"Invalid username",null]}

  error中第一部分是错误码,第二部分是错误描述。若授权成功,则返回消息内容如下:

  {"id":2,"result":true,"error":null}

二、auth_stratum函数主要完成mining.authorize解析过程
       1、组装命令,sprintf(s, "{\"id\": %d, \"method\": \"mining.authorize\", \"params\": [\"%s\", \"%s\"]}",
        swork_id++, pool->rpc_user, pool->rpc_pass);

2、发送请求认证命令stratum_send(pool, s, strlen(s))

3、接收矿池消息,sret = recv_line(pool);

4、获取result信息,res_val = json_object_get(val, "result");

5、设置矿池对象属性 ,pool->probed = true;

6、如果有默认难度,向矿池请求设置矿机默认难度

识别并详细讲解图片上关于“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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值