annotate libpurple/protocols/msn/soap.c @ 25542:fd5eedf131b4

Generalize the FQY command so it can be used by different callbacks based on the place that called it. Then automatically call an FQY when sending the buddy list ADL's for a buddy with an unknown network. Then we can send a corrected ADL later with the network from the FQY. This should make it easier for people with OCS/Yahoo contacts that were added incorrectly by previous versions, as they shouldn't need to mess with their address book outside of Pidgin (but if there are multiple buddy copies, that may need fixing externally). I should probably figure out how to permanently fix the Membership lists, eventually. References #6755. References #3322
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Fri, 27 Feb 2009 07:13:20 +0000
parents 651cdeab9b99
children 62e619e4957e 96e54eb6100a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
1 /**
23298
5cdd93dac7a2 Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents: 22822
diff changeset
2 * @file soap.c
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
3 * Functions relating to SOAP connections.
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
4 *
20401
4ddc27c18781 Fix up some gaim -> purple issues.
Richard Laager <rlaager@wiktel.com>
parents: 20394
diff changeset
5 * purple
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
6 *
20401
4ddc27c18781 Fix up some gaim -> purple issues.
Richard Laager <rlaager@wiktel.com>
parents: 20394
diff changeset
7 * Purple is the legal property of its developers, whose names are too numerous
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
9 * source distribution.
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
10 *
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
14 * (at your option) any later version.
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
15 *
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
19 * GNU General Public License for more details.
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
20 *
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
24 */
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
25
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
26 #include "internal.h"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
27
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
28 #include "soap.h"
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
29
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
30 #include "session.h"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
31
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
32 #include "debug.h"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
33 #include "xmlnode.h"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
34
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
35 #include <glib.h>
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
36 #if !defined(_WIN32) || !defined(_WINERROR_)
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
37 #include <error.h>
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
38 #endif
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
39
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
40 #define SOAP_TIMEOUT (5 * 60)
23743
29180633f672 I seem to have accidentally turned on those "unsafe" SOAP debug messages.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23713
diff changeset
41
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
42 typedef struct _MsnSoapRequest {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
43 char *path;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
44 MsnSoapMessage *message;
23613
860e5e210fc9 Don't print SOAP messages to debug log for "secure" requests. This is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
45 gboolean secure;
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
46 MsnSoapCallback cb;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
47 gpointer cb_data;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
48 } MsnSoapRequest;
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
49
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
50 typedef struct _MsnSoapConnection {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
51 MsnSession *session;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
52 char *host;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
53
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
54 time_t last_used;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
55 PurpleSslConnection *ssl;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
56 gboolean connected;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
57
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
58 guint event_handle;
24532
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
59 guint run_timer;
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
60 GString *buf;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
61 gsize handled_len;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
62 gsize body_len;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
63 int response_code;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
64 gboolean headers_done;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
65 gboolean close_when_done;
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
66
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
67 MsnSoapMessage *message;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
68
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
69 GQueue *queue;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
70 MsnSoapRequest *current_request;
25308
b474cd321e88 make this toggleable via env instead of #define
Ka-Hing Cheung <khc@hxbc.us>
parents: 25307
diff changeset
71 gboolean unsafe_debug;
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
72 } MsnSoapConnection;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
73
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
74 static gboolean msn_soap_connection_run(gpointer data);
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
75
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
76 static MsnSoapConnection *
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
77 msn_soap_connection_new(MsnSession *session, const char *host)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
78 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
79 MsnSoapConnection *conn = g_new0(MsnSoapConnection, 1);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
80 conn->session = session;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
81 conn->host = g_strdup(host);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
82 conn->queue = g_queue_new();
25308
b474cd321e88 make this toggleable via env instead of #define
Ka-Hing Cheung <khc@hxbc.us>
parents: 25307
diff changeset
83 conn->unsafe_debug = g_getenv("PURPLE_MSN_UNSAFE_DEBUG") != NULL;
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
84 return conn;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
85 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
86
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
87 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
88 msn_soap_message_destroy(MsnSoapMessage *message)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
89 {
24530
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
90 g_slist_foreach(message->headers, (GFunc)g_free, NULL);
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
91 g_slist_free(message->headers);
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
92 g_free(message->action);
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
93 if (message->xml)
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
94 xmlnode_free(message->xml);
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
95 g_free(message);
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
96 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
97
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
98 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
99 msn_soap_request_destroy(MsnSoapRequest *req, gboolean keep_message)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
100 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
101 g_free(req->path);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
102 if (!keep_message)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
103 msn_soap_message_destroy(req->message);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
104 g_free(req);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
105 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
106
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
107 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
108 msn_soap_connection_sanitize(MsnSoapConnection *conn, gboolean disconnect)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
109 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
110 if (conn->event_handle) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
111 purple_input_remove(conn->event_handle);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
112 conn->event_handle = 0;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
113 }
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
114
24532
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
115 if (conn->run_timer) {
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
116 purple_timeout_remove(conn->run_timer);
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
117 conn->run_timer = 0;
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
118 }
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
119
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
120 if (conn->message) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
121 msn_soap_message_destroy(conn->message);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
122 conn->message = NULL;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
123 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
124
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
125 if (conn->buf) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
126 g_string_free(conn->buf, TRUE);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
127 conn->buf = NULL;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
128 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
129
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
130 if (conn->ssl && (disconnect || conn->close_when_done)) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
131 purple_ssl_close(conn->ssl);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
132 conn->ssl = NULL;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
133 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
134
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
135 if (conn->current_request) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
136 msn_soap_request_destroy(conn->current_request, FALSE);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
137 conn->current_request = NULL;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
138 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
139 }
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
140
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
141 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
142 msn_soap_connection_destroy_foreach_cb(gpointer item, gpointer data)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
143 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
144 MsnSoapRequest *req = item;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
145
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
146 if (req->cb)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
147 req->cb(req->message, NULL, req->cb_data);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
148
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
149 msn_soap_request_destroy(req, FALSE);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
150 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
151
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
152 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
153 msn_soap_connection_destroy(MsnSoapConnection *conn)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
154 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
155 if (conn->current_request) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
156 MsnSoapRequest *req = conn->current_request;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
157 conn->current_request = NULL;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
158 msn_soap_connection_destroy_foreach_cb(req, conn);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
159 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
160
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
161 msn_soap_connection_sanitize(conn, TRUE);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
162 g_queue_foreach(conn->queue, msn_soap_connection_destroy_foreach_cb, conn);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
163 g_queue_free(conn->queue);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
164
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
165 g_free(conn->host);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
166 g_free(conn);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
167 }
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
168
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
169 static gboolean
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
170 msn_soap_cleanup_each(gpointer key, gpointer value, gpointer data)
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
171 {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
172 MsnSoapConnection *conn = value;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
173 time_t *t = data;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
174
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
175 if ((*t - conn->last_used) > SOAP_TIMEOUT * 2) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
176 purple_debug_info("soap", "cleaning up soap conn %p\n", conn);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
177 return TRUE;
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
178 }
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
179
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
180 return FALSE;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
181 }
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
182
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
183 static gboolean
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
184 msn_soap_cleanup_for_session(gpointer data)
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
185 {
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
186 MsnSession *sess = data;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
187 time_t t = time(NULL);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
188
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
189 purple_debug_info("soap", "session cleanup timeout\n");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
190
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
191 if (sess->soap_table) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
192 g_hash_table_foreach_remove(sess->soap_table, msn_soap_cleanup_each,
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
193 &t);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
194
24535
a9fdc17304d9 Remove the timer if sess->soap_table is NULL. I don't think this ever
Mark Doliner <mark@kingant.net>
parents: 24532
diff changeset
195 if (g_hash_table_size(sess->soap_table) != 0)
a9fdc17304d9 Remove the timer if sess->soap_table is NULL. I don't think this ever
Mark Doliner <mark@kingant.net>
parents: 24532
diff changeset
196 return TRUE;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
197 }
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
198
24535
a9fdc17304d9 Remove the timer if sess->soap_table is NULL. I don't think this ever
Mark Doliner <mark@kingant.net>
parents: 24532
diff changeset
199 sess->soap_cleanup_handle = 0;
a9fdc17304d9 Remove the timer if sess->soap_table is NULL. I don't think this ever
Mark Doliner <mark@kingant.net>
parents: 24532
diff changeset
200 return FALSE;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
201 }
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
202
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
203 static MsnSoapConnection *
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
204 msn_soap_get_connection(MsnSession *session, const char *host)
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
205 {
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
206 MsnSoapConnection *conn = NULL;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
207
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
208 if (session->soap_table) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
209 conn = g_hash_table_lookup(session->soap_table, host);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
210 } else {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
211 session->soap_table = g_hash_table_new_full(g_str_hash, g_str_equal,
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
212 NULL, (GDestroyNotify)msn_soap_connection_destroy);
20477
9a2a4a0c0003 Add the possibility to create an Address Book, useful for newly registered MSN users.
Carlos Silva <typ0@pidgin.im>
parents: 20471
diff changeset
213 }
9a2a4a0c0003 Add the possibility to create an Address Book, useful for newly registered MSN users.
Carlos Silva <typ0@pidgin.im>
parents: 20471
diff changeset
214
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
215 if (session->soap_cleanup_handle == 0)
24399
9bdaf273c0ff Use purple_timeout_add_seconds() instead of purple_timeout_add() in a
Mark Doliner <mark@kingant.net>
parents: 24087
diff changeset
216 session->soap_cleanup_handle = purple_timeout_add_seconds(SOAP_TIMEOUT,
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
217 msn_soap_cleanup_for_session, session);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
218
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
219 if (conn == NULL) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
220 conn = msn_soap_connection_new(session, host);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
221 g_hash_table_insert(session->soap_table, conn->host, conn);
20477
9a2a4a0c0003 Add the possibility to create an Address Book, useful for newly registered MSN users.
Carlos Silva <typ0@pidgin.im>
parents: 20471
diff changeset
222 }
9a2a4a0c0003 Add the possibility to create an Address Book, useful for newly registered MSN users.
Carlos Silva <typ0@pidgin.im>
parents: 20471
diff changeset
223
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
224 conn->last_used = time(NULL);
23298
5cdd93dac7a2 Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents: 22822
diff changeset
225
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
226 return conn;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
227 }
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
228
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
229 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
230 msn_soap_connection_handle_next(MsnSoapConnection *conn)
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
231 {
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
232 msn_soap_connection_sanitize(conn, FALSE);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
233
24532
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
234 conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, conn);
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
235
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
236 if (conn->current_request) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
237 MsnSoapRequest *req = conn->current_request;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
238 conn->current_request = NULL;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
239 msn_soap_connection_destroy_foreach_cb(req, conn);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
240 }
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
241 }
20479
6a8463be5b23 Improve MSN_SOAP_DEBUG and workaround a Win32 bug which would case Pidgin to consume insane amounts of memory when printing a large string to the Debug Window.
Carlos Silva <typ0@pidgin.im>
parents: 20478
diff changeset
242
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
243 static void
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
244 msn_soap_message_send_internal(MsnSession *session, MsnSoapMessage *message,
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
245 const char *host, const char *path, gboolean secure,
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
246 MsnSoapCallback cb, gpointer cb_data, gboolean first)
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
247 {
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
248 MsnSoapConnection *conn = msn_soap_get_connection(session, host);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
249 MsnSoapRequest *req = g_new0(MsnSoapRequest, 1);
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
250
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
251 req->path = g_strdup(path);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
252 req->message = message;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
253 req->secure = secure;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
254 req->cb = cb;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
255 req->cb_data = cb_data;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
256
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
257 if (first) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
258 g_queue_push_head(conn->queue, req);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
259 } else {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
260 g_queue_push_tail(conn->queue, req);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
261 }
23298
5cdd93dac7a2 Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents: 22822
diff changeset
262
24532
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
263 if (conn->run_timer == 0)
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
264 conn->run_timer = purple_timeout_add(0, msn_soap_connection_run,
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
265 conn);
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
266 }
20477
9a2a4a0c0003 Add the possibility to create an Address Book, useful for newly registered MSN users.
Carlos Silva <typ0@pidgin.im>
parents: 20471
diff changeset
267
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
268 void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
269 msn_soap_message_send(MsnSession *session, MsnSoapMessage *message,
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
270 const char *host, const char *path, gboolean secure,
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
271 MsnSoapCallback cb, gpointer cb_data)
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
272 {
24530
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
273 g_return_if_fail(message != NULL);
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
274
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
275 msn_soap_message_send_internal(session, message, host, path, secure,
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
276 cb, cb_data, FALSE);
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
277 }
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
278
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
279 static gboolean
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
280 msn_soap_handle_redirect(MsnSoapConnection *conn, const char *url)
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
281 {
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
282 char *host;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
283 char *path;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
284
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
285 if (purple_url_parse(url, &host, NULL, &path, NULL, NULL)) {
23613
860e5e210fc9 Don't print SOAP messages to debug log for "secure" requests. This is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
286 msn_soap_message_send_internal(conn->session, conn->current_request->message,
860e5e210fc9 Don't print SOAP messages to debug log for "secure" requests. This is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
287 host, path, conn->current_request->secure,
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
288 conn->current_request->cb, conn->current_request->cb_data, TRUE);
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
289
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
290 msn_soap_request_destroy(conn->current_request, TRUE);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
291 conn->current_request = NULL;
23298
5cdd93dac7a2 Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents: 22822
diff changeset
292
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
293 g_free(host);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
294 g_free(path);
20477
9a2a4a0c0003 Add the possibility to create an Address Book, useful for newly registered MSN users.
Carlos Silva <typ0@pidgin.im>
parents: 20471
diff changeset
295
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
296 return TRUE;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
297 }
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
298
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
299 return FALSE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
300 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
301
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
302 static gboolean
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
303 msn_soap_handle_body(MsnSoapConnection *conn, MsnSoapMessage *response)
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
304 {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
305 xmlnode *body = xmlnode_get_child(response->xml, "Body");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
306 xmlnode *fault = xmlnode_get_child(response->xml, "Fault");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
307
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
308 if (fault) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
309 xmlnode *faultcode = xmlnode_get_child(fault, "faultcode");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
310
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
311 if (faultcode != NULL) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
312 char *faultdata = xmlnode_get_data(faultcode);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
313
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
314 if (g_str_equal(faultdata, "psf:Redirect")) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
315 xmlnode *url = xmlnode_get_child(fault, "redirectUrl");
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
316
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
317 if (url) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
318 char *urldata = xmlnode_get_data(url);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
319 msn_soap_handle_redirect(conn, urldata);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
320 g_free(urldata);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
321 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
322
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
323 g_free(faultdata);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
324 msn_soap_message_destroy(response);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
325 return TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
326 } else if (g_str_equal(faultdata, "wsse:FailedAuthentication")) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
327 xmlnode *reason = xmlnode_get_child(fault, "faultstring");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
328 char *reasondata = xmlnode_get_data(reason);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
329
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
330 msn_soap_connection_sanitize(conn, TRUE);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
331 msn_session_set_error(conn->session, MSN_ERROR_AUTH,
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
332 reasondata);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
333
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
334 g_free(reasondata);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
335 g_free(faultdata);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
336 msn_soap_message_destroy(response);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
337 return FALSE;
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
338 }
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
339
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
340 g_free(faultdata);
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
341 }
20416
4c5d68e93ef8 Handles SOAP redirects, thanks Sebasti«¡n E. Peyrott
Ka-Hing Cheung <khc@hxbc.us>
parents: 20404
diff changeset
342 }
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
343
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
344 if (fault || body) {
25407
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
345 if (conn->current_request) {
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
346 MsnSoapRequest *request = conn->current_request;
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
347 conn->current_request = NULL;
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
348 request->cb(request->message, response,
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
349 request->cb_data);
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
350 msn_soap_request_destroy(request, FALSE);
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
351 }
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
352 msn_soap_message_destroy(response);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
353 }
20479
6a8463be5b23 Improve MSN_SOAP_DEBUG and workaround a Win32 bug which would case Pidgin to consume insane amounts of memory when printing a large string to the Debug Window.
Carlos Silva <typ0@pidgin.im>
parents: 20478
diff changeset
354
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
355 return TRUE;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
356 }
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
357
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
358 static void
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
359 msn_soap_message_add_header(MsnSoapMessage *message,
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
360 const char *name, const char *value)
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
361 {
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
362 char *header = g_strdup_printf("%s: %s\r\n", name, value);
24087
40a4e02027f4 shuffle some code around to make sure are using the right errno,
Ka-Hing Cheung <khc@hxbc.us>
parents: 24019
diff changeset
363
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
364 message->headers = g_slist_prepend(message->headers, header);
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
365 }
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
366
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
367 static void
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
368 msn_soap_process(MsnSoapConnection *conn)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
369 {
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
370 gboolean handled = FALSE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
371 char *cursor;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
372 char *linebreak;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
373
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
374 cursor = conn->buf->str + conn->handled_len;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
375
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
376 if (!conn->headers_done) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
377 while ((linebreak = strstr(cursor, "\r\n")) != NULL) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
378 conn->handled_len = linebreak - conn->buf->str + 2;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
379
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
380 if (conn->response_code == 0) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
381 if (sscanf(cursor, "HTTP/1.1 %d", &conn->response_code) != 1) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
382 /* something horribly wrong */
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
383 purple_ssl_close(conn->ssl);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
384 conn->ssl = NULL;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
385 msn_soap_connection_handle_next(conn);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
386 handled = TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
387 break;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
388 } else if (conn->response_code == 503) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
389 msn_soap_connection_sanitize(conn, TRUE);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
390 msn_session_set_error(conn->session, MSN_ERROR_SERV_UNAVAILABLE, NULL);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
391 return;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
392 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
393 } else if (cursor == linebreak) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
394 /* blank line */
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
395 conn->headers_done = TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
396 cursor = conn->buf->str + conn->handled_len;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
397 break;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
398 } else {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
399 char *line = g_strndup(cursor, linebreak - cursor);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
400 char *sep = strstr(line, ": ");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
401 char *key = line;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
402 char *value;
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
403
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
404 if (sep == NULL) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
405 purple_debug_info("soap", "ignoring malformed line: %s\n", line);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
406 g_free(line);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
407 goto loop_end;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
408 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
409
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
410 value = sep + 2;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
411 *sep = '\0';
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
412 msn_soap_message_add_header(conn->message, key, value);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
413
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
414 if ((conn->response_code == 301 || conn->response_code == 300)
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
415 && strcmp(key, "Location") == 0) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
416
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
417 msn_soap_handle_redirect(conn, value);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
418
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
419 handled = TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
420 g_free(line);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
421 break;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
422 } else if (conn->response_code == 401 &&
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
423 strcmp(key, "WWW-Authenticate") == 0) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
424 char *error = strstr(value, "cbtxt=");
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
425
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
426 if (error) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
427 error += strlen("cbtxt=");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
428 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
429
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
430 msn_soap_connection_sanitize(conn, TRUE);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
431 msn_session_set_error(conn->session, MSN_ERROR_AUTH,
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
432 error ? purple_url_decode(error) : NULL);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
433
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
434 g_free(line);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
435 return;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
436 } else if (strcmp(key, "Content-Length") == 0) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
437 conn->body_len = atoi(value);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
438 } else if (strcmp(key, "Connection") == 0) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
439 if (strcmp(value, "close") == 0) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
440 conn->close_when_done = TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
441 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
442 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
443 g_free(line);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
444 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
445
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
446 loop_end:
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
447 cursor = conn->buf->str + conn->handled_len;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
448 }
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
449 }
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
450
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
451 if (!handled && conn->headers_done) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
452 if (conn->buf->len - conn->handled_len >=
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
453 conn->body_len) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
454 xmlnode *node = xmlnode_from_str(cursor, conn->body_len);
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
455
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
456 if (node == NULL) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
457 purple_debug_info("soap", "Malformed SOAP response: %s\n",
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
458 cursor);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
459 } else {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
460 MsnSoapMessage *message = conn->message;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
461 conn->message = NULL;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
462 message->xml = node;
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
463
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
464 if (!msn_soap_handle_body(conn, message)) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
465 return;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
466 }
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
467 }
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
468
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
469 msn_soap_connection_handle_next(conn);
20539
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
470 }
2c8c6d77f12c Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents: 20501
diff changeset
471
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
472 return;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
473 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
474
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
475 if (handled) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
476 msn_soap_connection_handle_next(conn);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
477 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
478 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
479
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
480 static void
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
481 msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond)
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
482 {
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
483 MsnSoapConnection *conn = data;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
484 int count = 0, cnt, perrno;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
485 /* This buffer needs to be larger than any packets received from
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
486 login.live.com or Adium will fail to receive the packet
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
487 (something weird with the login.live.com server). With NSS it works
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
488 fine, so I believe it's some bug with OS X */
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
489 char buf[16 * 1024];
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
490 gsize cursor;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
491
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
492 if (conn->message == NULL) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
493 conn->message = msn_soap_message_new(NULL, NULL);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
494 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
495
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
496 if (conn->buf == NULL) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
497 conn->buf = g_string_new_len(buf, 0);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
498 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
499
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
500 cursor = conn->buf->len;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
501 while ((cnt = purple_ssl_read(conn->ssl, buf, sizeof(buf))) > 0) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
502 purple_debug_info("soap", "read %d bytes\n", cnt);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
503 count += cnt;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
504 g_string_append_len(conn->buf, buf, cnt);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
505 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
506
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
507 perrno = errno;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
508 if (cnt < 0 && perrno != EAGAIN)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
509 purple_debug_info("soap", "read: %s\n", g_strerror(perrno));
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
510
25308
b474cd321e88 make this toggleable via env instead of #define
Ka-Hing Cheung <khc@hxbc.us>
parents: 25307
diff changeset
511 if (conn->current_request && conn->current_request->secure &&
b474cd321e88 make this toggleable via env instead of #define
Ka-Hing Cheung <khc@hxbc.us>
parents: 25307
diff changeset
512 !conn->unsafe_debug)
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
513 purple_debug_misc("soap", "Received secure request.\n");
25308
b474cd321e88 make this toggleable via env instead of #define
Ka-Hing Cheung <khc@hxbc.us>
parents: 25307
diff changeset
514 else if (count != 0)
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
515 purple_debug_misc("soap", "current %s\n", conn->buf->str + cursor);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
516
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
517 /* && count is necessary for Adium, on OS X the last read always
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
518 return an error, so we want to proceed anyway. See #5212 for
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
519 discussion on this and the above buffer size issues */
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
520 if(cnt < 0 && errno == EAGAIN && count == 0)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
521 return;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
522
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
523 /* msn_soap_process could alter errno */
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
524 msn_soap_process(conn);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
525
24824
222265ec3044 I'm guessing this is what was intended here?
Mark Doliner <mark@kingant.net>
parents: 24808
diff changeset
526 if ((cnt < 0 && perrno != EAGAIN) || cnt == 0) {
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
527 /* It's possible msn_soap_process closed the ssl connection */
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
528 if (conn->ssl) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
529 purple_ssl_close(conn->ssl);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
530 conn->ssl = NULL;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
531 msn_soap_connection_handle_next(conn);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
532 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
533 }
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
534 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
535
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
536 static gboolean
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
537 msn_soap_write_cb_internal(gpointer data, gint fd, PurpleInputCondition cond,
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
538 gboolean initial)
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
539 {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
540 MsnSoapConnection *conn = data;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
541 int written;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
542
24531
faff4870f99d Formatting change: Split these if statements on to two lines
Mark Doliner <mark@kingant.net>
parents: 24530
diff changeset
543 if (cond != PURPLE_INPUT_WRITE)
faff4870f99d Formatting change: Split these if statements on to two lines
Mark Doliner <mark@kingant.net>
parents: 24530
diff changeset
544 return TRUE;
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
545
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
546 written = purple_ssl_write(conn->ssl, conn->buf->str + conn->handled_len,
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
547 conn->buf->len - conn->handled_len);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
548
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
549 if (written < 0 && errno == EAGAIN)
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
550 return TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
551 else if (written <= 0) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
552 purple_ssl_close(conn->ssl);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
553 conn->ssl = NULL;
24531
faff4870f99d Formatting change: Split these if statements on to two lines
Mark Doliner <mark@kingant.net>
parents: 24530
diff changeset
554 if (!initial)
faff4870f99d Formatting change: Split these if statements on to two lines
Mark Doliner <mark@kingant.net>
parents: 24530
diff changeset
555 msn_soap_connection_handle_next(conn);
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
556 return FALSE;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
557 }
20770
58ce69a8582d Correctly remove a buddy from the Pending list after it is accepted.
Carlos Silva <typ0@pidgin.im>
parents: 20759
diff changeset
558
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
559 conn->handled_len += written;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
560
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
561 if (conn->handled_len < conn->buf->len)
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
562 return TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
563
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
564 /* we are done! */
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
565 g_string_free(conn->buf, TRUE);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
566 conn->buf = NULL;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
567 conn->handled_len = 0;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
568 conn->body_len = 0;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
569 conn->response_code = 0;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
570 conn->headers_done = FALSE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
571 conn->close_when_done = FALSE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
572
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
573 purple_input_remove(conn->event_handle);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
574 conn->event_handle = purple_input_add(conn->ssl->fd, PURPLE_INPUT_READ,
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
575 msn_soap_read_cb, conn);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
576 return TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
577 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
578
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
579 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
580 msn_soap_write_cb(gpointer data, gint fd, PurpleInputCondition cond)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
581 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
582 msn_soap_write_cb_internal(data, fd, cond, FALSE);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
583 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
584
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
585 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
586 msn_soap_error_cb(PurpleSslConnection *ssl, PurpleSslErrorType error,
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
587 gpointer data)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
588 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
589 MsnSoapConnection *conn = data;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
590
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
591 /* sslconn already frees the connection in case of error */
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
592 conn->ssl = NULL;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
593
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
594 g_hash_table_remove(conn->session->soap_table, conn->host);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
595 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
596
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
597 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
598 msn_soap_connected_cb(gpointer data, PurpleSslConnection *ssl,
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
599 PurpleInputCondition cond)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
600 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
601 MsnSoapConnection *conn = data;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
602
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
603 conn->connected = TRUE;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
604
24532
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
605 if (conn->run_timer == 0)
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
606 conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, conn);
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
607 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
608
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
609 MsnSoapMessage *
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
610 msn_soap_message_new(const char *action, xmlnode *xml)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
611 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
612 MsnSoapMessage *message = g_new0(MsnSoapMessage, 1);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
613
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
614 message->action = g_strdup(action);
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
615 message->xml = xml;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
616
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
617 return message;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
618 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
619
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
620 static gboolean
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
621 msn_soap_connection_run(gpointer data)
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
622 {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
623 MsnSoapConnection *conn = data;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
624 MsnSoapRequest *req = g_queue_peek_head(conn->queue);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
625
24532
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
626 conn->run_timer = 0;
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
627
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
628 if (req) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
629 if (conn->ssl == NULL) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
630 conn->ssl = purple_ssl_connect(conn->session->account, conn->host,
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
631 443, msn_soap_connected_cb, msn_soap_error_cb, conn);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
632 } else if (conn->connected) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
633 int len = -1;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
634 char *body = xmlnode_to_str(req->message->xml, &len);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
635 GSList *iter;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
636
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
637 g_queue_pop_head(conn->queue);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
638
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
639 conn->buf = g_string_new("");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
640
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
641 g_string_append_printf(conn->buf,
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
642 "POST /%s HTTP/1.1\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
643 "SOAPAction: %s\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
644 "Content-Type:text/xml; charset=utf-8\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
645 "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
646 "Accept: */*\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
647 "Host: %s\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
648 "Content-Length: %d\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
649 "Connection: Keep-Alive\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
650 "Cache-Control: no-cache\r\n",
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
651 req->path, req->message->action ? req->message->action : "",
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
652 conn->host, len);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
653
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
654 for (iter = req->message->headers; iter; iter = iter->next) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
655 g_string_append(conn->buf, (char *)iter->data);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
656 g_string_append(conn->buf, "\r\n");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
657 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
658
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
659 g_string_append(conn->buf, "\r\n");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
660 g_string_append(conn->buf, body);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
661
25308
b474cd321e88 make this toggleable via env instead of #define
Ka-Hing Cheung <khc@hxbc.us>
parents: 25307
diff changeset
662 if (req->secure && !conn->unsafe_debug)
23713
92d0151e907b Relegate XML dumped by msn's SOAP code to MISC from INFO.
Will Thompson <will.thompson@collabora.co.uk>
parents: 23626
diff changeset
663 purple_debug_misc("soap", "Sending secure request.\n");
23613
860e5e210fc9 Don't print SOAP messages to debug log for "secure" requests. This is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
664 else
25308
b474cd321e88 make this toggleable via env instead of #define
Ka-Hing Cheung <khc@hxbc.us>
parents: 25307
diff changeset
665 purple_debug_misc("soap", "%s\n", conn->buf->str);
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
666
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
667 conn->handled_len = 0;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
668 conn->current_request = req;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
669
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
670 conn->event_handle = purple_input_add(conn->ssl->fd,
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
671 PURPLE_INPUT_WRITE, msn_soap_write_cb, conn);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
672 if (!msn_soap_write_cb_internal(conn, conn->ssl->fd, PURPLE_INPUT_WRITE, TRUE)) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
673 /* Not connected => reconnect and retry */
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
674 purple_debug_info("soap", "not connected, reconnecting\n");
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
675
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
676 conn->connected = FALSE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
677 conn->current_request = NULL;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
678 msn_soap_connection_sanitize(conn, FALSE);
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
679
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
680 g_queue_push_head(conn->queue, req);
24532
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
681 conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, conn);
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
682 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
683
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
684 g_free(body);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
685 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
686 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
687
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
688 return FALSE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
689 }