libpurple/protocols/oscar/family_chatnav.c

changeset 17443
bae8548d98b3
parent 17280
7c0472208173
child 18953
f9595b8149d4
equal deleted inserted replaced
17427:5cd92816909d 17443:bae8548d98b3
48 static const char ck[] = {"create"}; 48 static const char ck[] = {"create"};
49 static const char lang[] = {"en"}; 49 static const char lang[] = {"en"};
50 static const char charset[] = {"us-ascii"}; 50 static const char charset[] = {"us-ascii"};
51 FlapFrame *frame; 51 FlapFrame *frame;
52 aim_snacid_t snacid; 52 aim_snacid_t snacid;
53 aim_tlvlist_t *tl = NULL; 53 GSList *tlvlist = NULL;
54 54
55 frame = flap_frame_new(od, 0x02, 1152); 55 frame = flap_frame_new(od, 0x02, 1152);
56 56
57 snacid = aim_cachesnac(od, 0x000d, 0x0008, 0x0000, NULL, 0); 57 snacid = aim_cachesnac(od, 0x000d, 0x0008, 0x0000, NULL, 0);
58 aim_putsnac(&frame->data, 0x000d, 0x0008, 0x0000, snacid); 58 aim_putsnac(&frame->data, 0x000d, 0x0008, 0x0000, snacid);
83 byte_stream_put16(&frame->data, 0xffff); 83 byte_stream_put16(&frame->data, 0xffff);
84 84
85 /* detail level */ 85 /* detail level */
86 byte_stream_put8(&frame->data, 0x01); 86 byte_stream_put8(&frame->data, 0x01);
87 87
88 aim_tlvlist_add_str(&tl, 0x00d3, name); 88 aim_tlvlist_add_str(&tlvlist, 0x00d3, name);
89 aim_tlvlist_add_str(&tl, 0x00d6, charset); 89 aim_tlvlist_add_str(&tlvlist, 0x00d6, charset);
90 aim_tlvlist_add_str(&tl, 0x00d7, lang); 90 aim_tlvlist_add_str(&tlvlist, 0x00d7, lang);
91 91
92 /* tlvcount */ 92 /* tlvcount */
93 byte_stream_put16(&frame->data, aim_tlvlist_count(&tl)); 93 byte_stream_put16(&frame->data, aim_tlvlist_count(tlvlist));
94 aim_tlvlist_write(&frame->data, &tl); 94 aim_tlvlist_write(&frame->data, &tlvlist);
95 95
96 aim_tlvlist_free(&tl); 96 aim_tlvlist_free(tlvlist);
97 97
98 flap_connection_send(conn, frame); 98 flap_connection_send(conn, frame);
99 99
100 return 0; 100 return 0;
101 } 101 }
107 int ret = 0; 107 int ret = 0;
108 struct aim_chat_exchangeinfo *exchanges = NULL; 108 struct aim_chat_exchangeinfo *exchanges = NULL;
109 int curexchange; 109 int curexchange;
110 aim_tlv_t *exchangetlv; 110 aim_tlv_t *exchangetlv;
111 guint8 maxrooms = 0; 111 guint8 maxrooms = 0;
112 aim_tlvlist_t *tlvlist, *innerlist; 112 GSList *tlvlist, *innerlist;
113 113
114 tlvlist = aim_tlvlist_read(bs); 114 tlvlist = aim_tlvlist_read(bs);
115 115
116 /* 116 /*
117 * Type 0x0002: Maximum concurrent rooms. 117 * Type 0x0002: Maximum concurrent rooms.
288 if (aim_tlv_gettlv(innerlist, 0x00da, 1)) { 288 if (aim_tlv_gettlv(innerlist, 0x00da, 1)) {
289 /* Unhandled */ 289 /* Unhandled */
290 } 290 }
291 #endif 291 #endif
292 292
293 aim_tlvlist_free(&innerlist); 293 aim_tlvlist_free(innerlist);
294 } 294 }
295 295
296 /* 296 /*
297 * Call client. 297 * Call client.
298 */ 298 */
305 g_free(exchanges[curexchange].lang1); 305 g_free(exchanges[curexchange].lang1);
306 g_free(exchanges[curexchange].charset2); 306 g_free(exchanges[curexchange].charset2);
307 g_free(exchanges[curexchange].lang2); 307 g_free(exchanges[curexchange].lang2);
308 } 308 }
309 g_free(exchanges); 309 g_free(exchanges);
310 aim_tlvlist_free(&tlvlist); 310 aim_tlvlist_free(tlvlist);
311 311
312 return ret; 312 return ret;
313 } 313 }
314 314
315 static int 315 static int
316 parseinfo_create(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs, aim_snac_t *snac2) 316 parseinfo_create(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs, aim_snac_t *snac2)
317 { 317 {
318 aim_rxcallback_t userfunc; 318 aim_rxcallback_t userfunc;
319 aim_tlvlist_t *tlvlist, *innerlist; 319 GSList *tlvlist, *innerlist;
320 char *ck = NULL, *fqcn = NULL, *name = NULL; 320 char *ck = NULL, *fqcn = NULL, *name = NULL;
321 guint16 exchange = 0, instance = 0, unknown = 0, flags = 0, maxmsglen = 0, maxoccupancy = 0; 321 guint16 exchange = 0, instance = 0, unknown = 0, flags = 0, maxmsglen = 0, maxoccupancy = 0;
322 guint32 createtime = 0; 322 guint32 createtime = 0;
323 guint8 createperms = 0, detaillevel; 323 guint8 createperms = 0, detaillevel;
324 int cklen; 324 int cklen;
328 328
329 tlvlist = aim_tlvlist_read(bs); 329 tlvlist = aim_tlvlist_read(bs);
330 330
331 if (!(bigblock = aim_tlv_gettlv(tlvlist, 0x0004, 1))) { 331 if (!(bigblock = aim_tlv_gettlv(tlvlist, 0x0004, 1))) {
332 purple_debug_misc("oscar", "no bigblock in top tlv in create room response\n"); 332 purple_debug_misc("oscar", "no bigblock in top tlv in create room response\n");
333 aim_tlvlist_free(&tlvlist); 333 aim_tlvlist_free(tlvlist);
334 return 0; 334 return 0;
335 } 335 }
336 336
337 byte_stream_init(&bbbs, bigblock->value, bigblock->length); 337 byte_stream_init(&bbbs, bigblock->value, bigblock->length);
338 338
342 instance = byte_stream_get16(&bbbs); 342 instance = byte_stream_get16(&bbbs);
343 detaillevel = byte_stream_get8(&bbbs); 343 detaillevel = byte_stream_get8(&bbbs);
344 344
345 if (detaillevel != 0x02) { 345 if (detaillevel != 0x02) {
346 purple_debug_misc("oscar", "unknown detaillevel in create room response (0x%02x)\n", detaillevel); 346 purple_debug_misc("oscar", "unknown detaillevel in create room response (0x%02x)\n", detaillevel);
347 aim_tlvlist_free(&tlvlist); 347 aim_tlvlist_free(tlvlist);
348 g_free(ck); 348 g_free(ck);
349 return 0; 349 return 0;
350 } 350 }
351 351
352 unknown = byte_stream_get16(&bbbs); 352 unknown = byte_stream_get16(&bbbs);
379 } 379 }
380 380
381 g_free(ck); 381 g_free(ck);
382 g_free(name); 382 g_free(name);
383 g_free(fqcn); 383 g_free(fqcn);
384 aim_tlvlist_free(&innerlist); 384 aim_tlvlist_free(innerlist);
385 aim_tlvlist_free(&tlvlist); 385 aim_tlvlist_free(tlvlist);
386 386
387 return ret; 387 return ret;
388 } 388 }
389 389
390 /* 390 /*

mercurial