Mercurial > pidgin
annotate libpurple/protocols/msn/soap.c @ 24532:d70eb6304eae
Use separate variables to keep track of the timer and the watcher.
I believe only one of these will be used at any given time, and so
while there is no overlap in their usage we need to use different
variables so that we can call either purple_input_remove or
purple_timeout_remove depending on the usage. I don't think this
matters with glib because purple_input_remove and
purple_timeout_remove both call g_source_remove, but it could be
an issue when using other event loops.
There's also the problem in line 673 where we add the watcher, but
then if the call to msn_soap_write_cb fails we add a timer using
the same variable. That's still going to be a little buggy.
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 25 Nov 2008 02:43:56 +0000 |
parents | faff4870f99d |
children | a9fdc17304d9 |
rev | line source |
---|---|
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
1 /** |
23298
5cdd93dac7a2
Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents:
22822
diff
changeset
|
2 * @file soap.c |
24529
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
3 * Functions relating to SOAP connections. |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
4 * |
20401
4ddc27c18781
Fix up some gaim -> purple issues.
Richard Laager <rlaager@wiktel.com>
parents:
20394
diff
changeset
|
5 * purple |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
6 * |
20401
4ddc27c18781
Fix up some gaim -> purple issues.
Richard Laager <rlaager@wiktel.com>
parents:
20394
diff
changeset
|
7 * Purple is the legal property of its developers, whose names are too numerous |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
8 * to list here. Please refer to the COPYRIGHT file distributed with this |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
9 * source distribution. |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
10 * |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
11 * This program is free software; you can redistribute it and/or modify |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
12 * it under the terms of the GNU General Public License as published by |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
13 * the Free Software Foundation; either version 2 of the License, or |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
14 * (at your option) any later version. |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
15 * |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
16 * This program is distributed in the hope that it will be useful, |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
19 * GNU General Public License for more details. |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
20 * |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
21 * You should have received a copy of the GNU General Public License |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
22 * along with this program; if not, write to the Free Software |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
24 */ |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
25 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
26 #include "internal.h" |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
27 |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
28 #include "soap.h" |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
29 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
30 #include "session.h" |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
31 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
32 #include "debug.h" |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
33 #include "xmlnode.h" |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
34 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
35 #include <glib.h> |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
36 #if !defined(_WIN32) || !defined(_WINERROR_) |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
37 #include <error.h> |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
38 #endif |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
39 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
40 #define SOAP_TIMEOUT (5 * 60) |
23743
29180633f672
I seem to have accidentally turned on those "unsafe" SOAP debug messages.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23713
diff
changeset
|
41 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
42 typedef struct _MsnSoapRequest { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
43 char *path; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
44 MsnSoapMessage *message; |
23613
860e5e210fc9
Don't print SOAP messages to debug log for "secure" requests. This is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23521
diff
changeset
|
45 gboolean secure; |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
46 MsnSoapCallback cb; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
47 gpointer cb_data; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
48 } MsnSoapRequest; |
20539
2c8c6d77f12c
Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents:
20501
diff
changeset
|
49 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
50 typedef struct _MsnSoapConnection { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
51 MsnSession *session; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
52 char *host; |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
53 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
54 time_t last_used; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
55 PurpleSslConnection *ssl; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
56 gboolean connected; |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
57 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
58 guint event_handle; |
24532
d70eb6304eae
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents:
24531
diff
changeset
|
59 guint run_timer; |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
60 GString *buf; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
61 gsize handled_len; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
62 gsize body_len; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
63 int response_code; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
64 gboolean headers_done; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
65 gboolean close_when_done; |
20539
2c8c6d77f12c
Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents:
20501
diff
changeset
|
66 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
67 MsnSoapMessage *message; |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
68 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
69 GQueue *queue; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
70 MsnSoapRequest *current_request; |
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 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
144 if (req->cb) |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
145 req->cb(req->message, NULL, req->cb_data); |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
146 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
147 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
|
148 } |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
149 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
150 static void |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
151 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
|
152 { |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
153 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
|
154 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
|
155 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
|
156 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
|
157 } |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
158 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
159 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
|
160 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
|
161 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
|
162 |
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->host); |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
164 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
|
165 } |
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
|
166 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
167 static gboolean |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
168 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
|
169 { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
170 MsnSoapConnection *conn = value; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
171 time_t *t = data; |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
172 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
173 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
|
174 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
|
175 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
|
176 } |
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
|
177 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
178 return FALSE; |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
179 } |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
180 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
181 static gboolean |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
182 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
|
183 { |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
184 MsnSession *sess = data; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
185 time_t t = time(NULL); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
186 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
187 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
|
188 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
189 if (sess->soap_table) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
190 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
|
191 &t); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
192 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
193 if (g_hash_table_size(sess->soap_table) == 0) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
194 sess->soap_cleanup_handle = 0; |
24479
b68a672b645d
Is it valid to use purple_timeout_remove() to remove a timer when
Mark Doliner <mark@kingant.net>
parents:
24399
diff
changeset
|
195 return FALSE; |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
196 } |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
197 } |
20539
2c8c6d77f12c
Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents:
20501
diff
changeset
|
198 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
199 return TRUE; |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
200 } |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
201 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
202 static MsnSoapConnection * |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
203 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
|
204 { |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
205 MsnSoapConnection *conn = NULL; |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
206 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
207 if (session->soap_table) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
208 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
|
209 } else { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
210 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
|
211 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
|
212 } |
9a2a4a0c0003
Add the possibility to create an Address Book, useful for newly registered MSN users.
Carlos Silva <typ0@pidgin.im>
parents:
20471
diff
changeset
|
213 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
214 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
|
215 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
|
216 msn_soap_cleanup_for_session, session); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
217 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
218 if (conn == NULL) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
219 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
|
220 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
|
221 } |
9a2a4a0c0003
Add the possibility to create an Address Book, useful for newly registered MSN users.
Carlos Silva <typ0@pidgin.im>
parents:
20471
diff
changeset
|
222 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
223 conn->last_used = time(NULL); |
23298
5cdd93dac7a2
Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents:
22822
diff
changeset
|
224 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
225 return conn; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
226 } |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
227 |
24529
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
228 static void |
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_handle_next(MsnSoapConnection *conn) |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
230 { |
24529
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
231 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
|
232 |
24532
d70eb6304eae
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents:
24531
diff
changeset
|
233 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
|
234 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
235 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
|
236 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
|
237 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
|
238 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
|
239 } |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
240 } |
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
|
241 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
242 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
|
243 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
|
244 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
|
245 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
|
246 { |
24529
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
247 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
|
248 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
|
249 |
24529
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
250 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
|
251 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
|
252 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
|
253 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
|
254 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
|
255 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
256 if (first) { |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
257 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
|
258 } else { |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
259 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
|
260 } |
23298
5cdd93dac7a2
Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents:
22822
diff
changeset
|
261 |
24532
d70eb6304eae
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents:
24531
diff
changeset
|
262 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
|
263 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
|
264 conn); |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
265 } |
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
|
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 void |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
268 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
|
269 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
|
270 MsnSoapCallback cb, gpointer cb_data) |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
271 { |
24530
113e95371d3c
I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents:
24529
diff
changeset
|
272 g_return_if_fail(message != NULL); |
113e95371d3c
I don't believe message should ever be null
Mark Doliner <mark@kingant.net>
parents:
24529
diff
changeset
|
273 |
24529
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
274 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
|
275 cb, cb_data, FALSE); |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
276 } |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
277 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
278 static gboolean |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
279 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
|
280 { |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
281 char *host; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
282 char *path; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
283 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
284 if (purple_url_parse(url, &host, NULL, &path, NULL, NULL)) { |
23613
860e5e210fc9
Don't print SOAP messages to debug log for "secure" requests. This is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23521
diff
changeset
|
285 msn_soap_message_send_internal(conn->session, conn->current_request->message, |
860e5e210fc9
Don't print SOAP messages to debug log for "secure" requests. This is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23521
diff
changeset
|
286 host, path, conn->current_request->secure, |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
287 conn->current_request->cb, conn->current_request->cb_data, TRUE); |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
288 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
289 msn_soap_request_destroy(conn->current_request, TRUE); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
290 conn->current_request = NULL; |
23298
5cdd93dac7a2
Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents:
22822
diff
changeset
|
291 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
292 g_free(host); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
293 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
|
294 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
295 return TRUE; |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
296 } |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
297 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
298 return FALSE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
299 } |
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 static gboolean |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
302 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
|
303 { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
304 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
|
305 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
|
306 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
307 if (fault) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
308 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
|
309 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
310 if (faultcode != NULL) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
311 char *faultdata = xmlnode_get_data(faultcode); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
312 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
313 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
|
314 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
|
315 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
316 if (url) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
317 char *urldata = xmlnode_get_data(url); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
318 msn_soap_handle_redirect(conn, urldata); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
319 g_free(urldata); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
320 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
321 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
322 g_free(faultdata); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
323 msn_soap_message_destroy(response); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
324 return TRUE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
325 } 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
|
326 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
|
327 char *reasondata = xmlnode_get_data(reason); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
328 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
329 msn_soap_connection_sanitize(conn, TRUE); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
330 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
|
331 reasondata); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
332 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
333 g_free(reasondata); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
334 g_free(faultdata); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
335 msn_soap_message_destroy(response); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
336 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
|
337 } |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
338 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
339 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
|
340 } |
20416
4c5d68e93ef8
Handles SOAP redirects, thanks Sebasti«¡n E. Peyrott
Ka-Hing Cheung <khc@hxbc.us>
parents:
20404
diff
changeset
|
341 } |
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
|
342 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
343 if (fault || body) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
344 MsnSoapRequest *request = conn->current_request; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
345 conn->current_request = NULL; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
346 request->cb(request->message, response, |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
347 request->cb_data); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
348 msn_soap_message_destroy(response); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
349 msn_soap_request_destroy(request, FALSE); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
350 } |
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
|
351 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
352 return TRUE; |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
353 } |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
354 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
355 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
|
356 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
|
357 const char *name, const char *value) |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
358 { |
24529
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
359 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
|
360 |
24529
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
361 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
|
362 } |
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
363 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
364 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
|
365 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
|
366 { |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
367 gboolean handled = FALSE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
368 char *cursor; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
369 char *linebreak; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
370 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
371 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
|
372 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
373 if (!conn->headers_done) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
374 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
|
375 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
|
376 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
377 if (conn->response_code == 0) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
378 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
|
379 /* something horribly wrong */ |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
380 purple_ssl_close(conn->ssl); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
381 conn->ssl = NULL; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
382 msn_soap_connection_handle_next(conn); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
383 handled = TRUE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
384 break; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
385 } else if (conn->response_code == 503) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
386 msn_soap_connection_sanitize(conn, TRUE); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
387 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
|
388 return; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
389 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
390 } else if (cursor == linebreak) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
391 /* blank line */ |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
392 conn->headers_done = TRUE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
393 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
|
394 break; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
395 } else { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
396 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
|
397 char *sep = strstr(line, ": "); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
398 char *key = line; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
399 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
|
400 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
401 if (sep == NULL) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
402 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
|
403 g_free(line); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
404 goto loop_end; |
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 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
407 value = sep + 2; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
408 *sep = '\0'; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
409 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
|
410 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
411 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
|
412 && strcmp(key, "Location") == 0) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
413 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
414 msn_soap_handle_redirect(conn, value); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
415 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
416 handled = TRUE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
417 g_free(line); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
418 break; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
419 } else if (conn->response_code == 401 && |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
420 strcmp(key, "WWW-Authenticate") == 0) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
421 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
|
422 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
423 if (error) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
424 error += strlen("cbtxt="); |
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 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
427 msn_soap_connection_sanitize(conn, TRUE); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
428 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
|
429 error ? purple_url_decode(error) : NULL); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
430 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
431 g_free(line); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
432 return; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
433 } else if (strcmp(key, "Content-Length") == 0) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
434 conn->body_len = atoi(value); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
435 } else if (strcmp(key, "Connection") == 0) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
436 if (strcmp(value, "close") == 0) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
437 conn->close_when_done = TRUE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
438 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
439 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
440 g_free(line); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
441 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
442 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
443 loop_end: |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
444 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
|
445 } |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
446 } |
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 (!handled && conn->headers_done) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
449 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
|
450 conn->body_len) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
451 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
|
452 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
453 if (node == NULL) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
454 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
|
455 cursor); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
456 } else { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
457 MsnSoapMessage *message = conn->message; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
458 conn->message = NULL; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
459 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
|
460 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
461 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
|
462 return; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
463 } |
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
|
464 } |
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
|
465 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
466 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
|
467 } |
2c8c6d77f12c
Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once.
Carlos Silva <typ0@pidgin.im>
parents:
20501
diff
changeset
|
468 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
469 return; |
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 if (handled) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
473 msn_soap_connection_handle_next(conn); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
474 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
475 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
476 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
477 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
|
478 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
|
479 { |
24529
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
480 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
|
481 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
|
482 /* 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
|
483 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
|
484 (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
|
485 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
|
486 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
|
487 gsize cursor; |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
488 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
489 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
|
490 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
|
491 } |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
492 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
493 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
|
494 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
|
495 } |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
496 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
497 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
|
498 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
|
499 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
|
500 count += cnt; |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
501 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
|
502 } |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
503 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
504 perrno = errno; |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
505 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
|
506 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
|
507 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
508 #ifndef MSN_UNSAFE_DEBUG |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
509 if (conn->current_request->secure) |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
510 purple_debug_misc("soap", "Received secure request.\n"); |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
511 else |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
512 #endif |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
513 if (count != 0) |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
514 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
|
515 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
516 /* && 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
|
517 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
|
518 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
|
519 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
|
520 return; |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
521 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
522 /* 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
|
523 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
|
524 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
525 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
|
526 /* 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
|
527 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
|
528 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
|
529 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
|
530 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
|
531 } |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
532 } |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
533 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
534 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
535 static gboolean |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
536 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
|
537 gboolean initial) |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
538 { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
539 MsnSoapConnection *conn = data; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
540 int written; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
541 |
24531
faff4870f99d
Formatting change: Split these if statements on to two lines
Mark Doliner <mark@kingant.net>
parents:
24530
diff
changeset
|
542 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
|
543 return TRUE; |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
544 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
545 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
|
546 conn->buf->len - conn->handled_len); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
547 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
548 if (written < 0 && errno == EAGAIN) |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
549 return TRUE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
550 else if (written <= 0) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
551 purple_ssl_close(conn->ssl); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
552 conn->ssl = NULL; |
24531
faff4870f99d
Formatting change: Split these if statements on to two lines
Mark Doliner <mark@kingant.net>
parents:
24530
diff
changeset
|
553 if (!initial) |
faff4870f99d
Formatting change: Split these if statements on to two lines
Mark Doliner <mark@kingant.net>
parents:
24530
diff
changeset
|
554 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
|
555 return FALSE; |
20394
4a099e4d0d09
propagate from branch 'im.pidgin.pidgin' (head 98b6b547b29ea1192b73cc4e1de1e674edef4328)
Richard Laager <rlaager@wiktel.com>
parents:
diff
changeset
|
556 } |
20770
58ce69a8582d
Correctly remove a buddy from the Pending list after it is accepted.
Carlos Silva <typ0@pidgin.im>
parents:
20759
diff
changeset
|
557 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
558 conn->handled_len += written; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
559 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
560 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
|
561 return TRUE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
562 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
563 /* we are done! */ |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
564 g_string_free(conn->buf, TRUE); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
565 conn->buf = NULL; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
566 conn->handled_len = 0; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
567 conn->body_len = 0; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
568 conn->response_code = 0; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
569 conn->headers_done = FALSE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
570 conn->close_when_done = FALSE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
571 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
572 purple_input_remove(conn->event_handle); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
573 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
|
574 msn_soap_read_cb, conn); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
575 return TRUE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
576 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
577 |
24529
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
578 static void |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
579 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
|
580 { |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
581 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
|
582 } |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
583 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
584 static void |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
585 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
|
586 gpointer data) |
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 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
|
589 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
590 /* 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
|
591 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
|
592 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
593 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
|
594 } |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
595 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
596 static void |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
597 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
|
598 PurpleInputCondition cond) |
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 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
|
601 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
602 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
|
603 |
24532
d70eb6304eae
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents:
24531
diff
changeset
|
604 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
|
605 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
|
606 } |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
607 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
608 MsnSoapMessage * |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
609 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
|
610 { |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
611 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
|
612 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
613 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
|
614 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
|
615 |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
616 return message; |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
617 } |
01e8334101df
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <mark@kingant.net>
parents:
24479
diff
changeset
|
618 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
619 static gboolean |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
620 msn_soap_connection_run(gpointer data) |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
621 { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
622 MsnSoapConnection *conn = data; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
623 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
|
624 |
24532
d70eb6304eae
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <mark@kingant.net>
parents:
24531
diff
changeset
|
625 conn->run_timer = 0; |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
626 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
627 if (req) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
628 if (conn->ssl == NULL) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
629 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
|
630 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
|
631 } else if (conn->connected) { |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
632 int len = -1; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
633 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
|
634 GSList *iter; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
635 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
636 g_queue_pop_head(conn->queue); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
637 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
638 conn->buf = g_string_new(""); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
639 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
640 g_string_append_printf(conn->buf, |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
641 "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
|
642 "SOAPAction: %s\r\n" |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
643 "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
|
644 "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
|
645 "Accept: */*\r\n" |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
646 "Host: %s\r\n" |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
647 "Content-Length: %d\r\n" |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
648 "Connection: Keep-Alive\r\n" |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
649 "Cache-Control: no-cache\r\n", |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
650 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
|
651 conn->host, len); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
652 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
653 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
|
654 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
|
655 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
|
656 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
657 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
658 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
|
659 g_string_append(conn->buf, body); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
660 |
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
|
661 #ifndef MSN_UNSAFE_DEBUG |
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
|
662 if (req->secure) |
23713
92d0151e907b
Relegate XML dumped by msn's SOAP code to MISC from INFO.
Will Thompson <will.thompson@collabora.co.uk>
parents:
23626
diff
changeset
|
663 purple_debug_misc("soap", "Sending secure request.\n"); |
23613
860e5e210fc9
Don't print SOAP messages to debug log for "secure" requests. This is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23521
diff
changeset
|
664 else |
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
|
665 #endif |
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
|
666 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
|
667 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
668 conn->handled_len = 0; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
669 conn->current_request = req; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
670 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
671 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
|
672 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
|
673 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
|
674 /* Not connected => reconnect and retry */ |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
675 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
|
676 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
677 conn->connected = FALSE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
678 conn->current_request = NULL; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
679 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
|
680 |
23507
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
681 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
|
682 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
|
683 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
684 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
685 g_free(body); |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
686 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
687 } |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
688 |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
689 return FALSE; |
711773577380
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23464
diff
changeset
|
690 } |