ICQEvent *ICQClient::searchByName(const char *first, const char *last, const char *nick, bool bOnline) { if (!isLogged()) return 0; p->serverRequest(ICQ_SRVxREQ_MORE); p->sock->writeBuffer << ICQ_SRVxREQ_WP_SHORT; string sFirst = first ? first : ""; string sLast = last ? last : ""; string sNick = nick ? nick : ""; log(L_DEBUG, "-- [%s] [%s] [%s]", first, last, nick); toServer(sFirst, owner); toServer(sLast, owner); toServer(sNick, owner); p->sock->writeBuffer << sNick << sFirst << sNick; if (bOnline){ p->sock->writeBuffer << 0x30020100L << (char)0x01; } p->sendServerRequest(); ICQEvent *e = new SearchEvent(p->m_nMsgSequence); p->varEvents.push_back(e); return e; }
bool ICQClient::setMailInfo(ICQUser *u) { if (m_state != Logged) return false; bool bChange = false; NPARAM(EMails); serverRequest(ICQ_SRVxREQ_MORE); writeBuffer << ICQ_SRVxREQ_MODIFY_BACKGROUND; char c = u->EMails.size(); c--; if (c < 0) c = 0; writeBuffer << c; bool bFirst = true; for (EMailList::iterator it = u->EMails.begin(); it != u->EMails.end(); ++it){ EMailInfo *info = static_cast<EMailInfo*>(*it); if (bFirst){ bFirst = false; continue; } string s; if (info->Email) s = info->Email; toServer(s); char hide = info->Hide ? 1 : 0; writeBuffer << hide << s; } sendServerRequest(); SetMailInfo *e = new SetMailInfo(m_nMsgSequence, u); varEvents.push_back(e); return true; }
void ICQClient::packInfoList(const ExtInfoList &infoList) { char n = infoList.size(); writeBuffer << n; for (ConfigPtrList::const_iterator it = infoList.begin(); it != infoList.end(); ++it){ ExtInfo *info = static_cast<ExtInfo*>(*it); string spec = info->Specific; toServer(spec); writeBuffer << htons(info->Category()) << spec; } }
void ICQClient::setPassword(const char *passwd) { if (m_state != Logged) return; serverRequest(ICQ_SRVxREQ_MORE); writeBuffer << ICQ_SRVxREQ_CHANGE_PASSWD; string p = passwd; toServer(p); writeBuffer << p; sendServerRequest(); SetPasswordEvent *e = new SetPasswordEvent(m_nMsgSequence, passwd); varEvents.push_back(e); }
ICQEvent *ICQClient::searchByName(const char *first, const char *last, const char *nick) { if (m_state != Logged) return 0; serverRequest(ICQ_SRVxREQ_MORE); writeBuffer << ICQ_SRVxREQ_WP_SHORT; string sFirst = first ? first : ""; string sLast = last ? last : ""; string sNick = nick ? nick : ""; log(L_DEBUG, "-- [%s] [%s] [%s]", first, last, nick); toServer(sFirst); toServer(sLast); toServer(sNick); writeBuffer << sNick << sFirst << sNick; sendServerRequest(); ICQEvent *e = new SearchEvent(m_nMsgSequence); varEvents.push_back(e); return e; }
void ICQClient::setPassword(const char *passwd) { if (!isLogged()) return; p->serverRequest(ICQ_SRVxREQ_MORE); p->sock->writeBuffer << ICQ_SRVxREQ_CHANGE_PASSWD; string pass = passwd; toServer(pass, owner); p->sock->writeBuffer << pass; p->sendServerRequest(); SetPasswordEvent *e = new SetPasswordEvent(p->m_nMsgSequence, passwd); p->varEvents.push_back(e); }
ICQEvent *ICQClient::searchWP(const char *szFirst, const char *szLast, const char *szNick, const char *szEmail, char age, char nGender, char nLanguage, const char *szCity, const char *szState, unsigned short nCountryCode, const char *szCoName, const char *szCoDept, const char *szCoPos, bool bOnlineOnly) { if (m_state != Logged) return 0; serverRequest(ICQ_SRVxREQ_MORE); writeBuffer << ICQ_SRVxREQ_WP_FULL; string sFirst = szFirst ? szFirst : ""; string sLast = szLast ? szLast : ""; string sNick = szNick ? szNick : ""; string sEmail = szEmail ? szEmail : ""; string sCity = szCity ? szCity : ""; string sState = szState ? szState : ""; string sCoName = szCoName ? szCoName : ""; string sCoDept = szCoDept ? szCoDept : ""; string sCoPos = szCoPos ? szCoPos : ""; toServer(sFirst); toServer(sLast); toServer(sNick); toServer(sEmail); toServer(sCity); toServer(sState); toServer(sCoName); toServer(sCoDept); toServer(sCoPos); unsigned short nMinAge = 0; unsigned short nMaxAge = 0; switch (age){ case 1: nMinAge = 18; nMaxAge = 22; break; case 2: nMinAge = 23; nMaxAge = 29; break; case 3: nMinAge = 30; nMaxAge = 39; break; case 4: nMinAge = 40; nMaxAge = 49; break; case 5: nMinAge = 50; nMaxAge = 59; break; case 6: nMinAge = 60; nMaxAge = 120; break; } writeBuffer << sFirst << sLast << sNick << sEmail << (unsigned short)htons(nMinAge) << (unsigned short)htons(nMaxAge) << nGender << nLanguage << sCity << sState << (unsigned short)htons(nCountryCode) << sCoName << sCoDept << sCoPos << (char)0x00 << (unsigned short)0x0000; for (unsigned short i = 0; i < 3; i++) { writeBuffer << (char)0x01 << 0x00000000L; } writeBuffer << (char)0x01 << (unsigned short)0x0000; char c = bOnlineOnly ? 1 : 0; writeBuffer << c; sendServerRequest(); ICQEvent *e = new SearchEvent(m_nMsgSequence); varEvents.push_back(e); return e; }
ICQEvent *ICQClient::searchWP(const char *szFirst, const char *szLast, const char *szNick, const char *szEmail, char age, char nGender, char nLanguage, const char *szCity, const char *szState, unsigned short nCountryCode, const char *szCoName, const char *szCoDept, const char *szCoPos, char nOccupation, unsigned short nPast, const char *szPast, unsigned short nInterests, const char *szInterests, unsigned short nAffiliation, const char *szAffiliation, unsigned short nHomePage, const char *szHomePage, bool bOnlineOnly) { if (!isLogged()) return 0; p->serverRequest(ICQ_SRVxREQ_MORE); p->sock->writeBuffer << ICQ_SRVxREQ_WP_FULL; string sFirst = szFirst ? szFirst : ""; string sLast = szLast ? szLast : ""; string sNick = szNick ? szNick : ""; string sEmail = szEmail ? szEmail : ""; string sCity = szCity ? szCity : ""; string sState = szState ? szState : ""; string sCoName = szCoName ? szCoName : ""; string sCoDept = szCoDept ? szCoDept : ""; string sCoPos = szCoPos ? szCoPos : ""; string sPast = szPast ? szPast : ""; string sInterests = szInterests ? szInterests : ""; string sAffiliation = szAffiliation ? szAffiliation : ""; string sHomePage = szHomePage ? szHomePage : ""; toServer(sFirst, owner); toServer(sLast, owner); toServer(sNick, owner); toServer(sEmail, owner); toServer(sCity, owner); toServer(sState, owner); toServer(sCoName, owner); toServer(sCoDept, owner); toServer(sCoPos, owner); toServer(sPast, owner); toServer(sInterests, owner); toServer(sAffiliation, owner); toServer(sHomePage, owner); unsigned short nMinAge = 0; unsigned short nMaxAge = 0; switch (age){ case 1: nMinAge = 18; nMaxAge = 22; break; case 2: nMinAge = 23; nMaxAge = 29; break; case 3: nMinAge = 30; nMaxAge = 39; break; case 4: nMinAge = 40; nMaxAge = 49; break; case 5: nMinAge = 50; nMaxAge = 59; break; case 6: nMinAge = 60; nMaxAge = 120; break; } p->sock->writeBuffer << sFirst << sLast << sNick << sEmail; p->sock->writeBuffer.pack(nMinAge); p->sock->writeBuffer.pack(nMaxAge); p->sock->writeBuffer << nGender << nLanguage << sCity << sState; p->sock->writeBuffer.pack(nCountryCode); p->sock->writeBuffer << sCoName << sCoDept << sCoPos << nOccupation << nPast << sPast << nInterests << sInterests << nAffiliation << sAffiliation << nHomePage << sHomePage; char c = bOnlineOnly ? 1 : 0; p->sock->writeBuffer << c; p->sendServerRequest(); ICQEvent *e = new SearchEvent(p->m_nMsgSequence); p->varEvents.push_back(e); return e; }
void ICQClient::processMsgQueueAuth() { list<ICQEvent*>::iterator it; for (it = msgQueue.begin(); it != msgQueue.end();){ ICQEvent *e = *it; if (e->message() == NULL){ msgQueue.remove(e); e->state = ICQEvent::Fail; process_event(e); it = msgQueue.begin(); continue; } switch (e->message()->Type()){ case ICQ_MSGxAUTHxREQUEST:{ ICQAuthRequest *msg = static_cast<ICQAuthRequest*>(e->message()); snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_REQUEST_AUTH); ICQUser *u = getUser(msg->getUin()); writeBuffer.packUin(msg->getUin()); string message = clearHTML(msg->Message.c_str()); toServer(message, u); writeBuffer << (unsigned short)(message.length()); writeBuffer << message.c_str(); writeBuffer << (unsigned short)0; sendPacket(); (*it)->state = ICQEvent::Success; break; } case ICQ_MSGxAUTHxGRANTED:{ ICQAuthRequest *msg = static_cast<ICQAuthRequest*>(e->message()); snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_AUTHxSEND); writeBuffer.packUin(msg->getUin()); writeBuffer << (char)0x01 << (unsigned long)0; sendPacket(); (*it)->state = ICQEvent::Success; break; } case ICQ_MSGxAUTHxREFUSED:{ ICQAuthRequest *msg = static_cast<ICQAuthRequest*>(e->message()); snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_REQUEST_AUTH); ICQUser *u = getUser(msg->getUin()); writeBuffer.packUin(msg->getUin()); string message = clearHTML(msg->Message.c_str()); string original = message; toServer(message, u); writeBuffer << (char) 0 << message << (unsigned long)0x00010001; if (message == original){ writeBuffer << (unsigned char)0; }else{ string charset = "utf-8"; writeBuffer << charset; } writeBuffer << (unsigned short)0; sendPacket(); (*it)->state = ICQEvent::Success; break; } } if (e->state != ICQEvent::Success){ it++; continue; } msgQueue.remove(e); process_event(e); it = msgQueue.begin(); } }
void ICQClient::toServer(string &str, ICQUser *u) { toServer(str, localCharset(u)); }