aboutsummaryrefslogtreecommitdiffstats
path: root/protocols
diff options
context:
space:
mode:
Diffstat (limited to 'protocols')
-rw-r--r--protocols/msn/msn.c1
-rw-r--r--protocols/msn/soap.c25
-rw-r--r--protocols/msn/soap.h3
3 files changed, 21 insertions, 8 deletions
diff --git a/protocols/msn/msn.c b/protocols/msn/msn.c
index 65bdd9a6..1584efa4 100644
--- a/protocols/msn/msn.c
+++ b/protocols/msn/msn.c
@@ -91,6 +91,7 @@ static void msn_logout( struct im_connection *ic )
msn_sb_destroy( md->switchboards->data );
msn_msgq_purge( ic, &md->msgq );
+ msn_soapq_flush( ic, FALSE );
for( i = 0; i < sizeof( md->tokens ) / sizeof( md->tokens[0] ); i ++ )
g_free( md->tokens[i] );
diff --git a/protocols/msn/soap.c b/protocols/msn/soap.c
index 2c26271b..05d91109 100644
--- a/protocols/msn/soap.c
+++ b/protocols/msn/soap.c
@@ -68,6 +68,7 @@ struct msn_soap_req_data
};
static int msn_soap_send_request( struct msn_soap_req_data *req );
+static void msn_soap_free( struct msn_soap_req_data *soap_req );
static void msn_soap_debug_print( const char *headers, const char *payload );
static int msn_soap_start( struct im_connection *ic,
@@ -126,11 +127,7 @@ static void msn_soap_handle_response( struct http_request *http_req )
if( g_slist_find( msn_connections, soap_req->ic ) == NULL )
{
- soap_req->free_data( soap_req );
- g_free( soap_req->url );
- g_free( soap_req->action );
- g_free( soap_req->payload );
- g_free( soap_req );
+ msn_soap_free( soap_req );
return;
}
@@ -231,19 +228,31 @@ static void msn_soap_debug_print( const char *headers, const char *payload )
#endif
}
-static int msn_soapq_empty( struct im_connection *ic )
+int msn_soapq_flush( struct im_connection *ic, gboolean resend )
{
struct msn_data *md = ic->proto_data;
while( md->soapq )
{
- msn_soap_send_request( (struct msn_soap_req_data*) md->soapq->data );
+ if( resend )
+ msn_soap_send_request( (struct msn_soap_req_data*) md->soapq->data );
+ else
+ msn_soap_free( (struct msn_soap_req_data*) md->soapq->data );
md->soapq = g_slist_remove( md->soapq, md->soapq->data );
}
return MSN_SOAP_OK;
}
+static void msn_soap_free( struct msn_soap_req_data *soap_req )
+{
+ soap_req->free_data( soap_req );
+ g_free( soap_req->url );
+ g_free( soap_req->action );
+ g_free( soap_req->payload );
+ g_free( soap_req );
+}
+
/* passport_sso: Authentication MSNP15+ */
@@ -369,7 +378,7 @@ static int msn_soap_passport_sso_handle_response( struct msn_soap_req_data *soap
};
if( md->soapq )
- return msn_soapq_empty( ic );
+ return msn_soapq_flush( ic, TRUE );
if( sd->secret == NULL )
{
diff --git a/protocols/msn/soap.h b/protocols/msn/soap.h
index bd3e0245..b13238a4 100644
--- a/protocols/msn/soap.h
+++ b/protocols/msn/soap.h
@@ -44,6 +44,9 @@
#include "nogaim.h"
+int msn_soapq_flush( struct im_connection *ic, gboolean resend );
+
+
#define SOAP_HTTP_REQUEST \
"POST %s HTTP/1.0\r\n" \
"Host: %s\r\n" \