AMInt32 _AIMAuth_setSession(AIMAuth *pAuth, const AMChar *szSession) { AMInt32 iLen = 0; AMAssert(pAuth && szSession); iLen = AMStrlen(szSession); AMAssert(iLen); if(pAuth->szSession) { AMFree(pAuth->szSession); pAuth->szSession = AMNULL; } #if 1 //dynamic pAuth->szSession = szSession; #else pAuth->szSession = (AMChar *)AMMalloc(iLen + 1); if(!pAuth->szSession) return eAIM_RESULT_MALLOC_ERROR; AMStrcpy(pAuth->szSession, szSession); #endif pAuth->iStatus = eAUTH_SESSION; return eAIM_RESULT_OK; }
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); }
AMChar * BuildSigXML(const AMChar *szSigXML, const AMChar *szSignature) { AIM_SIGNATURE sigStruct; AMChar *szRetXML = AMNULL, *szLeft = AMNULL; AMAssert(szSigXML); if(0 != SigXML2SigStruct(szSigXML, &sigStruct)) return AMNULL; if(AMNULL == (szRetXML = BuildSigXMLFromStruct(&sigStruct, szSignature))) return AMNULL; AMStrcat(szRetXML, XML_SIG_TEMPHEAD + sizeof(HeadTag(XML_TAG_SIGOP)) + sizeof(HeadTag(XML_TAG_SIG)) + sizeof(TailTag(XML_TAG_SIG)) -1); AMStrcat(szRetXML, "0"); AMStrcat(szRetXML, XML_SIG_TEMPTAIL); if(!szSignature || !*szSignature) { szLeft = AMStrstr(szRetXML, HeadTag(XML_TAG_EMP)); AMAssert(szLeft); szLeft[sizeof(HeadTag(XML_TAG_EMP))-1]='1'; } return szRetXML; }
AIM_RESULT OnNtfUserInfo(AMVoid *pvArg, AIM_NTF_USER_INFO *pNtfUserInfo) { IAIM *pIM = (IAIM*)(((AMPVoid*)pvArg)[1]); DPRINT("OnNtfUserInfo.........................Entering!\n"); AMAssert(pIM && pIM->pAcnt); AMAssert(pNtfUserInfo); return (AIM_RESULT)JavaConnListener(pvArg, CONN_CB_GETUSERINFO, pNtfUserInfo->iImlevel<<8 | pIM->pAcnt->iVerifyType); }
AMInt32 IAGroup_CmpPinyin(const AMVoid *pG1,const AMVoid *pG2, size_t t) { IAGroup *pGA = (IAGroup*)pG1, *pGB = (IAGroup*)pG2; AMAssert(0 != pGA && 0 != pGB); AMAssert(0 != pGA->szPinyin && 0 != pGB->szPinyin); return AMStrcmp(pGA->szPinyin, pGB->szPinyin); }
AMInt32 IASession_Cmp(const AMVoid *p1, const AMVoid *p2, size_t t) { IASession *pA = (IASession*)p1, *pB = (IASession*)p2; AMAssert(0 != pA && 0 != pB); AMAssert(0 != pA->szContactID && 0 != pB->szContactID); return AMStrcmp(pA->szContactID, pB->szContactID); }
AMInt32 IAccount_cmpID(const AMVoid *pA, const AMVoid *pB, size_t s) { AIMAccount *pAcntA, *pAcntB; AMAssert(0 != pA && 0 != pB); pAcntA = (AIMAccount *)pA; pAcntB = (AIMAccount *)pB; AMAssert(pAcntA->szID != 0 && pAcntB->szID != 0); DPRINT("IAccount_cmpID.................%s, %s\n", pAcntA->szID, pAcntB->szID); return AMStrcmp(pAcntA->szID, pAcntB->szID); }
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 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; }
AMInt32 IAccount_SetID(AIMAccount *pAcnt, const AMChar *szID, AMUInt32 uiIdLen) { AMUChar ucType = 0; AIM_ACCOUNT_TYPE eType = eAIM_ACNTYPE_WRONG; AMAssert(0 != pAcnt && 0 != szID); eType = IAccount_TellType(szID, uiIdLen); AMAssert(eAIM_ACNTYPE_WRONG != eType); IAccount_SetNameType(pAcnt, szID+8, uiIdLen-8, eType); return 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; }
AIM_RESULT AIMSession_CountUnreadMsgs( AMHandle hSession, AMInt64 iID, AMInt32 *pCount ) { const IASession *pSession = (const IASession *)hSession; AMInt32 iRet = 0; AMInt32 rcSqlite = 0; AMChar *szSql = AMNULL; AMChar *szErrMsg = AMNULL; AMAssert(AMNULL != pSession && AMNULL != pCount); AMAssert(AMNULL != pSession->pSesModel); AMAssert(AMNULL != pSession->pSesModel->pDB); if(0 == iID) { if(0 == AMStrcmp(pSession->szContactID, SYS_SES_NAME))//系统消息 { szSql = sqlite3_mprintf(SQL_SELECT_UNREAD_SYS_MSG_COUNT); } else//普通聊天消息 { szSql = sqlite3_mprintf(SQL_SELECT_UNREAD_CNT_MSG_COUNT, pSession->szContactID); } } else { szSql = sqlite3_mprintf(SQL_SELECT_UNREAD_COUNT_ID, iID); } if(szSql) { rcSqlite = sqlite3_exec(pSession->pSesModel->pDB, szSql, IASession_OnSelUnreadCnt, &iRet, &szErrMsg); sqlite3_free(szSql); if(SQLITE_OK != rcSqlite) { DPRINT("IASession_GetUnreadCnt.............can not %s for %s\n", szSql, szErrMsg); sqlite3_free(szErrMsg); return eAIM_RESULT_DB_ERROR; } *pCount = iRet; return eAIM_RESULT_OK; } else { return eAIM_RESULT_MALLOC_ERROR; } }
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; }
static AMInt32 _AIMAuth_getAuthImg(AMChar **pszSession, AMChar **pszImg, AMInt32 *piLen) { AMInt32 iRetCode = eAIM_RESULT_OK, iImgLen = 0; AMChar *szSession = AMNULL, *szImgData = AMNULL; AMAssert(pszSession && pszImg && piLen); *pszSession = *pszImg = *piLen = 0; szSession = _genSession(); if(szSession) { szImgData = _getCheckImg(szSession, &iImgLen); if(!szImgData || !iImgLen) { AMFree(szSession); iRetCode = eAIM_RESULT_NET; } } else iRetCode = eAIM_RESULT_MALLOC_ERROR; if(eAIM_RESULT_OK == iRetCode) { *pszSession = szSession; *pszImg = szImgData; *piLen = iImgLen; } return iRetCode; }
AIM_RESULT OnRspGetMemo(AMVoid *pvArg, AIM_RSP_GET_MEMO *pRspGetMemo) { IAIM *pIM = (IAIM*)(((AMPVoid*)pvArg)[1]); IAIMessage *pMsg = AMNULL; AMChar *pBuf = AMNULL; AMInt32 iLen = 0; AMAssert(AMNULL != pIM && AMNULL != pRspGetMemo); DPRINT("IASessionModel_OnGetCntMemo.........................Entering!\n"); pMsg = IAIMessage_Create(); if(pRspGetMemo->szContactId) IAIMessage_SetCntID(pMsg, pRspGetMemo->szContactId, AMStrlen(pRspGetMemo->szContactId)); if(0 == pRspGetMemo->iRetCode)//成功 { pMsg->eType = (AIM_MSG_TYPE)GET_CNTMEMO_OK; IAIMessage_SetContent(pMsg, pRspGetMemo->szMemo, AMStrlen(pRspGetMemo->szMemo)); } else//失败 { pMsg->eType = (AIM_MSG_TYPE)GET_CNTMEMO_FAIL; } DPRINT("IASessionModel_OnGetCntMemo.......................%s\n", pMsg->szContent); Adapter_OnIncomingSysMsg(pIM->pSesModel, pMsg, pvArg); IAIMessage_Destroy(pMsg); DPRINT("IASessionModel_OnGetCntMemo.........................OK!\n"); return eAIM_RESULT_OK; }
AMBool IAccountModel_IsDirt(IAccountModel *pAcntModel) { AMAssert(0 != pAcntModel); if(0 != (pAcntModel->uiDirtFlag&0x01)) return AMTRUE; return AMFALSE; }
AIM_RESULT OnRspChgSrvMode(AMVoid *pvArg, AIM_RSP_CHG_SRV_MODE *pRspChgSrvMode) { IAIM *pIM = (IAIM*)(((AMPVoid*)pvArg)[1]); IAIMessage *pMsg = AMNULL; AMAssert(AMNULL != pIM && AMNULL != pRspChgSrvMode); pMsg = IAIMessage_Create(); if(!pRspChgSrvMode->iRetCode) { pMsg->eType = (AIM_MSG_TYPE)CHG_SERV_MODE_OK; IAIMessage_SetCntID(pMsg, pIM->pAcnt->szID, AMStrlen(pIM->pAcnt->szID)); DPRINT("IASessionModel_OnHelpChgSrvMode........CHG_SERV_MODE_OK %s, %s\n", pMsg->szContactID, pMsg->szContent); } else { pMsg->eType = (AIM_MSG_TYPE)CHG_SERV_MODE_FAIL; DPRINT("IASessionModel_OnHelpChgSrvMode........CHG_SERV_MODE_FAIL %d!\n", pRspChgSrvMode->iRetCode); } Adapter_OnIncomingSysMsg(pIM->pSesModel, pMsg, pvArg); IAIMessage_Destroy(pMsg); DPRINT("IASessionModel_OnHelpChgSrvMode.........................OK!\n"); return eAIM_RESULT_OK; }
AMVoid AMTaskMgrReleaseTask(AMTaskMgr *taskMgr) { _AMTaskMgr* _taskMgr = (_AMTaskMgr*)taskMgr; AMAssert(taskMgr); AMThreadMutexUnlock(&_taskMgr->mMutex); }
static AMInt32 Adapter_OnIncomingSysMsg(IASessionModel *pSesModel, IAIMessage *pMsg, AMVoid *pvArg) { IASession *pSysSes = AMNULL; AMAssert(0 != pSesModel && 0 != pMsg); IASessionModel_StoreMsg(pSesModel, pMsg, AMFALSE); if(eAIM_RESULT_OK != IAIMSessionModel_OpenSession(pSesModel, SYS_SES_NAME, (AMPVoid*)&pSysSes)) { DPRINT("IASessionModel_OnIncomingSysMsg..................Error!\n"); AMAssert(0); } return JavaMsgListener(pvArg, pSysSes, pMsg); }
AIMAccount * IAccountModel_findHistoryAcnt(IAccountModel *pAcntModel, const AMChar *szAcntID) { ListIter *pItr = 0; AIMAccount *pAcnt = 0; AMAssert(0 != pAcntModel && 0 != szAcntID); if(pAcntModel->listAcnt.size <= 0) return 0; pItr = create(ListIter, &pAcntModel->listAcnt); head(ListIter, pItr); do { pAcnt = (AIMAccount *)retrieve(ListIter, pItr); if(0 == AMStrcmp(pAcnt->szID, szAcntID)//帐号相等 || (pAcnt->szPhoneNum && 0 == AMStrcmp(pAcnt->szPhoneNum, szAcntID + ID_HEAD_LEN)))//或者传进来的电话号码相等 { destroy(ListIter, pItr); return pAcnt; } } while (!next(ListIter, pItr)); destroy(ListIter, pItr); return 0; }
AMTaskProc AMTaskGetProc(AMTask *task) { _AMTask *pTask = (_AMTask *)task; AMAssert(pTask); return pTask->mProc; }
AIM_RESULT OnRspChgSignature(AMVoid *pvArg, AIM_RSP_CHG_SIGNATURE *pRspChgSignature) { IAIM *pIM = (IAIM*)(((AMPVoid*)pvArg)[1]); IAIMessage *pMsg = 0; AMAssert(AMNULL != pIM && AMNULL != pIM->pAcnt); pMsg = IAIMessage_Create(); pMsg->bUnread = AMTRUE; if(!pRspChgSignature->iRetCode) { pMsg->eType = (AIM_MSG_TYPE)CHG_SIGNATURE_OK; IAIMessage_SetContent(pMsg, pIM->pAcnt->szSignature, AMStrlen(pIM->pAcnt->szSignature)); DPRINT("IAIM_OnChgSignature..............%s\n", pIM->pAcnt->szSignature); } else { pMsg->eType = (AIM_MSG_TYPE)CHG_SIGNATURE_FAIL; DPRINT("IAIM_OnChgSignature...................Faile!\n"); } Adapter_OnIncomingSysMsg(pIM->pSesModel, pMsg, pvArg); IAIMessage_Destroy(pMsg); return eAIM_RESULT_OK; }
void CWangWangNetLib::Login(IWangWangNetCallback* pCallback, const std::string& dbPath, const CWangWangEnviroment& wangwangEnviroment, const CLoginUserLoginInfo& loginUserLoginInfo) { if(AMNULL == hIM) { Start(pCallback, dbPath); } AMAssert(hIM !=AMNULL); AIM_ACCOUNT_SETTING setting; //基本状态(0-在线,1-离线,2-隐身) setting.eDefaultPresence = (AIM_PRESENCE) loginUserLoginInfo.m_loginStatus.m_defaultPresence; setting.bSavePwd = 1; setting.bMute = 0; setting.bViberate = 0; AMBool bTest =AMFALSE; AMBool bNotPlain =AMFALSE; g_timestamp= loginUserLoginInfo.m_timestamp; IAIM_LoginEx(hIM, loginUserLoginInfo.m_loginStatus.m_strUid.c_str(), loginUserLoginInfo.m_password.m_strPassword.c_str(), bNotPlain, setting, bTest,ALIBABA_OM_VERSION); }
AMPVoid AMTaskGetArg(AMTask *task) { _AMTask *pTask = (_AMTask *)task; AMAssert(pTask); return pTask->mProcArg; }
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; }
AMTask * AMTaskGetNext(AMTask *task) { _AMTask *pTask = (_AMTask *)task; AMAssert(pTask); return pTask->mNext; }