annotate src/protocols/msn/httpconn.c @ 13967:99b9b58b19dd

[gaim-migrate @ 16523] Fix a crazy MSN crash. Basically it's possible to have more than one slplink associated with a given switchboard, but our code did not allow for that. I think it happens when you're in a multi-user chat and you do stuff with multiple users that involves slplinks. Like maybe file transfer and buddy icon related stuff. Tracking this down took an ungodly amount of time, but thanks to Meebo for letting me do it :-) committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 20 Jul 2006 07:31:15 +0000
parents e78d113f82db
children 10e8eb6a4910
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
1 /**
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
2 * @file httpmethod.c HTTP connection method
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
3 *
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
4 * gaim
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
5 *
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
6 * Gaim is the legal property of its developers, whose names are too numerous
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
7 * to list here. Please refer to the COPYRIGHT file distributed with this
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
8 * source distribution.
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
9 *
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
13 * (at your option) any later version.
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
14 *
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
18 * GNU General Public License for more details.
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
19 *
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
23 */
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
24 #include "msn.h"
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
25 #include "debug.h"
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
26 #include "httpconn.h"
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
27
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
28 typedef struct
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
29 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
30 MsnHttpConn *httpconn;
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
31 char *body;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
32 size_t body_len;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
33 } MsnHttpQueueData;
10568
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
34
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
35 static void
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
36 msn_httpconn_process_queue(MsnHttpConn *httpconn)
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
37 {
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
38 httpconn->waiting_response = FALSE;
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
39
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
40 if (httpconn->queue != NULL)
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
41 {
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
42 MsnHttpQueueData *queue_data;
10481
bcfea6c3d5c9 [gaim-migrate @ 11769]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10463
diff changeset
43
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
44 queue_data = (MsnHttpQueueData *)httpconn->queue->data;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
45
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
46 httpconn->queue = g_list_remove(httpconn->queue, queue_data);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
47
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
48 msn_httpconn_write(queue_data->httpconn,
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
49 queue_data->body,
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
50 queue_data->body_len);
10568
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
51
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
52 g_free(queue_data->body);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
53 g_free(queue_data);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
54 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
55 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
56
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
57 static gboolean
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
58 msn_httpconn_parse_data(MsnHttpConn *httpconn, const char *buf,
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
59 size_t size, char **ret_buf, size_t *ret_size,
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
60 gboolean *error)
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
61 {
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
62 const char *s, *c;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
63 char *header, *body;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
64 const char *body_start;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
65 char *tmp;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
66 size_t body_len = 0;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
67 gboolean wasted = FALSE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
68
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
69 g_return_val_if_fail(httpconn != NULL, FALSE);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
70 g_return_val_if_fail(buf != NULL, FALSE);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
71 g_return_val_if_fail(size > 0, FALSE);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
72 g_return_val_if_fail(ret_buf != NULL, FALSE);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
73 g_return_val_if_fail(ret_size != NULL, FALSE);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
74 g_return_val_if_fail(error != NULL, FALSE);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
75
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
76 #if 0
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
77 gaim_debug_info("msn", "HTTP: parsing data {%s}\n", buf);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
78 #endif
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
79
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
80 /* Healthy defaults. */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
81 body = NULL;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
82
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
83 *ret_buf = NULL;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
84 *ret_size = 0;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
85 *error = FALSE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
86
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
87 /* First, some tests to see if we have a full block of stuff. */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
88 if (((strncmp(buf, "HTTP/1.1 200 OK\r\n", 17) != 0) &&
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
89 (strncmp(buf, "HTTP/1.1 100 Continue\r\n", 23) != 0)) &&
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
90 ((strncmp(buf, "HTTP/1.0 200 OK\r\n", 17) != 0) &&
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
91 (strncmp(buf, "HTTP/1.0 100 Continue\r\n", 23) != 0)))
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
92 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
93 *error = TRUE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
94
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
95 return FALSE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
96 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
97
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
98 if (strncmp(buf, "HTTP/1.1 100 Continue\r\n", 23) == 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
99 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
100 if ((s = strstr(buf, "\r\n\r\n")) == NULL)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
101 return FALSE;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
102
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
103 s += 4;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
104
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
105 if (*s == '\0')
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
106 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
107 *ret_buf = g_strdup("");
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
108 *ret_size = 0;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
109
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
110 msn_httpconn_process_queue(httpconn);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
111
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
112 return TRUE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
113 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
114
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
115 buf = s;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
116 size -= (s - buf);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
117 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
118
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
119 if ((s = strstr(buf, "\r\n\r\n")) == NULL)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
120 /* Need to wait for the full HTTP header to arrive */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
121 return FALSE;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
122
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
123 s += 4; /* Skip \r\n */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
124 header = g_strndup(buf, s - buf);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
125 body_start = s;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
126 body_len = size - (body_start - buf);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
127
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
128 if ((s = gaim_strcasestr(header, "Content-Length: ")) != NULL)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
129 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
130 int tmp_len;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
131
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
132 s += strlen("Content-Length: ");
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
133
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
134 if ((c = strchr(s, '\r')) == NULL)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
135 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
136 g_free(header);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
137
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
138 return FALSE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
139 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
140
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
141 tmp = g_strndup(s, c - s);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
142 tmp_len = atoi(tmp);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
143 g_free(tmp);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
144
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
145 if (body_len != tmp_len)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
146 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
147 /* Need to wait for the full packet to arrive */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
148
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
149 g_free(header);
10568
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
150
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
151 #if 0
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
152 gaim_debug_warning("msn",
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
153 "body length (%d) != content length (%d)\n",
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
154 body_len, tmp_len);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
155 #endif
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
156
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
157 return FALSE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
158 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
159 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
160
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
161 body = g_malloc0(body_len + 1);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
162 memcpy(body, body_start, body_len);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
163
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
164 #ifdef MSN_DEBUG_HTTP
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
165 gaim_debug_misc("msn", "Incoming HTTP buffer (header): {%s\r\n}\n",
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
166 header);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
167 #endif
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
168
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
169 /* Now we should be able to process the data. */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
170 if ((s = gaim_strcasestr(header, "X-MSN-Messenger: ")) != NULL)
10568
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
171 {
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
172 char *full_session_id, *gw_ip, *session_action;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
173 char *t, *session_id;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
174 char **elems, **cur, **tokens;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
175
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
176 full_session_id = gw_ip = session_action = NULL;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
177
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
178 s += strlen("X-MSN-Messenger: ");
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
179
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
180 if ((c = strchr(s, '\r')) == NULL)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
181 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
182 msn_session_set_error(httpconn->session,
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
183 MSN_ERROR_HTTP_MALFORMED, NULL);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
184 gaim_debug_error("msn", "Malformed X-MSN-Messenger field.\n{%s}",
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
185 buf);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
186
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
187 g_free(body);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
188 return FALSE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
189 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
190
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
191 tmp = g_strndup(s, c - s);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
192
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
193 elems = g_strsplit(tmp, "; ", 0);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
194
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
195 for (cur = elems; *cur != NULL; cur++)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
196 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
197 tokens = g_strsplit(*cur, "=", 2);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
198
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
199 if (strcmp(tokens[0], "SessionID") == 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
200 full_session_id = tokens[1];
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
201 else if (strcmp(tokens[0], "GW-IP") == 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
202 gw_ip = tokens[1];
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
203 else if (strcmp(tokens[0], "Session") == 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
204 session_action = tokens[1];
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
205 else
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
206 g_free(tokens[1]);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
207
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
208 g_free(tokens[0]);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
209 /* Don't free each of the tokens, only the array. */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
210 g_free(tokens);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
211 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
212
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
213 g_strfreev(elems);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
214
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
215 g_free(tmp);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
216
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
217 if ((session_action != NULL) && (strcmp(session_action, "close") == 0))
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
218 wasted = TRUE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
219
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
220 g_free(session_action);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
221
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
222 t = strchr(full_session_id, '.');
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
223 session_id = g_strndup(full_session_id, t - full_session_id);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
224
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
225 if (!wasted)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
226 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
227 g_free(httpconn->full_session_id);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
228 httpconn->full_session_id = full_session_id;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
229
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
230 g_free(httpconn->session_id);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
231 httpconn->session_id = session_id;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
232
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
233 g_free(httpconn->host);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
234 httpconn->host = gw_ip;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
235 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
236 else
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
237 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
238 MsnServConn *servconn;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
239
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
240 /* It's going to die. */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
241 /* poor thing */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
242
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
243 servconn = httpconn->servconn;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
244
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
245 /* I'll be honest, I don't fully understand all this, but this
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
246 * causes crashes, Stu. */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
247 /* if (servconn != NULL)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
248 servconn->wasted = TRUE; */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
249
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
250 g_free(full_session_id);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
251 g_free(session_id);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
252 g_free(gw_ip);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
253 }
10568
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
254 }
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
255
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
256 g_free(header);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
257
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
258 *ret_buf = body;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
259 *ret_size = body_len;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
260
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
261 msn_httpconn_process_queue(httpconn);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
262
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
263 return TRUE;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
264 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
265
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
266 static void
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
267 read_cb(gpointer data, gint source, GaimInputCondition cond)
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
268 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
269 MsnHttpConn *httpconn;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
270 MsnServConn *servconn;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
271 MsnSession *session;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
272 char buf[MSN_BUF_LEN];
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
273 char *cur, *end, *old_rx_buf;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
274 int len, cur_len;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
275 char *result_msg = NULL;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
276 size_t result_len = 0;
13915
e78d113f82db [gaim-migrate @ 16416]
Mark Doliner <mark@kingant.net>
parents: 13914
diff changeset
277 gboolean error = FALSE;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
278
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
279 httpconn = data;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
280 servconn = NULL;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
281 session = httpconn->session;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
282
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
283 len = read(httpconn->fd, buf, sizeof(buf) - 1);
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
284
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
285 if (len < 0 && errno == EAGAIN)
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
286 return;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
287 else if (len <= 0)
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
288 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
289 gaim_debug_error("msn", "HTTP: Read error\n");
10481
bcfea6c3d5c9 [gaim-migrate @ 11769]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10463
diff changeset
290 msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_READ);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
291
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
292 return;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
293 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
294
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
295 buf[len] = '\0';
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
296
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
297 httpconn->rx_buf = g_realloc(httpconn->rx_buf, len + httpconn->rx_len + 1);
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
298 memcpy(httpconn->rx_buf + httpconn->rx_len, buf, len + 1);
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
299 httpconn->rx_len += len;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
300
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
301 if (!msn_httpconn_parse_data(httpconn, httpconn->rx_buf, httpconn->rx_len,
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
302 &result_msg, &result_len, &error))
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
303 {
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
304 /* Either we must wait for more input, or something went wrong */
10568
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
305 if (error)
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
306 msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_READ);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
307
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
308 return;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
309 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
310
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
311 httpconn->servconn->processing = FALSE;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
312
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
313 servconn = httpconn->servconn;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
314
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
315 if (error)
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
316 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
317 gaim_debug_error("msn", "HTTP: Special error\n");
10481
bcfea6c3d5c9 [gaim-migrate @ 11769]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10463
diff changeset
318 msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_READ);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
319
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
320 return;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
321 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
322
13630
bbc56ff2bd62 [gaim-migrate @ 16017]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13516
diff changeset
323 g_free(httpconn->rx_buf);
10533
ace8cd0de6ea [gaim-migrate @ 11862]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10504
diff changeset
324 httpconn->rx_buf = NULL;
ace8cd0de6ea [gaim-migrate @ 11862]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10504
diff changeset
325 httpconn->rx_len = 0;
ace8cd0de6ea [gaim-migrate @ 11862]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10504
diff changeset
326
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
327 if (result_len == 0)
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
328 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
329 /* Nothing to do here */
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
330 #if 0
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
331 gaim_debug_info("msn", "HTTP: nothing to do here\n");
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
332 #endif
10481
bcfea6c3d5c9 [gaim-migrate @ 11769]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10463
diff changeset
333 g_free(result_msg);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
334 return;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
335 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
336
13270
8754a0fe2297 [gaim-migrate @ 15636]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13200
diff changeset
337 g_free(servconn->rx_buf);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
338 servconn->rx_buf = result_msg;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
339 servconn->rx_len = result_len;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
340
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
341 end = old_rx_buf = servconn->rx_buf;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
342
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
343 servconn->processing = TRUE;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
344
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
345 do
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
346 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
347 cur = end;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
348
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
349 if (servconn->payload_len)
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
350 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
351 if (servconn->payload_len > servconn->rx_len)
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
352 /* The payload is still not complete. */
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
353 break;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
354
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
355 cur_len = servconn->payload_len;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
356 end += cur_len;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
357 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
358 else
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
359 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
360 end = strstr(cur, "\r\n");
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
361
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
362 if (end == NULL)
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
363 /* The command is still not complete. */
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
364 break;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
365
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
366 *end = '\0';
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
367 end += 2;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
368 cur_len = end - cur;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
369 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
370
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
371 servconn->rx_len -= cur_len;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
372
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
373 if (servconn->payload_len)
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
374 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
375 msn_cmdproc_process_payload(servconn->cmdproc, cur, cur_len);
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
376 servconn->payload_len = 0;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
377 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
378 else
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
379 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
380 msn_cmdproc_process_cmd_text(servconn->cmdproc, cur);
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
381 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
382 } while (servconn->connected && servconn->rx_len > 0);
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
383
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
384 if (servconn->connected)
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
385 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
386 if (servconn->rx_len > 0)
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
387 servconn->rx_buf = g_memdup(cur, servconn->rx_len);
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
388 else
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
389 servconn->rx_buf = NULL;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
390 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
391
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
392 servconn->processing = FALSE;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
393
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
394 if (servconn->wasted)
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
395 msn_servconn_destroy(servconn);
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
396
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
397 g_free(old_rx_buf);
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
398 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
399
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
400 static void
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
401 httpconn_write_cb(gpointer data, gint source, GaimInputCondition cond)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
402 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
403 MsnHttpConn *httpconn;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
404 int ret, writelen;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
405
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
406 httpconn = data;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
407 writelen = gaim_circ_buffer_get_max_read(httpconn->tx_buf);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
408
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
409 if (writelen == 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
410 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
411 gaim_input_remove(httpconn->tx_handler);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
412 httpconn->tx_handler = 0;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
413 return;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
414 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
415
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
416 ret = write(httpconn->fd, httpconn->tx_buf->outptr, writelen);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
417 if (ret <= 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
418 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
419 if ((errno == EAGAIN) || (errno == EWOULDBLOCK))
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
420 /* No worries */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
421 return;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
422
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
423 /* Error! */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
424 msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_WRITE);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
425 return;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
426 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
427
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
428 gaim_circ_buffer_mark_read(httpconn->tx_buf, ret);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
429
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
430 /* TODO: I don't think these 2 lines are needed. Remove them? */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
431 if (ret == writelen)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
432 httpconn_write_cb(data, source, cond);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
433 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
434
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
435 static gboolean
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
436 write_raw(MsnHttpConn *httpconn, const char *data, size_t data_len)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
437 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
438 ssize_t res; /* result of the write operation */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
439
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
440 if (httpconn->tx_handler == 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
441 res = write(httpconn->fd, data, data_len);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
442 else
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
443 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
444 res = -1;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
445 errno = EAGAIN;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
446 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
447
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
448 if ((res <= 0) && ((errno != EAGAIN) && (errno != EWOULDBLOCK)))
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
449 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
450 msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_WRITE);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
451 return FALSE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
452 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
453
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
454 if (res < 0 || res < data_len)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
455 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
456 if (res < 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
457 res = 0;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
458 if (httpconn->tx_handler == 0 && httpconn->fd)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
459 httpconn->tx_handler = gaim_input_add(httpconn->fd,
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
460 GAIM_INPUT_WRITE, httpconn_write_cb, httpconn);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
461 gaim_circ_buffer_append(httpconn->tx_buf, data + res,
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
462 data_len - res);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
463 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
464
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
465 return TRUE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
466 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
467
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
468 static char *
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
469 msn_httpconn_proxy_auth(MsnHttpConn *httpconn)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
470 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
471 GaimAccount *account;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
472 GaimProxyInfo *gpi;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
473 const char *username, *password;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
474 char *auth = NULL;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
475
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
476 account = httpconn->session->account;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
477
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
478 if (gaim_account_get_proxy_info(account) == NULL)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
479 gpi = gaim_global_proxy_get_info();
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
480 else
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
481 gpi = gaim_account_get_proxy_info(account);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
482
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
483 if (gpi == NULL || !(gaim_proxy_info_get_type(gpi) == GAIM_PROXY_HTTP ||
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
484 gaim_proxy_info_get_type(gpi) == GAIM_PROXY_USE_ENVVAR))
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
485 return NULL;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
486
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
487 username = gaim_proxy_info_get_username(gpi);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
488 password = gaim_proxy_info_get_password(gpi);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
489
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
490 if (username != NULL) {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
491 char *tmp;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
492 auth = g_strdup_printf("%s:%s", username, password ? password : "");
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
493 tmp = gaim_base64_encode((const guchar *)auth, strlen(auth));
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
494 g_free(auth);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
495 auth = g_strdup_printf("Proxy-Authorization: Basic %s\r\n", tmp);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
496 g_free(tmp);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
497 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
498
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
499 return auth;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
500 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
501
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
502 static gboolean
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
503 msn_httpconn_poll(gpointer data)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
504 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
505 MsnHttpConn *httpconn;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
506 char *header;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
507 char *auth;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
508
13915
e78d113f82db [gaim-migrate @ 16416]
Mark Doliner <mark@kingant.net>
parents: 13914
diff changeset
509 httpconn = data;
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
510
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
511 g_return_val_if_fail(httpconn != NULL, FALSE);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
512
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
513 if ((httpconn->host == NULL) || (httpconn->full_session_id == NULL))
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
514 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
515 /* There's no need to poll if the session is not fully established */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
516 return TRUE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
517 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
518
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
519 if (httpconn->waiting_response)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
520 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
521 /* There's no need to poll if we're already waiting for a response */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
522 return TRUE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
523 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
524
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
525 auth = msn_httpconn_proxy_auth(httpconn);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
526
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
527 header = g_strdup_printf(
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
528 "POST http://%s/gateway/gateway.dll?Action=poll&SessionID=%s HTTP/1.1\r\n"
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
529 "Accept: */*\r\n"
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
530 "Accept-Language: en-us\r\n"
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
531 "User-Agent: MSMSGS\r\n"
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
532 "Host: %s\r\n"
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
533 "Proxy-Connection: Keep-Alive\r\n"
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
534 "%s" /* Proxy auth */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
535 "Connection: Keep-Alive\r\n"
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
536 "Pragma: no-cache\r\n"
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
537 "Content-Type: application/x-msn-messenger\r\n"
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
538 "Content-Length: 0\r\n\r\n",
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
539 httpconn->host,
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
540 httpconn->full_session_id,
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
541 httpconn->host,
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
542 auth ? auth : "");
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
543
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
544 g_free(auth);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
545
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
546 if (write_raw(httpconn, header, strlen(header)))
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
547 httpconn->waiting_response = TRUE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
548
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
549 g_free(header);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
550
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
551 return TRUE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
552 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
553
13270
8754a0fe2297 [gaim-migrate @ 15636]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13200
diff changeset
554 ssize_t
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
555 msn_httpconn_write(MsnHttpConn *httpconn, const char *body, size_t body_len)
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
556 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
557 char *params;
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
558 char *data;
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
559 int header_len;
10568
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
560 char *auth;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
561 const char *server_types[] = { "NS", "SB" };
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
562 const char *server_type;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
563 char *host;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
564 MsnServConn *servconn;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
565
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
566 /* TODO: remove http data from servconn */
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
567
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
568 g_return_val_if_fail(httpconn != NULL, 0);
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
569 g_return_val_if_fail(body != NULL, 0);
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
570 g_return_val_if_fail(body_len > 0, 0);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
571
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
572 servconn = httpconn->servconn;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
573
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
574 if (httpconn->waiting_response)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
575 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
576 MsnHttpQueueData *queue_data = g_new0(MsnHttpQueueData, 1);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
577
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
578 queue_data->httpconn = httpconn;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
579 queue_data->body = g_memdup(body, body_len);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
580 queue_data->body_len = body_len;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
581
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
582 httpconn->queue = g_list_append(httpconn->queue, queue_data);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
583
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
584 return body_len;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
585 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
586
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
587 server_type = server_types[servconn->type];
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
588
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
589 if (httpconn->virgin)
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
590 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
591 host = "gateway.messenger.hotmail.com";
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
592
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
593 /* The first time servconn->host is the host we should connect to. */
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
594 params = g_strdup_printf("Action=open&Server=%s&IP=%s",
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
595 server_type,
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
596 servconn->host);
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
597 httpconn->virgin = FALSE;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
598 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
599 else
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
600 {
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
601 /* The rest of the times servconn->host is the gateway host. */
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
602 host = httpconn->host;
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
603
10568
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
604 if (host == NULL || httpconn->full_session_id == NULL)
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
605 {
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
606 gaim_debug_warning("msn", "Attempted HTTP write before session is established\n");
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
607 return -1;
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
608 }
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
609
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
610 params = g_strdup_printf("SessionID=%s",
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
611 httpconn->full_session_id);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
612 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
613
10568
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
614 auth = msn_httpconn_proxy_auth(httpconn);
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
615
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
616 data = g_strdup_printf(
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
617 "POST http://%s/gateway/gateway.dll?%s HTTP/1.1\r\n"
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
618 "Accept: */*\r\n"
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
619 "Accept-Language: en-us\r\n"
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
620 "User-Agent: MSMSGS\r\n"
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
621 "Host: %s\r\n"
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
622 "Proxy-Connection: Keep-Alive\r\n"
10568
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
623 "%s" /* Proxy auth */
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
624 "Connection: Keep-Alive\r\n"
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
625 "Pragma: no-cache\r\n"
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
626 "Content-Type: application/x-msn-messenger\r\n"
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
627 "Content-Length: %d\r\n\r\n",
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
628 host,
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
629 params,
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
630 host,
10568
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
631 auth ? auth : "",
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
632 (int) body_len);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
633
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
634 g_free(params);
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
635
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
636 g_free(auth);
10568
fed2a7c2471d [gaim-migrate @ 11954]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10543
diff changeset
637
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
638 header_len = strlen(data);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
639 data = g_realloc(data, header_len + body_len);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
640 memcpy(data + header_len, body, body_len);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
641
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
642 if (write_raw(httpconn, data, header_len + body_len))
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
643 httpconn->waiting_response = TRUE;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
644
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 12323
diff changeset
645 g_free(data);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
646
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
647 return body_len;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
648 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
649
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
650 MsnHttpConn *
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
651 msn_httpconn_new(MsnServConn *servconn)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
652 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
653 MsnHttpConn *httpconn;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
654
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
655 g_return_val_if_fail(servconn != NULL, NULL);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
656
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
657 httpconn = g_new0(MsnHttpConn, 1);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
658
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
659 gaim_debug_info("msn", "new httpconn (%p)\n", httpconn);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
660
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
661 /* TODO: Remove this */
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
662 httpconn->session = servconn->session;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
663
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
664 httpconn->servconn = servconn;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
665
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
666 httpconn->tx_buf = gaim_circ_buffer_new(MSN_BUF_LEN);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
667 httpconn->tx_handler = 0;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
668
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
669 return httpconn;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
670 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
671
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
672 void
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
673 msn_httpconn_destroy(MsnHttpConn *httpconn)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
674 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
675 g_return_if_fail(httpconn != NULL);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
676
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
677 gaim_debug_info("msn", "destroy httpconn (%p)\n", httpconn);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
678
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
679 if (httpconn->connected)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
680 msn_httpconn_disconnect(httpconn);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
681
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
682 g_free(httpconn->full_session_id);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
683
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
684 g_free(httpconn->session_id);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
685
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
686 g_free(httpconn->host);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
687
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
688 gaim_circ_buffer_destroy(httpconn->tx_buf);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
689 if (httpconn->tx_handler > 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
690 gaim_input_remove(httpconn->tx_handler);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
691
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
692 g_free(httpconn);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
693 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
694
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
695 static void
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
696 connect_cb(gpointer data, gint source, GaimInputCondition cond)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
697 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
698 MsnHttpConn *httpconn = data;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
699
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
700 /*
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
701 TODO: Need to do this in case the account is disabled while connecting
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
702 if (!g_list_find(gaim_connections_get_all(), gc))
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
703 {
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
704 if (source >= 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
705 close(source);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
706 destroy_new_conn_data(new_conn_data);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
707 return;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
708 }
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
709 */
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
710
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
711 httpconn->fd = source;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
712
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
713 if (source >= 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
714 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
715 httpconn->inpa = gaim_input_add(httpconn->fd, GAIM_INPUT_READ,
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
716 read_cb, data);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
717
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
718 httpconn->timer = gaim_timeout_add(2000, msn_httpconn_poll, httpconn);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
719
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
720 msn_httpconn_process_queue(httpconn);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
721 }
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
722 else
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
723 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
724 gaim_debug_error("msn", "HTTP: Connection error\n");
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
725 msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_CONNECT);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
726 }
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
727 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
728
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
729 gboolean
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
730 msn_httpconn_connect(MsnHttpConn *httpconn, const char *host, int port)
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
731 {
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
732 int r;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
733
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
734 g_return_val_if_fail(httpconn != NULL, FALSE);
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
735 g_return_val_if_fail(host != NULL, FALSE);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
736 g_return_val_if_fail(port > 0, FALSE);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
737
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
738 if (httpconn->connected)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
739 msn_httpconn_disconnect(httpconn);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
740
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
741 r = gaim_proxy_connect(httpconn->session->account,
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
742 "gateway.messenger.hotmail.com", 80, connect_cb, httpconn);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
743
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
744 if (r == 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
745 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
746 httpconn->waiting_response = TRUE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
747 httpconn->connected = TRUE;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
748 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
749
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
750 return httpconn->connected;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
751 }
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
752
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
753 void
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
754 msn_httpconn_disconnect(MsnHttpConn *httpconn)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
755 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
756 g_return_if_fail(httpconn != NULL);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
757
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
758 if (!httpconn->connected)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
759 return;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
760
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
761 if (httpconn->timer)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
762 gaim_timeout_remove(httpconn->timer);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
763
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
764 httpconn->timer = 0;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
765
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
766 if (httpconn->inpa > 0)
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
767 {
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
768 gaim_input_remove(httpconn->inpa);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
769 httpconn->inpa = 0;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
770 }
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
771
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
772 close(httpconn->fd);
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
773
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
774 g_free(httpconn->rx_buf);
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
775 httpconn->rx_buf = NULL;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
776 httpconn->rx_len = 0;
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
777
13914
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
778 httpconn->connected = FALSE;
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
779
3ae8a3935406 [gaim-migrate @ 16414]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
780 /* msn_servconn_disconnect(httpconn->servconn); */
10463
9bed28273ec7 [gaim-migrate @ 11737]
Stu Tomlinson <stu@nosnilmot.com>
parents:
diff changeset
781 }