Mercurial > pidgin
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 { |