diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-03-20 22:42:59 +0000 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-03-20 22:42:59 +0000 | 
| commit | bc090f0c3bc243de277a8e04f906384838d95e35 (patch) | |
| tree | ba4621062f0dc2ca0f1a08de7085e8ec9c4cabc7 /protocols | |
| parent | ffb6dea650db7671d2414b1a9541cf0baba8ff11 (diff) | |
Error reporting and added a msgq_send function. Need to put some more
intelligence into it later.
Diffstat (limited to 'protocols')
| -rw-r--r-- | protocols/msn/sb.c | 16 | ||||
| -rw-r--r-- | protocols/msn/soap.c | 54 | ||||
| -rw-r--r-- | protocols/msn/soap.h | 1 | 
3 files changed, 51 insertions, 20 deletions
| diff --git a/protocols/msn/sb.c b/protocols/msn/sb.c index 920e7f61..461bd483 100644 --- a/protocols/msn/sb.c +++ b/protocols/msn/sb.c @@ -606,18 +606,12 @@ static int msn_sb_command( gpointer data, char **cmd, int num_parts )  		int num = atoi( cmd[0] );  		const struct msn_status_code *err = msn_status_by_number( num ); +		/* If the person is offline, send an offline message instead, +		   and don't report an error. */  		if( num == 217 ) -		{ -			GSList *l; -			 -			for( l = sb->msgq; l; l = l->next ) -			{ -				struct msn_message *m = l->data; -				msn_soap_oim_send( ic, m->who, m->text ); -			} -		} -		 -		imcb_error( ic, "Error reported by switchboard server: %s", err->text ); +			msn_soap_oim_send_queue( ic, &sb->msgq ); +		else +			imcb_error( ic, "Error reported by switchboard server: %s", err->text );  		if( err->flags & STATUS_SB_FATAL )  		{ diff --git a/protocols/msn/soap.c b/protocols/msn/soap.c index f329cea9..82ecfea2 100644 --- a/protocols/msn/soap.c +++ b/protocols/msn/soap.c @@ -56,14 +56,6 @@ struct msn_soap_req_data  	msn_soap_func build_request, handle_response, free_data;  }; -struct msn_soap_oim_send_data -{ -	char *to; -	char *msg; -	int number; -	int need_retry; -}; -  static int msn_soap_send_request( struct msn_soap_req_data *req );  static int msn_soap_start( struct im_connection *ic, @@ -138,6 +130,17 @@ static void msn_soap_handle_response( struct http_request *http_req )  	}  } + +/* oim_send: Sending offline messages */ + +struct msn_soap_oim_send_data +{ +	char *to; +	char *msg; +	int number; +	int need_retry; +}; +  static int msn_soap_oim_build_request( struct msn_soap_req_data *soap_req )  {  	struct msn_soap_oim_send_data *oim = soap_req->data; @@ -182,15 +185,21 @@ static int msn_soap_oim_handle_response( struct msn_soap_req_data *soap_req )  {  	struct msn_soap_oim_send_data *oim = soap_req->data; -	if( soap_req->http_req->status_code == 500 && oim->need_retry ) +	if( soap_req->http_req->status_code == 500 && oim->need_retry && soap_req->ttl > 0 )  	{  		oim->need_retry = 0;  		return MSN_SOAP_RETRY;  	}  	else if( soap_req->http_req->status_code == 200 ) +	{ +		imcb_log( soap_req->ic, "Offline message successfully delivered to %s", oim->to );  		return MSN_SOAP_OK; +	}  	else +	{ +		imcb_log( soap_req->ic, "Failed to deliver offline message to %s:\n%s", oim->to, oim->msg );  		return MSN_SOAP_ABORT; +	}  }  static int msn_soap_oim_free_data( struct msn_soap_req_data *soap_req ) @@ -218,3 +227,30 @@ int msn_soap_oim_send( struct im_connection *ic, const char *to, const char *msg  	                                 msn_soap_oim_handle_response,  	                                 msn_soap_oim_free_data );  } + +int msn_soap_oim_send_queue( struct im_connection *ic, GSList **msgq ) +{ +	GSList *l; +	char *n = NULL; +	 +	for( l = *msgq; l; l = l->next ) +	{ +		struct msn_message *m = l->data; +		 +		if( n == NULL ) +			n = m->who; +		if( strcmp( n, m->who ) == 0 ) +			msn_soap_oim_send( ic, m->who, m->text ); +	} +	 +	while( *msgq != NULL ) +	{ +		struct msn_message *m = (*msgq)->data; +		 +		g_free( m->who ); +		g_free( m->text ); +		g_free( m ); +		 +		*msgq = g_slist_remove( *msgq, m ); +	} +} diff --git a/protocols/msn/soap.h b/protocols/msn/soap.h index 687cc282..3db2d59d 100644 --- a/protocols/msn/soap.h +++ b/protocols/msn/soap.h @@ -82,5 +82,6 @@  "</soap:Envelope>"  int msn_soap_oim_send( struct im_connection *ic, const char *to, const char *msg ); +int msn_soap_oim_send_queue( struct im_connection *ic, GSList **msgq );  #endif /* __SOAP_H__ */ | 
