Wed, 23 May 2007 06:24:15 +0000
Fix signing on to AIM with an AOL screen name with a password of more
than 8 characters. For someone AOL passwords get truncated to 8
characters. No idea why, but at least they send us a flag to let us
know that the password should be truncated.
| 13235 | 1 | /* |
| 15884 | 2 | * Purple's oscar protocol plugin |
| 13235 | 3 | * This file is the legal property of its developers. |
| 4 | * Please see the AUTHORS file distributed alongside this file. | |
| 5 | * | |
| 6 | * This library is free software; you can redistribute it and/or | |
| 7 | * modify it under the terms of the GNU Lesser General Public | |
| 8 | * License as published by the Free Software Foundation; either | |
| 9 | * version 2 of the License, or (at your option) any later version. | |
| 10 | * | |
| 11 | * This library is distributed in the hope that it will be useful, | |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 14 | * Lesser General Public License for more details. | |
| 15 | * | |
| 16 | * You should have received a copy of the GNU Lesser General Public | |
| 17 | * License along with this library; if not, write to the Free Software | |
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 19 | */ | |
| 20 | ||
| 21 | /* | |
| 22 | * Family 0x0010 - Server stored buddy art | |
| 23 | * | |
| 24 | * Used for storing and retrieving your cute little buddy icon | |
| 25 | * from the AIM servers. | |
| 26 | * | |
| 27 | */ | |
| 28 | ||
| 29 | #include "oscar.h" | |
| 30 | ||
| 31 | /** | |
| 32 | * Subtype 0x0002 - Upload your icon. | |
| 33 | * | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
34 | * @param od The oscar session. |
| 13235 | 35 | * @param icon The raw data of the icon image file. |
| 36 | * @param iconlen Length of the raw data of the icon image file. | |
| 37 | * @return Return 0 if no errors, otherwise return the error number. | |
| 38 | */ | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
39 | int |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
40 | aim_bart_upload(OscarData *od, const guint8 *icon, guint16 iconlen) |
| 13235 | 41 | { |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
42 | FlapConnection *conn; |
|
13240
db5187cc40d1
[gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents:
13235
diff
changeset
|
43 | FlapFrame *fr; |
| 13235 | 44 | aim_snacid_t snacid; |
| 45 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
46 | if (!od || !(conn = flap_connection_findbygroup(od, 0x0010)) || !icon || !iconlen) |
| 13235 | 47 | return -EINVAL; |
| 48 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
49 | fr = flap_frame_new(od, 0x02, 10 + 2 + 2+iconlen); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
50 | snacid = aim_cachesnac(od, 0x0010, 0x0002, 0x0000, NULL, 0); |
| 13235 | 51 | aim_putsnac(&fr->data, 0x0010, 0x0002, 0x0000, snacid); |
| 52 | ||
| 53 | /* The reference number for the icon */ | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
54 | byte_stream_put16(&fr->data, 1); |
| 13235 | 55 | |
| 56 | /* The icon */ | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
57 | byte_stream_put16(&fr->data, iconlen); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
58 | byte_stream_putraw(&fr->data, icon, iconlen); |
| 13235 | 59 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
60 | flap_connection_send(conn, fr); |
| 13235 | 61 | |
| 62 | return 0; | |
| 63 | } | |
| 64 | ||
| 65 | /** | |
| 66 | * Subtype 0x0003 - Acknowledgement for uploading a buddy icon. | |
| 67 | * | |
| 68 | * You get this honky after you upload a buddy icon. | |
| 69 | */ | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
70 | static int |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
71 | uploadack(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs) |
| 13235 | 72 | { |
| 73 | int ret = 0; | |
| 74 | aim_rxcallback_t userfunc; | |
| 75 | guint16 something, somethingelse; | |
| 76 | guint8 onemorething; | |
| 77 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
78 | something = byte_stream_get16(bs); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
79 | somethingelse = byte_stream_get16(bs); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
80 | onemorething = byte_stream_get8(bs); |
| 13235 | 81 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
82 | if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
83 | ret = userfunc(od, conn, frame); |
| 13235 | 84 | |
| 85 | return ret; | |
| 86 | } | |
| 87 | ||
| 88 | /** | |
| 89 | * Subtype 0x0004 - Request someone's icon. | |
| 90 | * | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
91 | * @param od The oscar session. |
| 13235 | 92 | * @param sn The screen name of the person who's icon you are requesting. |
| 93 | * @param iconcsum The MD5 checksum of the icon you are requesting. | |
| 94 | * @param iconcsumlen Length of the MD5 checksum given above. Should be 10 bytes. | |
| 95 | * @return Return 0 if no errors, otherwise return the error number. | |
| 96 | */ | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
97 | int |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
98 | aim_bart_request(OscarData *od, const char *sn, guint8 iconcsumtype, const guint8 *iconcsum, guint16 iconcsumlen) |
| 13235 | 99 | { |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
100 | FlapConnection *conn; |
|
13240
db5187cc40d1
[gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents:
13235
diff
changeset
|
101 | FlapFrame *fr; |
| 13235 | 102 | aim_snacid_t snacid; |
| 103 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
104 | if (!od || !(conn = flap_connection_findbygroup(od, 0x0010)) || !sn || !strlen(sn) || !iconcsum || !iconcsumlen) |
| 13235 | 105 | return -EINVAL; |
| 106 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
107 | fr = flap_frame_new(od, 0x02, 10 + 1+strlen(sn) + 4 + 1+iconcsumlen); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
108 | snacid = aim_cachesnac(od, 0x0010, 0x0004, 0x0000, NULL, 0); |
| 13235 | 109 | aim_putsnac(&fr->data, 0x0010, 0x0004, 0x0000, snacid); |
| 110 | ||
| 111 | /* Screen name */ | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
112 | byte_stream_put8(&fr->data, strlen(sn)); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
113 | byte_stream_putstr(&fr->data, sn); |
| 13235 | 114 | |
| 115 | /* Some numbers. You like numbers, right? */ | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
116 | byte_stream_put8(&fr->data, 0x01); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
117 | byte_stream_put16(&fr->data, 0x0001); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
118 | byte_stream_put8(&fr->data, iconcsumtype); |
| 13235 | 119 | |
| 120 | /* Icon string */ | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
121 | byte_stream_put8(&fr->data, iconcsumlen); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
122 | byte_stream_putraw(&fr->data, iconcsum, iconcsumlen); |
| 13235 | 123 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
124 | flap_connection_send(conn, fr); |
| 13235 | 125 | |
| 126 | return 0; | |
| 127 | } | |
| 128 | ||
| 129 | /** | |
| 130 | * Subtype 0x0005 - Receive a buddy icon. | |
| 131 | * | |
| 132 | * This is sent in response to a buddy icon request. | |
| 133 | */ | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
134 | static int |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
135 | parseicon(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs) |
| 13235 | 136 | { |
| 137 | int ret = 0; | |
| 138 | aim_rxcallback_t userfunc; | |
| 139 | char *sn; | |
| 140 | guint16 flags, iconlen; | |
| 141 | guint8 iconcsumtype, iconcsumlen, *iconcsum, *icon; | |
| 142 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
143 | sn = byte_stream_getstr(bs, byte_stream_get8(bs)); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
144 | flags = byte_stream_get16(bs); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
145 | iconcsumtype = byte_stream_get8(bs); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
146 | iconcsumlen = byte_stream_get8(bs); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
147 | iconcsum = byte_stream_getraw(bs, iconcsumlen); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
148 | iconlen = byte_stream_get16(bs); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
149 | icon = byte_stream_getraw(bs, iconlen); |
| 13235 | 150 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
151 | if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
152 | ret = userfunc(od, conn, frame, sn, iconcsumtype, iconcsum, iconcsumlen, icon, iconlen); |
| 13235 | 153 | |
| 154 | free(sn); | |
| 155 | free(iconcsum); | |
| 156 | free(icon); | |
| 157 | ||
| 158 | return ret; | |
| 159 | } | |
| 160 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
161 | static int |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
162 | snachandler(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs) |
| 13235 | 163 | { |
| 164 | if (snac->subtype == 0x0003) | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
165 | return uploadack(od, conn, mod, frame, snac, bs); |
| 13235 | 166 | else if (snac->subtype == 0x0005) |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
167 | return parseicon(od, conn, mod, frame, snac, bs); |
| 13235 | 168 | |
| 169 | return 0; | |
| 170 | } | |
| 171 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
172 | int |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13254
diff
changeset
|
173 | bart_modfirst(OscarData *od, aim_module_t *mod) |
| 13235 | 174 | { |
| 175 | mod->family = 0x0010; | |
| 176 | mod->version = 0x0001; | |
| 177 | mod->toolid = 0x0010; | |
| 178 | mod->toolversion = 0x0629; | |
| 179 | mod->flags = 0; | |
| 180 | strncpy(mod->name, "bart", sizeof(mod->name)); | |
| 181 | mod->snachandler = snachandler; | |
| 182 | ||
| 183 | return 0; | |
| 184 | } |