annotate libpurple/protocols/msn/soap2.c @ 20527:0034d7e89032

mostly done with soap level parsing, compiles
author Ka-Hing Cheung <khc@hxbc.us>
date Fri, 21 Sep 2007 06:50:40 +0000
parents 915e11fbaeb0
children 06527cc0f79b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
1 /**
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
2 * @file soap2.c
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
3 * C file for SOAP connection related process
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
4 *
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
5 * purple
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
6 *
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
7 * Purple is the legal property of its developers, whose names are too numerous
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
9 * source distribution.
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
10 *
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
14 * (at your option) any later version.
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
15 *
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
19 * GNU General Public License for more details.
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
20 *
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
24 */
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
25
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
26 #include "soap2.h"
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
27
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
28 #include "debug.h"
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
29 #include "xmlnode.h"
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
30
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
31 #include <glib.h>
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
32 #include <error.h>
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
33
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
34 static void msn_soap_connection2_destroy_foreach_cb(gpointer item, gpointer data);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
35 static void msn_soap_connection2_cleanup(MsnSoapConnection2 *conn);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
36 static gboolean msn_soap_connection2_run(gpointer data);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
37
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
38
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
39 MsnSoapConnection2 *
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
40 msn_soap_connection2_new(MsnSession *session)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
41 {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
42 MsnSoapConnection2 *conn = g_new0(MsnSoapConnection2, 1);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
43 conn->session = session;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
44 conn->queue = g_queue_new();
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
45 return conn;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
46 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
47
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
48 static void
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
49 msn_soap_connected_cb(gpointer data, PurpleSslConnection *ssl,
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
50 PurpleInputCondition cond)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
51 {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
52 MsnSoapConnection2 *conn = data;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
53
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
54 conn->connected = TRUE;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
55
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
56 if (conn->idle_handle == 0)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
57 conn->idle_handle = g_idle_add(msn_soap_connection2_run, conn);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
58 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
59
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
60 static void
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
61 msn_soap_error_cb(PurpleSslConnection *ssl, PurpleSslErrorType error,
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
62 gpointer data)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
63 {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
64 MsnSoapConnection2 *conn = data;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
65
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
66 msn_soap_connection2_cleanup(conn);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
67 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
68
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
69 static gboolean
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
70 msn_soap_handle_redirect(MsnSoapConnection2 *conn, const char *url)
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
71 {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
72 char *c;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
73
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
74 /* Skip the http:// */
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
75 if ((c = strchr(url, '/')) != NULL)
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
76 url += 2;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
77
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
78 if ((c = strchr(url, '/')) != NULL) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
79 g_free(conn->request->host);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
80 g_free(conn->request->path);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
81
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
82 conn->request->host = g_strndup(url, c - url);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
83 conn->request->path = g_strdup(c);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
84
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
85 purple_input_remove(conn->io_handle);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
86 conn->io_handle = 0;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
87
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
88 msn_soap_connection2_post(conn, conn->request,
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
89 conn->request->cb, conn->request->data);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
90
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
91 return TRUE;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
92 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
93
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
94 return FALSE;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
95 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
96
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
97 static gboolean
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
98 msn_soap_handle_body(MsnSoapConnection2 *conn, MsnSoapResponse *response)
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
99 {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
100 xmlnode *node = response->message->xml;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
101
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
102 if (strcmp(node->name, "Envelop") == 0 &&
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
103 node->child && strcmp(node->child->name, "Header") == 0 &&
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
104 node->child->next) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
105 xmlnode *body = node->child->next;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
106
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
107 if (strcmp(body->name, "Fault")) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
108 xmlnode *fault = xmlnode_get_child(body, "faultcode");
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
109
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
110 if (fault != NULL) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
111 if (strcmp(fault->data, "psf:Redirect") == 0) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
112 xmlnode *url = xmlnode_get_child(fault, "redirectUrl");
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
113
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
114 if (url && !msn_soap_handle_redirect(conn, url->data)) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
115 return TRUE;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
116 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
117 } else if (strcmp(fault->data, "wsse:FailedAuthentication")) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
118 xmlnode *reason = xmlnode_get_child(fault, "faultstring");
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
119
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
120 msn_session_set_error(conn->session, MSN_ERROR_AUTH,
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
121 reason ? reason->data : NULL);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
122
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
123 return TRUE;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
124 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
125 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
126
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
127 conn->request->cb(conn, conn->request, conn->response,
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
128 conn->request->data);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
129
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
130 return TRUE;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
131 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
132 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
133
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
134 return FALSE;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
135 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
136
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
137 static void
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
138 msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
139 {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
140 MsnSoapConnection2 *conn = data;
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
141 MsnSoapMessage *message;
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
142 int count;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
143 char buf[8192];
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
144 char *linebreak;
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
145
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
146 g_return_if_fail(cond == PURPLE_INPUT_READ);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
147
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
148 count = purple_ssl_read(conn->ssl, buf, sizeof(buf));
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
149 if (count < 0 && errno == EAGAIN)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
150 return;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
151 else if (count <= 0) {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
152 msn_soap_connection2_cleanup(conn);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
153 return;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
154 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
155
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
156 if (conn->response == NULL) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
157 conn->response = msn_soap_response_new();
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
158 conn->response->message = msn_soap_message_new();
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
159 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
160
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
161 message = conn->response->message;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
162
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
163 if (message->buf == NULL) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
164 message->buf = g_memdup(buf, count);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
165 message->buf_len = count;
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
166 } else {
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
167 message->buf = g_realloc(message->buf, message->buf_len + count);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
168 memcpy(message->buf + message->buf_len, buf, count);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
169 message->buf_len += count;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
170 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
171
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
172 if (conn->response->seen_newline) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
173 if (message->buf_len - message->buf_count >=
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
174 conn->response->body_len) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
175 xmlnode *node = xmlnode_from_str(
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
176 message->buf + message->buf_count, conn->response->body_len);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
177
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
178 if (node == NULL) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
179 purple_debug_info("soap", "Malformed SOAP response: %s\n",
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
180 message->buf + message->buf_count);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
181 } else {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
182 conn->response->message->xml = node;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
183 msn_soap_handle_body(conn, conn->response);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
184 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
185 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
186
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
187 return;
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
188 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
189
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
190 while ((linebreak = strstr(message->buf + message->buf_count, "\r\n"))
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
191 != NULL) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
192 message->buf_count = linebreak - message->buf + 2;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
193
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
194 if (conn->response->code == -1) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
195 if (sscanf(message->buf + message->buf_count, "HTTP/1.1 %d",
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
196 &conn->response->code) != 1) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
197 /* something horribly wrong */
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
198 msn_soap_connection2_destroy_foreach_cb(conn->request, conn);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
199 conn->request = NULL;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
200 } else if (conn->response->code == 503) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
201 msn_session_set_error(conn->session, MSN_ERROR_SERV_UNAVAILABLE, NULL);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
202 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
203 } else if (message->buf + message->buf_count == linebreak) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
204 /* blank line */
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
205 conn->response->seen_newline = TRUE;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
206 } else {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
207 char *sep = strstr(message->buf + message->buf_count, ": ");
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
208 char *key = message->buf + message->buf_count;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
209 char *value = sep + 2;
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
210
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
211 *sep = '\0';
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
212 *linebreak = '\0';
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
213 msn_soap_message_add_header(message, key, value);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
214
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
215 if ((conn->response->code == 301 || conn->response->code == 300)
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
216 && strcmp(key, "Location") == 0) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
217
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
218 if (msn_soap_handle_redirect(conn, value)) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
219
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
220 } else if (conn->request->cb) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
221 conn->request->cb(conn, conn->request, NULL,
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
222 conn->request->data);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
223 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
224 } else if (conn->response->code == 401 &&
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
225 strcmp(key, "WWW-Authenticate") == 0) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
226 char *error = strstr(value, "cbtxt=");
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
227
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
228 if (error) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
229 error += strlen("cbtxt=");
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
230 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
231
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
232 msn_session_set_error(conn->session, MSN_ERROR_AUTH,
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
233 error ? purple_url_decode(error) : NULL);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
234 } else if (strcmp(key, "Content-Length") == 0) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
235 conn->response->body_len = atoi(value);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
236 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
237 }
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
238 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
239 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
240
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
241 static void
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
242 msn_soap_write_cb(gpointer data, gint fd, PurpleInputCondition cond)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
243 {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
244 MsnSoapConnection2 *conn = data;
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
245 MsnSoapMessage *message = conn->request->message;
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
246 int written;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
247
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
248 g_return_if_fail(cond == PURPLE_INPUT_WRITE);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
249
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
250 written = purple_ssl_write(conn->ssl, message->buf + message->buf_count,
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
251 message->buf_len - message->buf_count);
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
252
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
253 if (written < 0 && errno == EAGAIN)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
254 return;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
255 else if (written <= 0) {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
256 msn_soap_connection2_cleanup(conn);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
257 return;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
258 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
259
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
260 message->buf_count += written;
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
261
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
262 if (message->buf_count < message->buf_len)
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
263 return;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
264
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
265 /* we are done! */
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
266 purple_input_remove(conn->io_handle);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
267 conn->io_handle = purple_input_add(conn->ssl->fd, PURPLE_INPUT_READ,
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
268 msn_soap_read_cb, conn);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
269 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
270
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
271 static gboolean
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
272 msn_soap_connection2_run(gpointer data)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
273 {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
274 MsnSoapConnection2 *conn = data;
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
275 MsnSoapRequest *req = g_queue_peek_head(conn->queue);
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
276
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
277 if (req) {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
278 if (conn->ssl) {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
279 if (strcmp(conn->ssl->host, req->host) != 0 ||
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
280 strcmp(conn->path, req->path) != 0) {
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
281 purple_input_remove(conn->io_handle);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
282 conn->io_handle = 0;
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
283 purple_ssl_close(conn->ssl);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
284 conn->ssl = NULL;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
285 g_free(conn->path);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
286 conn->path = NULL;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
287 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
288 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
289
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
290 if (conn->ssl == NULL) {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
291 conn->ssl = purple_ssl_connect(conn->session->account, req->host,
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
292 443, msn_soap_connected_cb, msn_soap_error_cb, conn);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
293 conn->path = g_strdup(req->path);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
294 } else {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
295 int len = -1;
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
296 MsnSoapMessage *message = req->message;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
297 char *body = xmlnode_to_str(message->xml, &len);
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
298 GString *str = g_string_new("");
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
299 GSList *iter;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
300
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
301 g_queue_pop_head(conn->queue);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
302
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
303 g_string_append_printf(str,
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
304 "POST %s HTTP/1.1\r\n"
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
305 "SOAPAction: %s\r\n"
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
306 "Content-Type:text/xml; charset=utf-8\r\n"
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
307 "Cookie: MSPAuth=%s\r\n"
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
308 "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n"
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
309 "Accept: */*\r\n"
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
310 "Host: %s\r\n"
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
311 "Content-Length: %d\r\n"
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
312 "Connection: Keep-Alive\r\n"
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
313 "Cache-Control: no-cache\r\n",
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
314 req->path, req->action,
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
315 conn->session->passport_info.mspauth,
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
316 req->host, len);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
317
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
318 for (iter = req->message->headers; iter; iter = iter->next) {
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
319 g_string_append(str, (char *)iter->data);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
320 g_string_append(str, "\r\n");
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
321 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
322
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
323 g_string_append(str, "\r\n");
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
324 g_string_append(str, body);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
325
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
326 message->buf_len = str->len;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
327 message->buf = g_string_free(str, FALSE);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
328 message->buf_count = 0;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
329 conn->request = req;
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
330
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
331 conn->io_handle = purple_input_add(conn->ssl->fd,
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
332 PURPLE_INPUT_WRITE, msn_soap_write_cb, conn);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
333 msn_soap_write_cb(conn, conn->ssl->fd, PURPLE_INPUT_WRITE);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
334 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
335 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
336
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
337 conn->idle_handle = 0;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
338 return FALSE;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
339 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
340
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
341 void
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
342 msn_soap_connection2_post(MsnSoapConnection2 *conn, MsnSoapRequest *req,
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
343 MsnSoapCallback cb, gpointer data)
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
344 {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
345 req->cb = cb;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
346 req->data = data;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
347
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
348 g_queue_push_tail(conn->queue, req);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
349
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
350 if (conn->idle_handle == 0)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
351 conn->idle_handle = g_idle_add(msn_soap_connection2_run, conn);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
352 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
353
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
354 static void
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
355 msn_soap_connection2_destroy_foreach_cb(gpointer item, gpointer data)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
356 {
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
357 MsnSoapRequest *req = item;
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
358 MsnSoapConnection2 *conn = data;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
359
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
360 if (req->cb)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
361 req->cb(conn, req, NULL, req->data);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
362
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
363 msn_soap_request2_destroy(req);
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
364 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
365
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
366 static void
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
367 msn_soap_connection2_cleanup(MsnSoapConnection2 *conn)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
368 {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
369 g_queue_foreach(conn->queue, msn_soap_connection2_destroy_foreach_cb, conn);
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
370 if (conn->request) {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
371 msn_soap_connection2_destroy_foreach_cb(conn->request, conn);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
372 conn->request = NULL;
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
373 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
374
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
375 purple_input_remove(conn->io_handle);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
376 conn->io_handle = 0;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
377 g_source_remove(conn->idle_handle);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
378 conn->idle_handle = 0;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
379
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
380 if (conn->ssl) {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
381 purple_ssl_close(conn->ssl);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
382 conn->ssl = NULL;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
383 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
384
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
385 while (g_queue_pop_head(conn->queue) != NULL);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
386
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
387 g_free(conn->path);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
388 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
389
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
390 void
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
391 msn_soap_connection2_destroy(MsnSoapConnection2 *conn)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
392 {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
393 msn_soap_connection2_cleanup(conn);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
394 g_queue_free(conn->queue);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
395 g_free(conn);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
396 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
397
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
398 MsnSoapMessage *
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
399 msn_soap_message_new()
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
400 {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
401 MsnSoapMessage *req = g_new0(MsnSoapMessage, 1);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
402
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
403 return req;
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
404 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
405
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
406 void
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
407 msn_soap_message_destroy(MsnSoapMessage *message)
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
408 {
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
409 g_slist_foreach(message->headers, (GFunc)g_free, NULL);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
410 g_free(message->buf);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
411 g_free(message);
20526
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
412 }
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
413
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
414 void
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
415 msn_soap_message_add_header(MsnSoapMessage *req,
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
416 const char *name, const char *value)
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
417 {
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
418 char *header = g_strdup_printf("%s: %s\r\n", name, value);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
419
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
420 req->headers = g_slist_prepend(req->headers, header);
915e11fbaeb0 beginning of soap layer rewrite, does that even compile?
Ka-Hing Cheung <khc@hxbc.us>
parents:
diff changeset
421 }
20527
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
422
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
423 MsnSoapRequest *
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
424 msn_soap_request2_new(const char *host, const char *path, const char *action)
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
425 {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
426 MsnSoapRequest *req = g_new0(MsnSoapRequest, 1);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
427
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
428 req->host = g_strdup(host);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
429 req->path = g_strdup(path);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
430 req->action = g_strdup(action);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
431
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
432 return req;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
433 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
434
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
435 void
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
436 msn_soap_request2_destroy(MsnSoapRequest *req)
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
437 {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
438 g_free(req->action);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
439 g_free(req->host);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
440 g_free(req->path);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
441 msn_soap_message_destroy(req->message);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
442 g_free(req);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
443 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
444
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
445 MsnSoapResponse *
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
446 msn_soap_response_new(void)
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
447 {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
448 MsnSoapResponse *resp = g_new0(MsnSoapResponse, 1);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
449
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
450 return resp;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
451 }
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
452
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
453 void
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
454 msn_soap_response_destroy(MsnSoapResponse *resp)
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
455 {
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
456 msn_soap_message_destroy(resp->message);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
457 resp->code = -1;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
458 resp->body_len = -1;
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
459 g_free(resp);
0034d7e89032 mostly done with soap level parsing, compiles
Ka-Hing Cheung <khc@hxbc.us>
parents: 20526
diff changeset
460 }