示例#1
0
/**
 * 组装鉴权响应包
 */
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;
}
示例#2
0
文件: tlv.c 项目: softirq/common
/*-----------------------------------------------------------------------------
 *  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;
}
示例#3
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;
}