Пример #1
0
void ICQClient::createGroup(const char *name)
{
    ICQGroup *grp = new ICQGroup;
    unsigned short id = contacts.getGroupId(grp);
    CreateGroupEvent *e = new CreateGroupEvent(grp);
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_EDIT);
    sendPacket();
    sendRoster(e, ICQ_SNACxLISTS_CREATE, name, id, 0, ICQ_GROUPS);
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_SAVE);
    sendPacket();
}
Пример #2
0
void ICQClient::fetchProfile(ICQUserData *data)
{
    snac(ICQ_SNACxFAM_LOCATION, ICQ_SNACxLOC_REQUESTxUSERxINFO, true);
    m_socket->writeBuffer << (unsigned short)0x0001;
    m_socket->writeBuffer.packScreen(screen(data).c_str());
    sendPacket(false);
    snac(ICQ_SNACxFAM_LOCATION, ICQ_SNACxLOC_REQUESTxDIRxINFO, true);
    m_socket->writeBuffer.packScreen(screen(data).c_str());
    sendPacket(false);
    m_info_req.insert(INFO_REQ_MAP::value_type(m_nMsgSequence, screen(data)));
}
Пример #3
0
void ICQClientPrivate::createGroup(const char *name)
{
    if (m_state != Logged) return;
    ICQGroup *grp = client->createGroup();
    unsigned short id = client->contacts.getGroupId(grp);
    CreateGroupEvent *e = new CreateGroupEvent(grp);
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_EDIT);
    sendPacket();
    sendRoster(e, ICQ_SNACxLISTS_CREATE, name, id, 0, ICQ_GROUPS);
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_SAVE);
    sendPacket();
}
Пример #4
0
void ICQClientPrivate::listsRequest()
{
    log(L_DEBUG, "lists request");
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_REQxRIGHTS);
    sendPacket();
    if (client->contacts.Invisible == 0){
        client->contacts.Time = 0;
        client->contacts.Len = 0;
    }
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_REQxROSTER);
    sock->writeBuffer << client->contacts.Time << client->contacts.Len;
    sendPacket();
}
Пример #5
0
void ICQClient::listsRequest()
{
    log(L_DEBUG, "lists request");
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_REQxRIGHTS);
    sendPacket();
    if (contacts.Invisible() == 0){
        contacts.Time = 0;
        contacts.Len = 0;
    }
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_REQxROSTER);
    writeBuffer << contacts.Time() << contacts.Len();
    sendPacket();
}
Пример #6
0
void ICQClientPrivate::moveUser(ICQUser *u, ICQGroup *g)
{
    if (m_state != Logged) return;
    unsigned short id = client->contacts.getUserId(u, 0, false);
    MoveUserEvent *e = new MoveUserEvent(u->Uin, g->Id);
    if (!u->GrpId){
        snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_CREATE_USER);
        sock->writeBuffer.packUin(u->Uin);
        sock->writeBuffer << 0x00000000L;
        sendPacket();
    }
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_EDIT);
    sendPacket();
    sendRoster(e, ICQ_SNACxLISTS_CREATE, u->Uin, g->Id, id, 0, u->Alias.c_str(), u->WaitAuth);
}
Пример #7
0
void ICQClient::addToVisibleList(unsigned long uin)
{
    if (uin >= UIN_SPECIAL) return;
    snac(ICQ_SNACxFAM_BOS, ICQ_SNACxBOS_ADDxVISIBLExLIST);
    sock->writeBuffer.packUin(uin);
    sendPacket();
}
Пример #8
0
void ICQClientPrivate::sendRoster(ICQEvent *e,
                                  unsigned short cmd, const char *name, unsigned short grp_id,
                                  unsigned short usr_id, unsigned short subCmd, const char *alias, bool waitAuth)
{
    snac(ICQ_SNACxFAM_LISTS, cmd, true);
    string sName;
    if (name) sName = name;
    client->toUTF(sName, client->owner->Encoding.c_str());
    sock->writeBuffer.pack(sName);
    sock->writeBuffer
    << grp_id
    << usr_id
    << subCmd;
    if (alias){
        string sAlias = alias;
        client->toUTF(sAlias, client->owner->Encoding.c_str());
        unsigned short size = sAlias.length() + 4 + (waitAuth ? 4 : 0);
        sock->writeBuffer
        << size
        << (unsigned short)0x0131;
        sock->writeBuffer.pack(sAlias);
        if (waitAuth){
            sock->writeBuffer
            << (unsigned short)0x66
            << (unsigned short)0;
        }
    }else{
        sock->writeBuffer << (unsigned short)0;
    }
    sendPacket();
    e->m_nId = m_nMsgSequence - 1;
    listEvents.push_back(e);
}
Пример #9
0
void ICQClient::sendCapability()
{
    Buffer cap;
    capability c;
    memcpy(c, capabilities[CAP_SIM], sizeof(c));
    const char *ver = VERSION;
    unsigned char *pack_ver = c + sizeof(capability) - 4;
    *(pack_ver++) = get_ver(ver);
    *(pack_ver++) = get_ver(ver);
    *(pack_ver++) = get_ver(ver);
    unsigned char os_ver;
#ifdef WIN32
    os_ver = 0x80;
#else
    os_ver = 0;
#endif
    *(pack_ver++) = os_ver;
    cap.pack((char*)capabilities[CAP_DIRECT], sizeof(capability));
    cap.pack((char*)capabilities[CAP_SRV_RELAY], sizeof(capability));
	if (getSendFormat() <= 1)
		cap.pack((char*)capabilities[CAP_UTF], sizeof(capability));
	if (getSendFormat() == 0)
		cap.pack((char*)capabilities[CAP_RTF], sizeof(capability));
	if (getTypingNotification())
		cap.pack((char*)capabilities[CAP_TYPING], sizeof(capability));
    cap.pack((char*)c, sizeof(c));
    snac(ICQ_SNACxFAM_LOCATION, ICQ_SNACxLOC_SETxUSERxINFO);
    m_socket->writeBuffer.tlv(0x0005, cap);
    sendPacket();
}
Пример #10
0
void ICQClient::removeFromInvisibleList(unsigned long uin)
{
    if (uin >= UIN_SPECIAL) return;
    snac(ICQ_SNACxFAM_BOS, ICQ_SNACxBOS_REMxINVISIBLExLIST);
    sock->writeBuffer.packUin(uin);
    sendPacket();
}
Пример #11
0
void ICQClient::fetchAwayMessage(ICQUserData *data)
{
    snac(ICQ_SNACxFAM_LOCATION, ICQ_SNACxLOC_REQUESTxUSERxINFO, true);
    m_socket->writeBuffer << (unsigned short)0x0003;
    m_socket->writeBuffer.packScreen(screen(data).c_str());
    sendPacket(false);
}
Пример #12
0
void ICQClientPrivate::sendRosterGrp(const char *name, unsigned short grpId, unsigned short usrId)
{
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_RENAME, true);
    string sName = name;
    client->toUTF(sName, client->owner->Encoding.c_str());
    sock->writeBuffer.pack(sName);
    sock->writeBuffer
    << grpId
    << (unsigned long) ICQ_GROUPS;
    if (usrId){
        sock->writeBuffer
        << (unsigned short) 6
        << (unsigned short) 0xC8
        << (unsigned short) 2
        << (unsigned short) usrId;
    }else{
        sock->writeBuffer
        << (unsigned short) 4
        << (unsigned short) 0xC8
        << (unsigned short) 0;
    }
    sendPacket();
    MoveUserDummyEvent *e = new MoveUserDummyEvent;
    e->m_nId = m_nMsgSequence - 1;
    listEvents.push_back(e);
}
Пример #13
0
void OscarConnection::finishLogin()
{
	setState(Connected);
	sendUserInfo(true);
	m_is_idle = true;
	setIdle(false);
	SNAC snac(ServiceFamily, ServiceClientReady);
	// imitate ICQ 6 behaviour
	snac.append(QByteArray::fromHex(
		"0022 0001 0110 164f"
		"0001 0004 0110 164f"
		"0013 0004 0110 164f"
		"0002 0001 0110 164f"
		"0003 0001 0110 164f"
		"0015 0001 0110 164f"
		"0004 0001 0110 164f"
		"0006 0001 0110 164f"
		"0009 0001 0110 164f"
		"000a 0001 0110 164f"
		"000b 0001 0110 164f"));
	send(snac);
	m_account->finishLogin();
	if (m_account->d_func()->name.isEmpty()) {
		ShortInfoMetaRequest *req = new ShortInfoMetaRequest(m_account); // Requesting own information.
		connect(req, SIGNAL(done(bool)), this, SLOT(accountInfoReceived(bool)));
		req->send();
	}
Пример #14
0
void ICQClient::sendCapability(const QString &away_msg)
{
    Buffer cap;
    capability c;

    memcpy(c, capabilities[CAP_SIM], sizeof(c));
    const char *ver = VERSION;
    unsigned char *pack_ver = c + sizeof(capability) - 4;
    *(pack_ver++) = get_ver(ver);
    *(pack_ver++) = get_ver(ver);
    *(pack_ver++) = get_ver(ver);
    unsigned char os_ver;
#ifdef WIN32
    os_ver = 0x80;
#else
#ifdef QT_MACOSX_VERSION
    os_ver = 0x40;
#else
    os_ver = 0;
#endif
#endif
    *(pack_ver++) = os_ver;
    addCapability(cap, CAP_AIM_SHORTCAPS);
    addCapability(cap, CAP_AIM_SUPPORT);
//    addCapability(cap, CAP_AVATAR);
    if (m_bAIM){
        addCapability(cap, CAP_AIM_CHAT);
        addCapability(cap, CAP_AIM_BUDDYCON);
        addCapability(cap, CAP_AIM_IMIMAGE);
        addCapability(cap, CAP_AIM_SENDFILE);
        addCapability(cap, CAP_AIM_BUDDYLIST);
    }else{
        addCapability(cap, CAP_DIRECT);
        addCapability(cap, CAP_SRV_RELAY);
        addCapability(cap, CAP_XTRAZ);
        if (getSendFormat() <= 1)
            addCapability(cap, CAP_UTF);
        if (getSendFormat() == 0)
            addCapability(cap, CAP_RTF);
    }
    if (!getDisableTypingNotification())
        cap.pack((char*)capabilities[CAP_TYPING], sizeof(capability));

    cap.pack((char*)c, sizeof(c));
    snac(ICQ_SNACxFAM_LOCATION, ICQ_SNACxLOC_SETxUSERxINFO);
    if (m_bAIM){
        if (data.owner.ProfileFetch.bValue){
            QString profile;
            profile = QString("<HTML>") + data.owner.About.ptr + "</HTML>";
            encodeString(profile, "text/aolrtf", 1, 2);
        }
        if (!away_msg.isNull())
            encodeString(away_msg, "text/plain", 3, 4);
    }
    m_socket->writeBuffer.tlv(0x0005, cap);
    if (m_bAIM)
        m_socket->writeBuffer.tlv(0x0006, "\x00\x04\x00\x02\x00\x02", 6);
    sendPacket(true);
}
Пример #15
0
void ICQClientPrivate::serverRequest(unsigned short cmd, unsigned short seq)
{
    snac(ICQ_SNACxFAM_VARIOUS, ICQ_SNACxVAR_REQxSRV, true);
    sock->writeBuffer.tlv(0x0001, 0);
    sock->writeBuffer.pack((char*)&client->owner->Uin, 4);
    sock->writeBuffer << cmd;
    sock->writeBuffer.pack((unsigned short)(seq ? seq : m_nMsgSequence));
}
Пример #16
0
void ICQClient::serverRequest(unsigned short cmd, unsigned short seq)
{
    snac(ICQ_SNACxFAM_VARIOUS, ICQ_SNACxVAR_REQxSRV, true);
    writeBuffer.tlv(0x0001, 0);
    writeBuffer.pack((char*)&Uin(), 4);
    writeBuffer << cmd;
    writeBuffer << htons(seq ? seq : m_nMsgSequence);
}
Пример #17
0
void __cdecl CAimProto::aim_avatar_negotiation(void*)
{
	HANDLE hServerPacketRecver = (HANDLE)CallService(MS_NETLIB_CREATEPACKETRECVER, (WPARAM)m_hAvatarConn, 2048 * 8);

	NETLIBPACKETRECVER packetRecv = { 0 };
	packetRecv.cbSize = sizeof(packetRecv);
	packetRecv.dwTimeout = 300000;//5 minutes connected
	for (;;) {
		int recvResult = CallService(MS_NETLIB_GETMOREPACKETS, (WPARAM)hServerPacketRecver, (LPARAM)& packetRecv);
		if (recvResult == 0)
			break;

		if (recvResult == SOCKET_ERROR)
			break;

		if (recvResult > 0) {
			unsigned short flap_length = 0;
			for (; packetRecv.bytesUsed < packetRecv.bytesAvailable; packetRecv.bytesUsed = flap_length) {
				if (!packetRecv.buffer)
					break;

				FLAP flap((char*)&packetRecv.buffer[packetRecv.bytesUsed], packetRecv.bytesAvailable - packetRecv.bytesUsed);
				if (!flap.len())
					break;

				flap_length += FLAP_SIZE + flap.len();
				if (flap.cmp(0x01)) {
					aim_send_cookie(m_hAvatarConn, m_avatar_seqno, AVATAR_COOKIE_LENGTH, AVATAR_COOKIE); // cookie challenge
					mir_free(AVATAR_COOKIE);
					AVATAR_COOKIE = NULL;
					AVATAR_COOKIE_LENGTH = 0;
				}
				else if (flap.cmp(0x02)) {
					SNAC snac(flap.val(), flap.snaclen());
					if (snac.cmp(0x0001)) {
						snac_supported_families(snac, m_hAvatarConn, m_avatar_seqno);
						snac_supported_family_versions(snac, m_hAvatarConn, m_avatar_seqno);
						snac_avatar_rate_limitations(snac, m_hAvatarConn, m_avatar_seqno);
						snac_error(snac);
					}
					if (snac.cmp(0x0010)) {
						snac_retrieve_avatar(snac);
						snac_upload_reply_avatar(snac);
					}
				}
				else if (flap.cmp(0x04))
					goto exit;
			}
		}
	}

exit:
	Netlib_CloseHandle(hServerPacketRecver);
	Netlib_CloseHandle(m_hAvatarConn);
	m_hAvatarConn = NULL;
	ResetEvent(m_hAvatarEvent);
	debugLogA("Avatar Server Connection has ended");
}
Пример #18
0
void ICQClient::snac_login(unsigned short type, unsigned short)
{
    unsigned long newUin;
    switch (type){
    case ICQ_SNACxLOGIN_ERROR:
        m_reconnect = NO_RECONNECT;
        m_socket->error_state(I18N_NOOP("Login error"), AuthError);
        break;
    case ICQ_SNACxLOGIN_REGISTER:
        if (data.owner.Uin.value){
            m_socket->error_state(I18N_NOOP("Registered in no register state"));
            break;
        }
        m_socket->readBuffer.incReadPos(0x2E);
        m_socket->readBuffer.unpack(newUin);
        log(L_DEBUG, "Register %u %08lX", newUin, newUin);
        setUin(newUin);
        setState(Connecting);
        m_socket->connect(getServer(), getPort(), this);
        break;
    case ICQ_SNACxLOGIN_AUTHxKEYxRESPONSE:
        if (data.owner.Screen.ptr){
            string md5_key;
            m_socket->readBuffer.unpackStr(md5_key);
            snac(ICQ_SNACxFAM_LOGIN, ICQ_SNACxLOGIN_MD5xLOGIN, false, false);
            m_socket->writeBuffer.tlv(0x0001, data.owner.Screen.ptr);
            MD5_CTX c;
            MD5_Init(&c);
            unsigned char md[MD5_DIGEST_LENGTH];
            MD5_Update(&c, md5_key.c_str(), md5_key.length());
            string pswd = getContacts()->fromUnicode(NULL, getPassword());
            MD5_Update(&c, pswd.c_str(), pswd.length());
            pswd = "AOL Instant Messenger (SM)";
            MD5_Update(&c, pswd.c_str(), pswd.length());
            MD5_Final(md, &c);

            m_socket->writeBuffer.tlv(0x0025, (char*)&md, sizeof(md));
            m_socket->writeBuffer.tlv(0x0003, "AOL Instant Messenger, version 5.1.3036/WIN32");
            m_socket->writeBuffer.tlv(0x0016, (unsigned short)0x0109);
            m_socket->writeBuffer.tlv(0x0017, (unsigned short)0x0005);
            m_socket->writeBuffer.tlv(0x0018, (unsigned short)0x0001);
            m_socket->writeBuffer.tlv(0x0019, (unsigned short)0x0000);
            m_socket->writeBuffer.tlv(0x001A, (unsigned short)0x0BDC);
            m_socket->writeBuffer.tlv(0x0014, 0x000000D2L);
            m_socket->writeBuffer.tlv(0x000F, "en");
            m_socket->writeBuffer.tlv(0x000E, "us");
            m_socket->writeBuffer.tlv(0x004A, "\x01");
            sendPacket();
        }
        break;
    case ICQ_SNACxLOGIN_LOGINxREPLY:
        chn_close();
        break;
    default:
        log(L_WARN, "Unknown login family type %04X", type);
    }
}
Пример #19
0
void ICQClient::sendCapability(const char *away_msg)
{
    Buffer cap;
    capability c;
    memcpy(c, capabilities[CAP_SIM], sizeof(c));
    const char *ver = VERSION;
    unsigned char *pack_ver = c + sizeof(capability) - 4;
    *(pack_ver++) = get_ver(ver);
    *(pack_ver++) = get_ver(ver);
    *(pack_ver++) = get_ver(ver);
    unsigned char os_ver;
#ifdef WIN32
    os_ver = 0x80;
#else
#ifdef QT_MACOSX_VERSION
    os_ver = 0x40;
#else
    os_ver = 0;
#endif
#endif
    *(pack_ver++) = os_ver;
    if (m_bAIM) {
        cap.pack((char*)capabilities[CAP_AIM_CHAT], sizeof(capability));
        cap.pack((char*)capabilities[CAP_AIM_BUDDYCON], sizeof(capability));
        cap.pack((char*)capabilities[CAP_AIM_IMIMAGE], sizeof(capability));
        cap.pack((char*)capabilities[CAP_AIM_SENDFILE], sizeof(capability));
        cap.pack((char*)capabilities[CAP_AIM_BUDDYLIST], sizeof(capability));
    } else {
        cap.pack((char*)capabilities[CAP_DIRECT], sizeof(capability));
        cap.pack((char*)capabilities[CAP_SRV_RELAY], sizeof(capability));
        if (getSendFormat() <= 1)
            cap.pack((char*)capabilities[CAP_UTF], sizeof(capability));
        if (getSendFormat() == 0)
            cap.pack((char*)capabilities[CAP_RTF], sizeof(capability));
    }
    if (getTypingNotification())
        cap.pack((char*)capabilities[CAP_TYPING], sizeof(capability));
    cap.pack((char*)capabilities[CAP_AIM_SUPPORT], sizeof(capability));
    cap.pack((char*)c, sizeof(c));
    snac(ICQ_SNACxFAM_LOCATION, ICQ_SNACxLOC_SETxUSERxINFO);
    if (m_bAIM) {
        if (data.owner.ProfileFetch.bValue) {
            QString profile;
            if (data.owner.About.ptr)
                profile = QString::fromUtf8(data.owner.About.ptr);
            profile = QString("<HTML>") + profile + "</HTML>";
            encodeString(profile, "text/aolrtf", 1, 2);
        }
        if (away_msg)
            encodeString(QString::fromUtf8(away_msg), "text/plain", 3, 4);
    }
    m_socket->writeBuffer.tlv(0x0005, cap);
    if (m_bAIM)
        m_socket->writeBuffer.tlv(0x0006, "\x00\x04\x00\x02\x00\x02", 6);
    sendPacket();
}
Пример #20
0
void ICQClient::setAwayMessage(const char *msg)
{
    snac(ICQ_SNACxFAM_LOCATION, ICQ_SNACxLOC_SETxUSERxINFO);
    if (msg){
        encodeString(QString::fromUtf8(msg), "text/plain", 3, 4);
    }else{
        m_socket->writeBuffer.tlv(0x0004);
    }
    sendPacket(true);
}
Пример #21
0
void AIMNetManager::SearchByEmail( BMessage* msg ) {

	// calculate the next request ID
	emailSearchID = requestID++;

	// Set up a SNAC object, with the correct fields to search for an address
	SNAC_Object snac( 0x0a, 0x02, 0x00, 0x00, emailSearchID );
	snac.data << (char*)msg->FindString( "email" );
	SendSNACPacket( mainNetlet, snac );
}
Пример #22
0
void ICQClient::setProfile(ICQUserData *data)
{
    snac(ICQ_SNACxFAM_LOCATION, ICQ_SNACxLOC_SETxUSERxINFO);
    QString profile;
    if (data->About.ptr)
        profile = QString::fromUtf8(data->About.ptr);
    profile = QString("<HTML>") + profile + "</HTML>";
    encodeString(profile, "text/aolrtf", 1, 2);
    sendPacket(false);
}
Пример #23
0
void ICQClientPrivate::deleteGroup(ICQGroup *g)
{
    if (m_state != Logged) return;
    unsigned short id = client->contacts.getGroupId(g);
    if (client->contacts.groups.size() <= 1) return;
    for (list<ICQUser*>::iterator u = client->contacts.users.begin(); u != client->contacts.users.end() ; u++){
        if ((*u)->GrpId != id) continue;
        moveUser(*u, (client->contacts.groups[0] == g) ? client->contacts.groups[1] : client->contacts.groups[0]);
    }
    vector<ICQGroup*>::iterator it;
    for (it = client->contacts.groups.begin(); it != client->contacts.groups.end(); it++)
        if (*it == g) break;
    if (it == client->contacts.groups.end()) return;
    DeleteGroupEvent *e = new DeleteGroupEvent(id);
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_EDIT);
    sendPacket();
    sendRoster(e, ICQ_SNACxLISTS_DELETE, g->Name.c_str(), id, 0, ICQ_GROUPS);
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_SAVE);
    sendPacket();
}
Пример #24
0
void ICQClient::sendThroughServer(unsigned long uin, unsigned short type, Buffer &b, unsigned long id_l, unsigned long id_h, bool addTlv)
{
    snac(ICQ_SNACxFAM_MESSAGE, ICQ_SNACxMSG_SENDxSERVER);
    m_socket->writeBuffer << id_l << id_h;
    m_socket->writeBuffer << type;
    m_socket->writeBuffer.packUin(uin);
    m_socket->writeBuffer.tlv((type == 1) ? 2 : 5, b);
    if (addTlv && (((id_l == 0) && (id_h == 0)) || (type == 2)))
        m_socket->writeBuffer.tlv((type == 2) ? 3 : 6);
    sendPacket();
}
Пример #25
0
void ICQClient::sendVisibleList()
{
    if (contacts.Invisible() == 0) contacts.Invisible = rand() & 0x7FFF;
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_RENAME, true);
    writeBuffer
    << 0x00000000L << contacts.Invisible()
    << (unsigned short)0x0004
    << (unsigned short)0x0005
    << 0x00CA0001L
    << (char)3;
    sendPacket();
}
Пример #26
0
void ICQClientPrivate::sendInvisibleList()
{
    if (client->contacts.Invisible == 0) client->contacts.Invisible = rand() & 0x7FFF;
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_RENAME, true);
    sock->writeBuffer
    << 0x00000000L << client->contacts.Invisible
    << (unsigned short)0x0004
    << (unsigned short)0x0005
    << 0x00CA0001L
    << (char)4;
    sendPacket();
}
Пример #27
0
void ICQClient::moveUser(ICQUser *u, ICQGroup *g)
{
    unsigned short id = contacts.getUserId(u);
    MoveUserEvent *e = new MoveUserEvent(u->Uin, g->Id());
    if (u->Uin() >= UIN_SPECIAL){
        if (e->process(this, 0))
            process_event(e);
        delete e;
        return;
    }
    if (m_state != Logged) return;
    if (!u->GrpId()){
        snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_CREATE_USER);
        writeBuffer.packUin(u->Uin);
        writeBuffer << 0x00000000L;
        sendPacket();
    }
    snac(ICQ_SNACxFAM_LISTS, ICQ_SNACxLISTS_EDIT);
    sendPacket();
    sendRoster(e, ICQ_SNACxLISTS_CREATE, u->Uin, g->Id(), id, 0, u->Alias.c_str(), u->WaitAuth());
}
Пример #28
0
void ICQClient::sendICMB(unsigned short channel, unsigned long flags)
{
    snac(ICQ_SNACxFAM_MESSAGE, ICQ_SNACxMSG_SETxICQxMODE);
    m_socket->writeBuffer
    << channel << flags
    << (unsigned short)8000		// max message size
    << (unsigned short)999		// max sender warning level
    << (unsigned short)999		// max receiver warning level
    << (unsigned short)0		// min message interval
    << (unsigned short)0;		// unknown
    sendPacket();
}
void MetaInfoManager::sendMetaRequest(Word type, Buffer& metadata)
{
    Tlv tlv(0x01); // ENCAPSULATED_METADATA
    tlv.addLEWord( metadata.size() + 8 ); // data chunk size (tlv size - 2 )
    tlv.addLEDWord( d->uin.toUInt() ); // own UIN
    tlv.addLEWord(type);
    tlv.addLEWord( ++(d->metaSequence) ); // request sequence number
    tlv.addData(metadata);

    SnacBuffer snac(0x15, 0x02);
    snac.addTlv(tlv);
    d->socket->write(snac);
}
Пример #30
0
Spectrum Analyzer::computeSnac(const QVector<double> acf, const QVector<double> signal) const
{
    Spectrum snac(m_sampleSize);
    const quint32 W = m_sampleSize;
    qreal mSum = 2 * acf[0];
    int tau = 0;
    for (auto &s : snac) {
        s = Tone(tau, 2 * acf[tau] / mSum);
        ++tau;
        const auto m1 = signal[tau - 1];
        const auto m2 = signal[W - tau];
        mSum -= m1 * m1 + m2 * m2;
    }
    return snac;
}