diff options
author | Ka-Hing Cheung <khc@pidgin.im> | 2007-09-09 01:42:46 +0000 |
---|---|---|
committer | Ka-Hing Cheung <khc@pidgin.im> | 2007-09-09 01:42:46 +0000 |
commit | 2fa28569887111e81e60ef5a92d46e6cd9fe6cf7 (patch) | |
tree | 95316a9fabdfca30007f6d8e4a7952e2aecf4093 | |
parent | df233a5571210d78a4e64584e65a45f0c9f82989 (diff) | |
download | pidgin-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.c | 67 | ||||
-rw-r--r-- | libpurple/protocols/msn/oim.c | 8 | ||||
-rw-r--r-- | libpurple/protocols/msn/soap.c | 14 | ||||
-rw-r--r-- | libpurple/protocols/msn/soap.h | 1 |
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); |