[ekg2-commit] r4215 - trunk/plugins/icq: trunk/plugins/icq/icq_snac_handlers_03buddy.c

SVN commit svn w toxygen.net
Czw, 7 Sie 2008, 16:26:24 CEST


Author: wiechu
Date: 2008-08-07 16:26:24 +0200 (Thu, 07 Aug 2008)
New Revision: 4215

Modified:
   trunk/plugins/icq/icq_snac_handlers_03buddy.c
Log:
    icq_get_description() --  now we can see our friends descriptions.
    Can't you believe it? See debug window!

Modified: trunk/plugins/icq/icq_snac_handlers_03buddy.c
===================================================================
--- trunk/plugins/icq/icq_snac_handlers_03buddy.c	2008-08-07 13:53:42 UTC (rev 4214)
+++ trunk/plugins/icq/icq_snac_handlers_03buddy.c	2008-08-07 14:26:24 UTC (rev 4215)
@@ -56,7 +56,58 @@
 	return 0;
 }
 
+static void icq_get_description(session_t *s, char *uin) {
+	string_t pkt, tlv5, rdv;
+	uint32_t cookie1=rand(), cookie2=rand();
 
+	debug_function("icq_get_description() for: %s\n", uin);
+
+	pkt = string_init(NULL);
+	icq_pack_append(pkt, "II", cookie1, cookie2);		// cookie
+	icq_pack_append(pkt, "W", (uint32_t) 2);		// message type
+	icq_pack_append(pkt, "u", atoi(uin));
+
+	tlv5 = string_init(NULL);
+	icq_pack_append(tlv5, "W", (uint32_t) 0);
+	icq_pack_append(tlv5, "II", cookie1, cookie2);		// cookie
+	icq_pack_append(tlv5, "P", (uint32_t) 0x1349);		// AIM_CAPS_ICQSERVERRELAY
+	icq_pack_append(tlv5, "tW", icq_pack_tlv_word(0xA, 1));	// TLV 0x0A: acktype (1 = normal message)
+	icq_pack_append(tlv5, "T", icq_pack_tlv(0x0F, NULL, 0));	// TLV 0x0F: unknown
+
+	// RendezvousMessageData
+	rdv = string_init(NULL);
+	icq_pack_append(rdv, "wwiiiiwicwwwiiiccwwwcii",
+				(uint32_t) 27,		// length of this data segment, always 27
+				(uint32_t) 8,		// protocol version
+				(uint32_t) 0, (uint32_t) 0, (uint32_t) 0, (uint32_t) 0, // pluginID
+				(uint32_t) 0,		// unknown
+				(uint32_t) 3,		// unknown
+				(uint32_t) 0, 		// unknown
+				(uint32_t) 0x7fff,	// channel 2 counter XXX
+				(uint32_t) 14,		// length of this data segment, always 14
+				(uint32_t) 0x7fff,	// channel 2 counter XXX
+				(uint32_t) 0, (uint32_t) 0, (uint32_t) 0, // unknown, usually all zeros
+				(uint32_t) 0xe8,	// msg type   XXX ???
+				(uint32_t) 3,		// msg flags  XXX ???
+				(uint32_t) 1,		// status code ??? XXX
+				(uint32_t) 1,		// priority ??? XXX
+				(uint32_t) 1,		// 
+				(uint32_t) 0,		//
+				(uint32_t) 0,		// foreground
+				(uint32_t) 0x00ffffff); // foreground
+
+	icq_pack_append(tlv5, "T", icq_pack_tlv(0x2711, rdv->str, rdv->len));
+	string_free(rdv, 1);
+
+	icq_pack_append(pkt, "T", icq_pack_tlv(0x05, tlv5->str, tlv5->len));
+	string_free(tlv5, 1);
+
+	icq_pack_append(pkt, "T", icq_pack_tlv(0x03, NULL, 0));		// empty TLV 3 to get an ack from the server
+
+	icq_makesnac(s, pkt, 0x04, 0x06, 0, 0);
+	icq_send_pkt(s, pkt);
+}
+
 SNAC_SUBHANDLER(icq_snac_buddy_online) {
 	/*
 	 * Handle SNAC(0x3,0xb) -- User online notification
@@ -108,6 +159,7 @@
 				status2 = t->nr >> 16;
 				debug_white("icq_snac_buddy_online()  %s status2=0x%04x status=0x%04x\n", uid, status2, status);
 				protocol_status_emit(s, uid, icq2ekg_status(status), NULL, time(NULL));
+				icq_get_description(s, uid+4);
 				break;
 
 			case 0x0a: /* IP address */



Więcej informacji o liście dyskusyjnej ekg2-commit