| 127 { |
127 { |
| 128 FlapFrame *frame; |
128 FlapFrame *frame; |
| 129 GSList *tlvlist = NULL; |
129 GSList *tlvlist = NULL; |
| 130 int passwdlen; |
130 int passwdlen; |
| 131 guint8 *password_encoded; |
131 guint8 *password_encoded; |
| |
132 const char *clientstring; |
| |
133 guint32 distrib; |
| 132 |
134 |
| 133 passwdlen = strlen(password); |
135 passwdlen = strlen(password); |
| 134 password_encoded = (guint8 *)g_malloc(passwdlen+1); |
136 password_encoded = (guint8 *)g_malloc(passwdlen+1); |
| 135 if (passwdlen > MAXICQPASSLEN) |
137 if (passwdlen > MAXICQPASSLEN) |
| 136 passwdlen = MAXICQPASSLEN; |
138 passwdlen = MAXICQPASSLEN; |
| 137 |
139 |
| 138 frame = flap_frame_new(od, 0x01, 1152); |
140 frame = flap_frame_new(od, 0x01, 1152); |
| 139 |
141 |
| 140 aim_encode_password(password, password_encoded); |
142 aim_encode_password(password, password_encoded); |
| 141 |
143 |
| |
144 clientstring = purple_prefs_get_string("/plugins/prpl/oscar/clientstring"); |
| |
145 if (clientstring == NULL) |
| |
146 clientstring = ci->clientstring; |
| |
147 distrib = purple_prefs_get_int("/plugins/prpl/oscar/distid"); |
| |
148 if ((gint32)distrib == -1) |
| |
149 distrib = ci->distrib; |
| |
150 |
| 142 byte_stream_put32(&frame->data, 0x00000001); /* FLAP Version */ |
151 byte_stream_put32(&frame->data, 0x00000001); /* FLAP Version */ |
| 143 aim_tlvlist_add_str(&tlvlist, 0x0001, sn); |
152 aim_tlvlist_add_str(&tlvlist, 0x0001, sn); |
| 144 aim_tlvlist_add_raw(&tlvlist, 0x0002, passwdlen, password_encoded); |
153 aim_tlvlist_add_raw(&tlvlist, 0x0002, passwdlen, password_encoded); |
| 145 |
154 |
| 146 if (ci->clientstring) |
155 if (clientstring) |
| 147 aim_tlvlist_add_str(&tlvlist, 0x0003, ci->clientstring); |
156 aim_tlvlist_add_str(&tlvlist, 0x0003, clientstring); |
| 148 aim_tlvlist_add_16(&tlvlist, 0x0016, (guint16)ci->clientid); |
157 aim_tlvlist_add_16(&tlvlist, 0x0016, (guint16)ci->clientid); |
| 149 aim_tlvlist_add_16(&tlvlist, 0x0017, (guint16)ci->major); |
158 aim_tlvlist_add_16(&tlvlist, 0x0017, (guint16)ci->major); |
| 150 aim_tlvlist_add_16(&tlvlist, 0x0018, (guint16)ci->minor); |
159 aim_tlvlist_add_16(&tlvlist, 0x0018, (guint16)ci->minor); |
| 151 aim_tlvlist_add_16(&tlvlist, 0x0019, (guint16)ci->point); |
160 aim_tlvlist_add_16(&tlvlist, 0x0019, (guint16)ci->point); |
| 152 aim_tlvlist_add_16(&tlvlist, 0x001a, (guint16)ci->build); |
161 aim_tlvlist_add_16(&tlvlist, 0x001a, (guint16)ci->build); |
| 153 aim_tlvlist_add_32(&tlvlist, 0x0014, (guint32)ci->distrib); /* distribution chan */ |
162 aim_tlvlist_add_32(&tlvlist, 0x0014, distrib); /* distribution chan */ |
| 154 aim_tlvlist_add_str(&tlvlist, 0x000f, ci->lang); |
163 aim_tlvlist_add_str(&tlvlist, 0x000f, ci->lang); |
| 155 aim_tlvlist_add_str(&tlvlist, 0x000e, ci->country); |
164 aim_tlvlist_add_str(&tlvlist, 0x000e, ci->country); |
| 156 |
165 |
| 157 aim_tlvlist_write(&frame->data, &tlvlist); |
166 aim_tlvlist_write(&frame->data, &tlvlist); |
| 158 |
167 |
| 234 else if (truncate_pass && password_len > 8) |
245 else if (truncate_pass && password_len > 8) |
| 235 password_len = 8; |
246 password_len = 8; |
| 236 |
247 |
| 237 aim_encode_password_md5(password, password_len, key, digest); |
248 aim_encode_password_md5(password, password_len, key, digest); |
| 238 |
249 |
| |
250 clientstring = purple_prefs_get_string("/plugins/prpl/oscar/clientstring"); |
| |
251 if (clientstring == NULL) |
| |
252 clientstring = ci->clientstring; |
| |
253 distrib = purple_prefs_get_int("/plugins/prpl/oscar/distid"); |
| |
254 if ((gint32)distrib == -1) |
| |
255 distrib = ci->distrib; |
| |
256 |
| 239 aim_tlvlist_add_raw(&tlvlist, 0x0025, 16, digest); |
257 aim_tlvlist_add_raw(&tlvlist, 0x0025, 16, digest); |
| 240 |
258 |
| 241 #ifndef USE_OLD_MD5 |
259 #ifndef USE_OLD_MD5 |
| 242 aim_tlvlist_add_noval(&tlvlist, 0x004c); |
260 aim_tlvlist_add_noval(&tlvlist, 0x004c); |
| 243 #endif |
261 #endif |
| 244 |
262 |
| 245 if (ci->clientstring) |
263 if (clientstring) |
| 246 aim_tlvlist_add_str(&tlvlist, 0x0003, ci->clientstring); |
264 aim_tlvlist_add_str(&tlvlist, 0x0003, clientstring); |
| 247 aim_tlvlist_add_16(&tlvlist, 0x0016, (guint16)ci->clientid); |
265 aim_tlvlist_add_16(&tlvlist, 0x0016, (guint16)ci->clientid); |
| 248 aim_tlvlist_add_16(&tlvlist, 0x0017, (guint16)ci->major); |
266 aim_tlvlist_add_16(&tlvlist, 0x0017, (guint16)ci->major); |
| 249 aim_tlvlist_add_16(&tlvlist, 0x0018, (guint16)ci->minor); |
267 aim_tlvlist_add_16(&tlvlist, 0x0018, (guint16)ci->minor); |
| 250 aim_tlvlist_add_16(&tlvlist, 0x0019, (guint16)ci->point); |
268 aim_tlvlist_add_16(&tlvlist, 0x0019, (guint16)ci->point); |
| 251 aim_tlvlist_add_16(&tlvlist, 0x001a, (guint16)ci->build); |
269 aim_tlvlist_add_16(&tlvlist, 0x001a, (guint16)ci->build); |
| 252 aim_tlvlist_add_32(&tlvlist, 0x0014, (guint32)ci->distrib); |
270 aim_tlvlist_add_32(&tlvlist, 0x0014, distrib); |
| 253 aim_tlvlist_add_str(&tlvlist, 0x000f, ci->lang); |
271 aim_tlvlist_add_str(&tlvlist, 0x000f, ci->lang); |
| 254 aim_tlvlist_add_str(&tlvlist, 0x000e, ci->country); |
272 aim_tlvlist_add_str(&tlvlist, 0x000e, ci->country); |
| 255 |
273 |
| 256 /* |
274 /* |
| 257 * If set, old-fashioned buddy lists will not work. You will need |
275 * If set, old-fashioned buddy lists will not work. You will need |