Beispiel #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();
}
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)));
}
Beispiel #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();
}
Beispiel #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();
}
Beispiel #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();
}
Beispiel #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);
}
Beispiel #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();
}
Beispiel #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);
}
Beispiel #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();
}
Beispiel #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();
}
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);
}
Beispiel #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);
}
Beispiel #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();
	}
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);
}
Beispiel #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));
}
Beispiel #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);
}
Beispiel #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");
}
Beispiel #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);
    }
}
Beispiel #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();
}
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);
}
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 );
}
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);
}
Beispiel #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();
}
Beispiel #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();
}
Beispiel #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();
}
Beispiel #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();
}
Beispiel #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());
}
Beispiel #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);
}
Beispiel #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;
}