diff options
-rw-r--r-- | protocols/msn/msn.c | 12 | ||||
-rw-r--r-- | protocols/msn/soap.c | 6 |
2 files changed, 14 insertions, 4 deletions
diff --git a/protocols/msn/msn.c b/protocols/msn/msn.c index 7b881c67..99db509c 100644 --- a/protocols/msn/msn.c +++ b/protocols/msn/msn.c @@ -38,6 +38,8 @@ static void msn_init( account_t *acc ) set_add( &acc->set, "local_display_name", "false", set_eval_bool, acc ); set_add( &acc->set, "mail_notifications", "false", set_eval_bool, acc ); set_add( &acc->set, "switchboard_keepalives", "false", set_eval_bool, acc ); + + acc->flags |= ACC_FLAG_AWAY_MESSAGE | ACC_FLAG_STATUS_MESSAGE; } static void msn_login( account_t *acc ) @@ -181,6 +183,7 @@ static GList *msn_away_states( struct im_connection *ic ) static void msn_set_away( struct im_connection *ic, char *state, char *message ) { char buf[1024]; + char *uux; struct msn_data *md = ic->proto_data; if( state == NULL ) @@ -189,7 +192,14 @@ static void msn_set_away( struct im_connection *ic, char *state, char *message ) md->away_state = msn_away_state_list + 1; g_snprintf( buf, sizeof( buf ), "CHG %d %s\r\n", ++md->trId, md->away_state->code ); - msn_write( ic, buf, strlen( buf ) ); + if( !msn_write( ic, buf, strlen( buf ) ) ) + return; + + uux = g_markup_printf_escaped( "<Data><PSM>%s</PSM><CurrentMedia></CurrentMedia>" + "</Data>", message ? message : "" ); + g_snprintf( buf, sizeof( buf ), "UUX %d %zd\r\n%s", ++md->trId, strlen( uux ), uux ); + if( !msn_write( ic, buf, strlen( buf ) ) ) + return; } static void msn_set_my_name( struct im_connection *ic, char *info ) diff --git a/protocols/msn/soap.c b/protocols/msn/soap.c index c23d190a..5eae3089 100644 --- a/protocols/msn/soap.c +++ b/protocols/msn/soap.c @@ -50,6 +50,9 @@ typedef enum MSN_SOAP_ABORT, } msn_soap_result_t; +struct msn_soap_req_data; +typedef int (*msn_soap_func) ( struct msn_soap_req_data * ); + struct msn_soap_req_data { void *data; @@ -63,8 +66,6 @@ struct msn_soap_req_data msn_soap_func build_request, handle_response, free_data; }; -typedef int (*msn_soap_func) ( struct msn_soap_req_data * ); - static int msn_soap_send_request( struct msn_soap_req_data *req ); static int msn_soap_start( struct im_connection *ic, @@ -526,7 +527,6 @@ static xt_status msn_soap_addressbook_group( struct xt_node *node, gpointer data struct xt_node *p; char *id = NULL, *name = NULL; struct msn_soap_req_data *soap_req = data; - struct im_connection *ic = soap_req->ic; if( ( p = node->parent ) && ( p = xt_find_node( p->children, "groupId" ) ) ) |