Index: protocols/msn/msn.c
===================================================================
--- protocols/msn/msn.c (revision 11e42dcf7366ee547b9651648724d35d12e36091)
+++ protocols/msn/msn.c (revision d80822c66f79471bc2e12167a14611dd3c49da65)
@@ -178,6 +178,6 @@
static void msn_set_away(struct im_connection *ic, char *state, char *message)
{
- //char *uux;
struct msn_data *md = ic->proto_data;
+ char *nick, *psm, *idle, *statecode, *body, *buf;
if (state == NULL) {
@@ -187,30 +187,21 @@
}
- if (!msn_ns_write(ic, -1, "CHG %d %s %d:%02d\r\n", ++md->trId, md->away_state->code, MSN_CAP1, MSN_CAP2)) {
- return;
- }
-
- uux = g_markup_printf_escaped("%d:%02d"
- "",
- MSN_CAP1, MSN_CAP2);
- msn_ns_write(ic, -1, "UUX %d %zd\r\n%s", ++md->trId, strlen(uux), uux);
- g_free(uux);
-
- uux = g_markup_printf_escaped("%s"
- "%s%d"
- "%s",
- md->uuid,
- strcmp(md->away_state->code, "IDL") ? "false" : "true",
- 1, /* ? */
- md->away_state->code);
- msn_ns_write(ic, -1, "UUX %d %zd\r\n%s", ++md->trId, strlen(uux), uux);
- g_free(uux);
-
- uux = g_markup_printf_escaped("%s"
- ""
- "%s",
- message ? message : "", md->uuid);
- msn_ns_write(ic, -1, "UUX %d %zd\r\n%s", ++md->trId, strlen(uux), uux);
- g_free(uux);
+ statecode = (char *) md->away_state->code;
+ nick = set_getstr(&ic->acc->set, "display_name");
+ psm = message ? message : "";
+ idle = strcmp(statecode, "IDL") ? "false" : "true";
+
+ body = g_markup_printf_escaped(MSN_PUT_USER_BODY,
+ nick, psm, psm, md->uuid, statecode, md->uuid, idle, statecode,
+ MSN_CAP1, MSN_CAP2, MSN_CAP1, MSN_CAP2
+ );
+
+ buf = g_strdup_printf(MSN_PUT_HEADERS, ic->acc->user, ic->acc->user, md->uuid,
+ "/user", "application/user+xml",
+ strlen(body), body);
+ msn_ns_write(ic, -1, "PUT %d %zd\r\n%s", ++md->trId, strlen(buf), buf);
+
+ g_free(buf);
+ g_free(body);
}
Index: protocols/msn/msn.h
===================================================================
--- protocols/msn/msn.h (revision 11e42dcf7366ee547b9651648724d35d12e36091)
+++ protocols/msn/msn.h (revision d80822c66f79471bc2e12167a14611dd3c49da65)
@@ -67,5 +67,5 @@
#define MSN_CAP2 0x0000
-#define MSN_MESSAGE_HEADERS \
+#define MSN_BASE_HEADERS \
"Routing: 1.0\r\n" \
"To: 1:%s\r\n" \
@@ -73,5 +73,7 @@
"\r\n" \
"Reliability: 1.0\r\n" \
- "\r\n" \
+ "\r\n"
+
+#define MSN_MESSAGE_HEADERS MSN_BASE_HEADERS \
"Messaging: 2.0\r\n" \
"Message-Type: Text\r\n" \
@@ -81,4 +83,23 @@
"\r\n" \
"%s"
+
+#define MSN_PUT_HEADERS MSN_BASE_HEADERS \
+ "Publication: 1.0\r\n" \
+ "Uri: %s\r\n" \
+ "Content-Type: %s\r\n" \
+ "Content-Length: %zd\r\n" \
+ "\r\n" \
+ "%s"
+
+#define MSN_PUT_USER_BODY \
+ "" \
+ "%s%s" \
+ "-3%s0" \
+ "%s" \
+ "%s" \
+ "1%s%s%s" \
+ "BitlBee:" BITLBEE_VERSION "1%d:%d" \
+ "%d:%d" \
+ ""
#define MSN_TYPING_HEADERS "MIME-Version: 1.0\r\n" \
Index: protocols/msn/msn_util.c
===================================================================
--- protocols/msn/msn_util.c (revision 11e42dcf7366ee547b9651648724d35d12e36091)
+++ protocols/msn/msn_util.c (revision d80822c66f79471bc2e12167a14611dd3c49da65)
@@ -538,13 +538,6 @@
int msn_ns_set_display_name(struct im_connection *ic, const char *value)
{
- struct msn_data *md = ic->proto_data;
- char fn[strlen(value) * 3 + 1];
-
- strcpy(fn, value);
- http_encode(fn);
-
- /* Note: We don't actually know if the server accepted the new name,
- and won't give proper feedback yet if it doesn't. */
- return msn_ns_write(ic, -1, "PRP %d MFN %s\r\n", ++md->trId, fn);
+ // TODO, implement this through msn_set_away's method
+ return 1;
}