AMVoid IAccount_SetNameType(AIMAccount *pAcnt, const AMChar *szName, AMUInt32 uiNameLen, AIM_ACCOUNT_TYPE eType) { AMAssert(0 != pAcnt); AMAssert(0 != szName && eType>=0 && eType <= 8); if(pAcnt->szName) { AMFree(pAcnt->szName); pAcnt->szName = 0; } pAcnt->szName = AMMalloc(uiNameLen + 1); AMAssert(0 != pAcnt->szName); AMMemset(pAcnt->szName, 0, uiNameLen + 1); AMMemcpy(pAcnt->szName, szName, uiNameLen); pAcnt->eType = eType; if(pAcnt->szID) { AMFree(pAcnt->szID); pAcnt->szID = 0; } pAcnt->szID = AMMalloc(uiNameLen + ID_HEAD_LEN + 1); AMAssert(0 != pAcnt->szID); AMMemset(pAcnt->szID, 0, uiNameLen + ID_HEAD_LEN + 1); AMStrcpy(pAcnt->szID, szID_Head[eType]); AMMemcpy(pAcnt->szID + ID_HEAD_LEN, szName, uiNameLen); }
AIM_RESULT OnRspGetProfile(AMVoid *pvArg, AIM_RSP_GET_PROFILE *pRspGetProfile) { IAIM *pIM = (IAIM*)(((AMPVoid*)pvArg)[1]); IAIMessage *pMsg = 0; AMInt32 iContentLen = 0, i = 0, iPos = 0, iLen = 0;; pMsg = IAIMessage_Create(); pMsg->bUnread = AMTRUE; pMsg->eType = (AIM_MSG_TYPE)GET_PEER_UDB_PROFILE; IAIMessage_SetCntID(pMsg, pRspGetProfile->szContactId, AMStrlen(pRspGetProfile->szContactId)); iContentLen = pRspGetProfile->iTotalLen + 4 + AMStrlen(pRspGetProfile->szContactId) + sizeof(UID_KEYWROD_ID); iContentLen += pRspGetProfile->iCount*2; pMsg->szContent = (AMChar *)AMMalloc(iContentLen); if(AMNULL == pMsg->szContent) { IAIMessage_Destroy(pMsg); return eAIM_RESULT_NOT_READY; } AMMemset(pMsg->szContent, 0, iContentLen); for(i=0; i<pRspGetProfile->iCount; i++) { if(AMNULL != pRspGetProfile->pszValues[i]) { iLen = AMStrlen(pRspGetProfile->pszKeys[i]); AMMemcpy(pMsg->szContent+iPos, pRspGetProfile->pszKeys[i], iLen); iPos += iLen; pMsg->szContent[iPos++] = '\1'; iLen = AMStrlen(pRspGetProfile->pszValues[i]); AMMemcpy(pMsg->szContent+iPos, pRspGetProfile->pszValues[i], iLen); iPos += iLen; pMsg->szContent[iPos++] = '\1'; } } AMMemcpy(pMsg->szContent+iPos, UID_KEYWROD_ID, sizeof(UID_KEYWROD_ID)-1);//加上"uid\1'contactId'" iPos += sizeof(UID_KEYWROD_ID)-1; pMsg->szContent[iPos++] = '\1'; AMStrcat(pMsg->szContent+iPos, pRspGetProfile->szContactId);//不需要尾巴了 DPRINT("IASessionModel_OnPeerVerifyConfig.................%s\n", pMsg->szContent); Adapter_OnIncomingSysMsg(pIM->pSesModel, pMsg, pvArg); IAIMessage_Destroy(pMsg); return eAIM_RESULT_OK; }
AMChar * BuildSigXMLFromStruct(AIM_SIGNATURE *pSigStruct, const AMChar *szSig)//只是把5个sig造好,没有追加后面的loop/st/ci等设置 { AMChar * szResultXML = AMNULL; AMInt32 iLen = 0, iPos = 0, i=0; AMAssert(pSigStruct); iLen = sizeof(XML_SIG_TEMPHEAD) + sizeof(XML_SIG_TEMPTAIL) + 3*MAX_INT_NUMBER_LEN; iLen += szSig?AMStrlen(szSig):0 + 11; for(i=0; i< MAX_SIG_COUNT-1; i++) iLen += pSigStruct->szSignature[i]?AMStrlen(pSigStruct->szSignature[i]):0 + 11;//11 for "<Sig></Sig>" szResultXML = (AMChar*)AMMalloc(iLen); if(!szResultXML) return AMNULL; AMMemset(szResultXML, 0, iLen); AMMemcpy(szResultXML, HeadTag(XML_TAG_SIGOP), sizeof(HeadTag(XML_TAG_SIGOP))-1); AMStrcat(szResultXML, HeadTag(XML_TAG_SIG)); if(szSig) AMStrcat(szResultXML, szSig); AMStrcat(szResultXML, TailTag(XML_TAG_SIG)); for(i=0; i< MAX_SIG_COUNT-1; i++) { AMStrcat(szResultXML, HeadTag(XML_TAG_SIG)); AMStrcat(szResultXML, pSigStruct->szSignature[i]); AMStrcat(szResultXML, TailTag(XML_TAG_SIG)); } return szResultXML; }
AMVoid IAGroup_SetPinyin(IAGroup *pGrp, AMChar *szPinyin, AMUInt32 uiLen) { AMAssert(0 != pGrp && 0 != szPinyin && 0 < uiLen); if(pGrp->szPinyin) { AMFree(pGrp->szPinyin); pGrp->szPinyin = 0; } pGrp->szPinyin = (AMChar *)AMMalloc(uiLen + 1); AMAssert(0 != pGrp->szPinyin); AMMemcpy(pGrp->szPinyin, szPinyin, uiLen); pGrp->szPinyin[uiLen] = 0; }
AMVoid IAGroup_SetName(IAGroup *pGrp, AMChar *szName, AMUInt32 uiLen) { AMAssert(0 != pGrp && 0 != szName && 0 < uiLen); if(pGrp->szName) { AMFree(pGrp->szName); pGrp->szName = 0; } pGrp->szName = (AMChar *)AMMalloc(uiLen + 1); AMAssert(0 != pGrp->szName); AMMemcpy(pGrp->szName, szName, uiLen); pGrp->szName[uiLen] = 0; }
AMVoid IAccount_SetBindID(AIMAccount *pAcnt, const AMChar *szBindID, AMUInt32 uiIdLen) { AMAssert(0 != pAcnt && 0 != szBindID); if(pAcnt->szBindID) { AMFree(pAcnt->szBindID); pAcnt->szBindID = 0; } pAcnt->szBindID = (AMChar *)AMMalloc(uiIdLen+1); AMAssert(0 != pAcnt->szBindID); AMMemcpy(pAcnt->szBindID, szBindID, uiIdLen); pAcnt->szBindID[uiIdLen] = 0; }
AMVoid IAccount_SetPwd(AIMAccount *pAcnt, const AMChar *szPwd, AMUInt32 uiPwdLen) { AMAssert(0 != pAcnt && 0 != szPwd); if(pAcnt->szPwd) { AMFree(pAcnt->szPwd); pAcnt->szPwd = 0; } pAcnt->szPwd = (AMChar *)AMMalloc(uiPwdLen+1); AMAssert(0 != pAcnt->szPwd); AMMemcpy(pAcnt->szPwd, szPwd, uiPwdLen); pAcnt->szPwd[uiPwdLen] = 0; }
AMVoid IAIMessage_SetContent(IAIMessage *pMsg, const AMChar *szContent, AMUInt32 iLen) { AMAssert(0 != pMsg); if(pMsg->szContent) { AMFree(pMsg->szContent); pMsg->szContent = 0; } pMsg->szContent = (AMChar *)AMMalloc(iLen + 1); AMAssert(0 != pMsg->szContent); AMMemcpy(pMsg->szContent, szContent, iLen); pMsg->szContent[iLen] = 0; }
AMVoid IAIMessage_SetCntID(IAIMessage *pMsg, const AMChar * szCntID, AMUInt32 uiIDLen) { AMAssert(0 != pMsg && 0 != szCntID); if(pMsg->szContactID) { AMFree(pMsg->szContactID); pMsg->szContactID = 0; } pMsg->szContactID = (AMChar *)AMMalloc(uiIDLen + 1); AMAssert(0 != pMsg->szContactID); AMMemcpy(pMsg->szContactID, szCntID, uiIDLen); pMsg->szContactID[uiIDLen] = 0; }
AMVoid IAccount_SetWebMD5(AIMAccount *pAcnt, const AMChar *szToken, AMUInt32 uiTokenLen) { AMAssert(0 != pAcnt && 0 != szToken); if(pAcnt->szWebMD5) { AMFree(pAcnt->szWebMD5); pAcnt->szWebMD5 = 0; pAcnt->uiWebMD5Len = 0; } pAcnt->szWebMD5 = (AMChar *)AMMalloc(uiTokenLen+1); AMAssert(0 != pAcnt->szWebMD5); AMMemcpy(pAcnt->szWebMD5, szToken, uiTokenLen); pAcnt->szWebMD5[uiTokenLen] = 0; pAcnt->uiWebMD5Len = uiTokenLen; }
AMVoid IAccount_SetPhoneNum(AIMAccount *pAcnt, const AMChar *szPhone)//, AMUInt32 uiPhoneLen) { AMUInt32 uiPhoneLen = 0; AMAssert(0 != pAcnt && 0 != szPhone); if(pAcnt->szPhoneNum) { AMFree(pAcnt->szPhoneNum); pAcnt->szPhoneNum = 0; } uiPhoneLen = AMStrlen(szPhone); pAcnt->szPhoneNum = (AMChar *)AMMalloc(uiPhoneLen+1); AMAssert(0 != pAcnt->szPhoneNum); AMMemcpy(pAcnt->szPhoneNum, szPhone, uiPhoneLen); pAcnt->szPhoneNum[uiPhoneLen] = 0; }
AMVoid IAccount_SetSigXML(AIMAccount *pAcnt, const AMChar *szXML, AMUInt32 uiLen) { AMAssert(0 != pAcnt); if(pAcnt->szSigXML) { AMFree(pAcnt->szSigXML); pAcnt->szSigXML = 0; } if(0 == uiLen) return ; pAcnt->szSigXML = (AMChar *)AMMalloc(uiLen+1); AMAssert(0 != pAcnt->szSigXML); AMMemcpy(pAcnt->szSigXML, szXML, uiLen); pAcnt->szSigXML[uiLen] = 0; }
AMVoid IAccount_SetSignature(AIMAccount *pAcnt, const AMChar *szSignature, AMUInt32 uiLen) { AMAssert(0 != pAcnt); if(pAcnt->szSignature) { AMFree(pAcnt->szSignature); pAcnt->szSignature = 0; } if(0 == szSignature) return ; pAcnt->szSignature = (AMChar *)AMMalloc(uiLen+1); AMAssert(0 != pAcnt->szSignature); AMMemcpy(pAcnt->szSignature, szSignature, uiLen); pAcnt->szSignature[uiLen] = 0; }
AMInt32 SigXML2SigStruct(const AMChar *szSigXML, AMHandle hSig) { int i = 0; AMChar *szBegin = AMNULL, *szEnd = AMNULL; AIM_SIGNATURE *pSig = (AIM_SIGNATURE*)hSig; AMAssert(0 != szSigXML && AMNULL != pSig); AMMemset(pSig, 0, sizeof(AIM_SIGNATURE)); szBegin = AMStrstr(szSigXML, HeadTag(XML_TAG_SIG)); i=0; while(AMNULL != szBegin && i<MAX_SIG_COUNT) { szBegin += sizeof(HeadTag(XML_TAG_SIG)) -1; szEnd = AMStrstr(szBegin, TailTag(XML_TAG_SIG)); if(AMNULL != szEnd) { if(szEnd-szBegin < MAX_SIG_LEN) { AMMemcpy(pSig->szSignature[i], szBegin, szEnd-szBegin); } szBegin = AMStrstr(szEnd, HeadTag(XML_TAG_SIG)); } else break; i++; } if(AMNULL == szEnd) szEnd = szSigXML; szBegin = AMStrstr(szEnd, HeadTag(XML_TAG_LOOP)); if(AMNULL != szBegin) pSig->iLoop = AMAtoi(szBegin + sizeof(HeadTag(XML_TAG_LOOP))-1); else szBegin = szSigXML; szBegin = AMStrstr(szBegin, HeadTag(XML_TAG_T)); if(AMNULL != szBegin) pSig->iT = AMAtoi(szBegin + sizeof(HeadTag(XML_TAG_T))-1); else szBegin = szSigXML; szBegin = AMStrstr(szBegin, HeadTag(XML_TAG_CI)); if(AMNULL != szBegin) pSig->iCI = AMAtoi(szBegin + sizeof(HeadTag(XML_TAG_CI))-1); else szBegin = szSigXML; szBegin = AMStrstr(szBegin, HeadTag(XML_TAG_ST)); if(AMNULL != szBegin) pSig->iST = AMAtoi(szBegin + sizeof(HeadTag(XML_TAG_ST))-1); else szBegin = szSigXML; szBegin = AMStrstr(szBegin, HeadTag(XML_TAG_RET)); if(AMNULL != szBegin) pSig->iRet = AMAtoi(szBegin + sizeof(HeadTag(XML_TAG_RET))-1); else szBegin = szSigXML; szBegin = AMStrstr(szBegin, HeadTag(XML_TAG_FLAG)); if(AMNULL != szBegin) pSig->iFlag = AMAtoi(szBegin + sizeof(HeadTag(XML_TAG_FLAG))-1); else szBegin = szSigXML; szBegin = AMStrstr(szBegin, HeadTag(XML_TAG_EMP)); if(AMNULL != szBegin) pSig->iEmp = AMAtoi(szBegin + sizeof(HeadTag(XML_TAG_EMP))-1); return 0; }