annotate libpurple/protocols/msn/soap.c @ 32797:aacfb71133cc

Fix a possible MSN remote crash Incoming messages with certain characters or character encodings can cause clients to crash. The fix is for the contents of all incoming plaintext messages are converted to UTF-8 and validated before used. This was reported to us by Fabian Yamaguchi and this patch was written by Elliott Sales de Andrade (maybe with small, insignificant changes by me)
author Mark Doliner <mark@kingant.net>
date Mon, 07 May 2012 03:18:08 +0000
parents fe35df9a5af4
children
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
28070
7921a53b94b3 Oops, Elliott correctly pointed out this was wrong...
Paul Aurich <paul@darkrain42.org>
parents: 28049
diff changeset
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
20394
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;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
71 } MsnSoapConnection;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
72
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
73 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
74
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
75 static MsnSoapConnection *
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
76 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
77 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
78 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
79 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
80 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
81 conn->queue = g_queue_new();
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
82 return conn;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
83 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
84
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
85 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
86 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
87 {
24530
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
88 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
89 g_slist_free(message->headers);
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
90 g_free(message->action);
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
91 if (message->xml)
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
92 xmlnode_free(message->xml);
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
93 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
94 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
95
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
96 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
97 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
98 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
99 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
100 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
101 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
102 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
103 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
104
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
105 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
106 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
107 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
108 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
109 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
110 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
111 }
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
112
24532
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
113 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
114 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
115 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
116 }
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
117
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
118 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
119 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
120 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
121 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
122
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
123 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
124 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
125 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
126 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
127
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
128 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
129 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
130 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
131 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
132
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
133 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
134 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
135 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
136 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
137 }
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
138
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
139 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
140 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
141 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
142 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
143
31089
ce1bd217ce3d Everyone provides a callback here. Might as well make it required.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30332
diff changeset
144 req->cb(req->message, NULL, req->cb_data);
24529
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 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
147 }
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 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
150 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
151 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
152 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
153 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
154 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
155 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
156 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
157
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_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
159 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
160 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
161
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
162 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
163 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
164 }
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
165
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
166 static gboolean
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
167 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
168 {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
169 MsnSoapConnection *conn = value;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
170 time_t *t = data;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
171
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
172 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
173 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
174 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
175 }
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
176
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
177 return FALSE;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
178 }
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
179
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
180 static gboolean
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
181 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
182 {
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
183 MsnSession *sess = data;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
184 time_t t = time(NULL);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
185
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
186 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
187
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
188 if (sess->soap_table) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
189 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
190 &t);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
191
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
192 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
193 return TRUE;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
194 }
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
195
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
196 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
197 return FALSE;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
198 }
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
199
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
200 static MsnSoapConnection *
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
201 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
202 {
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
203 MsnSoapConnection *conn = NULL;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
204
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
205 if (session->soap_table) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
206 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
207 } else {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
208 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
209 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
210 }
9a2a4a0c0003 Add the possibility to create an Address Book, useful for newly registered MSN users.
Carlos Silva <typ0@pidgin.im>
parents: 20471
diff changeset
211
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
212 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
213 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
214 msn_soap_cleanup_for_session, session);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
215
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
216 if (conn == NULL) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
217 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
218 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
219 }
9a2a4a0c0003 Add the possibility to create an Address Book, useful for newly registered MSN users.
Carlos Silva <typ0@pidgin.im>
parents: 20471
diff changeset
220
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
221 conn->last_used = time(NULL);
23298
5cdd93dac7a2 Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents: 22822
diff changeset
222
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
223 return conn;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
224 }
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
225
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
226 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
227 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
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 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
230
24532
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
231 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
232 }
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
233
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
234 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
235 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
236 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
237 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
238 {
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
239 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
240 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
241
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
242 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
243 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
244 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
245 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
246 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
247
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
248 if (first) {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
249 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
250 } else {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
251 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
252 }
23298
5cdd93dac7a2 Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents: 22822
diff changeset
253
24532
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
254 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
255 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
256 conn);
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
257 }
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
258
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
259 void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
260 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
261 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
262 MsnSoapCallback cb, gpointer cb_data)
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
263 {
24530
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
264 g_return_if_fail(message != NULL);
31089
ce1bd217ce3d Everyone provides a callback here. Might as well make it required.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30332
diff changeset
265 g_return_if_fail(cb != NULL);
24530
113e95371d3c I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents: 24529
diff changeset
266
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
267 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
268 cb, cb_data, FALSE);
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
269 }
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
270
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
271 static gboolean
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
272 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
273 {
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
274 char *host;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
275 char *path;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
276
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
277 if (purple_url_parse(url, &host, NULL, &path, NULL, NULL)) {
31090
b3a54678e51a Using conn->current_request looks a bit iffy here. And even if it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31089
diff changeset
278 MsnSoapRequest *req = conn->current_request;
b3a54678e51a Using conn->current_request looks a bit iffy here. And even if it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31089
diff changeset
279 conn->current_request = NULL;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
280
31090
b3a54678e51a Using conn->current_request looks a bit iffy here. And even if it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31089
diff changeset
281 msn_soap_message_send_internal(conn->session, req->message, host, path,
b3a54678e51a Using conn->current_request looks a bit iffy here. And even if it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31089
diff changeset
282 req->secure, req->cb, req->cb_data, TRUE);
b3a54678e51a Using conn->current_request looks a bit iffy here. And even if it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31089
diff changeset
283
b3a54678e51a Using conn->current_request looks a bit iffy here. And even if it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31089
diff changeset
284 msn_soap_request_destroy(req, TRUE);
23298
5cdd93dac7a2 Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents: 22822
diff changeset
285
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
286 g_free(host);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
287 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
288
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
289 return TRUE;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
290 }
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
291
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
292 return FALSE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
293 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
294
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
295 static gboolean
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
296 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
297 {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
298 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
299 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
300
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
301 if (fault) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
302 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
303
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
304 if (faultcode != NULL) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
305 char *faultdata = xmlnode_get_data(faultcode);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
306
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
307 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
308 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
309
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
310 if (url) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
311 char *urldata = xmlnode_get_data(url);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
312 msn_soap_handle_redirect(conn, urldata);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
313 g_free(urldata);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
314 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
315
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
316 g_free(faultdata);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
317 msn_soap_message_destroy(response);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
318 return TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
319 } 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
320 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
321 char *reasondata = xmlnode_get_data(reason);
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 msn_soap_connection_sanitize(conn, TRUE);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
324 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
325 reasondata);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
326
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
327 g_free(reasondata);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
328 g_free(faultdata);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
329 msn_soap_message_destroy(response);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
330 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
331 }
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
332
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
333 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
334 }
20416
4c5d68e93ef8 Handles SOAP redirects, thanks Sebasti«¡n E. Peyrott
Ka-Hing Cheung <khc@hxbc.us>
parents: 20404
diff changeset
335 }
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
336
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
337 if (fault || body) {
25407
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
338 if (conn->current_request) {
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
339 MsnSoapRequest *request = conn->current_request;
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
340 conn->current_request = NULL;
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
341 request->cb(request->message, response,
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
342 request->cb_data);
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
343 msn_soap_request_destroy(request, FALSE);
651cdeab9b99 conn->current_request can be NULL here.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25308
diff changeset
344 }
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
345 msn_soap_message_destroy(response);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
346 }
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
347
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
348 return TRUE;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
349 }
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
350
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
351 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
352 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
353 const char *name, const char *value)
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
354 {
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
355 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
356
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
357 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
358 }
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
359
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
360 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
361 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
362 {
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
363 gboolean handled = FALSE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
364 char *cursor;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
365 char *linebreak;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
366
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
367 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
368
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
369 if (!conn->headers_done) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
370 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
371 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
372
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
373 if (conn->response_code == 0) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
374 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
375 /* something horribly wrong */
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
376 purple_ssl_close(conn->ssl);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
377 conn->ssl = NULL;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
378 handled = TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
379 break;
27728
a9594824b8a3 If the SOAP server returns a 503 AND we haven't yet authenticated, then
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27298
diff changeset
380 } else if (conn->response_code == 503 && conn->session->login_step < MSN_LOGIN_STEP_END) {
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
381 msn_soap_connection_sanitize(conn, TRUE);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
382 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
383 return;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
384 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
385 } else if (cursor == linebreak) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
386 /* blank line */
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
387 conn->headers_done = TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
388 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
389 break;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
390 } else {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
391 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
392 char *sep = strstr(line, ": ");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
393 char *key = line;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
394 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
395
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
396 if (sep == NULL) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
397 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
398 g_free(line);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
399 goto loop_end;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
400 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
401
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
402 value = sep + 2;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
403 *sep = '\0';
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
404 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
405
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
406 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
407 && strcmp(key, "Location") == 0) {
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 msn_soap_handle_redirect(conn, value);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
410
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
411 handled = TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
412 g_free(line);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
413 break;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
414 } else if (conn->response_code == 401 &&
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
415 strcmp(key, "WWW-Authenticate") == 0) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
416 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
417
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
418 if (error) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
419 error += strlen("cbtxt=");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
420 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
421
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
422 msn_soap_connection_sanitize(conn, TRUE);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
423 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
424 error ? purple_url_decode(error) : NULL);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
425
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
426 g_free(line);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
427 return;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
428 } else if (strcmp(key, "Content-Length") == 0) {
25555
62e619e4957e Use sscanf to parse to parse the Content-Length to ensure consistent parsing for the target variable type. This comes out of the Veracode analysis.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 25407
diff changeset
429 sscanf(value, "%" G_GSIZE_FORMAT, &(conn->body_len));
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
430 } else if (strcmp(key, "Connection") == 0) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
431 if (strcmp(value, "close") == 0) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
432 conn->close_when_done = TRUE;
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 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
435 g_free(line);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
436 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
437
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
438 loop_end:
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
439 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
440 }
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
441 }
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
442
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
443 if (!handled && conn->headers_done) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
444 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
445 conn->body_len) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
446 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
447
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
448 if (node == NULL) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
449 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
450 cursor);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
451 } else {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
452 MsnSoapMessage *message = conn->message;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
453 conn->message = NULL;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
454 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
455
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
456 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
457 return;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
458 }
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
459 }
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
460
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
461 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
462 }
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 return;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
465 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
466
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
467 if (handled) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
468 msn_soap_connection_handle_next(conn);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
469 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
470 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
471
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
472 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
473 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
474 {
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
475 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
476 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
477 /* 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
478 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
479 (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
480 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
481 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
482 gsize cursor;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
483
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
484 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
485 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
486 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
487
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
488 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
489 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
490 }
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 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
493 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
494 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
495 count += cnt;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
496 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
497 }
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 perrno = errno;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
500 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
501 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
502
25308
b474cd321e88 make this toggleable via env instead of #define
Ka-Hing Cheung <khc@hxbc.us>
parents: 25307
diff changeset
503 if (conn->current_request && conn->current_request->secure &&
30332
9e71e7ddfebc There's no reason to cache this value, right?
Mark Doliner <mark@kingant.net>
parents: 28070
diff changeset
504 !purple_debug_is_unsafe())
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
505 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
506 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
507 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
508
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
509 /* && 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
510 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
511 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
512 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
513 return;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
514
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
515 /* 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
516 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
517
24824
222265ec3044 I'm guessing this is what was intended here?
Mark Doliner <mark@kingant.net>
parents: 24808
diff changeset
518 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
519 /* 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
520 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
521 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
522 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
523 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
524 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
525 }
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
526 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
527
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
528 static gboolean
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
529 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
530 gboolean initial)
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
531 {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
532 MsnSoapConnection *conn = data;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
533 int written;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
534
24531
faff4870f99d Formatting change: Split these if statements on to two lines
Mark Doliner <mark@kingant.net>
parents: 24530
diff changeset
535 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
536 return TRUE;
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
537
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
538 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
539 conn->buf->len - conn->handled_len);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
540
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
541 if (written < 0 && errno == EAGAIN)
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
542 return TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
543 else if (written <= 0) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
544 purple_ssl_close(conn->ssl);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
545 conn->ssl = NULL;
24531
faff4870f99d Formatting change: Split these if statements on to two lines
Mark Doliner <mark@kingant.net>
parents: 24530
diff changeset
546 if (!initial)
faff4870f99d Formatting change: Split these if statements on to two lines
Mark Doliner <mark@kingant.net>
parents: 24530
diff changeset
547 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
548 return FALSE;
20394
4a099e4d0d09 propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff changeset
549 }
20770
58ce69a8582d Correctly remove a buddy from the Pending list after it is accepted.
Carlos Silva <typ0@pidgin.im>
parents: 20759
diff changeset
550
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
551 conn->handled_len += written;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
552
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
553 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
554 return TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
555
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
556 /* we are done! */
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
557 g_string_free(conn->buf, TRUE);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
558 conn->buf = NULL;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
559 conn->handled_len = 0;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
560 conn->body_len = 0;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
561 conn->response_code = 0;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
562 conn->headers_done = FALSE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
563 conn->close_when_done = FALSE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
564
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
565 purple_input_remove(conn->event_handle);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
566 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
567 msn_soap_read_cb, conn);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
568 return TRUE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
569 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
570
24529
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
571 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
572 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
573 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
574 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
575 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
576
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
577 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
578 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
579 gpointer data)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
580 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
581 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
582
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
583 /* 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
584 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
585
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
586 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
587 }
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 static void
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
590 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
591 PurpleInputCondition cond)
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
592 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
593 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
594
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
595 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
596
24532
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
597 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
598 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
599 }
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 MsnSoapMessage *
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
602 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
603 {
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
604 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
605
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
606 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
607 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
608
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
609 return message;
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
610 }
01e8334101df Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents: 24479
diff changeset
611
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
612 static gboolean
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
613 msn_soap_connection_run(gpointer data)
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
614 {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
615 MsnSoapConnection *conn = data;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
616 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
617
24532
d70eb6304eae Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents: 24531
diff changeset
618 conn->run_timer = 0;
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
619
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
620 if (req) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
621 if (conn->ssl == NULL) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
622 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
623 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
624 } else if (conn->connected) {
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
625 int len = -1;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
626 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
627 GSList *iter;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
628
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
629 g_queue_pop_head(conn->queue);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
630
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
631 conn->buf = g_string_new("");
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
632
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
633 g_string_append_printf(conn->buf,
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
634 "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
635 "SOAPAction: %s\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
636 "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
637 "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
638 "Accept: */*\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
639 "Host: %s\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
640 "Content-Length: %d\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
641 "Connection: Keep-Alive\r\n"
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
642 "Cache-Control: no-cache\r\n",
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
643 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
644 conn->host, len);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
645
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
646 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
647 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
648 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
649 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
650
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
651 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
652 g_string_append(conn->buf, body);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
653
30332
9e71e7ddfebc There's no reason to cache this value, right?
Mark Doliner <mark@kingant.net>
parents: 28070
diff changeset
654 if (req->secure && !purple_debug_is_unsafe())
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
655 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
656 else
25308
b474cd321e88 make this toggleable via env instead of #define
Ka-Hing Cheung <khc@hxbc.us>
parents: 25307
diff changeset
657 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
658
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
659 conn->handled_len = 0;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
660 conn->current_request = req;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
661
26891
4bba5827b7fc Get rid of a runtime warning on connect.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25610
diff changeset
662 if (conn->event_handle)
4bba5827b7fc Get rid of a runtime warning on connect.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25610
diff changeset
663 purple_input_remove(conn->event_handle);
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
664 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
665 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
666 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
667 /* Not connected => reconnect and retry */
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
668 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
669
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
670 conn->connected = FALSE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
671 conn->current_request = NULL;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
672 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
673
23507
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
674 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
675 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
676 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
677
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
678 g_free(body);
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
679 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
680 }
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
681
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
682 return FALSE;
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23464
diff changeset
683 }