TRecvDlg::TRecvDlg(MsgMng *_msgMng, MsgBuf *_msg, THosts *_hosts, Cfg *_cfg, LogMng *_logmng) : TListDlg(RECEIVE_DIALOG), editSub(_cfg, this) { msgMng = _msgMng; cfg = _cfg; openFlg = FALSE; logmng = _logmng; hosts = _hosts; hEditFont = NULL; hHeadFont = NULL; fileObj = NULL; shareInfo = NULL; timerID = 0; retryCnt = 0; cryptCapa = 0; createCnt++; ::GetLocalTime(&recvTime); memset(&orgFont, 0, sizeof(orgFont)); msg.Init(_msg); MakeListString(cfg, &msg.hostSub, hosts, head); if (msg.command & IPMSG_FILEATTACHOPT) { char *shareStr = msg.msgBuf + msg.exOffset; if ((shareInfo = DecodeShareMsg(shareStr)) != NULL) { fileObj = new RecvFileObj; memset(fileObj, 0, sizeof(RecvFileObj)); } } status = TRUE; if (msg.command & IPMSG_ENCRYPTOPT) { if ((status = DecryptMsg()) == FALSE) msgMng->Send(&msg.hostSub, IPMSG_SENDMSG|IPMSG_NOLOGOPT, GetLoadStr(IDS_DECRYPTERR)); } /* msgmng.cpp で変換済み else if ((msg.command & IPMSG_UTF8OPT) == 0) { strncpyz(msg.msgBuf, AtoU8(msg.msgBuf), sizeof(msg.msgBuf)); } */ if (status) { if ((msg.command & IPMSG_PASSWORDOPT) == 0 || cfg->PasswdLogCheck == FALSE) logmng->WriteRecvMsg(&msg, hosts, shareInfo); hAccel = ::LoadAccelerators(TApp::GetInstance(), (LPCSTR)IPMSG_ACCEL); } }
void ClientConn::_HandleMsgData(CImPdu* pPdu) { IM::Message::IMMsgData msg; uint32_t nSeqNo = pPdu->GetSeqNum(); if(msg.ParseFromArray(pPdu->GetBodyData(), pPdu->GetBodyLength())) { uint32_t nFromId = msg.from_user_id(); uint32_t nToId = msg.to_session_id(); uint32_t nMsgId = msg.msg_id(); IM::BaseDefine::MsgType nMsgType = msg.msg_type(); uint32_t nCreateTime = msg.create_time(); //string strMsg(msg.msg_data().c_str(), msg.msg_data().length()); string strMsg = ""; //DecryptMsg char * pOutData=NULL; uint32_t nOutLen = 0; int retCode = DecryptMsg( msg.msg_data().c_str(), msg.msg_data().length(), &pOutData, nOutLen); if (retCode == 0 && nOutLen > 0 && pOutData != 0) { strMsg = std::string(pOutData, nOutLen); //delete pOutData; Free( pOutData); pOutData = NULL; } else { strMsg = std::string( msg.msg_data().c_str(), msg.msg_data().length()); log("DecryptMsg error:%s\n", strMsg.c_str()); } //MSG_TYPE_ORDER_PUSH MSG_TYPE_ORDER_GRAB MSG_TYPE_ORDER_RESULT IM::BaseDefine::SessionType nSessionType; if(nMsgType == IM::BaseDefine::MSG_TYPE_SINGLE_TEXT || nMsgType == IM::BaseDefine::MSG_TYPE_SINGLE_AUDIO || nMsgType == IM::BaseDefine::MSG_TYPE_ORDER_PUSH || nMsgType == IM::BaseDefine::MSG_TYPE_ORDER_GRAB || nMsgType == IM::BaseDefine::MSG_TYPE_ORDER_RESULT || nMsgType == IM::BaseDefine::MSG_TYPE_LOCATION_SHARING || nMsgType == IM::BaseDefine::MSG_TYPE_FILE_TRANSFER || nMsgType== IM::BaseDefine::MSG_TYPE_ORDER_ENTRUST || nMsgType== IM::BaseDefine::MSG_TYPE_ORDER_ACCEPT || nMsgType== IM::BaseDefine::MSG_TYPE_ORDER_CANCEL || nMsgType == IM::BaseDefine::MSG_TYPE_USER_CHECK || nMsgType == IM::BaseDefine::MSG_TYPE_ORDER_WAITPAYMENT || nMsgType == IM::BaseDefine::MSG_TYPE_ORDER_ALLCANCEL || nMsgType== IM::BaseDefine::MSG_TYPE_TOPUP_WITHDRAWAL) { nSessionType = IM::BaseDefine::SESSION_TYPE_SINGLE; } else if(nMsgType == IM::BaseDefine::MSG_TYPE_GROUP_TEXT || nMsgType == IM::BaseDefine::MSG_TYPE_GROUP_AUDIO) { nSessionType = IM::BaseDefine::SESSION_TYPE_GROUP; } sendMsgAck(nFromId, nToId, nSessionType, nMsgId); m_pCallback->onRecvMsg(nSeqNo, nFromId, nToId, nMsgId, nCreateTime, nMsgType, strMsg); } else { m_pCallback->onError(nSeqNo, pPdu->GetCommandId(), "parse pb falied"); } }