summaryrefslogtreecommitdiff
path: root/libpurple/protocols/msn
diff options
context:
space:
mode:
Diffstat (limited to 'libpurple/protocols/msn')
-rw-r--r--libpurple/protocols/msn/cmdproc.c4
-rw-r--r--libpurple/protocols/msn/contact.c77
-rw-r--r--libpurple/protocols/msn/contact.h16
-rw-r--r--libpurple/protocols/msn/notification.c18
-rw-r--r--libpurple/protocols/msn/oim.c4
-rw-r--r--libpurple/protocols/msn/session.h1
-rw-r--r--libpurple/protocols/msn/soap.c1
-rw-r--r--libpurple/protocols/msn/state.c4
-rw-r--r--libpurple/protocols/msn/switchboard.c2
-rw-r--r--libpurple/protocols/msn/userlist.c4
10 files changed, 69 insertions, 62 deletions
diff --git a/libpurple/protocols/msn/cmdproc.c b/libpurple/protocols/msn/cmdproc.c
index e487c77a66..49db28a3b3 100644
--- a/libpurple/protocols/msn/cmdproc.c
+++ b/libpurple/protocols/msn/cmdproc.c
@@ -117,8 +117,10 @@ msn_cmdproc_send_trans(MsnCmdProc *cmdproc, MsnTransaction *trans)
servconn = cmdproc->servconn;
- if (!servconn->connected)
+ if (!servconn->connected) {
+ /* TODO: Need to free trans */
return;
+ }
msn_history_add(cmdproc->history, trans);
diff --git a/libpurple/protocols/msn/contact.c b/libpurple/protocols/msn/contact.c
index 1310ce1b74..0e83a10242 100644
--- a/libpurple/protocols/msn/contact.c
+++ b/libpurple/protocols/msn/contact.c
@@ -697,25 +697,28 @@ msn_parse_addressbook_contacts(MsnSession *session, xmlnode *node)
/*TODO: need to support the Mobile type*/
continue;
}
- for (contactEmailNode = xmlnode_get_child(emailsNode, "ContactEmail"); contactEmailNode;
- contactEmailNode = xmlnode_get_next_twin(contactEmailNode)) {
- if (!(messengerEnabledNode = xmlnode_get_child(contactEmailNode, "isMessengerEnabled")))
- continue;
+ for (contactEmailNode = xmlnode_get_child(emailsNode, "ContactEmail");
+ contactEmailNode;
+ contactEmailNode = xmlnode_get_next_twin(contactEmailNode)) {
+ if ((messengerEnabledNode = xmlnode_get_child(contactEmailNode, "isMessengerEnabled"))) {
+
+ msnEnabled = xmlnode_get_data(messengerEnabledNode);
- msnEnabled = xmlnode_get_data(messengerEnabledNode);
+ if (msnEnabled && !strcmp(msnEnabled, "true")) {
+ if ((emailNode = xmlnode_get_child(contactEmailNode, "email")))
+ passport = xmlnode_get_data(emailNode);
- if (msnEnabled && !strcmp(msnEnabled, "true")) {
- if ((emailNode = xmlnode_get_child(contactEmailNode, "email")))
- passport = xmlnode_get_data(emailNode);
+ /* Messenger enabled, Get the Passport*/
+ purple_debug_info("msn", "AB Yahoo/Federated User %s\n", passport ? passport : "(null)");
+ g_free(msnEnabled);
+ break;
+ }
- /*Messenger enabled, Get the Passport*/
- purple_debug_info("msn", "AB Yahoo/Federated User %s\n", passport ? passport : "(null)");
g_free(msnEnabled);
- break;
}
-
- g_free(msnEnabled);
}
+ if (passport == NULL) /* Couldn't find anything */
+ continue;
} else {
xmlnode *messenger_user;
/* ignore non-messenger contacts */
@@ -1482,8 +1485,6 @@ msn_del_contact_from_list(MsnSession *session, MsnCallbackState *state,
const gchar *passport, const MsnListId list)
{
gchar *body = NULL, *member = NULL;
- const char *type = "PassportMember";
- gchar *federate = NULL;
MsnSoapPartnerScenario partner_scenario;
MsnUser *user;
@@ -1501,23 +1502,28 @@ msn_del_contact_from_list(MsnSession *session, MsnCallbackState *state,
msn_callback_state_set_who(state, passport);
user = msn_userlist_find_user(session->userlist, passport);
- if (user && user->networkid != MSN_NETWORK_PASSPORT) {
- type = "EmailMember";
- federate = g_strdup_printf(MSN_MEMBER_FEDERATED_ANNOTATION_XML,
- user->networkid);
- }
if (list == MSN_LIST_PL) {
partner_scenario = MSN_PS_CONTACT_API;
- member = g_strdup_printf(MSN_MEMBER_MEMBERSHIPID_XML,
- type, user->membership_id[MSN_LIST_PL],
- federate ? federate : "");
+ if (user && user->networkid != MSN_NETWORK_PASSPORT)
+ member = g_strdup_printf(MSN_MEMBER_MEMBERSHIPID_XML,
+ "EmailMember", "Email",
+ user->membership_id[MSN_LIST_PL]);
+ else
+ member = g_strdup_printf(MSN_MEMBER_MEMBERSHIPID_XML,
+ "PassportMember", "Passport",
+ user->membership_id[MSN_LIST_PL]);
} else {
/* list == MSN_LIST_AL || list == MSN_LIST_BL */
partner_scenario = MSN_PS_BLOCK_UNBLOCK;
- member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML,
- type, passport,
- federate ? federate : "");
+ if (user && user->networkid != MSN_NETWORK_PASSPORT)
+ member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML,
+ "EmailMember", "Email",
+ "Email", passport, "Email");
+ else
+ member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML,
+ "PassportMember", "Passport",
+ "PassportName", passport, "PassportName");
}
body = g_strdup_printf(MSN_CONTACT_DELETE_FROM_LIST_TEMPLATE,
@@ -1530,7 +1536,6 @@ msn_del_contact_from_list(MsnSession *session, MsnCallbackState *state,
state->cb = msn_del_contact_from_list_read_cb;
msn_contact_request(state);
- g_free(federate);
g_free(member);
g_free(body);
}
@@ -1578,8 +1583,6 @@ msn_add_contact_to_list(MsnSession *session, MsnCallbackState *state,
const gchar *passport, const MsnListId list)
{
gchar *body = NULL, *member = NULL;
- const char *type = "PassportMember";
- gchar *federate = NULL;
MsnSoapPartnerScenario partner_scenario;
MsnUser *user;
@@ -1596,15 +1599,16 @@ msn_add_contact_to_list(MsnSession *session, MsnCallbackState *state,
msn_callback_state_set_who(state, passport);
user = msn_userlist_find_user(session->userlist, passport);
- if (user && user->networkid != MSN_NETWORK_PASSPORT) {
- type = "EmailMember";
- federate = g_strdup_printf(MSN_MEMBER_FEDERATED_ANNOTATION_XML,
- user->networkid);
- }
partner_scenario = (list == MSN_LIST_RL) ? MSN_PS_CONTACT_API : MSN_PS_BLOCK_UNBLOCK;
- member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML,
- type, state->who, federate ? federate : "");
+ if (user && user->networkid != MSN_NETWORK_PASSPORT)
+ member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML,
+ "EmailMember", "Email",
+ "Email", state->who, "Email");
+ else
+ member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML,
+ "PassportMember", "Passport",
+ "PassportName", state->who, "PassportName");
body = g_strdup_printf(MSN_CONTACT_ADD_TO_LIST_TEMPLATE,
MsnSoapPartnerScenarioText[partner_scenario],
@@ -1616,7 +1620,6 @@ msn_add_contact_to_list(MsnSession *session, MsnCallbackState *state,
state->cb = msn_add_contact_to_list_read_cb;
msn_contact_request(state);
- g_free(federate);
g_free(member);
g_free(body);
}
diff --git a/libpurple/protocols/msn/contact.h b/libpurple/protocols/msn/contact.h
index 8c0f612f95..4a05ea555a 100644
--- a/libpurple/protocols/msn/contact.h
+++ b/libpurple/protocols/msn/contact.h
@@ -397,28 +397,18 @@
#define MSN_MEMBER_PASSPORT_XML \
"<Member xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"%s\">"\
- "<Type>Passport</Type>"\
+ "<Type>%s</Type>"\
"<State>Accepted</State>"\
- "<PassportName>%s</PassportName>"\
- "%s"\
+ "<%s>%s</%s>"\
"</Member>"
#define MSN_MEMBER_MEMBERSHIPID_XML \
"<Member xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"%s\">"\
- "<Type>Passport</Type>"\
+ "<Type>%s</Type>"\
"<MembershipId>%u</MembershipId>"\
"<State>Accepted</State>"\
- "%s"\
"</Member>"
-#define MSN_MEMBER_FEDERATED_ANNOTATION_XML \
- "<Annotations>"\
- "<Annotation>"\
- "<Name>MSN.IM.BuddyType</Name>"\
- "<Value>%02d:</Value>"\
- "</Annotation>"\
- "</Annotations>"
-
/* first delete contact from allow list */
#define MSN_CONTACT_DELETE_FROM_LIST_TEMPLATE "<?xml version=\"1.0\" encoding=\"utf-8\"?>"\
diff --git a/libpurple/protocols/msn/notification.c b/libpurple/protocols/msn/notification.c
index d941e5f948..dfdceacd30 100644
--- a/libpurple/protocols/msn/notification.c
+++ b/libpurple/protocols/msn/notification.c
@@ -630,7 +630,7 @@ update_contact_network(MsnSession *session, const char *passport, MsnNetwork net
} else {
purple_debug_error("msn",
- "Got FQY update for unkwown user %s on network %d.\n",
+ "Got FQY update for unknown user %s on network %d.\n",
passport, network);
}
}
@@ -686,6 +686,9 @@ msn_notification_dump_contact(MsnSession *session)
if (++adl_count % 150 == 0) {
payload = xmlnode_to_str(adl_node, &payload_len);
+ /* ADL's are returned all-together */
+ session->adl_fqy++;
+
msn_notification_post_adl(session->notification->cmdproc,
payload, payload_len);
@@ -697,6 +700,9 @@ msn_notification_dump_contact(MsnSession *session)
xmlnode_set_attrib(adl_node, "l", "1");
}
} else {
+ /* FQY's are returned one-at-a-time */
+ session->adl_fqy++;
+
msn_add_contact_xml(session, fqy_node, user->passport,
0, user->networkid);
@@ -718,6 +724,9 @@ msn_notification_dump_contact(MsnSession *session)
if (adl_count == 0 || adl_count % 150 != 0) {
payload = xmlnode_to_str(adl_node, &payload_len);
+ /* ADL's are returned all-together */
+ session->adl_fqy++;
+
msn_notification_post_adl(session->notification->cmdproc, payload, payload_len);
g_free(payload);
@@ -804,7 +813,8 @@ adl_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
if (!strcmp(cmd->params[1], "OK")) {
/* ADL ack */
- msn_session_finish_login(session);
+ if (--session->adl_fqy == 0)
+ msn_session_finish_login(session);
} else {
cmdproc->last_cmd->payload_cb = adl_cmd_parse;
cmd->payload_len = atoi(cmd->params[1]);
@@ -1609,7 +1619,7 @@ gcf_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload,
if ( (root = xmlnode_from_str(cmd->payload, cmd->payload_len)) == NULL)
{
- purple_debug_error("msn", "Unable to parse GCF payload into a XML tree");
+ purple_debug_error("msn", "Unable to parse GCF payload into a XML tree\n");
return;
}
@@ -1682,7 +1692,7 @@ ubx_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload,
user = msn_userlist_find_user(session->userlist, passport);
if (user == NULL) {
char *str = g_strndup(payload, len);
- purple_debug_info("msn", "unknown user %s, payload is %s",
+ purple_debug_info("msn", "unknown user %s, payload is %s\n",
passport, str);
g_free(str);
return;
diff --git a/libpurple/protocols/msn/oim.c b/libpurple/protocols/msn/oim.c
index 927c9376aa..9caaef8262 100644
--- a/libpurple/protocols/msn/oim.c
+++ b/libpurple/protocols/msn/oim.c
@@ -174,7 +174,7 @@ msn_oim_request_cb(MsnSoapMessage *request, MsnSoapMessage *response,
gchar *faultcode_str = xmlnode_get_data(faultcode);
if (faultcode_str && g_str_equal(faultcode_str, "q0:BadContextToken")) {
- purple_debug_warning("msn", "OIM Request Error, Updating token now.");
+ purple_debug_warning("msn", "OIM Request Error, Updating token now.\n");
msn_nexus_update_token(data->oim->session->nexus,
data->send ? MSN_AUTH_LIVE_SECURE : MSN_AUTH_MESSENGER_WEB,
(GSourceFunc)msn_oim_request_helper, data);
@@ -183,7 +183,7 @@ msn_oim_request_cb(MsnSoapMessage *request, MsnSoapMessage *response,
} else if (faultcode_str && g_str_equal(faultcode_str, "q0:AuthenticationFailed")) {
if (xmlnode_get_child(fault, "detail/RequiredAuthPolicy") != NULL) {
- purple_debug_warning("msn", "OIM Request Error, Updating token now.");
+ purple_debug_warning("msn", "OIM Request Error, Updating token now.\n");
msn_nexus_update_token(data->oim->session->nexus,
data->send ? MSN_AUTH_LIVE_SECURE : MSN_AUTH_MESSENGER_WEB,
(GSourceFunc)msn_oim_request_helper, data);
diff --git a/libpurple/protocols/msn/session.h b/libpurple/protocols/msn/session.h
index 82c5a508e9..3fb42f1274 100644
--- a/libpurple/protocols/msn/session.h
+++ b/libpurple/protocols/msn/session.h
@@ -90,6 +90,7 @@ struct _MsnSession
gboolean connected;
gboolean logged_in; /**< A temporal flag to ignore local buddy list adds. */
+ int adl_fqy; /**< A count of ADL/FQY so status is only changed once. */
gboolean destroying; /**< A flag that states if the session is being destroyed. */
gboolean http_method;
diff --git a/libpurple/protocols/msn/soap.c b/libpurple/protocols/msn/soap.c
index b986562272..786e2f3a8e 100644
--- a/libpurple/protocols/msn/soap.c
+++ b/libpurple/protocols/msn/soap.c
@@ -667,6 +667,7 @@ msn_soap_connection_run(gpointer data)
conn->handled_len = 0;
conn->current_request = req;
+ purple_input_remove(conn->event_handle);
conn->event_handle = purple_input_add(conn->ssl->fd,
PURPLE_INPUT_WRITE, msn_soap_write_cb, conn);
if (!msn_soap_write_cb_internal(conn, conn->ssl->fd, PURPLE_INPUT_WRITE, TRUE)) {
diff --git a/libpurple/protocols/msn/state.c b/libpurple/protocols/msn/state.c
index e172d880bb..5a77a39999 100644
--- a/libpurple/protocols/msn/state.c
+++ b/libpurple/protocols/msn/state.c
@@ -169,7 +169,7 @@ msn_get_currentmedia(char *xml_str, gsize len)
}
currentmediaNode = xmlnode_get_child(payloadNode, "CurrentMedia");
if (currentmediaNode == NULL) {
- purple_debug_info("msn", "No CurrentMedia Node");
+ purple_debug_info("msn", "No CurrentMedia Node\n");
xmlnode_free(payloadNode);
return NULL;
}
@@ -195,7 +195,7 @@ msn_get_psm(char *xml_str, gsize len)
}
psmNode = xmlnode_get_child(payloadNode, "PSM");
if (psmNode == NULL) {
- purple_debug_info("msn", "No PSM status Node");
+ purple_debug_info("msn", "No PSM status Node\n");
xmlnode_free(payloadNode);
return NULL;
}
diff --git a/libpurple/protocols/msn/switchboard.c b/libpurple/protocols/msn/switchboard.c
index 0ada2639d1..74fe0a43f3 100644
--- a/libpurple/protocols/msn/switchboard.c
+++ b/libpurple/protocols/msn/switchboard.c
@@ -590,7 +590,7 @@ release_msg(MsnSwitchBoard *swboard, MsnMessage *msg)
payload = msn_message_gen_payload(msg, &payload_len);
#ifdef MSN_DEBUG_SB
- purple_debug_info("msn", "SB length:{%" G_GSIZE_FORMAT "}", payload_len);
+ purple_debug_info("msn", "SB length:{%" G_GSIZE_FORMAT "}\n", payload_len);
msn_message_show_readable(msg, "SB SEND", FALSE);
#endif
diff --git a/libpurple/protocols/msn/userlist.c b/libpurple/protocols/msn/userlist.c
index a98919d537..ba5cc831c2 100644
--- a/libpurple/protocols/msn/userlist.c
+++ b/libpurple/protocols/msn/userlist.c
@@ -858,7 +858,7 @@ msn_userlist_add_buddy_to_group(MsnUserList *userlist, const char *who,
}
if ( (user = msn_userlist_find_user(userlist, who)) == NULL) {
- purple_debug_error("msn", "User %s not found!", who);
+ purple_debug_error("msn", "User %s not found!\n", who);
return FALSE;
}
@@ -887,7 +887,7 @@ msn_userlist_rem_buddy_from_group(MsnUserList *userlist, const char *who,
}
if ( (user = msn_userlist_find_user(userlist, who)) == NULL) {
- purple_debug_error("msn", "User %s not found!", who);
+ purple_debug_error("msn", "User %s not found!\n", who);
return FALSE;
}