/** * 组装鉴权响应包 */ int ComposePkg(tASecMsgHead &stHead, tASecVcClientRsp &stRsp, uint8_t *pPkg, int& iPkgBufSize) { //数据预处理.做个保护措施 stHead.usMsgType = MSG_TYPE_VC_CLIENT_RSP; CK_STR(stRsp.aszErrMsg); CK_STR(stRsp.aszSig); char szPkgBuf[1024]; char *pCur = szPkgBuf; bzero(szPkgBuf, sizeof(szPkgBuf)); *pCur = 0x02; pCur++; tASecMsgHead* pHead = (tASecMsgHead*)pCur; pCur+=sizeof(tASecMsgHead); memcpy(pHead, &stHead, sizeof(stHead)); AddDWord(&pCur, NULL, stRsp.ulRet); AddDWord(&pCur, NULL, stRsp.ulSvrTime); AddString(&pCur, NULL, stRsp.aszErrMsg, strlen(stRsp.aszErrMsg)); AddString(&pCur, NULL, stRsp.aszSig, strlen(stRsp.aszSig)); *pCur = 0x03; pCur++; int iPkgLen = pCur-szPkgBuf; if (iPkgLen > iPkgBufSize) { return -2; } pHead->usLength = iPkgLen; Hton(pHead); memcpy(pPkg, szPkgBuf, iPkgLen); iPkgBufSize=iPkgLen; return 0; }
/*----------------------------------------------------------------------------- * pack a number tlv *-----------------------------------------------------------------------------*/ int AddNumTlv(char **ppCur, int *piLeftLen, NumTLV *pstNumTlv) { uint16_t wType = 0, wLen = 0; if(ppCur == NULL || piLeftLen == NULL || pstNumTlv == NULL ) { return -1; } wType = pstNumTlv->wType; wLen = pstNumTlv->wLen; if(wType == 0 || wLen == 0 || wLen > MAX_NUMBER_TLV_LEN) { return -2; } if((AddWord(ppCur, piLeftLen, wType)) != 0) return -3; if((AddWord(ppCur, piLeftLen, wLen)) != 0) return -4; if(wLen == CHAR_LEN) { if((AddChar(ppCur, piLeftLen, pstNumTlv->stValue.cValue)) != 0) return -5; } else if(wLen == WORD_LEN) { if((AddWord(ppCur, piLeftLen, pstNumTlv->stValue.wValue)) != 0) return -6; } else if(wLen == DWORD_LEN) { if((AddDWord(ppCur, piLeftLen, pstNumTlv->stValue.dwValue)) != 0) return -7; } else if(wLen == DDWORD_LEN) { if((AddDDWord(ppCur, piLeftLen, pstNumTlv->stValue.ddwValue)) != 0) return -8; } else { printf("GetNumTlvValue error. wLen = %d\n", wLen); return -9; } return 0; }
/** * 封装消息包 */ int ComposePkg(tASecMsgBody &stBody, uint8_t *pPkg, int& iPkgBufSize) { //数据预处理.做个保护措施 CK_STR(stBody.aszTitle); CK_STR(stBody.aszMsg); CK_STR(stBody.aszUin); char szPkgBuf[1024]; char *pCur = szPkgBuf; bzero(szPkgBuf, sizeof(szPkgBuf)); AddDlWord(&pCur, NULL, stBody.ullTknSeq); AddString(&pCur, NULL, stBody.aszUin, strlen(stBody.aszUin)); AddDWord(&pCur, NULL, stBody.ulMsgId); *pCur = stBody.ucType; pCur++; *pCur = stBody.ucSubType; pCur++; AddDWord(&pCur, NULL, stBody.ulTime); AddString(&pCur, NULL, stBody.aszTitle, strlen(stBody.aszTitle)); AddString(&pCur, NULL, stBody.aszMsg, strlen(stBody.aszMsg)); int iPkgLen = pCur-szPkgBuf; if (iPkgLen > iPkgBufSize) { return -2; } memcpy(pPkg, szPkgBuf, iPkgLen); iPkgBufSize=iPkgLen; return 0; }