qulogic/pidgin

msn: Implement general message sending via notification server.
draft msnp21
2015-05-02, Elliott Sales de Andrade
c0399d0eed77
Parents 2e12a7af8bbf
Children
msn: Implement general message sending via notification server.
--- 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;
}
+void
+msn_notification_route_msg(MsnSession *session, const char *command,
+ const char *user, MsnMessage *msg)
+{
+ MsnTransaction *trans;
+ MsnCmdProc *cmdproc;
+ char *payload;
+ char *wrapped;
+ size_t len;
+ size_t wrapped_len;
+
+ 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);
+ len += wrapped_len;
+ g_free(payload);
+
+ 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);
+}
+
static void
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 \
+ "Routing: 1.0\r\n" \
+ "To: 1:%s\r\n" \
+ "From: 1:%s;epid={%s}\r\n" \
+ "\r\n" \
+ "Reliability: 1.0\r\n" \
+ "\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,
+ MsnMessage *msg);
+
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);
else