Mercurial > pidgin
comparison libpurple/protocols/qq/sys_msg.c @ 15822:32c366eeeb99
sed -ie 's/gaim/purple/g'
| author | Sean Egan <seanegan@gmail.com> |
|---|---|
| date | Mon, 19 Mar 2007 07:01:17 +0000 |
| parents | 5fe8042783c1 |
| children | 08db93bbd798 |
comparison
equal
deleted
inserted
replaced
| 15821:84b0f9b23ede | 15822:32c366eeeb99 |
|---|---|
| 1 /** | 1 /** |
| 2 * @file sys_msg.c | 2 * @file sys_msg.c |
| 3 * | 3 * |
| 4 * gaim | 4 * purple |
| 5 * | 5 * |
| 6 * Gaim is the legal property of its developers, whose names are too numerous | 6 * Purple is the legal property of its developers, whose names are too numerous |
| 7 * to list here. Please refer to the COPYRIGHT file distributed with this | 7 * to list here. Please refer to the COPYRIGHT file distributed with this |
| 8 * source distribution. | 8 * source distribution. |
| 9 * | 9 * |
| 10 * This program is free software; you can redistribute it and/or modify | 10 * This program is free software; you can redistribute it and/or modify |
| 11 * it under the terms of the GNU General Public License as published by | 11 * it under the terms of the GNU General Public License as published by |
| 46 QQ_MSG_SYS_ADD_CONTACT_REJECTED = 0x04, | 46 QQ_MSG_SYS_ADD_CONTACT_REJECTED = 0x04, |
| 47 QQ_MSG_SYS_NEW_VERSION = 0x09 | 47 QQ_MSG_SYS_NEW_VERSION = 0x09 |
| 48 }; | 48 }; |
| 49 | 49 |
| 50 /* Henry: private function for reading/writing of system log */ | 50 /* Henry: private function for reading/writing of system log */ |
| 51 static void _qq_sys_msg_log_write(GaimConnection *gc, gchar *msg, gchar *from) | 51 static void _qq_sys_msg_log_write(PurpleConnection *gc, gchar *msg, gchar *from) |
| 52 { | 52 { |
| 53 GaimLog *log; | 53 PurpleLog *log; |
| 54 GaimAccount *account; | 54 PurpleAccount *account; |
| 55 | 55 |
| 56 account = gaim_connection_get_account(gc); | 56 account = purple_connection_get_account(gc); |
| 57 | 57 |
| 58 log = gaim_log_new(GAIM_LOG_IM, | 58 log = purple_log_new(PURPLE_LOG_IM, |
| 59 "systemim", | 59 "systemim", |
| 60 account, | 60 account, |
| 61 NULL, | 61 NULL, |
| 62 time(NULL), | 62 time(NULL), |
| 63 NULL | 63 NULL |
| 64 ); | 64 ); |
| 65 gaim_log_write(log, GAIM_MESSAGE_SYSTEM, from, | 65 purple_log_write(log, PURPLE_MESSAGE_SYSTEM, from, |
| 66 time(NULL), msg); | 66 time(NULL), msg); |
| 67 gaim_log_free(log); | 67 purple_log_free(log); |
| 68 } | 68 } |
| 69 | 69 |
| 70 /* suggested by rakescar@linuxsir, can still approve after search */ | 70 /* suggested by rakescar@linuxsir, can still approve after search */ |
| 71 static void _qq_search_before_auth_with_gc_and_uid(gc_and_uid *g) | 71 static void _qq_search_before_auth_with_gc_and_uid(gc_and_uid *g) |
| 72 { | 72 { |
| 73 GaimConnection *gc; | 73 PurpleConnection *gc; |
| 74 guint32 uid; | 74 guint32 uid; |
| 75 | 75 |
| 76 g_return_if_fail(g != NULL); | 76 g_return_if_fail(g != NULL); |
| 77 | 77 |
| 78 gc = g->gc; | 78 gc = g->gc; |
| 79 uid = g->uid; | 79 uid = g->uid; |
| 80 g_return_if_fail(gc != 0 && uid != 0); | 80 g_return_if_fail(gc != 0 && uid != 0); |
| 81 | 81 |
| 82 qq_send_packet_get_info(gc, uid, TRUE); /* we wanna see window */ | 82 qq_send_packet_get_info(gc, uid, TRUE); /* we wanna see window */ |
| 83 gaim_request_action | 83 purple_request_action |
| 84 (gc, NULL, _("Do you wanna approve the request?"), "", 2, g, 2, | 84 (gc, NULL, _("Do you wanna approve the request?"), "", 2, g, 2, |
| 85 _("Reject"), | 85 _("Reject"), |
| 86 G_CALLBACK(qq_reject_add_request_with_gc_and_uid), | 86 G_CALLBACK(qq_reject_add_request_with_gc_and_uid), |
| 87 _("Approve"), G_CALLBACK(qq_approve_add_request_with_gc_and_uid)); | 87 _("Approve"), G_CALLBACK(qq_approve_add_request_with_gc_and_uid)); |
| 88 } | 88 } |
| 89 | 89 |
| 90 static void _qq_search_before_add_with_gc_and_uid(gc_and_uid *g) | 90 static void _qq_search_before_add_with_gc_and_uid(gc_and_uid *g) |
| 91 { | 91 { |
| 92 GaimConnection *gc; | 92 PurpleConnection *gc; |
| 93 guint32 uid; | 93 guint32 uid; |
| 94 | 94 |
| 95 g_return_if_fail(g != NULL); | 95 g_return_if_fail(g != NULL); |
| 96 | 96 |
| 97 gc = g->gc; | 97 gc = g->gc; |
| 98 uid = g->uid; | 98 uid = g->uid; |
| 99 g_return_if_fail(gc != 0 && uid != 0); | 99 g_return_if_fail(gc != 0 && uid != 0); |
| 100 | 100 |
| 101 qq_send_packet_get_info(gc, uid, TRUE); /* we wanna see window */ | 101 qq_send_packet_get_info(gc, uid, TRUE); /* we wanna see window */ |
| 102 gaim_request_action | 102 purple_request_action |
| 103 (gc, NULL, _("Do you wanna add this buddy?"), "", 2, g, 2, | 103 (gc, NULL, _("Do you wanna add this buddy?"), "", 2, g, 2, |
| 104 _("Cancel"), NULL, _("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid)); | 104 _("Cancel"), NULL, _("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid)); |
| 105 } | 105 } |
| 106 | 106 |
| 107 /* Send ACK if the sys message needs an ACK */ | 107 /* Send ACK if the sys message needs an ACK */ |
| 108 static void _qq_send_packet_ack_msg_sys(GaimConnection *gc, guint8 code, guint32 from, guint16 seq) | 108 static void _qq_send_packet_ack_msg_sys(PurpleConnection *gc, guint8 code, guint32 from, guint16 seq) |
| 109 { | 109 { |
| 110 guint8 bar, *ack, *cursor; | 110 guint8 bar, *ack, *cursor; |
| 111 gchar *str; | 111 gchar *str; |
| 112 gint ack_len, bytes; | 112 gint ack_len, bytes; |
| 113 | 113 |
| 127 g_free(str); | 127 g_free(str); |
| 128 | 128 |
| 129 if (bytes == ack_len) /* creation OK */ | 129 if (bytes == ack_len) /* creation OK */ |
| 130 qq_send_cmd(gc, QQ_CMD_ACK_SYS_MSG, TRUE, 0, FALSE, ack, ack_len); | 130 qq_send_cmd(gc, QQ_CMD_ACK_SYS_MSG, TRUE, 0, FALSE, ack, ack_len); |
| 131 else | 131 else |
| 132 gaim_debug(GAIM_DEBUG_ERROR, "QQ", | 132 purple_debug(PURPLE_DEBUG_ERROR, "QQ", |
| 133 "Fail creating sys msg ACK, expect %d bytes, build %d bytes\n", ack_len, bytes); | 133 "Fail creating sys msg ACK, expect %d bytes, build %d bytes\n", ack_len, bytes); |
| 134 } | 134 } |
| 135 | 135 |
| 136 /* when you are added by a person, QQ server will send sys message */ | 136 /* when you are added by a person, QQ server will send sys message */ |
| 137 static void _qq_process_msg_sys_being_added(GaimConnection *gc, gchar *from, gchar *to, gchar *msg_utf8) | 137 static void _qq_process_msg_sys_being_added(PurpleConnection *gc, gchar *from, gchar *to, gchar *msg_utf8) |
| 138 { | 138 { |
| 139 gchar *message; | 139 gchar *message; |
| 140 GaimBuddy *b; | 140 PurpleBuddy *b; |
| 141 guint32 uid; | 141 guint32 uid; |
| 142 gc_and_uid *g; | 142 gc_and_uid *g; |
| 143 gchar *name; | 143 gchar *name; |
| 144 | 144 |
| 145 g_return_if_fail(from != NULL && to != NULL); | 145 g_return_if_fail(from != NULL && to != NULL); |
| 146 | 146 |
| 147 uid = strtol(from, NULL, 10); | 147 uid = strtol(from, NULL, 10); |
| 148 name = uid_to_gaim_name(uid); | 148 name = uid_to_purple_name(uid); |
| 149 b = gaim_find_buddy(gc->account, name); | 149 b = purple_find_buddy(gc->account, name); |
| 150 g_free(name); | 150 g_free(name); |
| 151 if (b == NULL) { /* the person is not in my list */ | 151 if (b == NULL) { /* the person is not in my list */ |
| 152 g = g_new0(gc_and_uid, 1); | 152 g = g_new0(gc_and_uid, 1); |
| 153 g->gc = gc; | 153 g->gc = gc; |
| 154 g->uid = uid; /* only need to get value */ | 154 g->uid = uid; /* only need to get value */ |
| 155 message = g_strdup_printf(_("You have been added by %s"), from); | 155 message = g_strdup_printf(_("You have been added by %s"), from); |
| 156 _qq_sys_msg_log_write(gc, message, from); | 156 _qq_sys_msg_log_write(gc, message, from); |
| 157 gaim_request_action(gc, NULL, message, | 157 purple_request_action(gc, NULL, message, |
| 158 _("Would like to add him?"), 2, g, 3, | 158 _("Would like to add him?"), 2, g, 3, |
| 159 _("Cancel"), NULL, _("Add"), | 159 _("Cancel"), NULL, _("Add"), |
| 160 G_CALLBACK | 160 G_CALLBACK |
| 161 (qq_add_buddy_with_gc_and_uid), | 161 (qq_add_buddy_with_gc_and_uid), |
| 162 _("Search"), G_CALLBACK(_qq_search_before_add_with_gc_and_uid)); | 162 _("Search"), G_CALLBACK(_qq_search_before_add_with_gc_and_uid)); |
| 163 } else { | 163 } else { |
| 164 message = g_strdup_printf(_("%s has added you [%s]"), from, to); | 164 message = g_strdup_printf(_("%s has added you [%s]"), from, to); |
| 165 _qq_sys_msg_log_write(gc, message, from); | 165 _qq_sys_msg_log_write(gc, message, from); |
| 166 gaim_notify_info(gc, NULL, message, NULL); | 166 purple_notify_info(gc, NULL, message, NULL); |
| 167 } | 167 } |
| 168 | 168 |
| 169 g_free(message); | 169 g_free(message); |
| 170 } | 170 } |
| 171 | 171 |
| 172 /* you are rejected by the person */ | 172 /* you are rejected by the person */ |
| 173 static void _qq_process_msg_sys_add_contact_rejected(GaimConnection *gc, gchar *from, gchar *to, gchar *msg_utf8) | 173 static void _qq_process_msg_sys_add_contact_rejected(PurpleConnection *gc, gchar *from, gchar *to, gchar *msg_utf8) |
| 174 { | 174 { |
| 175 gchar *message, *reason; | 175 gchar *message, *reason; |
| 176 | 176 |
| 177 g_return_if_fail(from != NULL && to != NULL); | 177 g_return_if_fail(from != NULL && to != NULL); |
| 178 | 178 |
| 179 message = g_strdup_printf(_("User %s rejected your request"), from); | 179 message = g_strdup_printf(_("User %s rejected your request"), from); |
| 180 reason = g_strdup_printf(_("Reason: %s"), msg_utf8); | 180 reason = g_strdup_printf(_("Reason: %s"), msg_utf8); |
| 181 _qq_sys_msg_log_write(gc, message, from); | 181 _qq_sys_msg_log_write(gc, message, from); |
| 182 | 182 |
| 183 gaim_notify_info(gc, NULL, message, reason); | 183 purple_notify_info(gc, NULL, message, reason); |
| 184 g_free(message); | 184 g_free(message); |
| 185 g_free(reason); | 185 g_free(reason); |
| 186 } | 186 } |
| 187 | 187 |
| 188 /* the buddy approves your request of adding him/her as your friend */ | 188 /* the buddy approves your request of adding him/her as your friend */ |
| 189 static void _qq_process_msg_sys_add_contact_approved(GaimConnection *gc, gchar *from, gchar *to, gchar *msg_utf8) | 189 static void _qq_process_msg_sys_add_contact_approved(PurpleConnection *gc, gchar *from, gchar *to, gchar *msg_utf8) |
| 190 { | 190 { |
| 191 gchar *message; | 191 gchar *message; |
| 192 qq_data *qd; | 192 qq_data *qd; |
| 193 | 193 |
| 194 g_return_if_fail(from != NULL && to != NULL); | 194 g_return_if_fail(from != NULL && to != NULL); |
| 196 qd = (qq_data *) gc->proto_data; | 196 qd = (qq_data *) gc->proto_data; |
| 197 qq_add_buddy_by_recv_packet(gc, strtol(from, NULL, 10), TRUE, TRUE); | 197 qq_add_buddy_by_recv_packet(gc, strtol(from, NULL, 10), TRUE, TRUE); |
| 198 | 198 |
| 199 message = g_strdup_printf(_("User %s has approved your request"), from); | 199 message = g_strdup_printf(_("User %s has approved your request"), from); |
| 200 _qq_sys_msg_log_write(gc, message, from); | 200 _qq_sys_msg_log_write(gc, message, from); |
| 201 gaim_notify_info(gc, NULL, message, NULL); | 201 purple_notify_info(gc, NULL, message, NULL); |
| 202 | 202 |
| 203 g_free(message); | 203 g_free(message); |
| 204 } | 204 } |
| 205 | 205 |
| 206 /* someone wants to add you to his buddy list */ | 206 /* someone wants to add you to his buddy list */ |
| 207 static void _qq_process_msg_sys_add_contact_request(GaimConnection *gc, gchar *from, gchar *to, gchar *msg_utf8) | 207 static void _qq_process_msg_sys_add_contact_request(PurpleConnection *gc, gchar *from, gchar *to, gchar *msg_utf8) |
| 208 { | 208 { |
| 209 gchar *message, *reason; | 209 gchar *message, *reason; |
| 210 guint32 uid; | 210 guint32 uid; |
| 211 gc_and_uid *g, *g2; | 211 gc_and_uid *g, *g2; |
| 212 GaimBuddy *b; | 212 PurpleBuddy *b; |
| 213 gchar *name; | 213 gchar *name; |
| 214 | 214 |
| 215 g_return_if_fail(from != NULL && to != NULL); | 215 g_return_if_fail(from != NULL && to != NULL); |
| 216 | 216 |
| 217 uid = strtol(from, NULL, 10); | 217 uid = strtol(from, NULL, 10); |
| 221 | 221 |
| 222 message = g_strdup_printf(_("%s wanna add you [%s] as friends"), from, to); | 222 message = g_strdup_printf(_("%s wanna add you [%s] as friends"), from, to); |
| 223 reason = g_strdup_printf(_("Message: %s"), msg_utf8); | 223 reason = g_strdup_printf(_("Message: %s"), msg_utf8); |
| 224 _qq_sys_msg_log_write(gc, message, from); | 224 _qq_sys_msg_log_write(gc, message, from); |
| 225 | 225 |
| 226 gaim_request_action | 226 purple_request_action |
| 227 (gc, NULL, message, reason, 2, g, 3, | 227 (gc, NULL, message, reason, 2, g, 3, |
| 228 _("Reject"), | 228 _("Reject"), |
| 229 G_CALLBACK(qq_reject_add_request_with_gc_and_uid), | 229 G_CALLBACK(qq_reject_add_request_with_gc_and_uid), |
| 230 _("Approve"), | 230 _("Approve"), |
| 231 G_CALLBACK(qq_approve_add_request_with_gc_and_uid), | 231 G_CALLBACK(qq_approve_add_request_with_gc_and_uid), |
| 232 _("Search"), G_CALLBACK(_qq_search_before_auth_with_gc_and_uid)); | 232 _("Search"), G_CALLBACK(_qq_search_before_auth_with_gc_and_uid)); |
| 233 | 233 |
| 234 g_free(message); | 234 g_free(message); |
| 235 g_free(reason); | 235 g_free(reason); |
| 236 | 236 |
| 237 name = uid_to_gaim_name(uid); | 237 name = uid_to_purple_name(uid); |
| 238 b = gaim_find_buddy(gc->account, name); | 238 b = purple_find_buddy(gc->account, name); |
| 239 g_free(name); | 239 g_free(name); |
| 240 if (b == NULL) { /* the person is not in my list */ | 240 if (b == NULL) { /* the person is not in my list */ |
| 241 g2 = g_new0(gc_and_uid, 1); | 241 g2 = g_new0(gc_and_uid, 1); |
| 242 g2->gc = gc; | 242 g2->gc = gc; |
| 243 g2->uid = strtol(from, NULL, 10); | 243 g2->uid = strtol(from, NULL, 10); |
| 244 message = g_strdup_printf(_("%s is not in your buddy list"), from); | 244 message = g_strdup_printf(_("%s is not in your buddy list"), from); |
| 245 gaim_request_action(gc, NULL, message, | 245 purple_request_action(gc, NULL, message, |
| 246 _("Would you like to add him?"), 2, g2, | 246 _("Would you like to add him?"), 2, g2, |
| 247 3, _("Cancel"), NULL, _("Add"), | 247 3, _("Cancel"), NULL, _("Add"), |
| 248 G_CALLBACK | 248 G_CALLBACK |
| 249 (qq_add_buddy_with_gc_and_uid), | 249 (qq_add_buddy_with_gc_and_uid), |
| 250 _("Search"), G_CALLBACK(_qq_search_before_add_with_gc_and_uid)); | 250 _("Search"), G_CALLBACK(_qq_search_before_add_with_gc_and_uid)); |
| 251 g_free(message); | 251 g_free(message); |
| 252 } | 252 } |
| 253 } | 253 } |
| 254 | 254 |
| 255 void qq_process_msg_sys(guint8 *buf, gint buf_len, guint16 seq, GaimConnection *gc) | 255 void qq_process_msg_sys(guint8 *buf, gint buf_len, guint16 seq, PurpleConnection *gc) |
| 256 { | 256 { |
| 257 qq_data *qd; | 257 qq_data *qd; |
| 258 gint len; | 258 gint len; |
| 259 guint8 *data; | 259 guint8 *data; |
| 260 gchar **segments, *code, *from, *to, *msg, *msg_utf8; | 260 gchar **segments, *code, *from, *to, *msg, *msg_utf8; |
| 274 msg = segments[3]; | 274 msg = segments[3]; |
| 275 | 275 |
| 276 _qq_send_packet_ack_msg_sys(gc, code[0], strtol(from, NULL, 10), seq); | 276 _qq_send_packet_ack_msg_sys(gc, code[0], strtol(from, NULL, 10), seq); |
| 277 | 277 |
| 278 if (strtol(to, NULL, 10) != qd->uid) { /* not to me */ | 278 if (strtol(to, NULL, 10) != qd->uid) { /* not to me */ |
| 279 gaim_debug(GAIM_DEBUG_ERROR, "QQ", "Recv sys msg to [%s], not me!, discard\n", to); | 279 purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Recv sys msg to [%s], not me!, discard\n", to); |
| 280 g_strfreev(segments); | 280 g_strfreev(segments); |
| 281 return; | 281 return; |
| 282 } | 282 } |
| 283 | 283 |
| 284 msg_utf8 = qq_to_utf8(msg, QQ_CHARSET_DEFAULT); | 284 msg_utf8 = qq_to_utf8(msg, QQ_CHARSET_DEFAULT); |
| 294 break; | 294 break; |
| 295 case QQ_MSG_SYS_ADD_CONTACT_REJECTED: | 295 case QQ_MSG_SYS_ADD_CONTACT_REJECTED: |
| 296 _qq_process_msg_sys_add_contact_rejected(gc, from, to, msg_utf8); | 296 _qq_process_msg_sys_add_contact_rejected(gc, from, to, msg_utf8); |
| 297 break; | 297 break; |
| 298 case QQ_MSG_SYS_NEW_VERSION: | 298 case QQ_MSG_SYS_NEW_VERSION: |
| 299 gaim_debug(GAIM_DEBUG_WARNING, "QQ", | 299 purple_debug(PURPLE_DEBUG_WARNING, "QQ", |
| 300 "QQ server says there is newer version than %s\n", qq_get_source_str(QQ_CLIENT)); | 300 "QQ server says there is newer version than %s\n", qq_get_source_str(QQ_CLIENT)); |
| 301 break; | 301 break; |
| 302 default: | 302 default: |
| 303 gaim_debug(GAIM_DEBUG_WARNING, "QQ", "Recv unknown sys msg code: %s\n", code); | 303 purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Recv unknown sys msg code: %s\n", code); |
| 304 gaim_debug(GAIM_DEBUG_WARNING, "QQ", "the msg is : %s\n", msg_utf8); | 304 purple_debug(PURPLE_DEBUG_WARNING, "QQ", "the msg is : %s\n", msg_utf8); |
| 305 } | 305 } |
| 306 g_free(msg_utf8); | 306 g_free(msg_utf8); |
| 307 g_strfreev(segments); | 307 g_strfreev(segments); |
| 308 | 308 |
| 309 } else { | 309 } else { |
| 310 gaim_debug(GAIM_DEBUG_ERROR, "QQ", "Error decrypt recv msg sys\n"); | 310 purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Error decrypt recv msg sys\n"); |
| 311 } | 311 } |
| 312 } | 312 } |
