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