void smpActPairingFailed(smpCcb_t *pCcb, smpMsg_t *pMsg) { /* clean up */ smpCleanup(pCcb); /* set connection idle */ DmConnSetIdle(pCcb->connId, DM_IDLE_SMP_PAIR, DM_CONN_IDLE); /* notify DM of pairing failure */ pMsg->hdr.event = DM_SEC_PAIR_FAIL_IND; DmSmpCbackExec((dmEvt_t *) pMsg); }
void smpActPairingCmpl(smpCcb_t *pCcb, smpMsg_t *pMsg) { dmSecPairCmplIndEvt_t pairCmpl; smpCleanup(pCcb); /* set connection idle */ DmConnSetIdle(pCcb->connId, DM_IDLE_SMP_PAIR, DM_CONN_IDLE); pairCmpl.auth = pCcb->auth; pairCmpl.hdr.param = pCcb->connId; pairCmpl.hdr.event = DM_SEC_PAIR_CMPL_IND; DmSmpCbackExec((dmEvt_t *) &pairCmpl); }
void smprActProcPairReq(smpCcb_t *pCcb, smpMsg_t *pMsg) { dmSecPairIndEvt_t pairInd; uint8_t *p; /* allocate scratch buffer */ if (pCcb->pScr == NULL) { if ((pCcb->pScr = WsfBufAlloc(sizeof(smpScratch_t))) == NULL) { /* alloc failed; cancel pairing */ pMsg->hdr.status = SMP_ERR_UNSPECIFIED; pMsg->hdr.event = SMP_MSG_API_CANCEL_REQ; smpSmExecute(pCcb, pMsg); return; } } else { /* should not happen */ SMP_TRACE_ERR0("pScr already allocated"); } /* set connection busy */ DmConnSetIdle(pCcb->connId, DM_IDLE_SMP_PAIR, DM_CONN_BUSY); p = pMsg->data.pPacket + L2C_PAYLOAD_START; /* store packet for later */ memcpy(pCcb->pairReq, p, SMP_PAIR_REQ_LEN); /* parse packet to callback event structure */ p++; /* skip command code */ p++; /* skip IO capabilities */ BSTREAM_TO_UINT8(pairInd.oob, p); BSTREAM_TO_UINT8(pairInd.auth, p); p++; /* skip max key len */ BSTREAM_TO_UINT8(pairInd.iKeyDist, p); BSTREAM_TO_UINT8(pairInd.rKeyDist, p); /* call app callback */ pairInd.hdr.param = pCcb->connId; pairInd.hdr.event = DM_SEC_PAIR_IND; DmSmpCbackExec((dmEvt_t *) &pairInd); }