Sat, 17 Nov 2001 02:53:55 +0000
[gaim-migrate @ 2745]
fine
| 2703 | 1 | /* |
| 2 | * Encapsulated ICQ. | |
| 3 | * | |
| 4 | */ | |
| 5 | ||
| 6 | #define FAIM_INTERNAL | |
| 7 | #include <aim.h> | |
| 8 | ||
|
2706
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
9 | faim_export int aim_icq_reqofflinemsgs(aim_session_t *sess) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
10 | { |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
11 | aim_conn_t *conn; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
12 | aim_frame_t *fr; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
13 | aim_snacid_t snacid; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
14 | int bslen; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
15 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
16 | if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
17 | return -EINVAL; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
18 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
19 | bslen = 2 + 4 + 2 + 2; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
20 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
21 | if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
22 | return -ENOMEM; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
23 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
24 | snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
25 | aim_putsnac(&fr->data, 0x0015, 0x0002, 0x0000, snacid); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
26 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
27 | /* For simplicity, don't bother using a tlvlist */ |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
28 | aimbs_put16(&fr->data, 0x0001); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
29 | aimbs_put16(&fr->data, bslen); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
30 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
31 | aimbs_putle16(&fr->data, bslen - 2); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
32 | aimbs_putle32(&fr->data, atoi(sess->sn)); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
33 | aimbs_putle16(&fr->data, 0x003c); /* I command thee. */ |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
34 | aimbs_putle16(&fr->data, snacid); /* eh. */ |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
35 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
36 | aim_tx_enqueue(sess, fr); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
37 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
38 | return 0; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
39 | } |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
40 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
41 | faim_export int aim_icq_ackofflinemsgs(aim_session_t *sess) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
42 | { |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
43 | aim_conn_t *conn; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
44 | aim_frame_t *fr; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
45 | aim_snacid_t snacid; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
46 | int bslen; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
47 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
48 | if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
49 | return -EINVAL; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
50 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
51 | bslen = 2 + 4 + 2 + 2; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
52 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
53 | if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
54 | return -ENOMEM; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
55 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
56 | snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
57 | aim_putsnac(&fr->data, 0x0015, 0x0002, 0x0000, snacid); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
58 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
59 | /* For simplicity, don't bother using a tlvlist */ |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
60 | aimbs_put16(&fr->data, 0x0001); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
61 | aimbs_put16(&fr->data, bslen); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
62 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
63 | aimbs_putle16(&fr->data, bslen - 2); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
64 | aimbs_putle32(&fr->data, atoi(sess->sn)); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
65 | aimbs_putle16(&fr->data, 0x003e); /* I command thee. */ |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
66 | aimbs_putle16(&fr->data, snacid); /* eh. */ |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
67 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
68 | aim_tx_enqueue(sess, fr); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
69 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
70 | return 0; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
71 | } |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
72 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
73 | faim_export int aim_icq_sendxmlreq(aim_session_t *sess, const char *xml) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
74 | { |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
75 | aim_conn_t *conn; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
76 | aim_frame_t *fr; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
77 | aim_snacid_t snacid; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
78 | int bslen; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
79 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
80 | if (!xml || !strlen(xml)) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
81 | return -EINVAL; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
82 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
83 | if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
84 | return -EINVAL; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
85 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
86 | bslen = 2 + 10 + 2 + strlen(xml) + 1; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
87 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
88 | if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
89 | return -ENOMEM; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
90 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
91 | snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
92 | aim_putsnac(&fr->data, 0x0015, 0x0002, 0x0000, snacid); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
93 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
94 | /* For simplicity, don't bother using a tlvlist */ |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
95 | aimbs_put16(&fr->data, 0x0001); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
96 | aimbs_put16(&fr->data, bslen); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
97 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
98 | aimbs_putle16(&fr->data, bslen - 2); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
99 | aimbs_putle32(&fr->data, atoi(sess->sn)); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
100 | aimbs_putle16(&fr->data, 0x07d0); /* I command thee. */ |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
101 | aimbs_putle16(&fr->data, snacid); /* eh. */ |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
102 | aimbs_putle16(&fr->data, 0x0998); /* shrug. */ |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
103 | aimbs_putle16(&fr->data, strlen(xml) + 1); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
104 | aimbs_putraw(&fr->data, xml, strlen(xml) + 1); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
105 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
106 | aim_tx_enqueue(sess, fr); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
107 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
108 | return 0; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
109 | } |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
110 | |
| 2703 | 111 | /* |
| 112 | * Response to 15/2, contains an ICQ packet. | |
| 113 | */ | |
| 114 | static int icqresponse(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs) | |
| 115 | { | |
| 116 | int ret = 0; | |
|
2706
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
117 | aim_tlvlist_t *tl; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
118 | aim_tlv_t *datatlv; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
119 | aim_bstream_t qbs; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
120 | fu32_t ouruin; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
121 | fu16_t cmdlen, cmd, reqid; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
122 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
123 | if (!(tl = aim_readtlvchain(bs)) || !(datatlv = aim_gettlv(tl, 0x0001, 1))) { |
|
2731
c1af28138843
[gaim-migrate @ 2744]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2706
diff
changeset
|
124 | if (tl) |
|
2732
0bcd986a0441
[gaim-migrate @ 2745]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2731
diff
changeset
|
125 | aim_freetlvchain(&tl); |
|
2706
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
126 | faimdprintf(sess, 0, "corrupt ICQ response\n"); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
127 | return 0; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
128 | } |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
129 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
130 | aim_bstream_init(&qbs, datatlv->value, datatlv->length); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
131 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
132 | cmdlen = aimbs_getle16(&qbs); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
133 | ouruin = aimbs_getle32(&qbs); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
134 | cmd = aimbs_getle16(&qbs); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
135 | reqid = aimbs_getle16(&qbs); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
136 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
137 | faimdprintf(sess, 1, "icq response: %d bytes, %ld, 0x%04x, 0x%04x\n", cmdlen, ouruin, cmd, reqid); |
| 2703 | 138 | |
|
2706
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
139 | if (cmd == 0x0041) { |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
140 | fu16_t msglen; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
141 | struct aim_icq_offlinemsg msg; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
142 | aim_rxcallback_t userfunc; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
143 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
144 | memset(&msg, 0, sizeof(msg)); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
145 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
146 | msg.sender = aimbs_getle32(&qbs); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
147 | msg.year = aimbs_getle16(&qbs); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
148 | msg.month = aimbs_getle8(&qbs); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
149 | msg.day = aimbs_getle8(&qbs); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
150 | msg.hour = aimbs_getle8(&qbs); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
151 | msg.minute = aimbs_getle8(&qbs); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
152 | msg.type = aimbs_getle16(&qbs); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
153 | msglen = aimbs_getle16(&qbs); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
154 | msg.msg = aimbs_getstr(&qbs, msglen); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
155 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
156 | if ((userfunc = aim_callhandler(sess, rx->conn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_OFFLINEMSG))) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
157 | ret = userfunc(sess, rx, &msg); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
158 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
159 | free(msg.msg); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
160 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
161 | } else if (cmd == 0x0042) { |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
162 | aim_rxcallback_t userfunc; |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
163 | |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
164 | if ((userfunc = aim_callhandler(sess, rx->conn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_OFFLINEMSGCOMPLETE))) |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
165 | ret = userfunc(sess, rx); |
|
ac9384d37d6c
[gaim-migrate @ 2719]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
166 | } |
| 2703 | 167 | |
|
2732
0bcd986a0441
[gaim-migrate @ 2745]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2731
diff
changeset
|
168 | aim_freetlvchain(&tl); |
|
2731
c1af28138843
[gaim-migrate @ 2744]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2706
diff
changeset
|
169 | |
| 2703 | 170 | return ret; |
| 171 | } | |
| 172 | ||
| 173 | static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs) | |
| 174 | { | |
| 175 | ||
| 176 | if (snac->subtype == 0x0003) | |
| 177 | return icqresponse(sess, mod, rx, snac, bs); | |
| 178 | ||
| 179 | return 0; | |
| 180 | } | |
| 181 | ||
| 182 | faim_internal int icq_modfirst(aim_session_t *sess, aim_module_t *mod) | |
| 183 | { | |
| 184 | ||
| 185 | mod->family = 0x0015; | |
| 186 | mod->version = 0x0001; | |
| 187 | mod->toolid = 0x0110; | |
| 188 | mod->toolversion = 0x047b; | |
| 189 | mod->flags = 0; | |
| 190 | strncpy(mod->name, "icq", sizeof(mod->name)); | |
| 191 | mod->snachandler = snachandler; | |
| 192 | ||
| 193 | return 0; | |
| 194 | } | |
| 195 | ||
| 196 |