Example #1
0
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();
}
Example #2
0
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);
    }