Mon, 13 Jul 2009 05:01:42 +0000
On MSN, pop up an "invite message" request similar to oscar, and send that
in the add request. We really should try and move this into the add buddy
dialog instead of an extra prompt.
Fixes #8503.
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
1 | /** |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
2 | * @file httpmethod.c HTTP connection method |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
3 | * |
| 15884 | 4 | * purple |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
5 | * |
| 15884 | 6 | * Purple is the legal property of its developers, whose names are too numerous |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
7 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
8 | * source distribution. |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
9 | * |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
10 | * This program is free software; you can redistribute it and/or modify |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
11 | * it under the terms of the GNU General Public License as published by |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
12 | * the Free Software Foundation; either version 2 of the License, or |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
13 | * (at your option) any later version. |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
14 | * |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
15 | * This program is distributed in the hope that it will be useful, |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
18 | * GNU General Public License for more details. |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
19 | * |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
20 | * You should have received a copy of the GNU General Public License |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
21 | * along with this program; if not, write to the Free Software |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19832
diff
changeset
|
22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
23 | */ |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
24 | #include "msn.h" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
25 | #include "debug.h" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
26 | #include "httpconn.h" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
27 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
28 | typedef struct |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
29 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
30 | MsnHttpConn *httpconn; |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
31 | char *body; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
32 | size_t body_len; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
33 | } MsnHttpQueueData; |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
34 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
35 | static void |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
36 | msn_httpconn_process_queue(MsnHttpConn *httpconn) |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
37 | { |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
38 | httpconn->waiting_response = FALSE; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
39 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
40 | if (httpconn->queue != NULL) |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
41 | { |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
42 | MsnHttpQueueData *queue_data; |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
43 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
44 | queue_data = (MsnHttpQueueData *)httpconn->queue->data; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
45 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
46 | httpconn->queue = g_list_remove(httpconn->queue, queue_data); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
47 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
48 | msn_httpconn_write(queue_data->httpconn, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
49 | queue_data->body, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
50 | queue_data->body_len); |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
51 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
52 | g_free(queue_data->body); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
53 | g_free(queue_data); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
54 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
55 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
56 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
57 | static gboolean |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
58 | msn_httpconn_parse_data(MsnHttpConn *httpconn, const char *buf, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
59 | size_t size, char **ret_buf, size_t *ret_size, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
60 | gboolean *error) |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
61 | { |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
62 | const char *s, *c; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
63 | char *header, *body; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
64 | const char *body_start; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
65 | char *tmp; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
66 | size_t body_len = 0; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
67 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
68 | g_return_val_if_fail(httpconn != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
69 | g_return_val_if_fail(buf != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
70 | g_return_val_if_fail(size > 0, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
71 | g_return_val_if_fail(ret_buf != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
72 | g_return_val_if_fail(ret_size != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
73 | g_return_val_if_fail(error != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
74 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
75 | #if 0 |
| 15884 | 76 | purple_debug_info("msn", "HTTP: parsing data {%s}\n", buf); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
77 | #endif |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
78 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
79 | /* Healthy defaults. */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
80 | body = NULL; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
81 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
82 | *ret_buf = NULL; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
83 | *ret_size = 0; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
84 | *error = FALSE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
85 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
86 | /* First, some tests to see if we have a full block of stuff. */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
87 | if (((strncmp(buf, "HTTP/1.1 200 OK\r\n", 17) != 0) && |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
88 | (strncmp(buf, "HTTP/1.1 100 Continue\r\n", 23) != 0)) && |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
89 | ((strncmp(buf, "HTTP/1.0 200 OK\r\n", 17) != 0) && |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
90 | (strncmp(buf, "HTTP/1.0 100 Continue\r\n", 23) != 0))) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
91 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
92 | *error = TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
93 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
94 | return FALSE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
95 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
96 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
97 | if (strncmp(buf, "HTTP/1.1 100 Continue\r\n", 23) == 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
98 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
99 | if ((s = strstr(buf, "\r\n\r\n")) == NULL) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
100 | return FALSE; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
101 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
102 | s += 4; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
103 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
104 | if (*s == '\0') |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
105 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
106 | *ret_buf = g_strdup(""); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
107 | *ret_size = 0; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
108 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
109 | msn_httpconn_process_queue(httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
110 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
111 | return TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
112 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
113 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
114 | buf = s; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
115 | size -= (s - buf); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
116 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
117 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
118 | if ((s = strstr(buf, "\r\n\r\n")) == NULL) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
119 | /* Need to wait for the full HTTP header to arrive */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
120 | return FALSE; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
121 | |
|
24667
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24664
diff
changeset
|
122 | s += 4; /* Skip \r\n\r\n */ |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
123 | header = g_strndup(buf, s - buf); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
124 | body_start = s; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
125 | body_len = size - (body_start - buf); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
126 | |
| 15884 | 127 | if ((s = purple_strcasestr(header, "Content-Length: ")) != NULL) |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
128 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
129 | int tmp_len; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
130 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
131 | s += strlen("Content-Length: "); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
132 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
133 | if ((c = strchr(s, '\r')) == NULL) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
134 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
135 | g_free(header); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
136 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
137 | return FALSE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
138 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
139 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
140 | tmp = g_strndup(s, c - s); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
141 | tmp_len = atoi(tmp); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
142 | g_free(tmp); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
143 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
144 | if (body_len != tmp_len) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
145 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
146 | /* Need to wait for the full packet to arrive */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
147 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
148 | g_free(header); |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
149 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
150 | #if 0 |
| 15884 | 151 | purple_debug_warning("msn", |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
152 | "body length (%d) != content length (%d)\n", |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
153 | body_len, tmp_len); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
154 | #endif |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
155 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
156 | return FALSE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
157 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
158 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
159 | |
|
24608
9f21d921daaf
It should be more efficient to just use g_mallc() and then manually
Mark Doliner <markdoliner@pidgin.im>
parents:
24607
diff
changeset
|
160 | body = g_malloc(body_len + 1); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
161 | memcpy(body, body_start, body_len); |
|
24608
9f21d921daaf
It should be more efficient to just use g_mallc() and then manually
Mark Doliner <markdoliner@pidgin.im>
parents:
24607
diff
changeset
|
162 | body[body_len] = '\0'; |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
163 | |
|
27691
d77b2890043e
Change all MSN_DEBUG_* messages to use the new purple_debug_is_verbose call
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25698
diff
changeset
|
164 | if (purple_debug_is_verbose()) |
|
d77b2890043e
Change all MSN_DEBUG_* messages to use the new purple_debug_is_verbose call
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25698
diff
changeset
|
165 | purple_debug_misc("msn", "Incoming HTTP buffer (header): {%s}\n", |
|
d77b2890043e
Change all MSN_DEBUG_* messages to use the new purple_debug_is_verbose call
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25698
diff
changeset
|
166 | header); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
167 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
168 | /* Now we should be able to process the data. */ |
| 15884 | 169 | if ((s = purple_strcasestr(header, "X-MSN-Messenger: ")) != NULL) |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
170 | { |
| 21010 | 171 | gchar *full_session_id = NULL, *gw_ip = NULL, *session_action = NULL; |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
172 | char *t, *session_id; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
173 | char **elems, **cur, **tokens; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
174 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
175 | full_session_id = gw_ip = session_action = NULL; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
176 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
177 | s += strlen("X-MSN-Messenger: "); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
178 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
179 | if ((c = strchr(s, '\r')) == NULL) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
180 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
181 | msn_session_set_error(httpconn->session, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
182 | MSN_ERROR_HTTP_MALFORMED, NULL); |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15884
diff
changeset
|
183 | purple_debug_error("msn", "Malformed X-MSN-Messenger field.\n{%s}\n", |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
184 | buf); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
185 | |
|
24667
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24664
diff
changeset
|
186 | g_free(header); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
187 | g_free(body); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
188 | return FALSE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
189 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
190 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
191 | tmp = g_strndup(s, c - s); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
192 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
193 | elems = g_strsplit(tmp, "; ", 0); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
194 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
195 | for (cur = elems; *cur != NULL; cur++) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
196 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
197 | tokens = g_strsplit(*cur, "=", 2); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
198 | |
| 21010 | 199 | if (strcmp(tokens[0], "SessionID") == 0) { |
| 200 | g_free(full_session_id); | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
201 | full_session_id = tokens[1]; |
| 21010 | 202 | } else if (strcmp(tokens[0], "GW-IP") == 0) { |
| 203 | g_free(gw_ip); | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
204 | gw_ip = tokens[1]; |
| 21010 | 205 | } else if (strcmp(tokens[0], "Session") == 0) { |
| 206 | g_free(session_action); | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
207 | session_action = tokens[1]; |
| 21010 | 208 | } else |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
209 | g_free(tokens[1]); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
210 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
211 | g_free(tokens[0]); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
212 | /* Don't free each of the tokens, only the array. */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
213 | g_free(tokens); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
214 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
215 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
216 | g_strfreev(elems); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
217 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
218 | g_free(tmp); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
219 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
220 | t = strchr(full_session_id, '.'); |
|
25698
57998efdffd5
Prevent a NUL ptr deref caused by a malformed session_id.
Daniel Atallah <datallah@pidgin.im>
parents:
24668
diff
changeset
|
221 | if (t != NULL) |
|
57998efdffd5
Prevent a NUL ptr deref caused by a malformed session_id.
Daniel Atallah <datallah@pidgin.im>
parents:
24668
diff
changeset
|
222 | session_id = g_strndup(full_session_id, t - full_session_id); |
|
57998efdffd5
Prevent a NUL ptr deref caused by a malformed session_id.
Daniel Atallah <datallah@pidgin.im>
parents:
24668
diff
changeset
|
223 | else { |
|
57998efdffd5
Prevent a NUL ptr deref caused by a malformed session_id.
Daniel Atallah <datallah@pidgin.im>
parents:
24668
diff
changeset
|
224 | purple_debug_error("msn", "Malformed full_session_id[%s]\n", |
|
57998efdffd5
Prevent a NUL ptr deref caused by a malformed session_id.
Daniel Atallah <datallah@pidgin.im>
parents:
24668
diff
changeset
|
225 | full_session_id ? full_session_id : NULL); |
|
57998efdffd5
Prevent a NUL ptr deref caused by a malformed session_id.
Daniel Atallah <datallah@pidgin.im>
parents:
24668
diff
changeset
|
226 | session_id = g_strdup(full_session_id); |
|
57998efdffd5
Prevent a NUL ptr deref caused by a malformed session_id.
Daniel Atallah <datallah@pidgin.im>
parents:
24668
diff
changeset
|
227 | } |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
228 | |
|
24607
5e7b29f6bb2b
Move a few lines to eliminate the need for the "wasted" variable here.
Mark Doliner <markdoliner@pidgin.im>
parents:
24031
diff
changeset
|
229 | if (session_action == NULL || strcmp(session_action, "close") != 0) |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
230 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
231 | g_free(httpconn->full_session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
232 | httpconn->full_session_id = full_session_id; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
233 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
234 | g_free(httpconn->session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
235 | httpconn->session_id = session_id; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
236 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
237 | g_free(httpconn->host); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
238 | httpconn->host = gw_ip; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
239 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
240 | else |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
241 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
242 | MsnServConn *servconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
243 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
244 | /* It's going to die. */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
245 | /* poor thing */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
246 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
247 | servconn = httpconn->servconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
248 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
249 | /* I'll be honest, I don't fully understand all this, but this |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
250 | * causes crashes, Stu. */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
251 | /* if (servconn != NULL) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
252 | servconn->wasted = TRUE; */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
253 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
254 | g_free(full_session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
255 | g_free(session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
256 | g_free(gw_ip); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
257 | } |
|
24607
5e7b29f6bb2b
Move a few lines to eliminate the need for the "wasted" variable here.
Mark Doliner <markdoliner@pidgin.im>
parents:
24031
diff
changeset
|
258 | |
|
5e7b29f6bb2b
Move a few lines to eliminate the need for the "wasted" variable here.
Mark Doliner <markdoliner@pidgin.im>
parents:
24031
diff
changeset
|
259 | g_free(session_action); |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
260 | } |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
261 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
262 | g_free(header); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
263 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
264 | *ret_buf = body; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
265 | *ret_size = body_len; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
266 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
267 | msn_httpconn_process_queue(httpconn); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
268 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
269 | return TRUE; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
270 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
271 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
272 | static void |
| 15884 | 273 | read_cb(gpointer data, gint source, PurpleInputCondition cond) |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
274 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
275 | MsnHttpConn *httpconn; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
276 | MsnServConn *servconn; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
277 | char buf[MSN_BUF_LEN]; |
|
24031
f9c3efb8afa6
Fix up some types.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23856
diff
changeset
|
278 | gssize len; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
279 | char *result_msg = NULL; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
280 | size_t result_len = 0; |
|
13977
f19693309b58
[gaim-migrate @ 16416]
Mark Doliner <markdoliner@pidgin.im>
parents:
13976
diff
changeset
|
281 | gboolean error = FALSE; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
282 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
283 | httpconn = data; |
|
24667
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24664
diff
changeset
|
284 | servconn = httpconn->servconn; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
285 | |
|
24667
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24664
diff
changeset
|
286 | if (servconn->type == MSN_SERVCONN_NS) |
|
24668
853a6d533d60
Separate the parsing of data into a separate function from the reading of
Mark Doliner <markdoliner@pidgin.im>
parents:
24667
diff
changeset
|
287 | servconn->session->account->gc->last_received = time(NULL); |
|
24667
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24664
diff
changeset
|
288 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
289 | len = read(httpconn->fd, buf, sizeof(buf) - 1); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
290 | if (len < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
291 | return; |
|
24667
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24664
diff
changeset
|
292 | if (len <= 0) { |
|
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24664
diff
changeset
|
293 | purple_debug_error("msn", "HTTP: servconn %03d read error, " |
|
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24664
diff
changeset
|
294 | "len: %" G_GSSIZE_FORMAT ", errno: %d, error: %s\n", |
|
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24664
diff
changeset
|
295 | servconn->num, len, error, g_strerror(errno)); |
|
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24664
diff
changeset
|
296 | msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
297 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
298 | return; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
299 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
300 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
301 | buf[len] = '\0'; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
302 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
303 | httpconn->rx_buf = g_realloc(httpconn->rx_buf, len + httpconn->rx_len + 1); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
304 | memcpy(httpconn->rx_buf + httpconn->rx_len, buf, len + 1); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
305 | httpconn->rx_len += len; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
306 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
307 | if (!msn_httpconn_parse_data(httpconn, httpconn->rx_buf, httpconn->rx_len, |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
308 | &result_msg, &result_len, &error)) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
309 | { |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
310 | /* Either we must wait for more input, or something went wrong */ |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
311 | if (error) |
|
24667
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24664
diff
changeset
|
312 | msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
313 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
314 | return; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
315 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
316 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
317 | if (error) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
318 | { |
| 15884 | 319 | purple_debug_error("msn", "HTTP: Special error\n"); |
|
24667
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24664
diff
changeset
|
320 | msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
321 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
322 | return; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
323 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
324 | |
|
13631
b077f2d6f20e
[gaim-migrate @ 16017]
Daniel Atallah <datallah@pidgin.im>
parents:
13517
diff
changeset
|
325 | g_free(httpconn->rx_buf); |
|
10533
4c2ad22fad20
[gaim-migrate @ 11862]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10504
diff
changeset
|
326 | httpconn->rx_buf = NULL; |
|
4c2ad22fad20
[gaim-migrate @ 11862]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10504
diff
changeset
|
327 | httpconn->rx_len = 0; |
|
4c2ad22fad20
[gaim-migrate @ 11862]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10504
diff
changeset
|
328 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
329 | if (result_len == 0) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
330 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
331 | /* Nothing to do here */ |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
332 | #if 0 |
| 15884 | 333 | purple_debug_info("msn", "HTTP: nothing to do here\n"); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
334 | #endif |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
335 | g_free(result_msg); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
336 | return; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
337 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
338 | |
|
13271
93767a806808
[gaim-migrate @ 15636]
Daniel Atallah <datallah@pidgin.im>
parents:
13201
diff
changeset
|
339 | g_free(servconn->rx_buf); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
340 | servconn->rx_buf = result_msg; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
341 | servconn->rx_len = result_len; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
342 | |
|
24668
853a6d533d60
Separate the parsing of data into a separate function from the reading of
Mark Doliner <markdoliner@pidgin.im>
parents:
24667
diff
changeset
|
343 | msn_servconn_process_data(servconn); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
344 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
345 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
346 | static void |
| 15884 | 347 | httpconn_write_cb(gpointer data, gint source, PurpleInputCondition cond) |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
348 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
349 | MsnHttpConn *httpconn; |
|
24031
f9c3efb8afa6
Fix up some types.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23856
diff
changeset
|
350 | gssize ret; |
|
f9c3efb8afa6
Fix up some types.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23856
diff
changeset
|
351 | int writelen; |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
352 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
353 | httpconn = data; |
| 15884 | 354 | writelen = purple_circ_buffer_get_max_read(httpconn->tx_buf); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
355 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
356 | if (writelen == 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
357 | { |
| 15884 | 358 | purple_input_remove(httpconn->tx_handler); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
359 | httpconn->tx_handler = 0; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
360 | return; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
361 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
362 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
363 | ret = write(httpconn->fd, httpconn->tx_buf->outptr, writelen); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
364 | if (ret <= 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
365 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
366 | if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
367 | /* No worries */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
368 | return; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
369 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
370 | /* Error! */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
371 | msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_WRITE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
372 | return; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
373 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
374 | |
| 15884 | 375 | purple_circ_buffer_mark_read(httpconn->tx_buf, ret); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
376 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
377 | /* TODO: I don't think these 2 lines are needed. Remove them? */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
378 | if (ret == writelen) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
379 | httpconn_write_cb(data, source, cond); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
380 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
381 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
382 | static gboolean |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
383 | write_raw(MsnHttpConn *httpconn, const char *data, size_t data_len) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
384 | { |
| 23078 | 385 | gssize res; /* result of the write operation */ |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
386 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
387 | if (httpconn->tx_handler == 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
388 | res = write(httpconn->fd, data, data_len); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
389 | else |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
390 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
391 | res = -1; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
392 | errno = EAGAIN; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
393 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
394 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
395 | if ((res <= 0) && ((errno != EAGAIN) && (errno != EWOULDBLOCK))) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
396 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
397 | msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_WRITE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
398 | return FALSE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
399 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
400 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
401 | if (res < 0 || res < data_len) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
402 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
403 | if (res < 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
404 | res = 0; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
405 | if (httpconn->tx_handler == 0 && httpconn->fd) |
| 15884 | 406 | httpconn->tx_handler = purple_input_add(httpconn->fd, |
| 407 | PURPLE_INPUT_WRITE, httpconn_write_cb, httpconn); | |
| 408 | purple_circ_buffer_append(httpconn->tx_buf, data + res, | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
409 | data_len - res); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
410 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
411 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
412 | return TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
413 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
414 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
415 | static char * |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
416 | msn_httpconn_proxy_auth(MsnHttpConn *httpconn) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
417 | { |
| 15884 | 418 | PurpleAccount *account; |
| 419 | PurpleProxyInfo *gpi; | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
420 | const char *username, *password; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
421 | char *auth = NULL; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
422 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
423 | account = httpconn->session->account; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
424 | |
| 15884 | 425 | gpi = purple_proxy_get_setup(account); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
426 | |
| 15884 | 427 | if (gpi == NULL || !(purple_proxy_info_get_type(gpi) == PURPLE_PROXY_HTTP || |
| 428 | purple_proxy_info_get_type(gpi) == PURPLE_PROXY_USE_ENVVAR)) | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
429 | return NULL; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
430 | |
| 15884 | 431 | username = purple_proxy_info_get_username(gpi); |
| 432 | password = purple_proxy_info_get_password(gpi); | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
433 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
434 | if (username != NULL) { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
435 | char *tmp; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
436 | auth = g_strdup_printf("%s:%s", username, password ? password : ""); |
| 15884 | 437 | tmp = purple_base64_encode((const guchar *)auth, strlen(auth)); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
438 | g_free(auth); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
439 | auth = g_strdup_printf("Proxy-Authorization: Basic %s\r\n", tmp); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
440 | g_free(tmp); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
441 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
442 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
443 | return auth; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
444 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
445 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
446 | static gboolean |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
447 | msn_httpconn_poll(gpointer data) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
448 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
449 | MsnHttpConn *httpconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
450 | char *header; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
451 | char *auth; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
452 | |
|
13977
f19693309b58
[gaim-migrate @ 16416]
Mark Doliner <markdoliner@pidgin.im>
parents:
13976
diff
changeset
|
453 | httpconn = data; |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
454 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
455 | g_return_val_if_fail(httpconn != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
456 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
457 | if ((httpconn->host == NULL) || (httpconn->full_session_id == NULL)) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
458 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
459 | /* There's no need to poll if the session is not fully established */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
460 | return TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
461 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
462 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
463 | if (httpconn->waiting_response) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
464 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
465 | /* There's no need to poll if we're already waiting for a response */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
466 | return TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
467 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
468 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
469 | auth = msn_httpconn_proxy_auth(httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
470 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
471 | header = g_strdup_printf( |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
472 | "POST http://%s/gateway/gateway.dll?Action=poll&SessionID=%s HTTP/1.1\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
473 | "Accept: */*\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
474 | "Accept-Language: en-us\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
475 | "User-Agent: MSMSGS\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
476 | "Host: %s\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
477 | "Proxy-Connection: Keep-Alive\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
478 | "%s" /* Proxy auth */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
479 | "Connection: Keep-Alive\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
480 | "Pragma: no-cache\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
481 | "Content-Type: application/x-msn-messenger\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
482 | "Content-Length: 0\r\n\r\n", |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
483 | httpconn->host, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
484 | httpconn->full_session_id, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
485 | httpconn->host, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
486 | auth ? auth : ""); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
487 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
488 | g_free(auth); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
489 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
490 | if (write_raw(httpconn, header, strlen(header))) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
491 | httpconn->waiting_response = TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
492 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
493 | g_free(header); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
494 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
495 | return TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
496 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
497 | |
| 23078 | 498 | gssize |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
499 | msn_httpconn_write(MsnHttpConn *httpconn, const char *body, size_t body_len) |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
500 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
501 | char *params; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
502 | char *data; |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
503 | int header_len; |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
504 | char *auth; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
505 | const char *server_types[] = { "NS", "SB" }; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
506 | const char *server_type; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
507 | char *host; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
508 | MsnServConn *servconn; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
509 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
510 | /* TODO: remove http data from servconn */ |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
511 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
512 | g_return_val_if_fail(httpconn != NULL, 0); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
513 | g_return_val_if_fail(body != NULL, 0); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
514 | g_return_val_if_fail(body_len > 0, 0); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
515 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
516 | servconn = httpconn->servconn; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
517 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
518 | if (httpconn->waiting_response) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
519 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
520 | MsnHttpQueueData *queue_data = g_new0(MsnHttpQueueData, 1); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
521 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
522 | queue_data->httpconn = httpconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
523 | queue_data->body = g_memdup(body, body_len); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
524 | queue_data->body_len = body_len; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
525 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
526 | httpconn->queue = g_list_append(httpconn->queue, queue_data); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
527 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
528 | return body_len; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
529 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
530 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
531 | server_type = server_types[servconn->type]; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
532 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
533 | if (httpconn->virgin) |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
534 | { |
|
23817
aff31c9b1fad
Clean up some #define's in msn.h and various supporting changes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23078
diff
changeset
|
535 | /* QuLogic: This doesn't look right to me, but it still seems to work */ |
|
aff31c9b1fad
Clean up some #define's in msn.h and various supporting changes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23078
diff
changeset
|
536 | host = MSN_HTTPCONN_SERVER; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
537 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
538 | /* The first time servconn->host is the host we should connect to. */ |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
539 | params = g_strdup_printf("Action=open&Server=%s&IP=%s", |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
540 | server_type, |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
541 | servconn->host); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
542 | httpconn->virgin = FALSE; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
543 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
544 | else |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
545 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
546 | /* The rest of the times servconn->host is the gateway host. */ |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
547 | host = httpconn->host; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
548 | |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
549 | if (host == NULL || httpconn->full_session_id == NULL) |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
550 | { |
| 15884 | 551 | purple_debug_warning("msn", "Attempted HTTP write before session is established\n"); |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
552 | return -1; |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
553 | } |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
554 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
555 | params = g_strdup_printf("SessionID=%s", |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
556 | httpconn->full_session_id); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
557 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
558 | |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
559 | auth = msn_httpconn_proxy_auth(httpconn); |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
560 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
561 | data = g_strdup_printf( |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
562 | "POST http://%s/gateway/gateway.dll?%s HTTP/1.1\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
563 | "Accept: */*\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
564 | "Accept-Language: en-us\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
565 | "User-Agent: MSMSGS\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
566 | "Host: %s\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
567 | "Proxy-Connection: Keep-Alive\r\n" |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
568 | "%s" /* Proxy auth */ |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
569 | "Connection: Keep-Alive\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
570 | "Pragma: no-cache\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
571 | "Content-Type: application/x-msn-messenger\r\n" |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
572 | "Content-Length: %d\r\n\r\n", |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
573 | host, |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
574 | params, |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
575 | host, |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
576 | auth ? auth : "", |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
577 | (int) body_len); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
578 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
579 | g_free(params); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
580 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
581 | g_free(auth); |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
582 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
583 | header_len = strlen(data); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
584 | data = g_realloc(data, header_len + body_len); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
585 | memcpy(data + header_len, body, body_len); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
586 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
587 | if (write_raw(httpconn, data, header_len + body_len)) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
588 | httpconn->waiting_response = TRUE; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
589 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
590 | g_free(data); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
591 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
592 | return body_len; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
593 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
594 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
595 | MsnHttpConn * |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
596 | msn_httpconn_new(MsnServConn *servconn) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
597 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
598 | MsnHttpConn *httpconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
599 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
600 | g_return_val_if_fail(servconn != NULL, NULL); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
601 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
602 | httpconn = g_new0(MsnHttpConn, 1); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
603 | |
| 15884 | 604 | purple_debug_info("msn", "new httpconn (%p)\n", httpconn); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
605 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
606 | /* TODO: Remove this */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
607 | httpconn->session = servconn->session; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
608 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
609 | httpconn->servconn = servconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
610 | |
| 15884 | 611 | httpconn->tx_buf = purple_circ_buffer_new(MSN_BUF_LEN); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
612 | httpconn->tx_handler = 0; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
613 | |
|
20119
b1896729e970
applied changes from b23d40378bee58e6e5a79f04f532b50daf43f802
Richard Laager <rlaager@pidgin.im>
parents:
19989
diff
changeset
|
614 | httpconn->fd = -1; |
|
b1896729e970
applied changes from b23d40378bee58e6e5a79f04f532b50daf43f802
Richard Laager <rlaager@pidgin.im>
parents:
19989
diff
changeset
|
615 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
616 | return httpconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
617 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
618 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
619 | void |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
620 | msn_httpconn_destroy(MsnHttpConn *httpconn) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
621 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
622 | g_return_if_fail(httpconn != NULL); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
623 | |
| 15884 | 624 | purple_debug_info("msn", "destroy httpconn (%p)\n", httpconn); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
625 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
626 | if (httpconn->connected) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
627 | msn_httpconn_disconnect(httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
628 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
629 | g_free(httpconn->full_session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
630 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
631 | g_free(httpconn->session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
632 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
633 | g_free(httpconn->host); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
634 | |
| 21019 | 635 | while (httpconn->queue != NULL) { |
| 636 | MsnHttpQueueData *queue_data; | |
| 637 | ||
| 638 | queue_data = (MsnHttpQueueData *) httpconn->queue->data; | |
| 639 | ||
|
21063
911e85f207c7
Fix some leaks caused by misuse of g_list_remove_link() instead of g_list_delete_link().
Daniel Atallah <datallah@pidgin.im>
parents:
21019
diff
changeset
|
640 | httpconn->queue = g_list_delete_link(httpconn->queue, httpconn->queue); |
| 21019 | 641 | |
| 642 | g_free(queue_data->body); | |
| 643 | g_free(queue_data); | |
| 644 | } | |
| 645 | ||
| 15884 | 646 | purple_circ_buffer_destroy(httpconn->tx_buf); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
647 | if (httpconn->tx_handler > 0) |
| 15884 | 648 | purple_input_remove(httpconn->tx_handler); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
649 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
650 | g_free(httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
651 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
652 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
653 | static void |
|
14174
1615a99529dc
[gaim-migrate @ 16746]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
654 | connect_cb(gpointer data, gint source, const gchar *error_message) |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
655 | { |
|
14174
1615a99529dc
[gaim-migrate @ 16746]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
656 | MsnHttpConn *httpconn; |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
657 | |
|
14174
1615a99529dc
[gaim-migrate @ 16746]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
658 | httpconn = data; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
659 | httpconn->connect_data = NULL; |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
660 | httpconn->fd = source; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
661 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
662 | if (source >= 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
663 | { |
| 15884 | 664 | httpconn->inpa = purple_input_add(httpconn->fd, PURPLE_INPUT_READ, |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
665 | read_cb, data); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
666 | |
|
24619
5ece4c87ea96
Use purple_timeout_add_seconds() instead of purple_timeout_add() in a
Mark Doliner <markdoliner@pidgin.im>
parents:
24608
diff
changeset
|
667 | httpconn->timer = purple_timeout_add_seconds(2, msn_httpconn_poll, httpconn); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
668 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
669 | msn_httpconn_process_queue(httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
670 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
671 | else |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
672 | { |
|
24031
f9c3efb8afa6
Fix up some types.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23856
diff
changeset
|
673 | purple_debug_error("msn", "HTTP: Connection error: %s\n", |
|
f9c3efb8afa6
Fix up some types.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23856
diff
changeset
|
674 | error_message ? error_message : "(null)"); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
675 | msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_CONNECT); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
676 | } |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
677 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
678 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
679 | gboolean |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
680 | msn_httpconn_connect(MsnHttpConn *httpconn, const char *host, int port) |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
681 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
682 | g_return_val_if_fail(httpconn != NULL, FALSE); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
683 | g_return_val_if_fail(host != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
684 | g_return_val_if_fail(port > 0, FALSE); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
685 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
686 | if (httpconn->connected) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
687 | msn_httpconn_disconnect(httpconn); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
688 | |
| 15884 | 689 | httpconn->connect_data = purple_proxy_connect(NULL, httpconn->session->account, |
|
19989
1f1bb361a75a
A fix from Laszlo Pandy to make the MSN HTTP Method work again. Fixes #2638 and should make a number of people happy. This introduces a new string that isn't marked as translatable for 2.2.0 because it is so late in the game.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
690 | host, 80, connect_cb, httpconn); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
691 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
692 | if (httpconn->connect_data != NULL) |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
693 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
694 | httpconn->waiting_response = TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
695 | httpconn->connected = TRUE; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
696 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
697 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
698 | return httpconn->connected; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
699 | } |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
700 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
701 | void |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
702 | msn_httpconn_disconnect(MsnHttpConn *httpconn) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
703 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
704 | g_return_if_fail(httpconn != NULL); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
705 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
706 | if (!httpconn->connected) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
707 | return; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
708 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
709 | if (httpconn->connect_data != NULL) |
|
14174
1615a99529dc
[gaim-migrate @ 16746]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
710 | { |
| 15884 | 711 | purple_proxy_connect_cancel(httpconn->connect_data); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
712 | httpconn->connect_data = NULL; |
|
14174
1615a99529dc
[gaim-migrate @ 16746]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
713 | } |
|
1615a99529dc
[gaim-migrate @ 16746]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
714 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
715 | if (httpconn->timer) |
|
14174
1615a99529dc
[gaim-migrate @ 16746]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
716 | { |
| 15884 | 717 | purple_timeout_remove(httpconn->timer); |
|
14174
1615a99529dc
[gaim-migrate @ 16746]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
718 | httpconn->timer = 0; |
|
1615a99529dc
[gaim-migrate @ 16746]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
719 | } |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
720 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
721 | if (httpconn->inpa > 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
722 | { |
| 15884 | 723 | purple_input_remove(httpconn->inpa); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
724 | httpconn->inpa = 0; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
725 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
726 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
727 | close(httpconn->fd); |
|
14174
1615a99529dc
[gaim-migrate @ 16746]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
728 | httpconn->fd = -1; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
729 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
730 | g_free(httpconn->rx_buf); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
731 | httpconn->rx_buf = NULL; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
732 | httpconn->rx_len = 0; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
733 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
734 | httpconn->connected = FALSE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
735 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
736 | /* msn_servconn_disconnect(httpconn->servconn); */ |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
737 | } |