pidgin: 2c0470c4: Move some MSN message handlers from swit...
qulogic at pidgin.im
qulogic at pidgin.im
Sun Feb 1 04:20:29 EST 2009
-----------------------------------------------------------------
Revision: 2c0470c4b2f7eb90fe22187595dd21583858cfd5
Ancestor: 2ad301a1acf25db69950de8a779c809362e4f727
Author: qulogic at pidgin.im
Date: 2009-02-01T08:25:57
Branch: im.pidgin.pidgin
URL: http://d.pidgin.im/viewmtn/revision/info/2c0470c4b2f7eb90fe22187595dd21583858cfd5
Modified files:
libpurple/protocols/msn/msg.c libpurple/protocols/msn/msg.h
libpurple/protocols/msn/switchboard.c
ChangeLog:
Move some MSN message handlers from switchboard to general msg.c.
References #7676.
-------------- next part --------------
============================================================
--- libpurple/protocols/msn/msg.c 7bc880998e5883df509b273cb99b8108f871709a
+++ libpurple/protocols/msn/msg.c daa9310fb944721a0980cb652339821a9df9b497
@@ -23,6 +23,7 @@
*/
#include "msn.h"
#include "msg.h"
+#include "msnutils.h"
MsnMessage *
msn_message_new(MsnMsgType type)
@@ -804,3 +805,157 @@ msn_message_show_readable(MsnMessage *ms
g_string_free(str, TRUE);
}
+
+/**************************************************************************
+ * Message Handlers
+ **************************************************************************/
+void
+msn_plain_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
+{
+ PurpleConnection *gc;
+ MsnSwitchBoard *swboard;
+ const char *body;
+ char *body_str;
+ char *body_enc;
+ char *body_final;
+ size_t body_len;
+ const char *passport;
+ const char *value;
+
+ gc = cmdproc->session->account->gc;
+ swboard = cmdproc->data;
+
+ body = msn_message_get_bin_data(msg, &body_len);
+ body_str = g_strndup(body, body_len);
+ body_enc = g_markup_escape_text(body_str, -1);
+ g_free(body_str);
+
+ passport = msg->remote_user;
+
+ if (!strcmp(passport, "messenger at microsoft.com") &&
+ strstr(body, "immediate security update"))
+ {
+ return;
+ }
+
+#if 0
+ if ((value = msn_message_get_attr(msg, "User-Agent")) != NULL)
+ {
+ purple_debug_misc("msn", "User-Agent = '%s'\n", value);
+ }
+#endif
+
+ if ((value = msn_message_get_attr(msg, "X-MMS-IM-Format")) != NULL)
+ {
+ char *pre, *post;
+
+ msn_parse_format(value, &pre, &post);
+
+ body_final = g_strdup_printf("%s%s%s", pre ? pre : "",
+ body_enc ? body_enc : "", post ? post : "");
+
+ g_free(pre);
+ g_free(post);
+ g_free(body_enc);
+ }
+ else
+ {
+ body_final = body_enc;
+ }
+
+ swboard->flag |= MSN_SB_FLAG_IM;
+
+ if (swboard->current_users > 1 ||
+ ((swboard->conv != NULL) &&
+ purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT))
+ {
+ /* If current_users is always ok as it should then there is no need to
+ * check if this is a chat. */
+ if (swboard->current_users <= 1)
+ purple_debug_misc("msn", "plain_msg: current_users(%d)\n",
+ swboard->current_users);
+
+ serv_got_chat_in(gc, swboard->chat_id, passport, 0, body_final,
+ time(NULL));
+ if (swboard->conv == NULL)
+ {
+ swboard->conv = purple_find_chat(gc, swboard->chat_id);
+ swboard->flag |= MSN_SB_FLAG_IM;
+ }
+ }
+ else
+ {
+ serv_got_im(gc, passport, body_final, 0, time(NULL));
+ if (swboard->conv == NULL)
+ {
+ swboard->conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
+ passport, purple_connection_get_account(gc));
+ swboard->flag |= MSN_SB_FLAG_IM;
+ }
+ }
+
+ g_free(body_final);
+}
+
+void
+msn_control_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
+{
+ PurpleConnection *gc;
+ MsnSwitchBoard *swboard;
+ char *passport;
+
+ gc = cmdproc->session->account->gc;
+ swboard = cmdproc->data;
+ passport = msg->remote_user;
+
+ if (swboard->current_users == 1 &&
+ msn_message_get_attr(msg, "TypingUser") != NULL)
+ {
+ serv_got_typing(gc, passport, MSN_TYPING_RECV_TIMEOUT,
+ PURPLE_TYPING);
+ }
+}
+
+void
+msn_datacast_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
+{
+ GHashTable *body;
+ const char *id;
+ body = msn_message_get_hashtable_from_body(msg);
+
+ id = g_hash_table_lookup(body, "ID");
+
+ if (!strcmp(id, "1")) {
+ /* Nudge */
+ MsnSwitchBoard *swboard;
+ PurpleAccount *account;
+ const char *user;
+
+ swboard = cmdproc->data;
+ account = cmdproc->session->account;
+ user = msg->remote_user;
+
+ if (swboard->current_users > 1 ||
+ ((swboard->conv != NULL) &&
+ purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT))
+ purple_prpl_got_attention_in_chat(account->gc, swboard->chat_id, user, MSN_NUDGE);
+
+ else
+ purple_prpl_got_attention(account->gc, user, MSN_NUDGE);
+
+ } else if (!strcmp(id, "2")) {
+ /* Wink */
+
+ } else if (!strcmp(id, "3")) {
+ /* Voiceclip */
+
+ } else if (!strcmp(id, "4")) {
+ /* Action */
+
+ } else {
+ purple_debug_warning("msn", "Got unknown datacast with ID %s.\n", id);
+ }
+
+ g_hash_table_destroy(body);
+}
+
============================================================
--- libpurple/protocols/msn/msg.h 532196ca4e57132ff397d5b529b6b7299eba3c1f
+++ libpurple/protocols/msn/msg.h af6d453a733426d2a4e03d7de807a9c69c43c9f6
@@ -339,4 +339,10 @@ char *msn_message_to_string(MsnMessage *
char *msn_message_to_string(MsnMessage *msg);
+void msn_plain_msg(MsnCmdProc *cmdproc, MsnMessage *msg);
+
+void msn_control_msg(MsnCmdProc *cmdproc, MsnMessage *msg);
+
+void msn_datacast_msg(MsnCmdProc *cmdproc, MsnMessage *msg);
+
#endif /* _MSN_MSG_H_ */
============================================================
--- libpurple/protocols/msn/switchboard.c 195f9ba61314553faa854711e2f4fc5c8a98af00
+++ libpurple/protocols/msn/switchboard.c 9da306e423a1e67758315290c961f7e607655c08
@@ -887,113 +887,6 @@ static void
* Message Handlers
**************************************************************************/
static void
-plain_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
-{
- PurpleConnection *gc;
- MsnSwitchBoard *swboard;
- const char *body;
- char *body_str;
- char *body_enc;
- char *body_final;
- size_t body_len;
- const char *passport;
- const char *value;
-
- gc = cmdproc->session->account->gc;
- swboard = cmdproc->data;
-
- body = msn_message_get_bin_data(msg, &body_len);
- body_str = g_strndup(body, body_len);
- body_enc = g_markup_escape_text(body_str, -1);
- g_free(body_str);
-
- passport = msg->remote_user;
-
- if (!strcmp(passport, "messenger at microsoft.com") &&
- strstr(body, "immediate security update"))
- {
- return;
- }
-
-#if 0
- if ((value = msn_message_get_attr(msg, "User-Agent")) != NULL)
- {
- purple_debug_misc("msn", "User-Agent = '%s'\n", value);
- }
-#endif
-
- if ((value = msn_message_get_attr(msg, "X-MMS-IM-Format")) != NULL)
- {
- char *pre, *post;
-
- msn_parse_format(value, &pre, &post);
-
- body_final = g_strdup_printf("%s%s%s", pre ? pre : "",
- body_enc ? body_enc : "", post ? post : "");
-
- g_free(pre);
- g_free(post);
- g_free(body_enc);
- }
- else
- {
- body_final = body_enc;
- }
-
- swboard->flag |= MSN_SB_FLAG_IM;
-
- if (swboard->current_users > 1 ||
- ((swboard->conv != NULL) &&
- purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT))
- {
- /* If current_users is always ok as it should then there is no need to
- * check if this is a chat. */
- if (swboard->current_users <= 1)
- purple_debug_misc("msn", "plain_msg: current_users(%d)\n",
- swboard->current_users);
-
- serv_got_chat_in(gc, swboard->chat_id, passport, 0, body_final,
- time(NULL));
- if (swboard->conv == NULL)
- {
- swboard->conv = purple_find_chat(gc, swboard->chat_id);
- swboard->flag |= MSN_SB_FLAG_IM;
- }
- }
- else
- {
- serv_got_im(gc, passport, body_final, 0, time(NULL));
- if (swboard->conv == NULL)
- {
- swboard->conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
- passport, purple_connection_get_account(gc));
- swboard->flag |= MSN_SB_FLAG_IM;
- }
- }
-
- g_free(body_final);
-}
-
-static void
-control_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
-{
- PurpleConnection *gc;
- MsnSwitchBoard *swboard;
- char *passport;
-
- gc = cmdproc->session->account->gc;
- swboard = cmdproc->data;
- passport = msg->remote_user;
-
- if (swboard->current_users == 1 &&
- msn_message_get_attr(msg, "TypingUser") != NULL)
- {
- serv_got_typing(gc, passport, MSN_TYPING_RECV_TIMEOUT,
- PURPLE_TYPING);
- }
-}
-
-static void
clientcaps_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
{
#if 0
@@ -1012,49 +905,6 @@ clientcaps_msg(MsnCmdProc *cmdproc, MsnM
#endif
}
-static void
-datacast_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
-{
- GHashTable *body;
- const char *id;
- body = msn_message_get_hashtable_from_body(msg);
-
- id = g_hash_table_lookup(body, "ID");
-
- if (!strcmp(id, "1")) {
- /* Nudge */
- MsnSwitchBoard *swboard;
- PurpleAccount *account;
- const char *user;
-
- swboard = cmdproc->data;
- account = cmdproc->session->account;
- user = msg->remote_user;
-
- if (swboard->current_users > 1 ||
- ((swboard->conv != NULL) &&
- purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT))
- purple_prpl_got_attention_in_chat(account->gc, swboard->chat_id, user, MSN_NUDGE);
-
- else
- purple_prpl_got_attention(account->gc, user, MSN_NUDGE);
-
- } else if (!strcmp(id, "2")) {
- /* Wink */
-
- } else if (!strcmp(id, "3")) {
- /* Voiceclip */
-
- } else if (!strcmp(id, "4")) {
- /* Action */
-
- } else {
- purple_debug_warning("msn", "Got unknown datacast with ID %s.\n", id);
- }
-
- g_hash_table_destroy(body);
-}
-
/**************************************************************************
* Connect stuff
**************************************************************************/
@@ -1372,9 +1222,9 @@ msn_switchboard_init(void)
/* Register the message type callbacks. */
msn_table_add_msg_type(cbs_table, "text/plain",
- plain_msg);
+ msn_plain_msg);
msn_table_add_msg_type(cbs_table, "text/x-msmsgscontrol",
- control_msg);
+ msn_control_msg);
msn_table_add_msg_type(cbs_table, "text/x-clientcaps",
clientcaps_msg);
msn_table_add_msg_type(cbs_table, "text/x-clientinfo",
@@ -1384,9 +1234,9 @@ msn_switchboard_init(void)
msn_table_add_msg_type(cbs_table, "text/x-mms-emoticon",
msn_emoticon_msg);
msn_table_add_msg_type(cbs_table, "text/x-mms-animemoticon",
- msn_emoticon_msg);
+ msn_emoticon_msg);
msn_table_add_msg_type(cbs_table, "text/x-msnmsgr-datacast",
- datacast_msg);
+ msn_datacast_msg);
#if 0
msn_table_add_msg_type(cbs_table, "text/x-msmmsginvite",
msn_invite_msg);
More information about the Commits
mailing list