libpurple/protocols/msn/soap.c

Mon, 13 Jul 2009 05:01:42 +0000

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Mon, 13 Jul 2009 05:01:42 +0000
changeset 27776
60d79d68cde1
parent 27543
96889def856c
child 27996
25d2f18b9c67
permissions
-rw-r--r--

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
4900794b4c3b Build fixes for MSVC
Daniel Atallah <datallah@pidgin.im>
parents: 22981
diff changeset
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
4900794b4c3b Build fixes for MSVC
Daniel Atallah <datallah@pidgin.im>
parents: 22981
diff changeset
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
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
65 gboolean close_when_done;
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
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
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
322
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
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
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
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
a701729fef5d fix a memleak or 2
Ka-Hing Cheung <khc@pidgin.im>
parents: 21361
diff changeset
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
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
565 g_string_free(conn->buf, TRUE);
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
566 conn->buf = NULL;
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
567 conn->handled_len = 0;
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
568 conn->body_len = 0;
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
569 conn->response_code = 0;
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
570 conn->headers_done = FALSE;
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
571 conn->close_when_done = FALSE;
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
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
0e54f76775d4 signs on!
Ka-Hing Cheung <khc@pidgin.im>
parents: 21357
diff changeset
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
a701729fef5d fix a memleak or 2
Ka-Hing Cheung <khc@pidgin.im>
parents: 21361
diff changeset
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 }

mercurial