--- a/libpurple/protocols/msn/notification.c Fri Mar 13 00:35:16 2015 -0400
+++ b/libpurple/protocols/msn/notification.c Sat May 02 04:32:15 2015 -0400
@@ -1403,6 +1403,34 @@
cmdproc->last_cmd->payload_cb = sdg_cmd_post;
+msn_notification_route_msg(MsnSession *session, const char *command, + const char *user, MsnMessage *msg) + payload = msn_message_gen_payload(msg, &len); + wrapped = g_strdup_printf(MSN_ROUTING_HEADER, user, session->user->passport, session->guid); + wrapped_len = strlen(wrapped); + wrapped = g_realloc(wrapped, wrapped_len + len); + memcpy(wrapped + wrapped_len, payload, len); + cmdproc = session->notification->cmdproc; + purple_debug_misc("msn", "Sending %s command to %s with payload: %s\n", + command, user, wrapped); + trans = msn_transaction_new(cmdproc, command, "%" G_GSIZE_FORMAT, len); + msn_transaction_set_payload(trans, wrapped, len); + msn_transaction_set_saveable(trans, FALSE); + msn_cmdproc_send_trans(cmdproc, trans); prp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
--- a/libpurple/protocols/msn/notification.h Fri Mar 13 00:35:16 2015 -0400
+++ b/libpurple/protocols/msn/notification.h Sat May 02 04:32:15 2015 -0400
@@ -76,6 +76,14 @@
} MsnUnifiedNotificationType;
+#define MSN_ROUTING_HEADER \ + "From: 1:%s;epid={%s}\r\n" \ + "Reliability: 1.0\r\n" \ void msn_notification_end(void);
void msn_notification_init(void);
@@ -84,6 +92,10 @@
void msn_notification_rem_buddy_from_list(MsnNotification *notification,
MsnListId list_id, MsnUser *user);
+void msn_notification_route_msg(MsnSession *session, + const char *command, const char *user, void msn_notification_send_fqy(MsnSession *session,
const char *payload, int payload_len,
MsnFqyCb cb, gpointer cb_data);
--- a/libpurple/protocols/msn/transaction.c Fri Mar 13 00:35:16 2015 -0400
+++ b/libpurple/protocols/msn/transaction.c Sat May 02 04:32:15 2015 -0400
@@ -99,8 +99,10 @@
g_return_val_if_fail(trans != NULL, FALSE);
- if (trans->params != NULL)
+ if (trans->params != NULL && trans->saveable) str = g_strdup_printf("%s %u %s\r\n", trans->command, trans->trId, trans->params);
+ else if (trans->params != NULL) + str = g_strdup_printf("%s %s\r\n", trans->command, trans->params); else if (trans->saveable)
str = g_strdup_printf("%s %u\r\n", trans->command, trans->trId);