Mon, 03 Jul 2006 20:39:04 +0000
[gaim-migrate @ 16414]
First stab at trying to fix the MSN http connect method. It still
doesn't work, and I'm not sure why, but it gets a lot farther in
the signon process now.
For those unfamiliar with the issue, the MSN http connect method
stopped working after all the non-blocking I/O changes. The http
connect method is apparently used by lots of people behind silly
firewalls and stuff, and therefore we really shouldn't release
Gaim 2.0.0 without it working, because people will complain.
The two main problems were
1. The outgoing message queue was removed in favor of buffering all
data to one large buffer. This sounds good in theory... but apparently
each message sent to and from the server has a "SessionID" in the
HTTP header. Every message we send should use the same SessionID as
the last packet we received from the server. So basically you can't
put two messages into the outgoing buffer at the same time because
you don't have the correct SessionID to use for the second message.
You have to wait until you get the reply from the server.
2. There were some strange buffer problems with using the wrong
variable when trying to combine the header+body into one buffer
before sending the message.
I also fixed a small memleak or two, added some comments, and
tried to clean up the code a little.
|
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 | * |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
4 | * gaim |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
5 | * |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
6 | * Gaim is the legal property of its developers, whose names are too numerous |
|
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 |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
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 | gboolean wasted = FALSE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
68 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
69 | g_return_val_if_fail(httpconn != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
70 | g_return_val_if_fail(buf != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
71 | g_return_val_if_fail(size > 0, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
72 | g_return_val_if_fail(ret_buf != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
73 | g_return_val_if_fail(ret_size != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
74 | g_return_val_if_fail(error != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
75 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
76 | #if 0 |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
77 | gaim_debug_info("msn", "HTTP: parsing data {%s}\n", buf); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
78 | #endif |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
79 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
80 | /* Healthy defaults. */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
81 | body = NULL; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
82 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
83 | *ret_buf = NULL; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
84 | *ret_size = 0; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
85 | *error = FALSE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
86 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
87 | /* 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
|
88 | 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
|
89 | (strncmp(buf, "HTTP/1.1 100 Continue\r\n", 23) != 0)) && |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
90 | ((strncmp(buf, "HTTP/1.0 200 OK\r\n", 17) != 0) && |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
91 | (strncmp(buf, "HTTP/1.0 100 Continue\r\n", 23) != 0))) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
92 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
93 | *error = TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
94 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
95 | return FALSE; |
|
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 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
98 | 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
|
99 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
100 | if ((s = strstr(buf, "\r\n\r\n")) == NULL) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
101 | return FALSE; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
102 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
103 | s += 4; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
104 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
105 | if (*s == '\0') |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
106 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
107 | *ret_buf = g_strdup(""); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
108 | *ret_size = 0; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
109 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
110 | msn_httpconn_process_queue(httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
111 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
112 | return TRUE; |
|
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 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
115 | buf = s; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
116 | size -= (s - buf); |
|
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 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
119 | if ((s = strstr(buf, "\r\n\r\n")) == NULL) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
120 | /* Need to wait for the full HTTP header to arrive */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
121 | return FALSE; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
122 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
123 | s += 4; /* Skip \r\n */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
124 | header = g_strndup(buf, s - buf); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
125 | body_start = s; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
126 | body_len = size - (body_start - buf); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
127 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
128 | if ((s = gaim_strcasestr(header, "Content-Length: ")) != NULL) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
129 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
130 | int tmp_len; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
131 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
132 | s += strlen("Content-Length: "); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
133 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
134 | if ((c = strchr(s, '\r')) == NULL) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
135 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
136 | g_free(header); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
137 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
138 | return FALSE; |
|
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 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
141 | tmp = g_strndup(s, c - s); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
142 | tmp_len = atoi(tmp); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
143 | g_free(tmp); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
144 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
145 | if (body_len != tmp_len) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
146 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
147 | /* Need to wait for the full packet to arrive */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
148 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
149 | g_free(header); |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
150 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
151 | #if 0 |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
152 | gaim_debug_warning("msn", |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
153 | "body length (%d) != content length (%d)\n", |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
154 | body_len, tmp_len); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
155 | #endif |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
156 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
157 | return FALSE; |
|
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 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
160 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
161 | body = g_malloc0(body_len + 1); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
162 | memcpy(body, body_start, body_len); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
163 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
164 | #ifdef MSN_DEBUG_HTTP |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
165 | gaim_debug_misc("msn", "Incoming HTTP buffer (header): {%s\r\n}\n", |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
166 | header); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
167 | #endif |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
168 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
169 | /* Now we should be able to process the data. */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
170 | if ((s = gaim_strcasestr(header, "X-MSN-Messenger: ")) != NULL) |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
171 | { |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
172 | char *full_session_id, *gw_ip, *session_action; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
173 | char *t, *session_id; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
174 | char **elems, **cur, **tokens; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
175 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
176 | full_session_id = gw_ip = session_action = NULL; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
177 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
178 | s += strlen("X-MSN-Messenger: "); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
179 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
180 | if ((c = strchr(s, '\r')) == NULL) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
181 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
182 | msn_session_set_error(httpconn->session, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
183 | MSN_ERROR_HTTP_MALFORMED, NULL); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
184 | gaim_debug_error("msn", "Malformed X-MSN-Messenger field.\n{%s}", |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
185 | buf); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
186 | |
|
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 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
199 | if (strcmp(tokens[0], "SessionID") == 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
200 | full_session_id = tokens[1]; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
201 | else if (strcmp(tokens[0], "GW-IP") == 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
202 | gw_ip = tokens[1]; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
203 | else if (strcmp(tokens[0], "Session") == 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
204 | session_action = tokens[1]; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
205 | else |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
206 | g_free(tokens[1]); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
207 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
208 | g_free(tokens[0]); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
209 | /* Don't free each of the tokens, only the array. */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
210 | g_free(tokens); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
211 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
212 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
213 | g_strfreev(elems); |
|
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 | g_free(tmp); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
216 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
217 | if ((session_action != NULL) && (strcmp(session_action, "close") == 0)) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
218 | wasted = TRUE; |
|
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 | g_free(session_action); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
221 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
222 | t = strchr(full_session_id, '.'); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
223 | session_id = g_strndup(full_session_id, t - full_session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
224 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
225 | if (!wasted) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
226 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
227 | g_free(httpconn->full_session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
228 | httpconn->full_session_id = full_session_id; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
229 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
230 | g_free(httpconn->session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
231 | httpconn->session_id = session_id; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
232 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
233 | g_free(httpconn->host); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
234 | httpconn->host = gw_ip; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
235 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
236 | else |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
237 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
238 | MsnServConn *servconn; |
|
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 | /* It's going to die. */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
241 | /* poor thing */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
242 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
243 | servconn = httpconn->servconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
244 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
245 | /* 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
|
246 | * causes crashes, Stu. */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
247 | /* if (servconn != NULL) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
248 | servconn->wasted = TRUE; */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
249 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
250 | g_free(full_session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
251 | g_free(session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
252 | g_free(gw_ip); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
253 | } |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
254 | } |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
255 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
256 | g_free(header); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
257 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
258 | *ret_buf = body; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
259 | *ret_size = body_len; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
260 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
261 | msn_httpconn_process_queue(httpconn); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
262 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
263 | return TRUE; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
264 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
265 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
266 | static void |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
267 | read_cb(gpointer data, gint source, GaimInputCondition cond) |
|
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 | MsnHttpConn *httpconn; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
270 | MsnServConn *servconn; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
271 | MsnSession *session; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
272 | char buf[MSN_BUF_LEN]; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
273 | char *cur, *end, *old_rx_buf; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
274 | int len, cur_len; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
275 | char *result_msg = NULL; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
276 | size_t result_len = 0; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
277 | gboolean error; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
278 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
279 | httpconn = data; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
280 | servconn = NULL; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
281 | session = httpconn->session; |
|
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 | len = read(httpconn->fd, buf, sizeof(buf) - 1); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
284 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
285 | if (len < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
286 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
287 | else if (len <= 0) |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
288 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
289 | gaim_debug_error("msn", "HTTP: Read error\n"); |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
290 | msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_READ); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
291 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
292 | return; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
293 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
294 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
295 | buf[len] = '\0'; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
296 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
297 | 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
|
298 | memcpy(httpconn->rx_buf + httpconn->rx_len, buf, len + 1); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
299 | httpconn->rx_len += len; |
|
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 | 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
|
302 | &result_msg, &result_len, &error)) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
303 | { |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
304 | /* 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
|
305 | if (error) |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
306 | msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_READ); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
307 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
308 | return; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
309 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
310 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
311 | httpconn->servconn->processing = FALSE; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
312 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
313 | servconn = httpconn->servconn; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
314 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
315 | if (error) |
|
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 | gaim_debug_error("msn", "HTTP: Special error\n"); |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
318 | msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_READ); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
319 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
320 | return; |
|
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 | |
|
13631
b077f2d6f20e
[gaim-migrate @ 16017]
Daniel Atallah <datallah@pidgin.im>
parents:
13517
diff
changeset
|
323 | g_free(httpconn->rx_buf); |
|
10533
4c2ad22fad20
[gaim-migrate @ 11862]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10504
diff
changeset
|
324 | httpconn->rx_buf = NULL; |
|
4c2ad22fad20
[gaim-migrate @ 11862]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10504
diff
changeset
|
325 | httpconn->rx_len = 0; |
|
4c2ad22fad20
[gaim-migrate @ 11862]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10504
diff
changeset
|
326 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
327 | if (result_len == 0) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
328 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
329 | /* Nothing to do here */ |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
330 | #if 0 |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
331 | gaim_debug_info("msn", "HTTP: nothing to do here\n"); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
332 | #endif |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
333 | g_free(result_msg); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
334 | return; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
335 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
336 | |
|
13271
93767a806808
[gaim-migrate @ 15636]
Daniel Atallah <datallah@pidgin.im>
parents:
13201
diff
changeset
|
337 | g_free(servconn->rx_buf); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
338 | servconn->rx_buf = result_msg; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
339 | servconn->rx_len = result_len; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
340 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
341 | end = old_rx_buf = servconn->rx_buf; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
342 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
343 | servconn->processing = TRUE; |
|
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 | do |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
346 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
347 | cur = end; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
348 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
349 | if (servconn->payload_len) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
350 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
351 | if (servconn->payload_len > servconn->rx_len) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
352 | /* The payload is still not complete. */ |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
353 | break; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
354 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
355 | cur_len = servconn->payload_len; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
356 | end += cur_len; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
357 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
358 | else |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
359 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
360 | end = strstr(cur, "\r\n"); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
361 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
362 | if (end == NULL) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
363 | /* The command is still not complete. */ |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
364 | break; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
365 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
366 | *end = '\0'; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
367 | end += 2; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
368 | cur_len = end - cur; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
369 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
370 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
371 | servconn->rx_len -= cur_len; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
372 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
373 | if (servconn->payload_len) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
374 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
375 | msn_cmdproc_process_payload(servconn->cmdproc, cur, cur_len); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
376 | servconn->payload_len = 0; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
377 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
378 | else |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
379 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
380 | msn_cmdproc_process_cmd_text(servconn->cmdproc, cur); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
381 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
382 | } while (servconn->connected && servconn->rx_len > 0); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
383 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
384 | if (servconn->connected) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
385 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
386 | if (servconn->rx_len > 0) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
387 | servconn->rx_buf = g_memdup(cur, servconn->rx_len); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
388 | else |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
389 | servconn->rx_buf = NULL; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
390 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
391 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
392 | servconn->processing = FALSE; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
393 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
394 | if (servconn->wasted) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
395 | msn_servconn_destroy(servconn); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
396 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
397 | g_free(old_rx_buf); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
398 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
399 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
400 | static void |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
401 | httpconn_write_cb(gpointer data, gint source, GaimInputCondition cond) |
|
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 | MsnHttpConn *httpconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
404 | int ret, writelen; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
405 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
406 | httpconn = data; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
407 | writelen = gaim_circ_buffer_get_max_read(httpconn->tx_buf); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
408 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
409 | if (writelen == 0) |
|
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 | gaim_input_remove(httpconn->tx_handler); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
412 | httpconn->tx_handler = 0; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
413 | return; |
|
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 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
416 | ret = write(httpconn->fd, httpconn->tx_buf->outptr, writelen); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
417 | if (ret <= 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
418 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
419 | if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
420 | /* No worries */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
421 | return; |
|
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 | /* Error! */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
424 | msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_WRITE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
425 | return; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
426 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
427 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
428 | gaim_circ_buffer_mark_read(httpconn->tx_buf, ret); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
429 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
430 | /* 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
|
431 | if (ret == writelen) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
432 | httpconn_write_cb(data, source, cond); |
|
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 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
435 | static gboolean |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
436 | write_raw(MsnHttpConn *httpconn, const char *data, size_t data_len) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
437 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
438 | ssize_t res; /* result of the write operation */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
439 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
440 | if (httpconn->tx_handler == 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
441 | res = write(httpconn->fd, data, data_len); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
442 | else |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
443 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
444 | res = -1; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
445 | errno = EAGAIN; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
446 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
447 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
448 | if ((res <= 0) && ((errno != EAGAIN) && (errno != EWOULDBLOCK))) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
449 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
450 | msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_WRITE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
451 | return FALSE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
452 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
453 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
454 | if (res < 0 || res < data_len) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
455 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
456 | if (res < 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
457 | res = 0; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
458 | if (httpconn->tx_handler == 0 && httpconn->fd) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
459 | httpconn->tx_handler = gaim_input_add(httpconn->fd, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
460 | GAIM_INPUT_WRITE, httpconn_write_cb, httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
461 | gaim_circ_buffer_append(httpconn->tx_buf, data + res, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
462 | data_len - res); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
463 | } |
|
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 | return TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
466 | } |
|
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 | static char * |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
469 | msn_httpconn_proxy_auth(MsnHttpConn *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 | GaimAccount *account; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
472 | GaimProxyInfo *gpi; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
473 | const char *username, *password; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
474 | char *auth = NULL; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
475 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
476 | account = httpconn->session->account; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
477 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
478 | if (gaim_account_get_proxy_info(account) == NULL) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
479 | gpi = gaim_global_proxy_get_info(); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
480 | else |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
481 | gpi = gaim_account_get_proxy_info(account); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
482 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
483 | if (gpi == NULL || !(gaim_proxy_info_get_type(gpi) == GAIM_PROXY_HTTP || |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
484 | gaim_proxy_info_get_type(gpi) == GAIM_PROXY_USE_ENVVAR)) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
485 | return NULL; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
486 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
487 | username = gaim_proxy_info_get_username(gpi); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
488 | password = gaim_proxy_info_get_password(gpi); |
|
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 (username != NULL) { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
491 | char *tmp; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
492 | auth = g_strdup_printf("%s:%s", username, password ? password : ""); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
493 | tmp = gaim_base64_encode((const guchar *)auth, strlen(auth)); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
494 | g_free(auth); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
495 | auth = g_strdup_printf("Proxy-Authorization: Basic %s\r\n", tmp); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
496 | g_free(tmp); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
497 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
498 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
499 | return auth; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
500 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
501 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
502 | static gboolean |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
503 | msn_httpconn_poll(gpointer data) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
504 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
505 | MsnHttpConn *httpconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
506 | char *header; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
507 | char *auth; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
508 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
509 | data = httpconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
510 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
511 | g_return_val_if_fail(httpconn != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
512 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
513 | if ((httpconn->host == NULL) || (httpconn->full_session_id == NULL)) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
514 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
515 | /* 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
|
516 | return TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
517 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
518 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
519 | if (httpconn->waiting_response) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
520 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
521 | /* 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
|
522 | return TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
523 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
524 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
525 | auth = msn_httpconn_proxy_auth(httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
526 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
527 | header = g_strdup_printf( |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
528 | "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
|
529 | "Accept: */*\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
530 | "Accept-Language: en-us\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
531 | "User-Agent: MSMSGS\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
532 | "Host: %s\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
533 | "Proxy-Connection: Keep-Alive\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
534 | "%s" /* Proxy auth */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
535 | "Connection: Keep-Alive\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
536 | "Pragma: no-cache\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
537 | "Content-Type: application/x-msn-messenger\r\n" |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
538 | "Content-Length: 0\r\n\r\n", |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
539 | httpconn->host, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
540 | httpconn->full_session_id, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
541 | httpconn->host, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
542 | auth ? auth : ""); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
543 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
544 | g_free(auth); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
545 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
546 | if (write_raw(httpconn, header, strlen(header))) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
547 | httpconn->waiting_response = TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
548 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
549 | g_free(header); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
550 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
551 | return TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
552 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
553 | |
|
13271
93767a806808
[gaim-migrate @ 15636]
Daniel Atallah <datallah@pidgin.im>
parents:
13201
diff
changeset
|
554 | ssize_t |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
555 | 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
|
556 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
557 | char *params; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
558 | char *data; |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
559 | int header_len; |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
560 | char *auth; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
561 | const char *server_types[] = { "NS", "SB" }; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
562 | const char *server_type; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
563 | char *host; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
564 | MsnServConn *servconn; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
565 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
566 | /* TODO: remove http data from servconn */ |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
567 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
568 | g_return_val_if_fail(httpconn != NULL, 0); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
569 | g_return_val_if_fail(body != NULL, 0); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
570 | g_return_val_if_fail(body_len > 0, 0); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
571 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
572 | servconn = httpconn->servconn; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
573 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
574 | if (httpconn->waiting_response) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
575 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
576 | MsnHttpQueueData *queue_data = g_new0(MsnHttpQueueData, 1); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
577 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
578 | queue_data->httpconn = httpconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
579 | queue_data->body = g_memdup(body, body_len); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
580 | queue_data->body_len = body_len; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
581 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
582 | httpconn->queue = g_list_append(httpconn->queue, queue_data); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
583 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
584 | return body_len; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
585 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
586 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
587 | server_type = server_types[servconn->type]; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
588 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
589 | if (httpconn->virgin) |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
590 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
591 | host = "gateway.messenger.hotmail.com"; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
592 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
593 | /* 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
|
594 | params = g_strdup_printf("Action=open&Server=%s&IP=%s", |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
595 | server_type, |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
596 | servconn->host); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
597 | httpconn->virgin = FALSE; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
598 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
599 | else |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
600 | { |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
601 | /* The rest of the times servconn->host is the gateway host. */ |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
602 | host = httpconn->host; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
603 | |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
604 | if (host == NULL || httpconn->full_session_id == NULL) |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
605 | { |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
606 | gaim_debug_warning("msn", "Attempted HTTP write before session is established\n"); |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
607 | return -1; |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
608 | } |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
609 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
610 | params = g_strdup_printf("SessionID=%s", |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
611 | httpconn->full_session_id); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
612 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
613 | |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
614 | auth = msn_httpconn_proxy_auth(httpconn); |
|
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
615 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
616 | data = g_strdup_printf( |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
617 | "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
|
618 | "Accept: */*\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
619 | "Accept-Language: en-us\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
620 | "User-Agent: MSMSGS\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
621 | "Host: %s\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
622 | "Proxy-Connection: Keep-Alive\r\n" |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
623 | "%s" /* Proxy auth */ |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
624 | "Connection: Keep-Alive\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
625 | "Pragma: no-cache\r\n" |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
626 | "Content-Type: application/x-msn-messenger\r\n" |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
627 | "Content-Length: %d\r\n\r\n", |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
628 | host, |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
629 | params, |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
630 | host, |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
631 | auth ? auth : "", |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
632 | (int) body_len); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
633 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
634 | g_free(params); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
635 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
636 | g_free(auth); |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10543
diff
changeset
|
637 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
638 | header_len = strlen(data); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
639 | data = g_realloc(data, header_len + body_len); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
640 | memcpy(data + header_len, body, body_len); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
641 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
642 | if (write_raw(httpconn, data, header_len + body_len)) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
643 | httpconn->waiting_response = TRUE; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
644 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12323
diff
changeset
|
645 | g_free(data); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
646 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
647 | return body_len; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
648 | } |
|
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 | MsnHttpConn * |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
651 | msn_httpconn_new(MsnServConn *servconn) |
|
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 | MsnHttpConn *httpconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
654 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
655 | g_return_val_if_fail(servconn != NULL, NULL); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
656 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
657 | httpconn = g_new0(MsnHttpConn, 1); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
658 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
659 | gaim_debug_info("msn", "new httpconn (%p)\n", httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
660 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
661 | /* TODO: Remove this */ |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
662 | httpconn->session = servconn->session; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
663 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
664 | httpconn->servconn = servconn; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
665 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
666 | httpconn->tx_buf = gaim_circ_buffer_new(MSN_BUF_LEN); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
667 | httpconn->tx_handler = 0; |
|
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 | return 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 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
672 | void |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
673 | msn_httpconn_destroy(MsnHttpConn *httpconn) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
674 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
675 | g_return_if_fail(httpconn != NULL); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
676 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
677 | gaim_debug_info("msn", "destroy httpconn (%p)\n", httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
678 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
679 | if (httpconn->connected) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
680 | msn_httpconn_disconnect(httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
681 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
682 | g_free(httpconn->full_session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
683 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
684 | g_free(httpconn->session_id); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
685 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
686 | g_free(httpconn->host); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
687 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
688 | gaim_circ_buffer_destroy(httpconn->tx_buf); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
689 | if (httpconn->tx_handler > 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
690 | gaim_input_remove(httpconn->tx_handler); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
691 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
692 | g_free(httpconn); |
|
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 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
695 | static void |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
696 | connect_cb(gpointer data, gint source, GaimInputCondition cond) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
697 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
698 | MsnHttpConn *httpconn = data; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
699 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
700 | /* |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
701 | TODO: Need to do this in case the account is disabled while connecting |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
702 | if (!g_list_find(gaim_connections_get_all(), gc)) |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
703 | { |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
704 | if (source >= 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
705 | close(source); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
706 | destroy_new_conn_data(new_conn_data); |
|
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 | } |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
709 | */ |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
710 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
711 | httpconn->fd = source; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
712 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
713 | if (source >= 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
714 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
715 | httpconn->inpa = gaim_input_add(httpconn->fd, GAIM_INPUT_READ, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
716 | read_cb, data); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
717 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
718 | httpconn->timer = gaim_timeout_add(2000, msn_httpconn_poll, httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
719 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
720 | msn_httpconn_process_queue(httpconn); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
721 | } |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
722 | else |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
723 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
724 | gaim_debug_error("msn", "HTTP: Connection error\n"); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
725 | msn_servconn_got_error(httpconn->servconn, MSN_SERVCONN_ERROR_CONNECT); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
726 | } |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
727 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
728 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
729 | gboolean |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
730 | msn_httpconn_connect(MsnHttpConn *httpconn, const char *host, int port) |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
731 | { |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
732 | int r; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
733 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
734 | g_return_val_if_fail(httpconn != NULL, FALSE); |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
735 | g_return_val_if_fail(host != NULL, FALSE); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
736 | g_return_val_if_fail(port > 0, FALSE); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
737 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
738 | if (httpconn->connected) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
739 | msn_httpconn_disconnect(httpconn); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
740 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
741 | r = gaim_proxy_connect(httpconn->session->account, |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
742 | "gateway.messenger.hotmail.com", 80, connect_cb, httpconn); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
743 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
744 | if (r == 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
745 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
746 | httpconn->waiting_response = TRUE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
747 | httpconn->connected = TRUE; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
748 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
749 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
750 | return httpconn->connected; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
751 | } |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
752 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
753 | void |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
754 | msn_httpconn_disconnect(MsnHttpConn *httpconn) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
755 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
756 | g_return_if_fail(httpconn != NULL); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
757 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
758 | if (!httpconn->connected) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
759 | return; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
760 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
761 | if (httpconn->timer) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
762 | gaim_timeout_remove(httpconn->timer); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
763 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
764 | httpconn->timer = 0; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
765 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
766 | if (httpconn->inpa > 0) |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
767 | { |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
768 | gaim_input_remove(httpconn->inpa); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
769 | httpconn->inpa = 0; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
770 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
771 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
772 | close(httpconn->fd); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
773 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
774 | g_free(httpconn->rx_buf); |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
775 | httpconn->rx_buf = NULL; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
776 | httpconn->rx_len = 0; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
777 | |
|
13976
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
778 | httpconn->connected = FALSE; |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
779 | |
|
2543396bd00e
[gaim-migrate @ 16414]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
780 | /* msn_servconn_disconnect(httpconn->servconn); */ |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
diff
changeset
|
781 | } |