void ICQClient::setInfo(ICQUser *u) { bool bChange = false; if (setMainInfo(u)) bChange = true; if (setMoreInfo(u)) bChange = true; if (setWorkInfo(u)) bChange = true; if (setAboutInfo(u)) bChange = true; if (setMailInfo(u)) bChange = true; if (setInterestsInfo(u)) bChange = true; if (setBackgroundInfo(u)) bChange = true; if (Phones != u->Phones){ Phones = u->Phones; if (updatePhoneBook()) bChange = true; } if (bChange) sendInfoUpdate(); }
void ICQClient::snac_service(unsigned short type, unsigned short) { switch (type){ case ICQ_SNACxSRV_RATExCHANGE: break; case ICQ_SNACxSRV_RATExINFO: log(L_DEBUG, "Rate info"); snac(ICQ_SNACxFAM_SERVICE, ICQ_SNACxSRV_RATExACK); writeBuffer << 0x00010002L << 0x00030004L << 0x0005; sendPacket(); snac(ICQ_SNACxFAM_SERVICE, ICQ_SNACxSRV_GETxUSERxINFO); sendPacket(); listsRequest(); locationRequest(); buddyRequest(); messageRequest(); bosRequest(); break; case ICQ_SNACxSRV_MOTD: log(L_DEBUG, "Motd"); snac(ICQ_SNACxFAM_SERVICE, ICQ_SNACxSRV_REQxRATExINFO); sendPacket(); break; case ICQ_SNACxSRV_ACKxIMxICQ: log(L_DEBUG, "Ack im icq"); break; case ICQ_SNACxSRV_NAMExINFO:{ unsigned long uin = readBuffer.unpackUin(); if (uin == 0){ char n; readBuffer >> n; readBuffer.incReadPos(n); uin = readBuffer.unpackUin(); } if (uin != Uin()){ log(L_WARN, "No my name info (%lu)", uin); break; } readBuffer.incReadPos(4); TlvList tlv(readBuffer); Tlv *tlvIP = tlv(0x000A); if (tlvIP) RealIP = htonl((unsigned long)(*tlvIP)); log(L_DEBUG, "Name info"); bool bSend = true; if (needPhonebookUpdate){ sendInfoUpdate(); needPhonebookUpdate = false; bSend = false; } if (needPhoneStatusUpdate){ sendPhoneStatus(); needPhoneStatusUpdate = false; bSend = false; } break; } case ICQ_SNACxSRV_READYxSERVER: log(L_DEBUG, "Server ready"); snac(ICQ_SNACxFAM_SERVICE, ICQ_SNACxSRV_IMxICQ); writeBuffer << 0x00010003L; writeBuffer << 0x00130002L; writeBuffer << 0x00020001L; writeBuffer << 0x00030001L; writeBuffer << 0x00150001L; writeBuffer << 0x00040001L; writeBuffer << 0x00060001L; writeBuffer << 0x00090001L; writeBuffer << 0x000a0001L; writeBuffer << 0x000b0001L; sendPacket(); break; default: log(L_WARN, "Unknown service family type %04X", type); }