Mon, 13 Jul 2009 05:01:42 +0000
On MSN, pop up an "invite message" request similar to oscar, and send that
in the add request. We really should try and move this into the add buddy
dialog instead of an extra prompt.
Fixes #8503.
|
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 |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
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; |
|
25416
08467e65ce8f
make this toggleable via env instead of #define
Ka-Hing Cheung <khc@pidgin.im>
parents:
25415
diff
changeset
|
71 | gboolean unsafe_debug; |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
72 | } MsnSoapConnection; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
73 | |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
74 | 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
|
75 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
76 | static MsnSoapConnection * |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
77 | 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
|
78 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
79 | 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
|
80 | 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
|
81 | 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
|
82 | conn->queue = g_queue_new(); |
|
27543
96889def856c
Convert all uses of PURPLE_UNSAFE_DEBUG to the new API I added.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27361
diff
changeset
|
83 | conn->unsafe_debug = 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
|
84 | return conn; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
85 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
86 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
87 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
88 | 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
|
89 | { |
|
24792
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
90 | 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
|
91 | g_slist_free(message->headers); |
|
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
92 | g_free(message->action); |
|
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
93 | if (message->xml) |
|
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
94 | xmlnode_free(message->xml); |
|
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
95 | 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
|
96 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
97 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
98 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
99 | 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
|
100 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
101 | 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
|
102 | 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
|
103 | 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
|
104 | 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
|
105 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
106 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
107 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
108 | 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
|
109 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
110 | 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
|
111 | 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
|
112 | 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
|
113 | } |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
114 | |
|
24794
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
115 | 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
|
116 | 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
|
117 | 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
|
118 | } |
|
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
119 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
120 | 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
|
121 | 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
|
122 | 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
|
123 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
124 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
125 | 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
|
126 | 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
|
127 | 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
|
128 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
129 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
130 | 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
|
131 | 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
|
132 | 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
|
133 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
134 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
135 | 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
|
136 | 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
|
137 | 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
|
138 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
139 | } |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
140 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
141 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
142 | 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
|
143 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
144 | 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
|
145 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
146 | if (req->cb) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
147 | req->cb(req->message, NULL, req->cb_data); |
|
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 | 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
|
150 | } |
|
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 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
153 | 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
|
154 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
155 | 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
|
156 | 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
|
157 | 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
|
158 | 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
|
159 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
160 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
161 | 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
|
162 | 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
|
163 | 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
|
164 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
165 | 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
|
166 | 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
|
167 | } |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
168 | |
|
21360
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
169 | static gboolean |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
170 | 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
|
171 | { |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
172 | MsnSoapConnection *conn = value; |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
173 | time_t *t = data; |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
174 | |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
175 | 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
|
176 | 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
|
177 | return TRUE; |
|
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 | return FALSE; |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
181 | } |
|
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 | static gboolean |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
184 | msn_soap_cleanup_for_session(gpointer data) |
|
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 | MsnSession *sess = data; |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
187 | time_t t = time(NULL); |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
188 | |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
189 | 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
|
190 | |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
191 | if (sess->soap_table) { |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
192 | 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
|
193 | &t); |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
194 | |
|
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
|
195 | 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
|
196 | return TRUE; |
|
21360
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
197 | } |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
198 | |
|
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
|
199 | 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
|
200 | return FALSE; |
|
21360
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
201 | } |
|
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 | 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
|
204 | 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
|
205 | { |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
206 | 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
|
207 | |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
208 | 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
|
209 | 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
|
210 | } else { |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
211 | 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
|
212 | 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
|
213 | } |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
214 | |
|
21360
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
215 | 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
|
216 | 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
|
217 | msn_soap_cleanup_for_session, session); |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
218 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
219 | 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
|
220 | 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
|
221 | 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
|
222 | } |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
223 | |
|
21360
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
224 | conn->last_used = time(NULL); |
|
92d5c6c58c85
cleanup soap connection with a timeout
Ka-Hing Cheung <khc@pidgin.im>
parents:
21358
diff
changeset
|
225 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
226 | 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
|
227 | } |
|
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 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
230 | 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
|
231 | { |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
232 | 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
|
233 | |
|
24794
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
234 | 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
|
235 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
236 | 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
|
237 | 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
|
238 | 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
|
239 | 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
|
240 | } |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
241 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
242 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
243 | 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
|
244 | 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
|
245 | 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
|
246 | 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
|
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 | 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
|
249 | 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
|
250 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
251 | 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
|
252 | 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
|
253 | 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
|
254 | 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
|
255 | 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
|
256 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
257 | if (first) { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
258 | 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
|
259 | } else { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
260 | 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
|
261 | } |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
262 | |
|
24794
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
263 | 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
|
264 | 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
|
265 | conn); |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
266 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
267 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
268 | void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
269 | 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
|
270 | 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
|
271 | 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
|
272 | { |
|
24792
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
273 | g_return_if_fail(message != NULL); |
|
22453f0066b4
I don't believe message should ever be null
Mark Doliner <markdoliner@pidgin.im>
parents:
24791
diff
changeset
|
274 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
275 | 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
|
276 | cb, cb_data, FALSE); |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
277 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
278 | |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
279 | 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
|
280 | 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
|
281 | { |
|
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
|
282 | 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
|
283 | char *path; |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
284 | |
|
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
|
285 | if (purple_url_parse(url, &host, NULL, &path, NULL, NULL)) { |
|
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
|
286 | msn_soap_message_send_internal(conn->session, conn->current_request->message, |
|
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
|
287 | host, path, conn->current_request->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
|
288 | conn->current_request->cb, conn->current_request->cb_data, TRUE); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
289 | |
|
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
|
290 | msn_soap_request_destroy(conn->current_request, 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 | conn->current_request = NULL; |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
292 | |
|
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(host); |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
294 | g_free(path); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
295 | |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
296 | return TRUE; |
|
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 | |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
299 | return FALSE; |
|
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 | |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
302 | 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
|
303 | 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
|
304 | { |
|
21361
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
305 | 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
|
306 | 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
|
307 | |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
308 | if (fault) { |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
309 | 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
|
310 | |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
311 | if (faultcode != NULL) { |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
312 | 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
|
313 | |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
314 | 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
|
315 | 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
|
316 | |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
317 | if (url) { |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
318 | char *urldata = xmlnode_get_data(url); |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
319 | msn_soap_handle_redirect(conn, urldata); |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
320 | g_free(urldata); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
321 | } |
| 21358 | 322 | |
| 323 | 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
|
324 | msn_soap_message_destroy(response); |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
325 | return TRUE; |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
326 | } 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
|
327 | 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
|
328 | char *reasondata = xmlnode_get_data(reason); |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
329 | |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
330 | msn_soap_connection_sanitize(conn, TRUE); |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
331 | 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
|
332 | reasondata); |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
333 | |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
334 | g_free(reasondata); |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
335 | 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
|
336 | msn_soap_message_destroy(response); |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
337 | return FALSE; |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
338 | } |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
339 | |
|
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
340 | g_free(faultdata); |
| 21358 | 341 | } |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
342 | } |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
343 | |
|
21672
cb25ada4f6a0
soap faults are now properly handled
Ka-Hing Cheung <khc@pidgin.im>
parents:
21398
diff
changeset
|
344 | if (fault || body) { |
|
25547
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
345 | if (conn->current_request) { |
|
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
346 | MsnSoapRequest *request = conn->current_request; |
|
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
347 | conn->current_request = NULL; |
|
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
348 | request->cb(request->message, response, |
|
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
349 | request->cb_data); |
|
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
350 | msn_soap_request_destroy(request, FALSE); |
|
6f84a4a36cad
conn->current_request can be NULL here.
Daniel Atallah <datallah@pidgin.im>
parents:
25416
diff
changeset
|
351 | } |
|
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
|
352 | msn_soap_message_destroy(response); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
353 | } |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
354 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
355 | return TRUE; |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
356 | } |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
357 | |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
358 | 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
|
359 | 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
|
360 | 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
|
361 | { |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
362 | 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
|
363 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
364 | 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
|
365 | } |
|
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
|
366 | |
|
23469
74429b4ad296
Patch from tomgr and Maiku that workarounds some OS X issue,
Ka-Hing Cheung <khc@pidgin.im>
parents:
23078
diff
changeset
|
367 | 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
|
368 | 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
|
369 | { |
|
23469
74429b4ad296
Patch from tomgr and Maiku that workarounds some OS X issue,
Ka-Hing Cheung <khc@pidgin.im>
parents:
23078
diff
changeset
|
370 | 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
|
371 | char *cursor; |
|
74429b4ad296
Patch from tomgr and Maiku that workarounds some OS X issue,
Ka-Hing Cheung <khc@pidgin.im>
parents:
23078
diff
changeset
|
372 | char *linebreak; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
373 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
374 | 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
|
375 | |
|
21361
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
376 | if (!conn->headers_done) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
377 | 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
|
378 | 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
|
379 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
380 | 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
|
381 | 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
|
382 | /* something horribly wrong */ |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
383 | 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
|
384 | conn->ssl = NULL; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
385 | 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
|
386 | handled = TRUE; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
387 | break; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
388 | } else if (conn->response_code == 503) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
389 | 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
|
390 | 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
|
391 | return; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
392 | } |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
393 | } else if (cursor == linebreak) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
394 | /* blank line */ |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
395 | conn->headers_done = TRUE; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
396 | 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
|
397 | break; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
398 | } else { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
399 | 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
|
400 | char *sep = strstr(line, ": "); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
401 | char *key = line; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
402 | char *value; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
403 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
404 | if (sep == NULL) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
405 | 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
|
406 | g_free(line); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
407 | goto loop_end; |
|
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 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
410 | value = sep + 2; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
411 | *sep = '\0'; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
412 | 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
|
413 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
414 | 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
|
415 | && strcmp(key, "Location") == 0) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
416 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
417 | 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
|
418 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
419 | handled = TRUE; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
420 | g_free(line); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
421 | break; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
422 | } 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
|
423 | 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
|
424 | 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
|
425 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
426 | if (error) { |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
427 | error += strlen("cbtxt="); |
|
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 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
430 | 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
|
431 | 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
|
432 | 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
|
433 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
434 | g_free(line); |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
435 | return; |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
436 | } 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
|
437 | 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
|
438 | } 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
|
439 | 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
|
440 | 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
|
441 | } |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
442 | } |
| 21364 | 443 | g_free(line); |
|
21361
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 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
446 | loop_end: |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
447 | 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
|
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 | |
|
f890366c8ec6
oim migrated to new soap code, quadruply duplicated message!
Ka-Hing Cheung <khc@pidgin.im>
parents:
21360
diff
changeset
|
451 | 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
|
452 | 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
|
453 | 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
|
454 | 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
|
455 | |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
456 | if (node == NULL) { |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
457 | 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
|
458 | cursor); |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
459 | } 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
|
460 | 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
|
461 | 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
|
462 | 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
|
463 | |
|
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
|
464 | 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
|
465 | 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
|
466 | } |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
467 | } |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
468 | |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
469 | 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
|
470 | } |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
471 | |
|
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
472 | return; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
473 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
474 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
475 | 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
|
476 | 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
|
477 | } |
|
21353
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 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
480 | 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
|
481 | 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
|
482 | { |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
483 | 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
|
484 | 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
|
485 | /* 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
|
486 | 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
|
487 | (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
|
488 | 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
|
489 | 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
|
490 | gsize cursor; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
491 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
492 | 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
|
493 | 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
|
494 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
495 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
496 | 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
|
497 | 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
|
498 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
499 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
500 | 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
|
501 | 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
|
502 | 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
|
503 | count += cnt; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
504 | 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
|
505 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
506 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
507 | perrno = errno; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
508 | 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
|
509 | 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
|
510 | |
|
25416
08467e65ce8f
make this toggleable via env instead of #define
Ka-Hing Cheung <khc@pidgin.im>
parents:
25415
diff
changeset
|
511 | if (conn->current_request && conn->current_request->secure && |
|
08467e65ce8f
make this toggleable via env instead of #define
Ka-Hing Cheung <khc@pidgin.im>
parents:
25415
diff
changeset
|
512 | !conn->unsafe_debug) |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
513 | 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
|
514 | 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
|
515 | 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
|
516 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
517 | /* && 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
|
518 | 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
|
519 | 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
|
520 | 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
|
521 | return; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
522 | |
|
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 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
|
524 | 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
|
525 | |
|
25259
9e602f04ed84
I'm guessing this is what was intended here?
Mark Doliner <markdoliner@pidgin.im>
parents:
25243
diff
changeset
|
526 | 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
|
527 | /* 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
|
528 | 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
|
529 | 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
|
530 | 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
|
531 | 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
|
532 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
533 | } |
|
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
|
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 | |
|
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 | 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
|
537 | 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
|
538 | 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
|
539 | { |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
540 | MsnSoapConnection *conn = data; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
541 | int written; |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
542 | |
|
24793
11fa724fee55
Formatting change: Split these if statements on to two lines
Mark Doliner <markdoliner@pidgin.im>
parents:
24792
diff
changeset
|
543 | 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
|
544 | return TRUE; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
545 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
546 | 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
|
547 | 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
|
548 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
549 | 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
|
550 | return TRUE; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
551 | 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
|
552 | 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
|
553 | conn->ssl = NULL; |
|
24793
11fa724fee55
Formatting change: Split these if statements on to two lines
Mark Doliner <markdoliner@pidgin.im>
parents:
24792
diff
changeset
|
554 | if (!initial) |
|
11fa724fee55
Formatting change: Split these if statements on to two lines
Mark Doliner <markdoliner@pidgin.im>
parents:
24792
diff
changeset
|
555 | 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
|
556 | return FALSE; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
557 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
558 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
559 | conn->handled_len += written; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
560 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
561 | 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
|
562 | return TRUE; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
563 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
564 | /* we are done! */ |
| 21358 | 565 | g_string_free(conn->buf, TRUE); |
| 566 | conn->buf = NULL; | |
| 567 | conn->handled_len = 0; | |
| 568 | conn->body_len = 0; | |
| 569 | conn->response_code = 0; | |
| 570 | conn->headers_done = FALSE; | |
| 571 | conn->close_when_done = FALSE; | |
| 572 | ||
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
573 | 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
|
574 | 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
|
575 | 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
|
576 | return TRUE; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
577 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
578 | |
|
24791
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
579 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
580 | 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
|
581 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
582 | 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
|
583 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
584 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
585 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
586 | 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
|
587 | gpointer data) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
588 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
589 | 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
|
590 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
591 | /* 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
|
592 | 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
|
593 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
594 | 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
|
595 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
596 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
597 | static void |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
598 | 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
|
599 | PurpleInputCondition cond) |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
600 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
601 | 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
|
602 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
603 | 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
|
604 | |
|
24794
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
605 | 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
|
606 | 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
|
607 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
608 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
609 | MsnSoapMessage * |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
610 | 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
|
611 | { |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
612 | 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
|
613 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
614 | 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
|
615 | 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
|
616 | |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
617 | return message; |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
618 | } |
|
6e1d82706043
Minor whitespace changes and shuffle functions around to be in a more
Mark Doliner <markdoliner@pidgin.im>
parents:
24713
diff
changeset
|
619 | |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
620 | 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
|
621 | 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
|
622 | { |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
623 | MsnSoapConnection *conn = data; |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
624 | 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
|
625 | |
|
24794
1f4f77e2e111
Use separate variables to keep track of the timer and the watcher.
Mark Doliner <markdoliner@pidgin.im>
parents:
24793
diff
changeset
|
626 | 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
|
627 | |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
628 | if (req) { |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
629 | 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
|
630 | 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
|
631 | 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
|
632 | } else if (conn->connected) { |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
633 | 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
|
634 | 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
|
635 | GSList *iter; |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
636 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
637 | 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
|
638 | |
|
21355
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
639 | 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
|
640 | |
|
500740852250
removes public handle to soap connection, instead a connection is looked up
Ka-Hing Cheung <khc@pidgin.im>
parents:
21354
diff
changeset
|
641 | 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
|
642 | "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
|
643 | "SOAPAction: %s\r\n" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
644 | "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
|
645 | "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
|
646 | "Accept: */*\r\n" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
647 | "Host: %s\r\n" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
648 | "Content-Length: %d\r\n" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
649 | "Connection: Keep-Alive\r\n" |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
650 | "Cache-Control: no-cache\r\n", |
|
21356
50afac513011
handle unauthenticated soap connection
Ka-Hing Cheung <khc@pidgin.im>
parents:
21355
diff
changeset
|
651 | 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
|
652 | conn->host, len); |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
653 | |
|
21354
5c6020f03f2d
mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@pidgin.im>
parents:
21353
diff
changeset
|
654 | 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
|
655 | 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
|
656 | 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
|
657 | } |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
658 | |
|
21355
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, "\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
|
660 | 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
|
661 | |
|
25416
08467e65ce8f
make this toggleable via env instead of #define
Ka-Hing Cheung <khc@pidgin.im>
parents:
25415
diff
changeset
|
662 | if (req->secure && !conn->unsafe_debug) |
|
24045
e0c6a01eca85
Relegate XML dumped by msn's SOAP code to MISC from INFO.
Will Thompson <resiak@pidgin.im>
parents:
23938
diff
changeset
|
663 | 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
|
664 | else |
|
25416
08467e65ce8f
make this toggleable via env instead of #define
Ka-Hing Cheung <khc@pidgin.im>
parents:
25415
diff
changeset
|
665 | purple_debug_misc("soap", "%s\n", conn->buf->str); |
| 21358 | 666 | |
|
21355
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->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
|
668 | conn->current_request = req; |
|
21353
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
669 | |
|
27126
9cc2cee805c1
Get rid of a runtime warning on connect.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
25749
diff
changeset
|
670 | if (conn->event_handle) |
|
9cc2cee805c1
Get rid of a runtime warning on connect.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
25749
diff
changeset
|
671 | 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
|
672 | 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
|
673 | 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
|
674 | 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
|
675 | /* Not connected => reconnect and retry */ |
|
23819
c3bbef4646b1
Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23798
diff
changeset
|
676 | 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
|
677 | |
|
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
|
678 | 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
|
679 | 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
|
680 | 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
|
681 | |
|
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
|
682 | 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
|
683 | 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
|
684 | } |
|
21356
50afac513011
handle unauthenticated soap connection
Ka-Hing Cheung <khc@pidgin.im>
parents:
21355
diff
changeset
|
685 | |
| 21364 | 686 | 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
|
687 | } |
|
21353
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 | |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
690 | return FALSE; |
|
a70d31127cb6
beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@pidgin.im>
parents:
diff
changeset
|
691 | } |