soc.2010.msn-tlc: ecbc4b84: Move Switchboard callbacks out of Slp co...
masca at cpw.pidgin.im
masca at cpw.pidgin.im
Mon Jun 21 03:17:07 EDT 2010
-----------------------------------------------------------------
Revision: ecbc4b842580aeedf1ed760700ad53cfc501226a
Ancestor: ef1ec79ec7bacfba4244de8f1474021352be06f0
Author: masca at cpw.pidgin.im
Date: 2010-06-19T22:04:28
Branch: im.pidgin.soc.2010.msn-tlc
URL: http://d.pidgin.im/viewmtn/revision/info/ecbc4b842580aeedf1ed760700ad53cfc501226a
Modified files:
libpurple/protocols/msn/slp.c
libpurple/protocols/msn/switchboard.c
ChangeLog:
Move Switchboard callbacks out of Slp code.
-------------- next part --------------
============================================================
--- libpurple/protocols/msn/slp.c 566706c15aac465da1b645169439702d0afb3997
+++ libpurple/protocols/msn/slp.c f20d63ca3983d8ee3db81b0c94dbf67c67c592f0
@@ -1074,146 +1074,6 @@ msn_slp_sip_recv(MsnSlpLink *slplink, co
* Msg Callbacks
**************************************************************************/
-void
-msn_p2p_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
-{
- MsnSession *session;
- MsnSlpLink *slplink;
- const char *data;
- gsize len;
-
- session = cmdproc->servconn->session;
- slplink = msn_session_get_slplink(session, msg->remote_user);
-
- if (slplink->swboard == NULL)
- {
- /*
- * We will need swboard in order to change its flags. If its
- * NULL, something has probably gone wrong earlier on. I
- * didn't want to do this, but MSN 7 is somehow causing us
- * to crash here, I couldn't reproduce it to debug more,
- * and people are reporting bugs. Hopefully this doesn't
- * cause more crashes. Stu.
- */
- if (cmdproc->data == NULL)
- g_warning("msn_p2p_msg cmdproc->data was NULL\n");
- else {
- slplink->swboard = (MsnSwitchBoard *)cmdproc->data;
- slplink->swboard->slplinks = g_list_prepend(slplink->swboard->slplinks, slplink);
- }
- }
-
- data = msn_message_get_bin_data(msg, &len);
-
- msn_slplink_process_msg(slplink, msg->part->header, data, len);
-}
-
-static void
-got_emoticon(MsnSlpCall *slpcall,
- const guchar *data, gsize size)
-{
- PurpleConversation *conv;
- MsnSwitchBoard *swboard;
-
- swboard = slpcall->slplink->swboard;
- conv = swboard->conv;
-
- if (conv) {
- /* FIXME: it would be better if we wrote the data as we received it
- instead of all at once, calling write multiple times and
- close once at the very end
- */
- purple_conv_custom_smiley_write(conv, slpcall->data_info, data, size);
- purple_conv_custom_smiley_close(conv, slpcall->data_info );
- }
- if (purple_debug_is_verbose())
- purple_debug_info("msn", "Got smiley: %s\n", slpcall->data_info);
-}
-
-void
-msn_emoticon_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
-{
- MsnSession *session;
- MsnSlpLink *slplink;
- MsnSwitchBoard *swboard;
- MsnObject *obj;
- char **tokens;
- char *smile, *body_str;
- const char *body, *who, *sha1;
- guint tok;
- size_t body_len;
-
- PurpleConversation *conv;
-
- session = cmdproc->servconn->session;
-
- if (!purple_account_get_bool(session->account, "custom_smileys", TRUE))
- return;
-
- swboard = cmdproc->data;
- conv = swboard->conv;
-
- body = msn_message_get_bin_data(msg, &body_len);
- if (!body || !body_len)
- return;
- body_str = g_strndup(body, body_len);
-
- /* MSN Messenger 7 may send more than one MSNObject in a single message...
- * Maybe 10 tokens is a reasonable max value. */
- tokens = g_strsplit(body_str, "\t", 10);
-
- g_free(body_str);
-
- for (tok = 0; tok < 9; tok += 2) {
- if (tokens[tok] == NULL || tokens[tok + 1] == NULL) {
- break;
- }
-
- smile = tokens[tok];
- obj = msn_object_new_from_string(purple_url_decode(tokens[tok + 1]));
-
- if (obj == NULL)
- break;
-
- who = msn_object_get_creator(obj);
- sha1 = msn_object_get_sha1(obj);
-
- slplink = msn_session_get_slplink(session, who);
- if (slplink->swboard != swboard) {
- if (slplink->swboard != NULL)
- /*
- * Apparently we're using a different switchboard now or
- * something? I don't know if this is normal, but it
- * definitely happens. So make sure the old switchboard
- * doesn't still have a reference to us.
- */
- slplink->swboard->slplinks = g_list_remove(slplink->swboard->slplinks, slplink);
- slplink->swboard = swboard;
- slplink->swboard->slplinks = g_list_prepend(slplink->swboard->slplinks, slplink);
- }
-
- /* If the conversation doesn't exist then this is a custom smiley
- * used in the first message in a MSN conversation: we need to create
- * the conversation now, otherwise the custom smiley won't be shown.
- * This happens because every GtkIMHtml has its own smiley tree: if
- * the conversation doesn't exist then we cannot associate the new
- * smiley with its GtkIMHtml widget. */
- if (!conv) {
- conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, session->account, who);
- }
-
- if (purple_conv_custom_smiley_add(conv, smile, "sha1", sha1, TRUE)) {
- msn_slplink_request_object(slplink, smile, got_emoticon, NULL, obj);
- }
-
- msn_object_destroy(obj);
- obj = NULL;
- who = NULL;
- sha1 = NULL;
- }
- g_strfreev(tokens);
-}
-
static gboolean
buddy_icon_cached(PurpleConnection *gc, MsnObject *obj)
{
============================================================
--- libpurple/protocols/msn/switchboard.c 19090d119e5c0cd329ccd028954f4bd427624ae5
+++ libpurple/protocols/msn/switchboard.c 6255375412ff05820292ffa528fb8f470be803d7
@@ -575,6 +575,145 @@ msg_error_helper(MsnCmdProc *cmdproc, Ms
* Message Stuff
**************************************************************************/
+void
+msn_p2p_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
+{
+ MsnSession *session;
+ MsnSlpLink *slplink;
+ const char *data;
+ gsize len;
+
+ session = cmdproc->servconn->session;
+ slplink = msn_session_get_slplink(session, msg->remote_user);
+
+ if (slplink->swboard == NULL)
+ {
+ /*
+ * We will need swboard in order to change its flags. If its
+ * NULL, something has probably gone wrong earlier on. I
+ * didn't want to do this, but MSN 7 is somehow causing us
+ * to crash here, I couldn't reproduce it to debug more,
+ * and people are reporting bugs. Hopefully this doesn't
+ * cause more crashes. Stu.
+ */
+ if (cmdproc->data == NULL)
+ g_warning("msn_p2p_msg cmdproc->data was NULL\n");
+ else {
+ slplink->swboard = (MsnSwitchBoard *)cmdproc->data;
+ slplink->swboard->slplinks = g_list_prepend(slplink->swboard->slplinks, slplink);
+ }
+ }
+
+ data = msn_message_get_bin_data(msg, &len);
+
+ msn_slplink_process_msg(slplink, msg->part->header, data, len);
+}
+
+static void
+got_emoticon(MsnSlpCall *slpcall,
+ const guchar *data, gsize size)
+{
+ PurpleConversation *conv;
+ MsnSwitchBoard *swboard;
+
+ swboard = slpcall->slplink->swboard;
+ conv = swboard->conv;
+
+ if (conv) {
+ /* FIXME: it would be better if we wrote the data as we received it
+ instead of all at once, calling write multiple times and
+ close once at the very end
+ */
+ purple_conv_custom_smiley_write(conv, slpcall->data_info, data, size);
+ purple_conv_custom_smiley_close(conv, slpcall->data_info );
+ }
+ if (purple_debug_is_verbose())
+ purple_debug_info("msn", "Got smiley: %s\n", slpcall->data_info);
+}
+
+void msn_emoticon_msg(MsnCmdProc *cmdproc, MsnMessage *msg)
+{
+ MsnSession *session;
+ MsnSlpLink *slplink;
+ MsnSwitchBoard *swboard;
+ MsnObject *obj;
+ char **tokens;
+ char *smile, *body_str;
+ const char *body, *who, *sha1;
+ guint tok;
+ size_t body_len;
+
+ PurpleConversation *conv;
+
+ session = cmdproc->servconn->session;
+
+ if (!purple_account_get_bool(session->account, "custom_smileys", TRUE))
+ return;
+
+ swboard = cmdproc->data;
+ conv = swboard->conv;
+
+ body = msn_message_get_bin_data(msg, &body_len);
+ if (!body || !body_len)
+ return;
+ body_str = g_strndup(body, body_len);
+
+ /* MSN Messenger 7 may send more than one MSNObject in a single message...
+ * Maybe 10 tokens is a reasonable max value. */
+ tokens = g_strsplit(body_str, "\t", 10);
+
+ g_free(body_str);
+
+ for (tok = 0; tok < 9; tok += 2) {
+ if (tokens[tok] == NULL || tokens[tok + 1] == NULL) {
+ break;
+ }
+
+ smile = tokens[tok];
+ obj = msn_object_new_from_string(purple_url_decode(tokens[tok + 1]));
+
+ if (obj == NULL)
+ break;
+
+ who = msn_object_get_creator(obj);
+ sha1 = msn_object_get_sha1(obj);
+
+ slplink = msn_session_get_slplink(session, who);
+ if (slplink->swboard != swboard) {
+ if (slplink->swboard != NULL)
+ /*
+ * Apparently we're using a different switchboard now or
+ * something? I don't know if this is normal, but it
+ * definitely happens. So make sure the old switchboard
+ * doesn't still have a reference to us.
+ */
+ slplink->swboard->slplinks = g_list_remove(slplink->swboard->slplinks, slplink);
+ slplink->swboard = swboard;
+ slplink->swboard->slplinks = g_list_prepend(slplink->swboard->slplinks, slplink);
+ }
+
+ /* If the conversation doesn't exist then this is a custom smiley
+ * used in the first message in a MSN conversation: we need to create
+ * the conversation now, otherwise the custom smiley won't be shown.
+ * This happens because every GtkIMHtml has its own smiley tree: if
+ * the conversation doesn't exist then we cannot associate the new
+ * smiley with its GtkIMHtml widget. */
+ if (!conv) {
+ conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, session->account, who);
+ }
+
+ if (purple_conv_custom_smiley_add(conv, smile, "sha1", sha1, TRUE)) {
+ msn_slplink_request_object(slplink, smile, got_emoticon, NULL, obj);
+ }
+
+ msn_object_destroy(obj);
+ obj = NULL;
+ who = NULL;
+ sha1 = NULL;
+ }
+ g_strfreev(tokens);
+}
+
/** Called when a message times out. */
static void
msg_timeout(MsnCmdProc *cmdproc, MsnTransaction *trans)
More information about the Commits
mailing list