comparison libpurple/protocols/qq/group_opt.c @ 24164:2a19984c0005

2008.10.27 - ccpaging <ccpaging(at)gmail.com> * Update 'buddy_adding' protocol
author SHiNE CsyFeK <csyfek@gmail.com>
date Tue, 28 Oct 2008 16:47:06 +0000
parents 7c0a56c5fea0
children 75545fdf8944 604027798a46
comparison
equal deleted inserted replaced
24163:7f5433ffbf8d 24164:2a19984c0005
207 qq_room_got_chat_in(gc, id, 0, _("Successed changing Qun member"), now); 207 qq_room_got_chat_in(gc, id, 0, _("Successed changing Qun member"), now);
208 } 208 }
209 209
210 void qq_room_change_info(PurpleConnection *gc, qq_room_data *rmd) 210 void qq_room_change_info(PurpleConnection *gc, qq_room_data *rmd)
211 { 211 {
212 guint8 *data; 212 guint8 data[MAX_PACKET_SIZE - 16];
213 gint data_len; 213 gint bytes;
214 gint bytes; 214
215 gchar *group_name, *group_desc, *notice; 215 g_return_if_fail(rmd != NULL);
216 216
217 g_return_if_fail(rmd != NULL);
218
219 group_name = rmd->title_utf8 == NULL ? "" : utf8_to_qq(rmd->title_utf8, QQ_CHARSET_DEFAULT);
220 group_desc = rmd->desc_utf8 == NULL ? "" : utf8_to_qq(rmd->desc_utf8, QQ_CHARSET_DEFAULT);
221 notice = rmd->notice_utf8 == NULL ? "" : utf8_to_qq(rmd->notice_utf8, QQ_CHARSET_DEFAULT);
222
223 data_len = 64 + strlen(group_name) + strlen(group_desc) + strlen(notice);
224 data = g_newa(guint8, data_len);
225 bytes = 0; 217 bytes = 0;
226 /* 005-005 */ 218 /* 005-005 */
227 bytes += qq_put8(data + bytes, 0x01); 219 bytes += qq_put8(data + bytes, 0x01);
228 /* 006-006 */ 220 /* 006-006 */
229 bytes += qq_put8(data + bytes, rmd->auth_type); 221 bytes += qq_put8(data + bytes, rmd->auth_type);
230 /* 007-008 */ 222 /* 007-008 */
231 bytes += qq_put16(data + bytes, 0x0000); 223 bytes += qq_put16(data + bytes, 0x0000);
232 /* 009-010 */ 224 /* 009-010 */
233 bytes += qq_put16(data + bytes, rmd->category); 225 bytes += qq_put16(data + bytes, rmd->category);
234 226
235 bytes += qq_put8(data + bytes, strlen(group_name)); 227 bytes += qq_put_vstr(data + bytes, rmd->title_utf8, QQ_CHARSET_DEFAULT);
236 bytes += qq_putdata(data + bytes, (guint8 *) group_name, strlen(group_name));
237 228
238 bytes += qq_put16(data + bytes, 0x0000); 229 bytes += qq_put16(data + bytes, 0x0000);
239 230
240 bytes += qq_put8(data + bytes, strlen(notice)); 231 bytes += qq_put_vstr(data + bytes, rmd->notice_utf8, QQ_CHARSET_DEFAULT);
241 bytes += qq_putdata(data+ bytes, (guint8 *) notice, strlen(notice)); 232 bytes += qq_put_vstr(data + bytes, rmd->desc_utf8, QQ_CHARSET_DEFAULT);
242 233
243 bytes += qq_put8(data + bytes, strlen(group_desc));
244 bytes += qq_putdata(data + bytes, (guint8 *) group_desc, strlen(group_desc));
245
246 if (bytes > data_len) {
247 purple_debug_error("QQ",
248 "Overflow in qq_room_change_info, max %d bytes, now %d bytes\n",
249 data_len, bytes);
250 return;
251 }
252 qq_send_room_cmd(gc, QQ_ROOM_CMD_CHANGE_INFO, rmd->id, data, bytes); 234 qq_send_room_cmd(gc, QQ_ROOM_CMD_CHANGE_INFO, rmd->id, data, bytes);
253 } 235 }
254 236
255 void qq_group_process_modify_info_reply(guint8 *data, gint len, PurpleConnection *gc) 237 void qq_group_process_modify_info_reply(guint8 *data, gint len, PurpleConnection *gc)
256 { 238 {
477 /* the request to join a group is rejected */ 459 /* the request to join a group is rejected */
478 void qq_process_room_buddy_rejected(guint8 *data, gint len, guint32 id, PurpleConnection *gc) 460 void qq_process_room_buddy_rejected(guint8 *data, gint len, guint32 id, PurpleConnection *gc)
479 { 461 {
480 guint32 ext_id, admin_uid; 462 guint32 ext_id, admin_uid;
481 guint8 type8; 463 guint8 type8;
482 gchar *reason_utf8, *msg, *reason; 464 gchar *msg, *reason;
483 qq_room_data *rmd; 465 qq_room_data *rmd;
484 gint bytes; 466 gint bytes;
485 467
486 g_return_if_fail(data != NULL && len > 0); 468 g_return_if_fail(data != NULL && len > 0);
487 469
491 bytes += qq_get8(&type8, data + bytes); 473 bytes += qq_get8(&type8, data + bytes);
492 bytes += qq_get32(&admin_uid, data + bytes); 474 bytes += qq_get32(&admin_uid, data + bytes);
493 475
494 g_return_if_fail(ext_id > 0 && admin_uid > 0); 476 g_return_if_fail(ext_id > 0 && admin_uid > 0);
495 477
496 bytes += qq_get_vstr(&reason_utf8, QQ_CHARSET_DEFAULT, data + bytes); 478 bytes += qq_get_vstr(&reason, QQ_CHARSET_DEFAULT, data + bytes);
497 479
498 msg = g_strdup_printf 480 msg = g_strdup_printf
499 (_("Failed to join Qun %d, operated by admin %d"), ext_id, admin_uid); 481 (_("Failed to join Qun %d, operated by admin %d"), ext_id, admin_uid);
500 reason = g_strdup_printf(_("Message: %s"), reason_utf8);
501 482
502 purple_notify_warning(gc, _("QQ Qun Operation"), msg, reason); 483 purple_notify_warning(gc, _("QQ Qun Operation"), msg, reason);
503 484
504 qq_room_find_or_new(gc, id, ext_id); 485 qq_room_find_or_new(gc, id, ext_id);
505 rmd = qq_room_data_find(gc, id); 486 rmd = qq_room_data_find(gc, id);
507 rmd->my_role = QQ_ROOM_ROLE_NO; 488 rmd->my_role = QQ_ROOM_ROLE_NO;
508 } 489 }
509 490
510 g_free(msg); 491 g_free(msg);
511 g_free(reason); 492 g_free(reason);
512 g_free(reason_utf8);
513 } 493 }
514 494
515 /* the request to join a group is approved */ 495 /* the request to join a group is approved */
516 void qq_process_room_buddy_approved(guint8 *data, gint len, guint32 id, PurpleConnection *gc) 496 void qq_process_room_buddy_approved(guint8 *data, gint len, guint32 id, PurpleConnection *gc)
517 { 497 {