diff options
Diffstat (limited to 'libpurple/protocols/qq/sys_msg.c')
-rw-r--r-- | libpurple/protocols/qq/sys_msg.c | 94 |
1 files changed, 42 insertions, 52 deletions
diff --git a/libpurple/protocols/qq/sys_msg.c b/libpurple/protocols/qq/sys_msg.c index 588610532b..ef7d12e084 100644 --- a/libpurple/protocols/qq/sys_msg.c +++ b/libpurple/protocols/qq/sys_msg.c @@ -31,7 +31,6 @@ #include "buddy_list.h" #include "buddy_opt.h" #include "char_conv.h" -#include "crypt.h" #include "header_info.h" #include "packet_parse.h" #include "qq.h" @@ -292,64 +291,55 @@ static void _qq_process_msg_sys_notice(PurpleConnection *gc, gchar *from, gchar g_free(content); } -void qq_process_msg_sys(guint8 *buf, gint buf_len, guint16 seq, PurpleConnection *gc) +void qq_process_msg_sys(guint8 *data, gint data_len, guint16 seq, PurpleConnection *gc) { qq_data *qd; - gint len; - guint8 *data; gchar **segments, *code, *from, *to, *msg, *msg_utf8; - g_return_if_fail(buf != NULL && buf_len != 0); + g_return_if_fail(data != NULL && data_len != 0); qd = (qq_data *) gc->proto_data; - len = buf_len; - data = g_newa(guint8, len); - - if (qq_decrypt(buf, buf_len, qd->session_key, data, &len)) { - if (NULL == (segments = split_data(data, len, "\x1f", 4))) - return; - code = segments[0]; - from = segments[1]; - to = segments[2]; - msg = segments[3]; - - _qq_send_packet_ack_msg_sys(gc, code[0], strtol(from, NULL, 10), seq); - - if (strtol(to, NULL, 10) != qd->uid) { /* not to me */ - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Recv sys msg to [%s], not me!, discard\n", to); - g_strfreev(segments); - return; - } - - msg_utf8 = qq_to_utf8(msg, QQ_CHARSET_DEFAULT); - switch (strtol(code, NULL, 10)) { - case QQ_MSG_SYS_BEING_ADDED: - _qq_process_msg_sys_being_added(gc, from, to, msg_utf8); - break; - case QQ_MSG_SYS_ADD_CONTACT_REQUEST: - _qq_process_msg_sys_add_contact_request(gc, from, to, msg_utf8); - break; - case QQ_MSG_SYS_ADD_CONTACT_APPROVED: - _qq_process_msg_sys_add_contact_approved(gc, from, to, msg_utf8); - break; - case QQ_MSG_SYS_ADD_CONTACT_REJECTED: - _qq_process_msg_sys_add_contact_rejected(gc, from, to, msg_utf8); - break; - case QQ_MSG_SYS_NOTICE: - _qq_process_msg_sys_notice(gc, from, to, msg_utf8); - break; - case QQ_MSG_SYS_NEW_VERSION: - purple_debug(PURPLE_DEBUG_WARNING, "QQ", - "QQ server says there is newer version than %s\n", qq_get_ver_desc(QQ_CLIENT)); - break; - default: - purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Recv unknown sys msg code: %s\n", code); - purple_debug(PURPLE_DEBUG_WARNING, "QQ", "the msg is : %s\n", msg_utf8); - } - g_free(msg_utf8); + + if (NULL == (segments = split_data(data, data_len, "\x1f", 4))) + return; + code = segments[0]; + from = segments[1]; + to = segments[2]; + msg = segments[3]; + + _qq_send_packet_ack_msg_sys(gc, code[0], strtol(from, NULL, 10), seq); + + if (strtol(to, NULL, 10) != qd->uid) { /* not to me */ + purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Recv sys msg to [%s], not me!, discard\n", to); g_strfreev(segments); + return; + } - } else { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Error decrypt recv msg sys\n"); + msg_utf8 = qq_to_utf8(msg, QQ_CHARSET_DEFAULT); + switch (strtol(code, NULL, 10)) { + case QQ_MSG_SYS_BEING_ADDED: + _qq_process_msg_sys_being_added(gc, from, to, msg_utf8); + break; + case QQ_MSG_SYS_ADD_CONTACT_REQUEST: + _qq_process_msg_sys_add_contact_request(gc, from, to, msg_utf8); + break; + case QQ_MSG_SYS_ADD_CONTACT_APPROVED: + _qq_process_msg_sys_add_contact_approved(gc, from, to, msg_utf8); + break; + case QQ_MSG_SYS_ADD_CONTACT_REJECTED: + _qq_process_msg_sys_add_contact_rejected(gc, from, to, msg_utf8); + break; + case QQ_MSG_SYS_NOTICE: + _qq_process_msg_sys_notice(gc, from, to, msg_utf8); + break; + case QQ_MSG_SYS_NEW_VERSION: + purple_debug(PURPLE_DEBUG_WARNING, "QQ", + "QQ server says there is newer version than %s\n", qq_get_ver_desc(QQ_CLIENT)); + break; + default: + purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Recv unknown sys msg code: %s\n", code); + purple_debug(PURPLE_DEBUG_WARNING, "QQ", "the msg is : %s\n", msg_utf8); } + g_free(msg_utf8); + g_strfreev(segments); } |