Tue, 04 Jan 2011 23:43:40 +0000
Using conn->current_request looks a bit iffy here. And even if it
wasn't, this looks nicer.
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
1 | /** |
|
23819
c3bbef4646b1
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23798
diff
changeset
|
2 | * @file soap.c |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
3 | * Functions relating to SOAP connections. |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
4 | * |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
5 | * purple |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
6 | * |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
7 | * Purple is the legal property of its developers, whose names are too numerous |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
8 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
9 | * source distribution. |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
10 | * |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
11 | * This program is free software; you can redistribute it and/or modify |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
12 | * it under the terms of the GNU General Public License as published by |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
13 | * the Free Software Foundation; either version 2 of the License, or |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
14 | * (at your option) any later version. |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
15 | * |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
16 | * This program is distributed in the hope that it will be useful, |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
19 | * GNU General Public License for more details. |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
20 | * |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
21 | * You should have received a copy of the GNU General Public License |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
22 | * along with this program; if not, write to the Free Software |
|
28345
57a838c454b0
Oops, Elliott correctly pointed out this was wrong...
Paul Aurich <darkrain42@pidgin.im>
parents:
28323
diff
changeset
|
23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
24 | */ |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
25 | |
|
21391
000024cbb022
#include "internal.h" to get a definition for G_GNUC_NULL_TERMINATED where
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21389
diff
changeset
|
26 | #include "internal.h" |
|
000024cbb022
#include "internal.h" to get a definition for G_GNUC_NULL_TERMINATED where
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21389
diff
changeset
|
27 | |
|
23819
c3bbef4646b1
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23798
diff
changeset
|
28 | #include "soap.h" |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
29 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
30 | #include "session.h" |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
31 | |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
32 | #include "debug.h" |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
33 | #include "xmlnode.h" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
34 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
35 | #include <glib.h> |
| 23078 | 36 | #if !defined(_WIN32) || !defined(_WINERROR_) |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
37 | #include <error.h> |
| 23078 | 38 | #endif |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
39 | |
|
21361
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
40 | #define SOAP_TIMEOUT (5 * 60) |
|
24075
7c07336ce376
I seem to have accidentally turned on those "unsafe" SOAP debug messages.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24045
diff
changeset
|
41 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
42 | typedef struct _MsnSoapRequest { |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
43 | char *path; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
44 | MsnSoapMessage *message; |
|
23925
aa38fbc30cfb
Don't print SOAP messages to debug log for "secure" requests. This is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23846
diff
changeset
|
45 | gboolean secure; |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
46 | MsnSoapCallback cb; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
47 | gpointer cb_data; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
48 | } MsnSoapRequest; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
49 | |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
50 | typedef struct _MsnSoapConnection { |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
51 | MsnSession *session; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
52 | char *host; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
53 | |
|
21360
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
54 | time_t last_used; |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
55 | PurpleSslConnection *ssl; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
56 | gboolean connected; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
57 | |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
58 | guint event_handle; |
|
24794
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
59 | guint run_timer; |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
60 | GString *buf; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
61 | gsize handled_len; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
62 | gsize body_len; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
63 | int response_code; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
64 | gboolean headers_done; |
| 21358 | 65 | gboolean close_when_done; |
| 66 | ||
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
67 | MsnSoapMessage *message; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
68 | |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
69 | GQueue *queue; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
70 | MsnSoapRequest *current_request; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
71 | } MsnSoapConnection; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
72 | |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
73 | static gboolean msn_soap_connection_run(gpointer data); |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
74 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
75 | static MsnSoapConnection * |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
76 | msn_soap_connection_new(MsnSession *session, const char *host) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
77 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
78 | MsnSoapConnection *conn = g_new0(MsnSoapConnection, 1); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
79 | conn->session = session; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
80 | conn->host = g_strdup(host); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
81 | conn->queue = g_queue_new(); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
82 | return conn; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
83 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
84 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
85 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
86 | msn_soap_message_destroy(MsnSoapMessage *message) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
87 | { |
|
24792
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
88 | g_slist_foreach(message->headers, (GFunc)g_free, NULL); |
|
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
89 | g_slist_free(message->headers); |
|
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
90 | g_free(message->action); |
|
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
91 | if (message->xml) |
|
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
92 | xmlnode_free(message->xml); |
|
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
93 | g_free(message); |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
94 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
95 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
96 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
97 | msn_soap_request_destroy(MsnSoapRequest *req, gboolean keep_message) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
98 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
99 | g_free(req->path); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
100 | if (!keep_message) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
101 | msn_soap_message_destroy(req->message); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
102 | g_free(req); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
103 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
104 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
105 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
106 | msn_soap_connection_sanitize(MsnSoapConnection *conn, gboolean disconnect) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
107 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
108 | if (conn->event_handle) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
109 | purple_input_remove(conn->event_handle); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
110 | conn->event_handle = 0; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
111 | } |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
112 | |
|
24794
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
113 | if (conn->run_timer) { |
|
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
114 | purple_timeout_remove(conn->run_timer); |
|
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
115 | conn->run_timer = 0; |
|
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
116 | } |
|
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
117 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
118 | if (conn->message) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
119 | msn_soap_message_destroy(conn->message); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
120 | conn->message = NULL; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
121 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
122 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
123 | if (conn->buf) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
124 | g_string_free(conn->buf, TRUE); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
125 | conn->buf = NULL; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
126 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
127 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
128 | if (conn->ssl && (disconnect || conn->close_when_done)) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
129 | purple_ssl_close(conn->ssl); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
130 | conn->ssl = NULL; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
131 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
132 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
133 | if (conn->current_request) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
134 | msn_soap_request_destroy(conn->current_request, FALSE); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
135 | conn->current_request = NULL; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
136 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
137 | } |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
138 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
139 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
140 | msn_soap_connection_destroy_foreach_cb(gpointer item, gpointer data) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
141 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
142 | MsnSoapRequest *req = item; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
143 | |
|
31297
3f3a8f0993e1
Everyone provides a callback here. Might as well make it required.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
30597
diff
changeset
|
144 | req->cb(req->message, NULL, req->cb_data); |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
145 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
146 | msn_soap_request_destroy(req, FALSE); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
147 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
148 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
149 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
150 | msn_soap_connection_destroy(MsnSoapConnection *conn) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
151 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
152 | if (conn->current_request) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
153 | MsnSoapRequest *req = conn->current_request; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
154 | conn->current_request = NULL; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
155 | msn_soap_connection_destroy_foreach_cb(req, conn); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
156 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
157 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
158 | msn_soap_connection_sanitize(conn, TRUE); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
159 | g_queue_foreach(conn->queue, msn_soap_connection_destroy_foreach_cb, conn); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
160 | g_queue_free(conn->queue); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
161 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
162 | g_free(conn->host); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
163 | g_free(conn); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
164 | } |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
165 | |
|
21360
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
166 | static gboolean |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
167 | msn_soap_cleanup_each(gpointer key, gpointer value, gpointer data) |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
168 | { |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
169 | MsnSoapConnection *conn = value; |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
170 | time_t *t = data; |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
171 | |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
172 | if ((*t - conn->last_used) > SOAP_TIMEOUT * 2) { |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
173 | purple_debug_info("soap", "cleaning up soap conn %p\n", conn); |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
174 | return TRUE; |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
175 | } |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
176 | |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
177 | return FALSE; |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
178 | } |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
179 | |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
180 | static gboolean |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
181 | msn_soap_cleanup_for_session(gpointer data) |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
182 | { |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
183 | MsnSession *sess = data; |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
184 | time_t t = time(NULL); |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
185 | |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
186 | purple_debug_info("soap", "session cleanup timeout\n"); |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
187 | |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
188 | if (sess->soap_table) { |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
189 | g_hash_table_foreach_remove(sess->soap_table, msn_soap_cleanup_each, |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
190 | &t); |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
191 | |
|
24797
5d78589aee74
Remove the timer if sess->soap_table is NULL. I don't think this ever
Mark Doliner <markdoliner@pidgin.im>
parents:
24794
diff
changeset
|
192 | if (g_hash_table_size(sess->soap_table) != 0) |
|
5d78589aee74
Remove the timer if sess->soap_table is NULL. I don't think this ever
Mark Doliner <markdoliner@pidgin.im>
parents:
24794
diff
changeset
|
193 | return TRUE; |
|
21360
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
194 | } |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
195 | |
|
24797
5d78589aee74
Remove the timer if sess->soap_table is NULL. I don't think this ever
Mark Doliner <markdoliner@pidgin.im>
parents:
24794
diff
changeset
|
196 | sess->soap_cleanup_handle = 0; |
|
5d78589aee74
Remove the timer if sess->soap_table is NULL. I don't think this ever
Mark Doliner <markdoliner@pidgin.im>
parents:
24794
diff
changeset
|
197 | return FALSE; |
|
21360
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
198 | } |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
199 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
200 | static MsnSoapConnection * |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
201 | msn_soap_get_connection(MsnSession *session, const char *host) |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
202 | { |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
203 | MsnSoapConnection *conn = NULL; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
204 | |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
205 | if (session->soap_table) { |
|
21361
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
206 | conn = g_hash_table_lookup(session->soap_table, host); |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
207 | } else { |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
208 | session->soap_table = g_hash_table_new_full(g_str_hash, g_str_equal, |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
209 | NULL, (GDestroyNotify)msn_soap_connection_destroy); |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
210 | } |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
211 | |
|
21360
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
212 | if (session->soap_cleanup_handle == 0) |
|
24619
5ece4c87ea96
Use purple_timeout_add_seconds() instead of purple_timeout_add() in a
Mark Doliner <markdoliner@pidgin.im>
parents:
24289
diff
changeset
|
213 | session->soap_cleanup_handle = purple_timeout_add_seconds(SOAP_TIMEOUT, |
|
21360
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
214 | msn_soap_cleanup_for_session, session); |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
215 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
216 | if (conn == NULL) { |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
217 | conn = msn_soap_connection_new(session, host); |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
218 | g_hash_table_insert(session->soap_table, conn->host, conn); |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
219 | } |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
220 | |
|
21360
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
221 | conn->last_used = time(NULL); |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
222 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
223 | return conn; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
224 | } |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
225 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
226 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
227 | msn_soap_connection_handle_next(MsnSoapConnection *conn) |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
228 | { |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
229 | msn_soap_connection_sanitize(conn, FALSE); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
230 | |
|
24794
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
231 | conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, conn); |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
232 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
233 | if (conn->current_request) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
234 | MsnSoapRequest *req = conn->current_request; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
235 | conn->current_request = NULL; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
236 | msn_soap_connection_destroy_foreach_cb(req, conn); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
237 | } |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
238 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
239 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
240 | static void |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
241 | msn_soap_message_send_internal(MsnSession *session, MsnSoapMessage *message, |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
242 | const char *host, const char *path, gboolean secure, |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
243 | MsnSoapCallback cb, gpointer cb_data, gboolean first) |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
244 | { |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
245 | MsnSoapConnection *conn = msn_soap_get_connection(session, host); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
246 | MsnSoapRequest *req = g_new0(MsnSoapRequest, 1); |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
247 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
248 | req->path = g_strdup(path); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
249 | req->message = message; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
250 | req->secure = secure; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
251 | req->cb = cb; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
252 | req->cb_data = cb_data; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
253 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
254 | if (first) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
255 | g_queue_push_head(conn->queue, req); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
256 | } else { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
257 | g_queue_push_tail(conn->queue, req); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
258 | } |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
259 | |
|
24794
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
260 | if (conn->run_timer == 0) |
|
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
261 | conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
262 | conn); |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
263 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
264 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
265 | void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
266 | msn_soap_message_send(MsnSession *session, MsnSoapMessage *message, |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
267 | const char *host, const char *path, gboolean secure, |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
268 | MsnSoapCallback cb, gpointer cb_data) |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
269 | { |
|
24792
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
270 | g_return_if_fail(message != NULL); |
|
31297
3f3a8f0993e1
Everyone provides a callback here. Might as well make it required.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
30597
diff
changeset
|
271 | g_return_if_fail(cb != NULL); |
|
24792
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
272 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
273 | msn_soap_message_send_internal(session, message, host, path, secure, |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
274 | cb, cb_data, FALSE); |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
275 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
276 | |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
277 | static gboolean |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
278 | msn_soap_handle_redirect(MsnSoapConnection *conn, const char *url) |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
279 | { |
|
23797
be32acbae9ce
Use purple_url_parse for splitting up the MSN SOAP redirect instead of
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23794
diff
changeset
|
280 | char *host; |
|
be32acbae9ce
Use purple_url_parse for splitting up the MSN SOAP redirect instead of
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23794
diff
changeset
|
281 | char *path; |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
282 | |
|
23797
be32acbae9ce
Use purple_url_parse for splitting up the MSN SOAP redirect instead of
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23794
diff
changeset
|
283 | if (purple_url_parse(url, &host, NULL, &path, NULL, NULL)) { |
|
31298
34249a2a55ae
Using conn->current_request looks a bit iffy here. And even if it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31297
diff
changeset
|
284 | MsnSoapRequest *req = conn->current_request; |
|
34249a2a55ae
Using conn->current_request looks a bit iffy here. And even if it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31297
diff
changeset
|
285 | conn->current_request = NULL; |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
286 | |
|
31298
34249a2a55ae
Using conn->current_request looks a bit iffy here. And even if it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31297
diff
changeset
|
287 | msn_soap_message_send_internal(conn->session, req->message, host, path, |
|
34249a2a55ae
Using conn->current_request looks a bit iffy here. And even if it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31297
diff
changeset
|
288 | req->secure, req->cb, req->cb_data, TRUE); |
|
34249a2a55ae
Using conn->current_request looks a bit iffy here. And even if it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31297
diff
changeset
|
289 | |
|
34249a2a55ae
Using conn->current_request looks a bit iffy here. And even if it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31297
diff
changeset
|
290 | msn_soap_request_destroy(req, TRUE); |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
291 | |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
292 | g_free(host); |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
293 | g_free(path); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
294 | |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
295 | return TRUE; |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
296 | } |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
297 | |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
298 | return FALSE; |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
299 | } |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
300 | |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
301 | static gboolean |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
302 | msn_soap_handle_body(MsnSoapConnection *conn, MsnSoapMessage *response) |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
303 | { |
|
21361
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
304 | xmlnode *body = xmlnode_get_child(response->xml, "Body"); |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
305 | xmlnode *fault = xmlnode_get_child(response->xml, "Fault"); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
306 | |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
307 | if (fault) { |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
308 | xmlnode *faultcode = xmlnode_get_child(fault, "faultcode"); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
309 | |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
310 | if (faultcode != NULL) { |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
311 | char *faultdata = xmlnode_get_data(faultcode); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
312 | |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
313 | if (g_str_equal(faultdata, "psf:Redirect")) { |
|
23794
3175e940fa12
Use the correct xmlnode when processing SOAP Faults.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23787
diff
changeset
|
314 | xmlnode *url = xmlnode_get_child(fault, "redirectUrl"); |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
315 | |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
316 | if (url) { |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
317 | char *urldata = xmlnode_get_data(url); |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
318 | msn_soap_handle_redirect(conn, urldata); |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
319 | g_free(urldata); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
320 | } |
| 21358 | 321 | |
| 322 | g_free(faultdata); | |
|
23762
8bb3533742fd
fixed a memleak or 3, or maybe 4, or 5. Some of these applies to the p14
Ka-Hing Cheung <khc@pidgin.im>
parents:
23760
diff
changeset
|
323 | msn_soap_message_destroy(response); |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
324 | return TRUE; |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
325 | } else if (g_str_equal(faultdata, "wsse:FailedAuthentication")) { |
|
23794
3175e940fa12
Use the correct xmlnode when processing SOAP Faults.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23787
diff
changeset
|
326 | xmlnode *reason = xmlnode_get_child(fault, "faultstring"); |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
327 | char *reasondata = xmlnode_get_data(reason); |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
328 | |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
329 | msn_soap_connection_sanitize(conn, TRUE); |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
330 | msn_session_set_error(conn->session, MSN_ERROR_AUTH, |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
331 | reasondata); |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
332 | |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
333 | g_free(reasondata); |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
334 | g_free(faultdata); |
|
23762
8bb3533742fd
fixed a memleak or 3, or maybe 4, or 5. Some of these applies to the p14
Ka-Hing Cheung <khc@pidgin.im>
parents:
23760
diff
changeset
|
335 | msn_soap_message_destroy(response); |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
336 | return FALSE; |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
337 | } |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
338 | |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
339 | g_free(faultdata); |
| 21358 | 340 | } |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
341 | } |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
342 | |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
343 | if (fault || body) { |
|
25547
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
344 | if (conn->current_request) { |
|
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
345 | MsnSoapRequest *request = conn->current_request; |
|
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
346 | conn->current_request = NULL; |
|
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
347 | request->cb(request->message, response, |
|
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
348 | request->cb_data); |
|
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
349 | msn_soap_request_destroy(request, FALSE); |
|
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
350 | } |
|
23762
8bb3533742fd
fixed a memleak or 3, or maybe 4, or 5. Some of these applies to the p14
Ka-Hing Cheung <khc@pidgin.im>
parents:
23760
diff
changeset
|
351 | msn_soap_message_destroy(response); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
352 | } |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
353 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
354 | return TRUE; |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
355 | } |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
356 | |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
357 | static void |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
358 | msn_soap_message_add_header(MsnSoapMessage *message, |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
359 | const char *name, const char *value) |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
360 | { |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
361 | char *header = g_strdup_printf("%s: %s\r\n", name, value); |
|
24289
eee560dd9d2c
shuffle some code around to make sure are using the right errno,
Ka-Hing Cheung <khc@pidgin.im>
parents:
24216
diff
changeset
|
362 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
363 | message->headers = g_slist_prepend(message->headers, header); |
|
23469
74429b4ad296
Patch from tomgr and Maiku that workarounds some OS X issue,
Ka-Hing Cheung <khc@pidgin.im>
parents:
23078
diff
changeset
|
364 | } |
|
21398
a31c84608fcb
read as much from the fd as possible if we get a read event, hopefully will
Ka-Hing Cheung <khc@pidgin.im>
parents:
21391
diff
changeset
|
365 | |
|
23469
74429b4ad296
Patch from tomgr and Maiku that workarounds some OS X issue,
Ka-Hing Cheung <khc@pidgin.im>
parents:
23078
diff
changeset
|
366 | static void |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
367 | msn_soap_process(MsnSoapConnection *conn) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
368 | { |
|
23469
74429b4ad296
Patch from tomgr and Maiku that workarounds some OS X issue,
Ka-Hing Cheung <khc@pidgin.im>
parents:
23078
diff
changeset
|
369 | gboolean handled = FALSE; |
|
74429b4ad296
Patch from tomgr and Maiku that workarounds some OS X issue,
Ka-Hing Cheung <khc@pidgin.im>
parents:
23078
diff
changeset
|
370 | char *cursor; |
|
74429b4ad296
Patch from tomgr and Maiku that workarounds some OS X issue,
Ka-Hing Cheung <khc@pidgin.im>
parents:
23078
diff
changeset
|
371 | char *linebreak; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
372 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
373 | cursor = conn->buf->str + conn->handled_len; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
374 | |
|
21361
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
375 | if (!conn->headers_done) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
376 | while ((linebreak = strstr(cursor, "\r\n")) != NULL) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
377 | conn->handled_len = linebreak - conn->buf->str + 2; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
378 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
379 | if (conn->response_code == 0) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
380 | if (sscanf(cursor, "HTTP/1.1 %d", &conn->response_code) != 1) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
381 | /* something horribly wrong */ |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
382 | purple_ssl_close(conn->ssl); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
383 | conn->ssl = NULL; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
384 | msn_soap_connection_handle_next(conn); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
385 | handled = TRUE; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
386 | break; |
|
27996
25d2f18b9c67
If the SOAP server returns a 503 AND we haven't yet authenticated, then
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27543
diff
changeset
|
387 | } else if (conn->response_code == 503 && conn->session->login_step < MSN_LOGIN_STEP_END) { |
|
21361
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
388 | msn_soap_connection_sanitize(conn, TRUE); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
389 | msn_session_set_error(conn->session, MSN_ERROR_SERV_UNAVAILABLE, NULL); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
390 | return; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
391 | } |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
392 | } else if (cursor == linebreak) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
393 | /* blank line */ |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
394 | conn->headers_done = TRUE; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
395 | cursor = conn->buf->str + conn->handled_len; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
396 | break; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
397 | } else { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
398 | char *line = g_strndup(cursor, linebreak - cursor); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
399 | char *sep = strstr(line, ": "); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
400 | char *key = line; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
401 | char *value; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
402 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
403 | if (sep == NULL) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
404 | purple_debug_info("soap", "ignoring malformed line: %s\n", line); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
405 | g_free(line); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
406 | goto loop_end; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
407 | } |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
408 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
409 | value = sep + 2; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
410 | *sep = '\0'; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
411 | msn_soap_message_add_header(conn->message, key, value); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
412 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
413 | if ((conn->response_code == 301 || conn->response_code == 300) |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
414 | && strcmp(key, "Location") == 0) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
415 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
416 | msn_soap_handle_redirect(conn, value); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
417 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
418 | handled = TRUE; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
419 | g_free(line); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
420 | break; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
421 | } else if (conn->response_code == 401 && |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
422 | strcmp(key, "WWW-Authenticate") == 0) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
423 | char *error = strstr(value, "cbtxt="); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
424 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
425 | if (error) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
426 | error += strlen("cbtxt="); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
427 | } |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
428 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
429 | msn_soap_connection_sanitize(conn, TRUE); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
430 | msn_session_set_error(conn->session, MSN_ERROR_AUTH, |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
431 | error ? purple_url_decode(error) : NULL); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
432 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
433 | g_free(line); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
434 | return; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
435 | } else if (strcmp(key, "Content-Length") == 0) { |
|
25694
8de2400e6984
Use sscanf to parse to parse the Content-Length to ensure consistent parsing for the target variable type. This comes out of the Veracode analysis.
Daniel Atallah <datallah@pidgin.im>
parents:
25547
diff
changeset
|
436 | sscanf(value, "%" G_GSIZE_FORMAT, &(conn->body_len)); |
|
21361
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
437 | } else if (strcmp(key, "Connection") == 0) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
438 | if (strcmp(value, "close") == 0) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
439 | conn->close_when_done = TRUE; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
440 | } |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
441 | } |
| 21364 | 442 | g_free(line); |
|
21361
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
443 | } |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
444 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
445 | loop_end: |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
446 | cursor = conn->buf->str + conn->handled_len; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
447 | } |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
448 | } |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
449 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
450 | if (!handled && conn->headers_done) { |
|
22981
b83a23981419
Fix a number of leaks. As far as I can tell, MSNP14 now logs in without
Daniel Atallah <datallah@pidgin.im>
parents:
22060
diff
changeset
|
451 | if (conn->buf->len - conn->handled_len >= |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
452 | conn->body_len) { |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
453 | xmlnode *node = xmlnode_from_str(cursor, conn->body_len); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
454 | |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
455 | if (node == NULL) { |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
456 | purple_debug_info("soap", "Malformed SOAP response: %s\n", |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
457 | cursor); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
458 | } else { |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
459 | MsnSoapMessage *message = conn->message; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
460 | conn->message = NULL; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
461 | message->xml = node; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
462 | |
|
22981
b83a23981419
Fix a number of leaks. As far as I can tell, MSNP14 now logs in without
Daniel Atallah <datallah@pidgin.im>
parents:
22060
diff
changeset
|
463 | if (!msn_soap_handle_body(conn, message)) { |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
464 | return; |
|
22981
b83a23981419
Fix a number of leaks. As far as I can tell, MSNP14 now logs in without
Daniel Atallah <datallah@pidgin.im>
parents:
22060
diff
changeset
|
465 | } |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
466 | } |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
467 | |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
468 | msn_soap_connection_handle_next(conn); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
469 | } |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
470 | |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
471 | return; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
472 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
473 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
474 | if (handled) { |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
475 | msn_soap_connection_handle_next(conn); |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
476 | } |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
477 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
478 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
479 | static void |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
480 | msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond) |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
481 | { |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
482 | MsnSoapConnection *conn = data; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
483 | int count = 0, cnt, perrno; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
484 | /* This buffer needs to be larger than any packets received from |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
485 | login.live.com or Adium will fail to receive the packet |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
486 | (something weird with the login.live.com server). With NSS it works |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
487 | fine, so I believe it's some bug with OS X */ |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
488 | char buf[16 * 1024]; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
489 | gsize cursor; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
490 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
491 | if (conn->message == NULL) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
492 | conn->message = msn_soap_message_new(NULL, NULL); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
493 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
494 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
495 | if (conn->buf == NULL) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
496 | conn->buf = g_string_new_len(buf, 0); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
497 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
498 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
499 | cursor = conn->buf->len; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
500 | while ((cnt = purple_ssl_read(conn->ssl, buf, sizeof(buf))) > 0) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
501 | purple_debug_info("soap", "read %d bytes\n", cnt); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
502 | count += cnt; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
503 | g_string_append_len(conn->buf, buf, cnt); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
504 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
505 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
506 | perrno = errno; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
507 | if (cnt < 0 && perrno != EAGAIN) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
508 | purple_debug_info("soap", "read: %s\n", g_strerror(perrno)); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
509 | |
|
25416
08467e65ce8f
make this toggleable via env instead of #define
Ka-Hing Cheung <khc@pidgin.im>
parents:
25415
diff
changeset
|
510 | if (conn->current_request && conn->current_request->secure && |
|
30597
4454f3c6da08
There's no reason to cache this value, right?
Mark Doliner <markdoliner@pidgin.im>
parents:
28345
diff
changeset
|
511 | !purple_debug_is_unsafe()) |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
512 | purple_debug_misc("soap", "Received secure request.\n"); |
|
25416
08467e65ce8f
make this toggleable via env instead of #define
Ka-Hing Cheung <khc@pidgin.im>
parents:
25415
diff
changeset
|
513 | else if (count != 0) |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
514 | purple_debug_misc("soap", "current %s\n", conn->buf->str + cursor); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
515 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
516 | /* && count is necessary for Adium, on OS X the last read always |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
517 | return an error, so we want to proceed anyway. See #5212 for |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
518 | discussion on this and the above buffer size issues */ |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
519 | if(cnt < 0 && errno == EAGAIN && count == 0) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
520 | return; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
521 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
522 | /* msn_soap_process could alter errno */ |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
523 | msn_soap_process(conn); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
524 | |
|
25259
9e602f04ed84
I'm guessing this is what was intended here?
Mark Doliner <markdoliner@pidgin.im>
parents:
25243
diff
changeset
|
525 | if ((cnt < 0 && perrno != EAGAIN) || cnt == 0) { |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
526 | /* It's possible msn_soap_process closed the ssl connection */ |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
527 | if (conn->ssl) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
528 | purple_ssl_close(conn->ssl); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
529 | conn->ssl = NULL; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
530 | msn_soap_connection_handle_next(conn); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
531 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
532 | } |
|
23774
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
533 | } |
|
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
534 | |
|
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
535 | static gboolean |
|
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
536 | msn_soap_write_cb_internal(gpointer data, gint fd, PurpleInputCondition cond, |
|
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
537 | gboolean initial) |
|
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
538 | { |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
539 | MsnSoapConnection *conn = data; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
540 | int written; |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
541 | |
|
24793
11fa724fee55
Formatting change: Split these if statements on to two lines
Mark Doliner <markdoliner@pidgin.im>
parents:
24792
diff
changeset
|
542 | if (cond != PURPLE_INPUT_WRITE) |
|
11fa724fee55
Formatting change: Split these if statements on to two lines
Mark Doliner <markdoliner@pidgin.im>
parents:
24792
diff
changeset
|
543 | return TRUE; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
544 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
545 | written = purple_ssl_write(conn->ssl, conn->buf->str + conn->handled_len, |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
546 | conn->buf->len - conn->handled_len); |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
547 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
548 | if (written < 0 && errno == EAGAIN) |
|
23774
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
549 | return TRUE; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
550 | else if (written <= 0) { |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
551 | purple_ssl_close(conn->ssl); |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
552 | conn->ssl = NULL; |
|
24793
11fa724fee55
Formatting change: Split these if statements on to two lines
Mark Doliner <markdoliner@pidgin.im>
parents:
24792
diff
changeset
|
553 | if (!initial) |
|
11fa724fee55
Formatting change: Split these if statements on to two lines
Mark Doliner <markdoliner@pidgin.im>
parents:
24792
diff
changeset
|
554 | msn_soap_connection_handle_next(conn); |
|
23774
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
555 | return FALSE; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
556 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
557 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
558 | conn->handled_len += written; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
559 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
560 | if (conn->handled_len < conn->buf->len) |
|
23774
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
561 | return TRUE; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
562 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
563 | /* we are done! */ |
| 21358 | 564 | g_string_free(conn->buf, TRUE); |
| 565 | conn->buf = NULL; | |
| 566 | conn->handled_len = 0; | |
| 567 | conn->body_len = 0; | |
| 568 | conn->response_code = 0; | |
| 569 | conn->headers_done = FALSE; | |
| 570 | conn->close_when_done = FALSE; | |
| 571 | ||
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
572 | purple_input_remove(conn->event_handle); |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
573 | conn->event_handle = purple_input_add(conn->ssl->fd, PURPLE_INPUT_READ, |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
574 | msn_soap_read_cb, conn); |
|
23774
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
575 | return TRUE; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
576 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
577 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
578 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
579 | msn_soap_write_cb(gpointer data, gint fd, PurpleInputCondition cond) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
580 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
581 | msn_soap_write_cb_internal(data, fd, cond, FALSE); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
582 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
583 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
584 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
585 | msn_soap_error_cb(PurpleSslConnection *ssl, PurpleSslErrorType error, |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
586 | gpointer data) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
587 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
588 | MsnSoapConnection *conn = data; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
589 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
590 | /* sslconn already frees the connection in case of error */ |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
591 | conn->ssl = NULL; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
592 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
593 | g_hash_table_remove(conn->session->soap_table, conn->host); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
594 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
595 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
596 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
597 | msn_soap_connected_cb(gpointer data, PurpleSslConnection *ssl, |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
598 | PurpleInputCondition cond) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
599 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
600 | MsnSoapConnection *conn = data; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
601 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
602 | conn->connected = TRUE; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
603 | |
|
24794
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
604 | if (conn->run_timer == 0) |
|
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
605 | conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, conn); |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
606 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
607 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
608 | MsnSoapMessage * |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
609 | msn_soap_message_new(const char *action, xmlnode *xml) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
610 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
611 | MsnSoapMessage *message = g_new0(MsnSoapMessage, 1); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
612 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
613 | message->action = g_strdup(action); |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
614 | message->xml = xml; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
615 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
616 | return message; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
617 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
618 | |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
619 | static gboolean |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
620 | msn_soap_connection_run(gpointer data) |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
621 | { |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
622 | MsnSoapConnection *conn = data; |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
623 | MsnSoapRequest *req = g_queue_peek_head(conn->queue); |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
624 | |
|
24794
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
625 | conn->run_timer = 0; |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
626 | |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
627 | if (req) { |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
628 | if (conn->ssl == NULL) { |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
629 | conn->ssl = purple_ssl_connect(conn->session->account, conn->host, |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
630 | 443, msn_soap_connected_cb, msn_soap_error_cb, conn); |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
631 | } else if (conn->connected) { |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
632 | int len = -1; |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
633 | char *body = xmlnode_to_str(req->message->xml, &len); |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
634 | GSList *iter; |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
635 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
636 | g_queue_pop_head(conn->queue); |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
637 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
638 | conn->buf = g_string_new(""); |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
639 | |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
640 | g_string_append_printf(conn->buf, |
|
23798
604090d9bfb0
Don't free the SOAP message when we're still using it for a redirect.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23797
diff
changeset
|
641 | "POST /%s HTTP/1.1\r\n" |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
642 | "SOAPAction: %s\r\n" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
643 | "Content-Type:text/xml; charset=utf-8\r\n" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
644 | "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
645 | "Accept: */*\r\n" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
646 | "Host: %s\r\n" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
647 | "Content-Length: %d\r\n" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
648 | "Connection: Keep-Alive\r\n" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
649 | "Cache-Control: no-cache\r\n", |
|
21356
50afac513011
handle unauthenticated soap connection
Ka-Hing Cheung <khc@pidgin.im>
parents:
21355
diff
changeset
|
650 | req->path, req->message->action ? req->message->action : "", |
|
23757
bf5c8c3d6374
Patch 3 from Qulogic, this one updates contact list actions to use ticket
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
21672
diff
changeset
|
651 | conn->host, len); |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
652 | |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
653 | for (iter = req->message->headers; iter; iter = iter->next) { |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
654 | g_string_append(conn->buf, (char *)iter->data); |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
655 | g_string_append(conn->buf, "\r\n"); |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
656 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
657 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
658 | g_string_append(conn->buf, "\r\n"); |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
659 | g_string_append(conn->buf, body); |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
660 | |
|
30597
4454f3c6da08
There's no reason to cache this value, right?
Mark Doliner <markdoliner@pidgin.im>
parents:
28345
diff
changeset
|
661 | if (req->secure && !purple_debug_is_unsafe()) |
|
24045
e0c6a01eca85
Relegate XML dumped by msn's SOAP code to MISC from INFO.
Will Thompson <resiak@pidgin.im>
parents:
23938
diff
changeset
|
662 | purple_debug_misc("soap", "Sending secure request.\n"); |
|
23925
aa38fbc30cfb
Don't print SOAP messages to debug log for "secure" requests. This is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23846
diff
changeset
|
663 | else |
|
25416
08467e65ce8f
make this toggleable via env instead of #define
Ka-Hing Cheung <khc@pidgin.im>
parents:
25415
diff
changeset
|
664 | purple_debug_misc("soap", "%s\n", conn->buf->str); |
| 21358 | 665 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
666 | conn->handled_len = 0; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
667 | conn->current_request = req; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
668 | |
|
27126
9cc2cee805c1
Get rid of a runtime warning on connect.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
25749
diff
changeset
|
669 | if (conn->event_handle) |
|
9cc2cee805c1
Get rid of a runtime warning on connect.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
25749
diff
changeset
|
670 | purple_input_remove(conn->event_handle); |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
671 | conn->event_handle = purple_input_add(conn->ssl->fd, |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
672 | PURPLE_INPUT_WRITE, msn_soap_write_cb, conn); |
|
23774
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
673 | if (!msn_soap_write_cb_internal(conn, conn->ssl->fd, PURPLE_INPUT_WRITE, TRUE)) { |
|
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
674 | /* Not connected => reconnect and retry */ |
|
23819
c3bbef4646b1
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23798
diff
changeset
|
675 | purple_debug_info("soap", "not connected, reconnecting\n"); |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
676 | |
|
23774
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
677 | conn->connected = FALSE; |
|
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
678 | conn->current_request = NULL; |
|
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
679 | msn_soap_connection_sanitize(conn, FALSE); |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
680 | |
|
23774
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
681 | g_queue_push_head(conn->queue, req); |
|
24794
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
682 | conn->run_timer = purple_timeout_add(0, msn_soap_connection_run, conn); |
|
23774
032236e2eb9e
Patch from tomgr to resend once if the connection is down, fixes #5379
Ka-Hing Cheung <khc@pidgin.im>
parents:
23773
diff
changeset
|
683 | } |
|
21356
50afac513011
handle unauthenticated soap connection
Ka-Hing Cheung <khc@pidgin.im>
parents:
21355
diff
changeset
|
684 | |
| 21364 | 685 | g_free(body); |
|
22981
b83a23981419
Fix a number of leaks. As far as I can tell, MSNP14 now logs in without
Daniel Atallah <datallah@pidgin.im>
parents:
22060
diff
changeset
|
686 | } |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
687 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
688 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
689 | return FALSE; |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
690 | } |