summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKa-Hing Cheung <khc@pidgin.im>2007-09-09 01:42:46 +0000
committerKa-Hing Cheung <khc@pidgin.im>2007-09-09 01:42:46 +0000
commit2fa28569887111e81e60ef5a92d46e6cd9fe6cf7 (patch)
tree95316a9fabdfca30007f6d8e4a7952e2aecf4093
parentdf233a5571210d78a4e64584e65a45f0c9f82989 (diff)
downloadpidgin-2fa28569887111e81e60ef5a92d46e6cd9fe6cf7.tar.gz
cleans up ownership of soap callback data, this soap stuff is perfect
weight-loss pill, because it makes you want to throw up
-rw-r--r--libpurple/protocols/msn/contact.c67
-rw-r--r--libpurple/protocols/msn/oim.c8
-rw-r--r--libpurple/protocols/msn/soap.c14
-rw-r--r--libpurple/protocols/msn/soap.h1
4 files changed, 71 insertions, 19 deletions
diff --git a/libpurple/protocols/msn/contact.c b/libpurple/protocols/msn/contact.c
index 07b34e94e1..b8e60bdbd5 100644
--- a/libpurple/protocols/msn/contact.c
+++ b/libpurple/protocols/msn/contact.c
@@ -77,7 +77,8 @@ msn_callback_state_new(void)
void
msn_callback_state_free(MsnCallbackState *state)
{
- g_return_if_fail(state != NULL);
+ if (state == NULL)
+ return;
if (state->who != NULL)
g_free(state->who);
@@ -248,6 +249,9 @@ msn_create_address_cb(gpointer data, gint source, PurpleInputCondition cond)
MsnSoapConn *soapconn = data;
MsnContact *contact;
+ if (soapconn->body == NULL)
+ return;
+
contact = soapconn->parent;
g_return_if_fail(contact != NULL);
@@ -533,6 +537,9 @@ msn_get_contact_list_cb(gpointer data, gint source, PurpleInputCondition cond)
const char *dynamicItemLastChange;
gchar *partner_scenario;
+ if (soapconn->body == NULL)
+ return;
+
purple_debug_misc("MSNCL","Got the contact list!\n");
contact = soapconn->parent;
@@ -902,6 +909,9 @@ msn_get_address_cb(gpointer data, gint source, PurpleInputCondition cond)
MsnContact *contact;
MsnSession *session;
+ if (soapconn->body == NULL)
+ return;
+
contact = soapconn->parent;
g_return_if_fail(contact != NULL);
session = soapconn->session;
@@ -990,11 +1000,16 @@ msn_add_contact_read_cb(gpointer data, gint source, PurpleInputCondition cond)
g_return_if_fail(soapconn->data_cb != NULL);
g_return_if_fail(soapconn->session != NULL);
g_return_if_fail(soapconn->session->userlist != NULL);
+
+ state = (MsnCallbackState *) soapconn->data_cb;
+
+ if (soapconn->body == NULL) {
+ msn_callback_state_free(state);
+ return;
+ }
userlist = soapconn->session->userlist;
- state = (MsnCallbackState *) soapconn->data_cb;
-
purple_debug_info("MSNCL","Contact added successfully\n");
// the code this block is replacing didn't send ADL for yahoo contacts,
@@ -1078,14 +1093,19 @@ msn_add_contact_to_group_read_cb(gpointer data, gint source, PurpleInputConditio
MsnCallbackState *state;
MsnUserList *userlist;
- g_return_if_fail(soapconn->data_cb != NULL);
- g_return_if_fail(soapconn->session != NULL);
- g_return_if_fail(soapconn->session->userlist != NULL);
+ g_return_if_fail(soapconn->data_cb != NULL);
+ g_return_if_fail(soapconn->session != NULL);
+ g_return_if_fail(soapconn->session->userlist != NULL);
- userlist = soapconn->session->userlist;
+ userlist = soapconn->session->userlist;
state = (MsnCallbackState *) soapconn->data_cb;
+ if (soapconn->body == NULL) {
+ msn_callback_state_free(state);
+ return;
+ }
+
if (msn_userlist_add_buddy_to_group(userlist, state->who, state->new_group_name) == TRUE) {
purple_debug_info("MSNCL", "Contact %s added to group %s successfully!\n", state->who, state->new_group_name);
} else {
@@ -1204,6 +1224,9 @@ msn_delete_contact_read_cb(gpointer data, gint source, PurpleInputCondition cond
{
MsnSoapConn * soapconn = data;
+ if (soapconn->body == NULL)
+ return;
+
// we should probably delete it from the userlist aswell
purple_debug_info("MSNCL","Delete contact successful\n");
msn_soap_free_read_buf(soapconn);
@@ -1253,6 +1276,11 @@ msn_del_contact_from_group_read_cb(gpointer data, gint source, PurpleInputCondit
{
MsnSoapConn * soapconn = data;
MsnCallbackState *state = (MsnCallbackState *) soapconn->data_cb;
+
+ if (soapconn->body == NULL) {
+ msn_callback_state_free(state);
+ return;
+ }
if (msn_userlist_rem_buddy_from_group(soapconn->session->userlist, state->who, state->old_group_name)) {
purple_debug_info("MSN CL", "Contact %s deleted successfully from group %s\n", state->who, state->old_group_name);
@@ -1341,6 +1369,11 @@ msn_del_contact_from_group(MsnContact *contact, const char *passport, const char
static void
msn_update_contact_read_cb(gpointer data, gint source, PurpleInputCondition cond)
{
+ MsnSoapConn *soapconn = data;
+
+ if (soapconn->body == NULL)
+ return;
+
purple_debug_info("MSN CL","Contact updated successfully\n");
}
@@ -1394,6 +1427,11 @@ msn_del_contact_from_list_read_cb(gpointer data, gint source, PurpleInputConditi
state = (MsnCallbackState *) soapconn->data_cb;
+ if (soapconn->body == NULL) {
+ msn_callback_state_free(state);
+ return;
+ }
+
purple_debug_info("MSN CL", "Contact %s deleted successfully from %s list on server!\n", state->who, MsnMemberRole[state->list_id]);
if (state->list_id == MSN_LIST_PL) {
@@ -1493,6 +1531,11 @@ msn_add_contact_to_list_read_cb(gpointer data, gint source, PurpleInputCondition
state = (MsnCallbackState *) soapconn->data_cb;
+ if (soapconn->body == NULL) {
+ msn_callback_state_free(state);
+ return;
+ }
+
purple_debug_info("MSN CL", "Contact %s added successfully to %s list on server!\n", state->who, MsnMemberRole[state->list_id]);
if (state->list_id == MSN_LIST_RL && (state->action & MSN_DENIED_BUDDY) ) {
@@ -1621,9 +1664,15 @@ msn_group_read_cb(gpointer data, gint source, PurpleInputCondition cond)
g_return_if_fail(soapconn->session != NULL);
g_return_if_fail(soapconn->session->userlist != NULL);
g_return_if_fail(soapconn->session->contact != NULL);
+
+ state = (MsnCallbackState *) soapconn->data_cb;
+
+ if (soapconn->body == NULL) {
+ msn_callback_state_free(state);
+ return;
+ }
- if (soapconn->data_cb != NULL) {
- state = (MsnCallbackState *) soapconn->data_cb;
+ if (state) {
userlist = soapconn->session->userlist;
if (state->action & MSN_RENAME_GROUP) {
diff --git a/libpurple/protocols/msn/oim.c b/libpurple/protocols/msn/oim.c
index bd181c4afc..e0a253fa82 100644
--- a/libpurple/protocols/msn/oim.c
+++ b/libpurple/protocols/msn/oim.c
@@ -239,6 +239,9 @@ msn_oim_send_read_cb(gpointer data, gint source, PurpleInputCondition cond)
MsnSession *session = soapconn->session;
MsnOim * oim;
+ if (soapconn->body == NULL)
+ return;
+
g_return_if_fail(session != NULL);
oim = soapconn->session->oim;
g_return_if_fail(oim != NULL);
@@ -338,6 +341,8 @@ msn_oim_delete_read_cb(gpointer data, gint source, PurpleInputCondition cond)
{
MsnSoapConn * soapconn = data;
+ if (soapconn->body == NULL)
+ return;
purple_debug_info("MSNP14","OIM delete read buffer:{%s}\n",soapconn->body);
msn_soap_free_read_buf(soapconn);
@@ -571,6 +576,9 @@ msn_oim_get_read_cb(gpointer data, gint source, PurpleInputCondition cond)
MsnSoapConn * soapconn = data;
MsnOim * oim = soapconn->session->oim;
+ if (soapconn->body == NULL)
+ return;
+
purple_debug_info("MSNP14","OIM get read buffer:{%s}\n",soapconn->body);
/*we need to process the read message!*/
diff --git a/libpurple/protocols/msn/soap.c b/libpurple/protocols/msn/soap.c
index 77d1da575b..d013462db7 100644
--- a/libpurple/protocols/msn/soap.c
+++ b/libpurple/protocols/msn/soap.c
@@ -150,7 +150,12 @@ msn_soap_clean_unhandled_request(MsnSoapConn *soapconn)
g_return_if_fail(soapconn != NULL);
+ soapconn->body = NULL;
+
while ((request = g_queue_pop_head(soapconn->soap_queue)) != NULL){
+ if (soapconn->read_cb) {
+ soapconn->read_cb(soapconn, -1, 0);
+ }
msn_soap_request_free(request);
}
}
@@ -510,14 +515,6 @@ msn_soap_free_write_buf(MsnSoapConn *soapconn)
soapconn->written_len = 0;
}
-void
-msn_soap_free_data_cb(MsnSoapConn *soapconn)
-{
- if (soapconn->data_cb) {
- g_free(soapconn->data_cb);
- }
-}
-
/*Soap write process func*/
static void
msn_soap_write_cb(gpointer data, gint source, PurpleInputCondition cond)
@@ -625,7 +622,6 @@ msn_soap_request_free(MsnSoapReq *request)
g_free(request->login_path);
g_free(request->soap_action);
g_free(request->body);
- g_free(request->data_cb);
request->read_cb = NULL;
request->written_cb = NULL;
diff --git a/libpurple/protocols/msn/soap.h b/libpurple/protocols/msn/soap.h
index d4ac39b96e..373a12809e 100644
--- a/libpurple/protocols/msn/soap.h
+++ b/libpurple/protocols/msn/soap.h
@@ -140,7 +140,6 @@ void msn_soap_close(MsnSoapConn *soapconn);
void msn_soap_write(MsnSoapConn * soapconn, char *write_buf, PurpleInputFunction written_cb);
void msn_soap_post(MsnSoapConn *soapconn,MsnSoapReq *request,MsnSoapConnectInitFunction msn_soap_init_func);
-void msn_soap_free_data_cb(MsnSoapConn *soapconn);
void msn_soap_free_read_buf(MsnSoapConn *soapconn);
void msn_soap_free_write_buf(MsnSoapConn *soapconn);
void msn_soap_connect_cb(gpointer data, PurpleSslConnection *gsc, PurpleInputCondition cond);