Thu, 13 Sep 2007 01:25:22 +0000
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1 | /** |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
2 | * @file proxy.c Proxy API |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
3 | * @ingroup core |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
4 | * |
| 15884 | 5 | * purple |
| 1 | 6 | * |
| 15884 | 7 | * Purple is the legal property of its developers, whose names are too numerous |
| 8046 | 8 | * to list here. Please refer to the COPYRIGHT file distributed with this |
| 9 | * source distribution. | |
| 1 | 10 | * |
| 11 | * This program is free software; you can redistribute it and/or modify | |
| 12 | * it under the terms of the GNU General Public License as published by | |
| 13 | * the Free Software Foundation; either version 2 of the License, or | |
| 14 | * (at your option) any later version. | |
| 15 | * | |
| 16 | * This program is distributed in the hope that it will be useful, | |
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 19 | * GNU General Public License for more details. | |
| 20 | * | |
| 21 | * You should have received a copy of the GNU General Public License | |
| 22 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19840
diff
changeset
|
23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 1 | 24 | * |
| 25 | */ | |
| 26 | ||
| 27 | /* this is a little piece of code to handle proxy connection */ | |
| 28 | /* it is intended to : 1st handle http proxy, using the CONNECT command | |
|
6856
5ed6b8356ebc
[gaim-migrate @ 7401]
Mark Doliner <markdoliner@pidgin.im>
parents:
6621
diff
changeset
|
29 | , 2nd provide an easy way to add socks support |
|
5ed6b8356ebc
[gaim-migrate @ 7401]
Mark Doliner <markdoliner@pidgin.im>
parents:
6621
diff
changeset
|
30 | , 3rd draw women to it like flies to honey */ |
| 1 | 31 | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
32 | #include "internal.h" |
|
10684
0325b164a7eb
[gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
10626
diff
changeset
|
33 | #include "cipher.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
34 | #include "debug.h" |
|
14243
0bda01972ff2
[gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
14226
diff
changeset
|
35 | #include "dnsquery.h" |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
36 | #include "notify.h" |
| 12391 | 37 | #include "ntlm.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
38 | #include "prefs.h" |
| 1 | 39 | #include "proxy.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
40 | #include "util.h" |
| 3630 | 41 | |
| 15884 | 42 | struct _PurpleProxyConnectData { |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
43 | void *handle; |
| 15884 | 44 | PurpleProxyConnectFunction connect_cb; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
45 | gpointer data; |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
46 | gchar *host; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
47 | int port; |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
48 | int fd; |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
49 | guint inpa; |
| 15884 | 50 | PurpleProxyInfo *gpi; |
| 51 | PurpleDnsQueryData *query_data; | |
|
14159
0fcdaa463a32
[gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents:
14158
diff
changeset
|
52 | |
|
0fcdaa463a32
[gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents:
14158
diff
changeset
|
53 | /** |
|
0fcdaa463a32
[gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents:
14158
diff
changeset
|
54 | * This contains alternating length/char* values. The char* |
|
0fcdaa463a32
[gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents:
14158
diff
changeset
|
55 | * values need to be freed when removed from the linked list. |
|
0fcdaa463a32
[gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents:
14158
diff
changeset
|
56 | */ |
| 9129 | 57 | GSList *hosts; |
|
14159
0fcdaa463a32
[gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents:
14158
diff
changeset
|
58 | |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
59 | /* |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
60 | * All of the following variables are used when establishing a |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
61 | * connection through a proxy. |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
62 | */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
63 | guchar *write_buffer; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
64 | gsize write_buf_len; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
65 | gsize written_len; |
| 15884 | 66 | PurpleInputFunction read_cb; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
67 | guchar *read_buffer; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
68 | gsize read_buf_len; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
69 | gsize read_len; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
70 | }; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
71 | |
|
12246
7af1ef3b1cc4
[gaim-migrate @ 14548]
Mark Doliner <markdoliner@pidgin.im>
parents:
12156
diff
changeset
|
72 | static const char *socks5errors[] = { |
|
7982
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
73 | "succeeded\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
74 | "general SOCKS server failure\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
75 | "connection not allowed by ruleset\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
76 | "Network unreachable\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
77 | "Host unreachable\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
78 | "Connection refused\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
79 | "TTL expired\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
80 | "Command not supported\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
81 | "Address type not supported\n" |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
82 | }; |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
83 | |
| 15884 | 84 | static PurpleProxyInfo *global_proxy_info = NULL; |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
85 | |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
86 | static GSList *handles = NULL; |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
87 | |
| 15884 | 88 | static void try_connect(PurpleProxyConnectData *connect_data); |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
89 | |
|
16037
e00a903d17a2
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evands@pidgin.im>
parents:
15884
diff
changeset
|
90 | /* |
|
e00a903d17a2
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evands@pidgin.im>
parents:
15884
diff
changeset
|
91 | * TODO: Eventually (GObjectification) this bad boy will be removed, because it is |
|
e00a903d17a2
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evands@pidgin.im>
parents:
15884
diff
changeset
|
92 | * a gross fix for a crashy problem. |
|
e00a903d17a2
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evands@pidgin.im>
parents:
15884
diff
changeset
|
93 | */ |
|
e00a903d17a2
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evands@pidgin.im>
parents:
15884
diff
changeset
|
94 | #define PURPLE_PROXY_CONNECT_DATA_IS_VALID(connect_data) g_slist_find(handles, connect_data) |
|
e00a903d17a2
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evands@pidgin.im>
parents:
15884
diff
changeset
|
95 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
96 | /************************************************************************** |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
97 | * Proxy structure API |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
98 | **************************************************************************/ |
| 15884 | 99 | PurpleProxyInfo * |
| 100 | purple_proxy_info_new(void) | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
101 | { |
| 15884 | 102 | return g_new0(PurpleProxyInfo, 1); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
103 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
104 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
105 | void |
| 15884 | 106 | purple_proxy_info_destroy(PurpleProxyInfo *info) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
107 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
108 | g_return_if_fail(info != NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
109 | |
|
14030
23144f1dc950
[gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents:
13991
diff
changeset
|
110 | g_free(info->host); |
|
23144f1dc950
[gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents:
13991
diff
changeset
|
111 | g_free(info->username); |
|
23144f1dc950
[gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents:
13991
diff
changeset
|
112 | g_free(info->password); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
113 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
114 | g_free(info); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
115 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
116 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
117 | void |
| 15884 | 118 | purple_proxy_info_set_type(PurpleProxyInfo *info, PurpleProxyType type) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
119 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
120 | g_return_if_fail(info != NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
121 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
122 | info->type = type; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
123 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
124 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
125 | void |
| 15884 | 126 | purple_proxy_info_set_host(PurpleProxyInfo *info, const char *host) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
127 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
128 | g_return_if_fail(info != NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
129 | |
|
14030
23144f1dc950
[gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents:
13991
diff
changeset
|
130 | g_free(info->host); |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14030
diff
changeset
|
131 | info->host = g_strdup(host); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
132 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
133 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
134 | void |
| 15884 | 135 | purple_proxy_info_set_port(PurpleProxyInfo *info, int port) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
136 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
137 | g_return_if_fail(info != NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
138 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
139 | info->port = port; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
140 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
141 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
142 | void |
| 15884 | 143 | purple_proxy_info_set_username(PurpleProxyInfo *info, const char *username) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
144 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
145 | g_return_if_fail(info != NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
146 | |
|
14030
23144f1dc950
[gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents:
13991
diff
changeset
|
147 | g_free(info->username); |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14030
diff
changeset
|
148 | info->username = g_strdup(username); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
149 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
150 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
151 | void |
| 15884 | 152 | purple_proxy_info_set_password(PurpleProxyInfo *info, const char *password) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
153 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
154 | g_return_if_fail(info != NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
155 | |
|
14030
23144f1dc950
[gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents:
13991
diff
changeset
|
156 | g_free(info->password); |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14030
diff
changeset
|
157 | info->password = g_strdup(password); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
158 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
159 | |
| 15884 | 160 | PurpleProxyType |
| 161 | purple_proxy_info_get_type(const PurpleProxyInfo *info) | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
162 | { |
| 15884 | 163 | g_return_val_if_fail(info != NULL, PURPLE_PROXY_NONE); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
164 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
165 | return info->type; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
166 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
167 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
168 | const char * |
| 15884 | 169 | purple_proxy_info_get_host(const PurpleProxyInfo *info) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
170 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
171 | g_return_val_if_fail(info != NULL, NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
172 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
173 | return info->host; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
174 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
175 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
176 | int |
| 15884 | 177 | purple_proxy_info_get_port(const PurpleProxyInfo *info) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
178 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
179 | g_return_val_if_fail(info != NULL, 0); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
180 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
181 | return info->port; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
182 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
183 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
184 | const char * |
| 15884 | 185 | purple_proxy_info_get_username(const PurpleProxyInfo *info) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
186 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
187 | g_return_val_if_fail(info != NULL, NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
188 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
189 | return info->username; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
190 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
191 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
192 | const char * |
| 15884 | 193 | purple_proxy_info_get_password(const PurpleProxyInfo *info) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
194 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
195 | g_return_val_if_fail(info != NULL, NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
196 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
197 | return info->password; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
198 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
199 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
200 | /************************************************************************** |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
201 | * Global Proxy API |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
202 | **************************************************************************/ |
| 15884 | 203 | PurpleProxyInfo * |
| 204 | purple_global_proxy_get_info(void) | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
205 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
206 | return global_proxy_info; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
207 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
208 | |
| 15884 | 209 | static PurpleProxyInfo * |
| 210 | purple_gnome_proxy_get_info(void) | |
| 11878 | 211 | { |
| 15884 | 212 | static PurpleProxyInfo info = {0, NULL, 0, NULL, NULL}; |
| 11878 | 213 | gchar *path; |
| 214 | if ((path = g_find_program_in_path("gconftool-2"))) { | |
| 215 | gchar *tmp; | |
|
12156
58a027264d6c
[gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11878
diff
changeset
|
216 | |
|
58a027264d6c
[gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11878
diff
changeset
|
217 | g_free(path); |
|
58a027264d6c
[gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11878
diff
changeset
|
218 | |
| 11878 | 219 | /* See whether to use a proxy. */ |
|
17102
f101a0af830a
Fix for detecting gnome proxy settings from ticket #935
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16478
diff
changeset
|
220 | if (!g_spawn_command_line_sync("gconftool-2 -g /system/proxy/mode", &tmp, |
| 11878 | 221 | NULL, NULL, NULL)) |
| 15884 | 222 | return purple_global_proxy_get_info(); |
|
17102
f101a0af830a
Fix for detecting gnome proxy settings from ticket #935
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16478
diff
changeset
|
223 | if (!strcmp(tmp, "none\n")) { |
| 15884 | 224 | info.type = PURPLE_PROXY_NONE; |
| 11878 | 225 | g_free(tmp); |
|
12811
492f9a7ecad2
[gaim-migrate @ 15159]
Daniel Atallah <datallah@pidgin.im>
parents:
12765
diff
changeset
|
226 | return &info; |
|
17102
f101a0af830a
Fix for detecting gnome proxy settings from ticket #935
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16478
diff
changeset
|
227 | } else if (strcmp(tmp, "manual\n")) { |
|
12811
492f9a7ecad2
[gaim-migrate @ 15159]
Daniel Atallah <datallah@pidgin.im>
parents:
12765
diff
changeset
|
228 | g_free(tmp); |
| 15884 | 229 | return purple_global_proxy_get_info(); |
| 11878 | 230 | } |
|
12156
58a027264d6c
[gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11878
diff
changeset
|
231 | |
| 11878 | 232 | g_free(tmp); |
| 15884 | 233 | info.type = PURPLE_PROXY_HTTP; |
|
12156
58a027264d6c
[gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11878
diff
changeset
|
234 | |
| 11878 | 235 | /* Free the old fields */ |
| 236 | if (info.host) { | |
| 237 | g_free(info.host); | |
| 238 | info.host = NULL; | |
| 239 | } | |
| 240 | if (info.username) { | |
| 241 | g_free(info.username); | |
| 242 | info.username = NULL; | |
| 243 | } | |
| 244 | if (info.password) { | |
| 245 | g_free(info.password); | |
| 246 | info.password = NULL; | |
| 247 | } | |
|
12156
58a027264d6c
[gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11878
diff
changeset
|
248 | |
| 11878 | 249 | /* Get the new ones */ |
| 250 | if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/host", &info.host, | |
| 251 | NULL, NULL, NULL)) | |
| 15884 | 252 | return purple_global_proxy_get_info(); |
| 11878 | 253 | g_strchomp(info.host); |
|
12156
58a027264d6c
[gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11878
diff
changeset
|
254 | |
| 11878 | 255 | if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/authentication_user", &info.username, |
| 256 | NULL, NULL, NULL)) | |
| 15884 | 257 | return purple_global_proxy_get_info(); |
| 11878 | 258 | g_strchomp(info.username); |
| 259 | ||
| 260 | if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/authentication_password", &info.password, | |
| 261 | NULL, NULL, NULL)) | |
| 15884 | 262 | return purple_global_proxy_get_info(); |
| 11878 | 263 | g_strchomp(info.password); |
| 264 | ||
| 265 | if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/port", &tmp, | |
| 266 | NULL, NULL, NULL)) | |
| 15884 | 267 | return purple_global_proxy_get_info(); |
| 11878 | 268 | info.port = atoi(tmp); |
|
12156
58a027264d6c
[gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11878
diff
changeset
|
269 | g_free(tmp); |
| 11878 | 270 | |
| 271 | return &info; | |
| 272 | } | |
| 15884 | 273 | return purple_global_proxy_get_info(); |
| 11878 | 274 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
275 | /************************************************************************** |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
276 | * Proxy API |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
277 | **************************************************************************/ |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
278 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
279 | /** |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
280 | * Whoever calls this needs to have called |
| 15884 | 281 | * purple_proxy_connect_data_disconnect() beforehand. |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
282 | */ |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
283 | static void |
| 15884 | 284 | purple_proxy_connect_data_destroy(PurpleProxyConnectData *connect_data) |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
285 | { |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
286 | handles = g_slist_remove(handles, connect_data); |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
287 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
288 | if (connect_data->query_data != NULL) |
| 15884 | 289 | purple_dnsquery_destroy(connect_data->query_data); |
|
14300
68a0aa63f3b8
[gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
290 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
291 | while (connect_data->hosts != NULL) |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
292 | { |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
293 | /* Discard the length... */ |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
294 | connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
295 | /* Free the address... */ |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
296 | g_free(connect_data->hosts->data); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
297 | connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
298 | } |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
299 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
300 | g_free(connect_data->host); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
301 | g_free(connect_data); |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
302 | } |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
303 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
304 | /** |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
305 | * Free all information dealing with a connection attempt and |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
306 | * reset the connect_data to prepare for it to try to connect |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
307 | * to another IP address. |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
308 | * |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
309 | * If an error message is passed in, then we know the connection |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
310 | * attempt failed. If the connection attempt failed and |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
311 | * connect_data->hosts is not empty then we try the next IP address. |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
312 | * If the connection attempt failed and we have no more hosts |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
313 | * try try then we call the callback with the given error message, |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
314 | * then destroy the connect_data. |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
315 | * |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
316 | * @param error_message An error message explaining why the connection |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
317 | * failed. This will be passed to the callback function |
| 15884 | 318 | * specified in the call to purple_proxy_connect(). If the |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
319 | * connection was successful then pass in null. |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
320 | */ |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
321 | static void |
| 15884 | 322 | purple_proxy_connect_data_disconnect(PurpleProxyConnectData *connect_data, const gchar *error_message) |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
323 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
324 | if (connect_data->inpa > 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
325 | { |
| 15884 | 326 | purple_input_remove(connect_data->inpa); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
327 | connect_data->inpa = 0; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
328 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
329 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
330 | if (connect_data->fd >= 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
331 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
332 | close(connect_data->fd); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
333 | connect_data->fd = -1; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
334 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
335 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
336 | g_free(connect_data->write_buffer); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
337 | connect_data->write_buffer = NULL; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
338 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
339 | g_free(connect_data->read_buffer); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
340 | connect_data->read_buffer = NULL; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
341 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
342 | if (error_message != NULL) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
343 | { |
| 15884 | 344 | purple_debug_info("proxy", "Connection attempt failed: %s\n", |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
345 | error_message); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
346 | if (connect_data->hosts != NULL) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
347 | try_connect(connect_data); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
348 | else |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
349 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
350 | /* Everything failed! Tell the originator of the request. */ |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
351 | connect_data->connect_cb(connect_data->data, -1, error_message); |
| 15884 | 352 | purple_proxy_connect_data_destroy(connect_data); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
353 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
354 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
355 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
356 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
357 | /** |
| 15884 | 358 | * This calls purple_proxy_connect_data_disconnect(), but it lets you |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
359 | * specify the error_message using a printf()-like syntax. |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
360 | */ |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
361 | static void |
| 15884 | 362 | purple_proxy_connect_data_disconnect_formatted(PurpleProxyConnectData *connect_data, const char *format, ...) |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
363 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
364 | va_list args; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
365 | gchar *tmp; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
366 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
367 | va_start(args, format); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
368 | tmp = g_strdup_vprintf(format, args); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
369 | va_end(args); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
370 | |
| 15884 | 371 | purple_proxy_connect_data_disconnect(connect_data, tmp); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
372 | g_free(tmp); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
373 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
374 | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
375 | static void |
| 15884 | 376 | purple_proxy_connect_data_connected(PurpleProxyConnectData *connect_data) |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
377 | { |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
378 | connect_data->connect_cb(connect_data->data, connect_data->fd, NULL); |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
379 | |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
380 | /* |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
381 | * We've passed the file descriptor to the protocol, so it's no longer |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
382 | * our responsibility, and we should be careful not to free it when |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
383 | * we destroy the connect_data. |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
384 | */ |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
385 | connect_data->fd = -1; |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
386 | |
| 15884 | 387 | purple_proxy_connect_data_disconnect(connect_data, NULL); |
| 388 | purple_proxy_connect_data_destroy(connect_data); | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
389 | } |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
390 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
391 | static void |
| 15884 | 392 | socket_ready_cb(gpointer data, gint source, PurpleInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
393 | { |
| 15884 | 394 | PurpleProxyConnectData *connect_data = data; |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
395 | int error = 0; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
396 | int ret; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
397 | |
|
16037
e00a903d17a2
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evands@pidgin.im>
parents:
15884
diff
changeset
|
398 | /* If the socket-connected message had already been triggered when connect_data |
|
e00a903d17a2
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evands@pidgin.im>
parents:
15884
diff
changeset
|
399 | * was destroyed via purple_proxy_connect_cancel(), we may get here with a freed connect_data. |
|
e00a903d17a2
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evands@pidgin.im>
parents:
15884
diff
changeset
|
400 | */ |
|
e00a903d17a2
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evands@pidgin.im>
parents:
15884
diff
changeset
|
401 | if (!PURPLE_PROXY_CONNECT_DATA_IS_VALID(connect_data)) |
|
e00a903d17a2
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evands@pidgin.im>
parents:
15884
diff
changeset
|
402 | return; |
|
e00a903d17a2
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evands@pidgin.im>
parents:
15884
diff
changeset
|
403 | |
| 15884 | 404 | purple_debug_info("proxy", "Connected to %s:%d.\n", |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15558
diff
changeset
|
405 | connect_data->host, connect_data->port); |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
406 | |
| 8273 | 407 | /* |
| 15884 | 408 | * purple_input_get_error after a non-blocking connect returns -1 if something is |
| 8273 | 409 | * really messed up (bad descriptor, usually). Otherwise, it returns 0 and |
| 410 | * error holds what connect would have returned if it blocked until now. | |
| 411 | * Thus, error == 0 is success, error == EINPROGRESS means "try again", | |
| 412 | * and anything else is a real error. | |
| 413 | * | |
| 414 | * (error == EINPROGRESS can happen after a select because the kernel can | |
| 415 | * be overly optimistic sometimes. select is just a hint that you might be | |
| 416 | * able to do something.) | |
| 417 | */ | |
| 15884 | 418 | ret = purple_input_get_error(connect_data->fd, &error); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
419 | |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15558
diff
changeset
|
420 | if (ret == 0 && error == EINPROGRESS) { |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
421 | /* No worries - we'll be called again later */ |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
422 | /* TODO: Does this ever happen? */ |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
17519
diff
changeset
|
423 | purple_debug_info("proxy", "(ret == 0 && error == EINPROGRESS)\n"); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
424 | return; |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15558
diff
changeset
|
425 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
426 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
427 | if (ret != 0 || error != 0) { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
428 | if (ret != 0) |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
429 | error = errno; |
| 15884 | 430 | purple_debug_info("proxy", "Error connecting to %s:%d (%s).\n", |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15558
diff
changeset
|
431 | connect_data->host, connect_data->port, strerror(error)); |
|
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15558
diff
changeset
|
432 | |
| 15884 | 433 | purple_proxy_connect_data_disconnect(connect_data, strerror(error)); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
434 | return; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
435 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
436 | |
| 15884 | 437 | purple_proxy_connect_data_connected(connect_data); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
438 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
439 | |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
440 | static gboolean |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
441 | clean_connect(gpointer data) |
|
1868
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
442 | { |
| 15884 | 443 | purple_proxy_connect_data_connected(data); |
|
1868
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
444 | |
|
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
445 | return FALSE; |
|
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
446 | } |
|
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
447 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
448 | static void |
| 15884 | 449 | proxy_connect_none(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) |
| 1 | 450 | { |
| 15884 | 451 | purple_debug_info("proxy", "Connecting to %s:%d with no proxy\n", |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
452 | connect_data->host, connect_data->port); |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
453 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
454 | connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
455 | if (connect_data->fd < 0) |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
456 | { |
| 15884 | 457 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
458 | _("Unable to create socket:\n%s"), strerror(errno)); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
459 | return; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
460 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
461 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
462 | fcntl(connect_data->fd, F_SETFL, O_NONBLOCK); |
|
10172
8400788b226c
[gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10170
diff
changeset
|
463 | #ifndef _WIN32 |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
464 | fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); |
|
10172
8400788b226c
[gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10170
diff
changeset
|
465 | #endif |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
466 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
467 | if (connect(connect_data->fd, addr, addrlen) != 0) |
|
14161
e959d0e476be
[gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents:
14159
diff
changeset
|
468 | { |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
469 | if ((errno == EINPROGRESS) || (errno == EINTR)) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
470 | { |
| 15884 | 471 | purple_debug_info("proxy", "Connection in progress\n"); |
| 472 | connect_data->inpa = purple_input_add(connect_data->fd, | |
| 473 | PURPLE_INPUT_WRITE, socket_ready_cb, connect_data); | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
474 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
475 | else |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
476 | { |
| 15884 | 477 | purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
478 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
479 | } |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
480 | else |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
481 | { |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
482 | /* |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
483 | * The connection happened IMMEDIATELY... strange, but whatever. |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
484 | */ |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
485 | int error = ETIMEDOUT; |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
486 | int ret; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
487 | |
| 15884 | 488 | purple_debug_info("proxy", "Connected immediately.\n"); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
489 | |
| 15884 | 490 | ret = purple_input_get_error(connect_data->fd, &error); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
491 | if ((ret != 0) || (error != 0)) |
|
14161
e959d0e476be
[gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents:
14159
diff
changeset
|
492 | { |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
493 | if (ret != 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
494 | error = errno; |
| 15884 | 495 | purple_proxy_connect_data_disconnect(connect_data, strerror(error)); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
496 | return; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
497 | } |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
498 | |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
499 | /* |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
500 | * We want to call the "connected" callback eventually, but we |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
501 | * don't want to call it before we return, just in case. |
|
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
502 | */ |
| 15884 | 503 | purple_timeout_add(10, clean_connect, connect_data); |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
504 | } |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
505 | } |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
506 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
507 | /** |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
508 | * This is a utility function used by the HTTP, SOCKS4 and SOCKS5 |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
509 | * connect functions. It writes data from a buffer to a socket. |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
510 | * When all the data is written it sets up a watcher to read a |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
511 | * response and call a specified function. |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
512 | */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
513 | static void |
| 15884 | 514 | proxy_do_write(gpointer data, gint source, PurpleInputCondition cond) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
515 | { |
| 15884 | 516 | PurpleProxyConnectData *connect_data; |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
517 | const guchar *request; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
518 | gsize request_len; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
519 | int ret; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
520 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
521 | connect_data = data; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
522 | request = connect_data->write_buffer + connect_data->written_len; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
523 | request_len = connect_data->write_buf_len - connect_data->written_len; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
524 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
525 | ret = write(connect_data->fd, request, request_len); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
526 | if (ret <= 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
527 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
528 | if (errno == EAGAIN) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
529 | /* No worries */ |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
530 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
531 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
532 | /* Error! */ |
| 15884 | 533 | purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
534 | return; |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
535 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
536 | if (ret < request_len) { |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
537 | connect_data->written_len += ret; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
538 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
539 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
540 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
541 | /* We're done writing data! Wait for a response. */ |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
542 | g_free(connect_data->write_buffer); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
543 | connect_data->write_buffer = NULL; |
| 15884 | 544 | purple_input_remove(connect_data->inpa); |
| 545 | connect_data->inpa = purple_input_add(connect_data->fd, | |
| 546 | PURPLE_INPUT_READ, connect_data->read_cb, connect_data); | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
547 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
548 | |
| 3376 | 549 | #define HTTP_GOODSTRING "HTTP/1.0 200" |
| 550 | #define HTTP_GOODSTRING2 "HTTP/1.1 200" | |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
551 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
552 | /** |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
553 | * We're using an HTTP proxy for a non-port 80 tunnel. Read the |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
554 | * response to the CONNECT request. |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
555 | */ |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
556 | static void |
| 15884 | 557 | http_canread(gpointer data, gint source, PurpleInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
558 | { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
559 | int len, headers_len, status = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
560 | gboolean error; |
| 15884 | 561 | PurpleProxyConnectData *connect_data = data; |
|
17519
500d04f3bf87
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents:
17446
diff
changeset
|
562 | char *p; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
563 | gsize max_read; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
564 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
565 | if (connect_data->read_buffer == NULL) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
566 | { |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
567 | connect_data->read_buf_len = 8192; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
568 | connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
569 | connect_data->read_len = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
570 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
571 | |
|
17519
500d04f3bf87
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents:
17446
diff
changeset
|
572 | p = (char *)connect_data->read_buffer + connect_data->read_len; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
573 | max_read = connect_data->read_buf_len - connect_data->read_len - 1; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
574 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
575 | len = read(connect_data->fd, p, max_read); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
576 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
577 | if (len == 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
578 | { |
| 15884 | 579 | purple_proxy_connect_data_disconnect(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
580 | _("Server closed the connection.")); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
581 | return; |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
582 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
583 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
584 | if (len < 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
585 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
586 | if (errno == EAGAIN) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
587 | /* No worries */ |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
588 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
589 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
590 | /* Error! */ |
| 15884 | 591 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
592 | _("Lost connection with server:\n%s"), strerror(errno)); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
593 | return; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
594 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
595 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
596 | connect_data->read_len += len; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
597 | p[len] = '\0'; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
598 | |
|
17519
500d04f3bf87
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents:
17446
diff
changeset
|
599 | p = g_strstr_len((const gchar *)connect_data->read_buffer, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
600 | connect_data->read_len, "\r\n\r\n"); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
601 | if (p != NULL) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
602 | *p = '\0'; |
|
17519
500d04f3bf87
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents:
17446
diff
changeset
|
603 | headers_len = (p - (char *)connect_data->read_buffer) + 4; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
604 | } else if(len == max_read) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
605 | headers_len = len; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
606 | else |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
607 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
608 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
609 | error = strncmp((const char *)connect_data->read_buffer, "HTTP/", 5) != 0; |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
610 | if (!error) |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
611 | { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
612 | int major; |
|
17519
500d04f3bf87
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents:
17446
diff
changeset
|
613 | p = (char *)connect_data->read_buffer + 5; |
|
500d04f3bf87
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents:
17446
diff
changeset
|
614 | major = strtol(p, &p, 10); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
615 | error = (major == 0) || (*p != '.'); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
616 | if(!error) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
617 | int minor; |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
618 | p++; |
|
17519
500d04f3bf87
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents:
17446
diff
changeset
|
619 | minor = strtol(p, &p, 10); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
620 | error = (*p != ' '); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
621 | if(!error) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
622 | p++; |
|
17519
500d04f3bf87
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents:
17446
diff
changeset
|
623 | status = strtol(p, &p, 10); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
624 | error = (*p != ' '); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
625 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
626 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
627 | } |
| 9129 | 628 | |
| 12391 | 629 | /* Read the contents */ |
|
17519
500d04f3bf87
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents:
17446
diff
changeset
|
630 | p = g_strrstr((const gchar *)connect_data->read_buffer, "Content-Length: "); |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
631 | if (p != NULL) |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
632 | { |
| 12391 | 633 | gchar *tmp; |
| 634 | int len = 0; | |
| 635 | char tmpc; | |
| 636 | p += strlen("Content-Length: "); | |
|
17519
500d04f3bf87
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents:
17446
diff
changeset
|
637 | tmp = strchr(p, '\r'); |
|
13405
9abc78d6db91
[gaim-migrate @ 15779]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13387
diff
changeset
|
638 | if(tmp) |
|
9abc78d6db91
[gaim-migrate @ 15779]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13387
diff
changeset
|
639 | *tmp = '\0'; |
|
17519
500d04f3bf87
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents:
17446
diff
changeset
|
640 | len = atoi(p); |
|
13405
9abc78d6db91
[gaim-migrate @ 15779]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13387
diff
changeset
|
641 | if(tmp) |
|
9abc78d6db91
[gaim-migrate @ 15779]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13387
diff
changeset
|
642 | *tmp = '\r'; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
643 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
644 | /* Compensate for what has already been read */ |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
645 | len -= connect_data->read_len - headers_len; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
646 | /* I'm assuming that we're doing this to prevent the server from |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
647 | complaining / breaking since we don't read the whole page */ |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
648 | while (len--) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
649 | /* TODO: deal with EAGAIN (and other errors) better */ |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
650 | if (read(connect_data->fd, &tmpc, 1) < 0 && errno != EAGAIN) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
651 | break; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
652 | } |
| 12391 | 653 | } |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
654 | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
655 | if (error) |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
656 | { |
| 15884 | 657 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14418
95ecfabb1797
[gaim-migrate @ 17062]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
658 | _("Unable to parse response from HTTP proxy: %s\n"), |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
659 | connect_data->read_buffer); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
660 | return; |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
661 | } |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
662 | else if (status != 200) |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
663 | { |
| 15884 | 664 | purple_debug_error("proxy", |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
665 | "Proxy server replied with:\n%s\n", |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
666 | connect_data->read_buffer); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
667 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
668 | if (status == 407 /* Proxy Auth */) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
669 | { |
| 12391 | 670 | gchar *ntlm; |
|
19985
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
671 | char hostname[256]; |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
672 | int ret; |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
673 | |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
674 | ret = gethostname(hostname, sizeof(hostname)); |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
675 | hostname[sizeof(hostname) - 1] = '\0'; |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
676 | if (ret < 0 || hostname[0] == '\0') { |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
677 | purple_debug_warning("proxy", "gethostname() failed -- is your hostname set?"); |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
678 | strcpy(hostname, "localhost"); |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
679 | } |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
680 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
681 | ntlm = g_strrstr((const gchar *)connect_data->read_buffer, |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
682 | "Proxy-Authenticate: NTLM "); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
683 | if (ntlm != NULL) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
684 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
685 | /* Check for Type-2 */ |
|
13700
ad7bca3b4240
[gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents:
13649
diff
changeset
|
686 | gchar *tmp = ntlm; |
|
ad7bca3b4240
[gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents:
13649
diff
changeset
|
687 | guint8 *nonce; |
| 15884 | 688 | gchar *domain = (gchar*)purple_proxy_info_get_username(connect_data->gpi); |
| 12391 | 689 | gchar *username; |
| 690 | gchar *request; | |
| 691 | gchar *response; | |
|
19985
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
692 | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
693 | username = strchr(domain, '\\'); |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
694 | if (username == NULL) |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
695 | { |
| 15884 | 696 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14418
95ecfabb1797
[gaim-migrate @ 17062]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
697 | _("HTTP proxy connection error %d"), status); |
| 12391 | 698 | return; |
| 699 | } | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
700 | *username = '\0'; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
701 | username++; |
| 12391 | 702 | ntlm += strlen("Proxy-Authenticate: NTLM "); |
|
13700
ad7bca3b4240
[gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents:
13649
diff
changeset
|
703 | while(*tmp != '\r' && *tmp != '\0') tmp++; |
|
ad7bca3b4240
[gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents:
13649
diff
changeset
|
704 | *tmp = '\0'; |
| 15884 | 705 | nonce = purple_ntlm_parse_type2(ntlm, NULL); |
| 706 | response = purple_ntlm_gen_type3(username, | |
| 707 | (gchar*) purple_proxy_info_get_password(connect_data->gpi), | |
|
19985
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
708 | hostname, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
709 | domain, nonce, NULL); |
| 12391 | 710 | username--; |
| 711 | *username = '\\'; | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
712 | request = g_strdup_printf( |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
713 | "CONNECT %s:%d HTTP/1.1\r\n" |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
714 | "Host: %s:%d\r\n" |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
715 | "Proxy-Authorization: NTLM %s\r\n" |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
716 | "Proxy-Connection: Keep-Alive\r\n\r\n", |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
717 | connect_data->host, connect_data->port, connect_data->host, |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
718 | connect_data->port, response); |
| 12391 | 719 | g_free(response); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
720 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
721 | g_free(connect_data->read_buffer); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
722 | connect_data->read_buffer = NULL; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
723 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
724 | connect_data->write_buffer = (guchar *)request; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
725 | connect_data->write_buf_len = strlen(request); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
726 | connect_data->written_len = 0; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
727 | connect_data->read_cb = http_canread; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
728 | |
| 15884 | 729 | purple_input_remove(connect_data->inpa); |
| 730 | connect_data->inpa = purple_input_add(connect_data->fd, | |
| 731 | PURPLE_INPUT_WRITE, proxy_do_write, connect_data); | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
732 | proxy_do_write(connect_data, connect_data->fd, cond); |
| 12391 | 733 | return; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
734 | } else if((ntlm = g_strrstr((const char *)connect_data->read_buffer, "Proxy-Authenticate: NTLM"))) { /* Empty message */ |
| 12391 | 735 | gchar request[2048]; |
| 15884 | 736 | gchar *domain = (gchar*) purple_proxy_info_get_username(connect_data->gpi); |
| 12391 | 737 | gchar *username; |
| 738 | int request_len; | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
739 | username = strchr(domain, '\\'); |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
740 | if (username == NULL) |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
741 | { |
| 15884 | 742 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14418
95ecfabb1797
[gaim-migrate @ 17062]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
743 | _("HTTP proxy connection error %d"), status); |
| 12391 | 744 | return; |
| 745 | } | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
746 | *username = '\0'; |
| 12391 | 747 | |
| 748 | request_len = g_snprintf(request, sizeof(request), | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
749 | "CONNECT %s:%d HTTP/1.1\r\n" |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
750 | "Host: %s:%d\r\n", |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
751 | connect_data->host, connect_data->port, |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
752 | connect_data->host, connect_data->port); |
| 12391 | 753 | |
| 754 | g_return_if_fail(request_len < sizeof(request)); | |
| 755 | request_len += g_snprintf(request + request_len, | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
756 | sizeof(request) - request_len, |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
757 | "Proxy-Authorization: NTLM %s\r\n" |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
758 | "Proxy-Connection: Keep-Alive\r\n\r\n", |
|
19985
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
759 | purple_ntlm_gen_type1(hostname, domain)); |
| 12391 | 760 | *username = '\\'; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
761 | |
| 15884 | 762 | purple_input_remove(connect_data->inpa); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
763 | g_free(connect_data->read_buffer); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
764 | connect_data->read_buffer = NULL; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
765 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
766 | connect_data->write_buffer = g_memdup(request, request_len); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
767 | connect_data->write_buf_len = request_len; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
768 | connect_data->written_len = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
769 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
770 | connect_data->read_cb = http_canread; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
771 | |
| 15884 | 772 | connect_data->inpa = purple_input_add(connect_data->fd, |
| 773 | PURPLE_INPUT_WRITE, proxy_do_write, connect_data); | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
774 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
775 | proxy_do_write(connect_data, connect_data->fd, cond); |
| 12391 | 776 | return; |
| 777 | } else { | |
| 15884 | 778 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14418
95ecfabb1797
[gaim-migrate @ 17062]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
779 | _("HTTP proxy connection error %d"), status); |
|
13209
439ad2dad2e1
[gaim-migrate @ 15572]
Daniel Atallah <datallah@pidgin.im>
parents:
13201
diff
changeset
|
780 | return; |
| 12391 | 781 | } |
| 782 | } | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
783 | if (status == 403) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
784 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
785 | /* Forbidden */ |
| 15884 | 786 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
787 | _("Access denied: HTTP proxy server forbids port %d tunneling."), |
|
14418
95ecfabb1797
[gaim-migrate @ 17062]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
788 | connect_data->port); |
|
8917
1301b17bc141
[gaim-migrate @ 9687]
Mark Doliner <markdoliner@pidgin.im>
parents:
8889
diff
changeset
|
789 | } else { |
| 15884 | 790 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14418
95ecfabb1797
[gaim-migrate @ 17062]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
791 | _("HTTP proxy connection error %d"), status); |
| 7834 | 792 | } |
| 793 | } else { | |
| 15884 | 794 | purple_input_remove(connect_data->inpa); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
795 | connect_data->inpa = 0; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
796 | g_free(connect_data->read_buffer); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
797 | connect_data->read_buffer = NULL; |
| 15884 | 798 | purple_debug_info("proxy", "HTTP proxy connection established\n"); |
| 799 | purple_proxy_connect_data_connected(connect_data); | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
800 | return; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
801 | } |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
802 | } |
| 9129 | 803 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
804 | static void |
| 15884 | 805 | http_canwrite(gpointer data, gint source, PurpleInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
806 | { |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
807 | GString *request; |
| 15884 | 808 | PurpleProxyConnectData *connect_data; |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
809 | int error = ETIMEDOUT; |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
810 | int ret; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
811 | |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15558
diff
changeset
|
812 | connect_data = data; |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
813 | |
| 15884 | 814 | purple_debug_info("proxy", "Connected to %s:%d.\n", |
|
15746
017e33725857
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evands@pidgin.im>
parents:
15558
diff
changeset
|
815 | connect_data->host, connect_data->port); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
816 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
817 | if (connect_data->inpa > 0) |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
818 | { |
| 15884 | 819 | purple_input_remove(connect_data->inpa); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
820 | connect_data->inpa = 0; |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
821 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
822 | |
| 15884 | 823 | ret = purple_input_get_error(connect_data->fd, &error); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
824 | if ((ret != 0) || (error != 0)) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
825 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
826 | if (ret != 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
827 | error = errno; |
| 15884 | 828 | purple_proxy_connect_data_disconnect(connect_data, strerror(error)); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
829 | return; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
830 | } |
| 7834 | 831 | |
| 15884 | 832 | purple_debug_info("proxy", "Using CONNECT tunneling for %s:%d\n", |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
833 | connect_data->host, connect_data->port); |
|
1843
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
834 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
835 | request = g_string_sized_new(4096); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
836 | g_string_append_printf(request, |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
837 | "CONNECT %s:%d HTTP/1.1\r\nHost: %s:%d\r\n", |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
838 | connect_data->host, connect_data->port, |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
839 | connect_data->host, connect_data->port); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
840 | |
| 15884 | 841 | if (purple_proxy_info_get_username(connect_data->gpi) != NULL) |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
842 | { |
|
1843
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
843 | char *t1, *t2; |
|
19985
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
844 | char hostname[256]; |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
845 | |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
846 | ret = gethostname(hostname, sizeof(hostname)); |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
847 | hostname[sizeof(hostname) - 1] = '\0'; |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
848 | if (ret < 0 || hostname[0] == '\0') { |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
849 | purple_debug_warning("proxy", "gethostname() failed -- is your hostname set?"); |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
850 | strcpy(hostname, "localhost"); |
|
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
851 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
852 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
853 | t1 = g_strdup_printf("%s:%s", |
| 15884 | 854 | purple_proxy_info_get_username(connect_data->gpi), |
| 855 | purple_proxy_info_get_password(connect_data->gpi) ? | |
| 856 | purple_proxy_info_get_password(connect_data->gpi) : ""); | |
| 857 | t2 = purple_base64_encode((const guchar *)t1, strlen(t1)); | |
|
1843
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
858 | g_free(t1); |
|
13387
c6be7551b0a6
[gaim-migrate @ 15759]
Mark Doliner <markdoliner@pidgin.im>
parents:
13313
diff
changeset
|
859 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
860 | g_string_append_printf(request, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
861 | "Proxy-Authorization: Basic %s\r\n" |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
862 | "Proxy-Authorization: NTLM %s\r\n" |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
863 | "Proxy-Connection: Keep-Alive\r\n", |
|
19985
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
864 | t2, purple_ntlm_gen_type1(hostname, "")); |
|
1843
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
865 | g_free(t2); |
|
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
866 | } |
|
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
867 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
868 | g_string_append(request, "\r\n"); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
869 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
870 | connect_data->write_buf_len = request->len; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
871 | connect_data->write_buffer = (guchar *)g_string_free(request, FALSE); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
872 | connect_data->written_len = 0; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
873 | connect_data->read_cb = http_canread; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
874 | |
| 15884 | 875 | connect_data->inpa = purple_input_add(connect_data->fd, |
| 876 | PURPLE_INPUT_WRITE, proxy_do_write, connect_data); | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
877 | proxy_do_write(connect_data, connect_data->fd, cond); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
878 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
879 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
880 | static void |
| 15884 | 881 | proxy_connect_http(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
882 | { |
| 15884 | 883 | purple_debug_info("proxy", |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
884 | "Connecting to %s:%d via %s:%d using HTTP\n", |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
885 | connect_data->host, connect_data->port, |
| 15884 | 886 | (purple_proxy_info_get_host(connect_data->gpi) ? purple_proxy_info_get_host(connect_data->gpi) : "(null)"), |
| 887 | purple_proxy_info_get_port(connect_data->gpi)); | |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
888 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
889 | connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
890 | if (connect_data->fd < 0) |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
891 | { |
| 15884 | 892 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
893 | _("Unable to create socket:\n%s"), strerror(errno)); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
894 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
895 | } |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
896 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
897 | fcntl(connect_data->fd, F_SETFL, O_NONBLOCK); |
|
10172
8400788b226c
[gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10170
diff
changeset
|
898 | #ifndef _WIN32 |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
899 | fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); |
|
10172
8400788b226c
[gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10170
diff
changeset
|
900 | #endif |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
901 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
902 | if (connect(connect_data->fd, addr, addrlen) != 0) |
|
14161
e959d0e476be
[gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents:
14159
diff
changeset
|
903 | { |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
904 | if ((errno == EINPROGRESS) || (errno == EINTR)) { |
| 15884 | 905 | purple_debug_info("proxy", "Connection in progress\n"); |
| 9655 | 906 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
907 | if (connect_data->port != 80) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
908 | { |
| 7834 | 909 | /* we need to do CONNECT first */ |
| 15884 | 910 | connect_data->inpa = purple_input_add(connect_data->fd, |
| 911 | PURPLE_INPUT_WRITE, http_canwrite, connect_data); | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
912 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
913 | else |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
914 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
915 | /* |
|
14536
d0cf69e4a87b
[gaim-migrate @ 17190]
Mark Doliner <markdoliner@pidgin.im>
parents:
14513
diff
changeset
|
916 | * If we're trying to connect to something running on |
|
d0cf69e4a87b
[gaim-migrate @ 17190]
Mark Doliner <markdoliner@pidgin.im>
parents:
14513
diff
changeset
|
917 | * port 80 then we assume the traffic using this |
|
d0cf69e4a87b
[gaim-migrate @ 17190]
Mark Doliner <markdoliner@pidgin.im>
parents:
14513
diff
changeset
|
918 | * connection is going to be HTTP traffic. If it's |
|
d0cf69e4a87b
[gaim-migrate @ 17190]
Mark Doliner <markdoliner@pidgin.im>
parents:
14513
diff
changeset
|
919 | * not then this will fail (uglily). But it's good |
|
d0cf69e4a87b
[gaim-migrate @ 17190]
Mark Doliner <markdoliner@pidgin.im>
parents:
14513
diff
changeset
|
920 | * to avoid using the CONNECT method because it's |
|
d0cf69e4a87b
[gaim-migrate @ 17190]
Mark Doliner <markdoliner@pidgin.im>
parents:
14513
diff
changeset
|
921 | * not always allowed. |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
922 | */ |
| 15884 | 923 | purple_debug_info("proxy", "HTTP proxy connection established\n"); |
| 924 | purple_proxy_connect_data_connected(connect_data); | |
| 7834 | 925 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
926 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
927 | else |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
928 | { |
| 15884 | 929 | purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
930 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
931 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
932 | else |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
933 | { |
| 15884 | 934 | purple_debug_info("proxy", "Connected immediately.\n"); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
935 | |
| 15884 | 936 | http_canwrite(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
|
1695
30db76d87de8
[gaim-migrate @ 1705]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1451
diff
changeset
|
937 | } |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
938 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
939 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
940 | static void |
| 15884 | 941 | s4_canread(gpointer data, gint source, PurpleInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
942 | { |
| 15884 | 943 | PurpleProxyConnectData *connect_data = data; |
|
13387
c6be7551b0a6
[gaim-migrate @ 15759]
Mark Doliner <markdoliner@pidgin.im>
parents:
13313
diff
changeset
|
944 | guchar *buf; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
945 | int len, max_read; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
946 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
947 | /* This is really not going to block under normal circumstances, but to |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
948 | * be correct, we deal with the unlikely scenario */ |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
949 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
950 | if (connect_data->read_buffer == NULL) { |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
951 | connect_data->read_buf_len = 12; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
952 | connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
953 | connect_data->read_len = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
954 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
955 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
956 | buf = connect_data->read_buffer + connect_data->read_len; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
957 | max_read = connect_data->read_buf_len - connect_data->read_len; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
958 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
959 | len = read(connect_data->fd, buf, max_read); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
960 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
961 | if ((len < 0 && errno == EAGAIN) || (len > 0 && len + connect_data->read_len < 4)) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
962 | return; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
963 | else if (len + connect_data->read_len >= 4) { |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
964 | if (connect_data->read_buffer[1] == 90) { |
| 15884 | 965 | purple_proxy_connect_data_connected(connect_data); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
966 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
967 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
968 | } |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
969 | |
| 15884 | 970 | purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
971 | } |
|
1705
cc63a8819c1c
[gaim-migrate @ 1715]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1695
diff
changeset
|
972 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
973 | static void |
| 15884 | 974 | s4_canwrite(gpointer data, gint source, PurpleInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
975 | { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
976 | unsigned char packet[9]; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
977 | struct hostent *hp; |
| 15884 | 978 | PurpleProxyConnectData *connect_data = data; |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
979 | int error = ETIMEDOUT; |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
980 | int ret; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
981 | |
| 15884 | 982 | purple_debug_info("socks4 proxy", "Connected.\n"); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
983 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
984 | if (connect_data->inpa > 0) |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
985 | { |
| 15884 | 986 | purple_input_remove(connect_data->inpa); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
987 | connect_data->inpa = 0; |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
988 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
989 | |
| 15884 | 990 | ret = purple_input_get_error(connect_data->fd, &error); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
991 | if ((ret != 0) || (error != 0)) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
992 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
993 | if (ret != 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
994 | error = errno; |
| 15884 | 995 | purple_proxy_connect_data_disconnect(connect_data, strerror(error)); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
996 | return; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
997 | } |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
998 | |
| 10561 | 999 | /* |
| 1000 | * The socks4 spec doesn't include support for doing host name | |
| 1001 | * lookups by the proxy. Some socks4 servers do this via | |
| 1002 | * extensions to the protocol. Since we don't know if a | |
| 1003 | * server supports this, it would need to be implemented | |
| 1004 | * with an option, or some detection mechanism - in the | |
| 1005 | * meantime, stick with plain old SOCKS4. | |
| 1006 | */ | |
| 15884 | 1007 | /* TODO: Use purple_dnsquery_a() */ |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1008 | hp = gethostbyname(connect_data->host); |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
1009 | if (hp == NULL) { |
| 15884 | 1010 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1011 | _("Error resolving %s"), connect_data->host); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1012 | return; |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1013 | } |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1014 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1015 | packet[0] = 4; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1016 | packet[1] = 1; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1017 | packet[2] = connect_data->port >> 8; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1018 | packet[3] = connect_data->port & 0xff; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1019 | packet[4] = (unsigned char)(hp->h_addr_list[0])[0]; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1020 | packet[5] = (unsigned char)(hp->h_addr_list[0])[1]; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1021 | packet[6] = (unsigned char)(hp->h_addr_list[0])[2]; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1022 | packet[7] = (unsigned char)(hp->h_addr_list[0])[3]; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1023 | packet[8] = 0; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1024 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1025 | connect_data->write_buffer = g_memdup(packet, sizeof(packet)); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1026 | connect_data->write_buf_len = sizeof(packet); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1027 | connect_data->written_len = 0; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1028 | connect_data->read_cb = s4_canread; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1029 | |
| 15884 | 1030 | connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1031 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1032 | proxy_do_write(connect_data, connect_data->fd, cond); |
| 1 | 1033 | } |
| 1034 | ||
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1035 | static void |
| 15884 | 1036 | proxy_connect_socks4(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) |
| 1 | 1037 | { |
| 15884 | 1038 | purple_debug_info("proxy", |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1039 | "Connecting to %s:%d via %s:%d using SOCKS4\n", |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1040 | connect_data->host, connect_data->port, |
| 15884 | 1041 | purple_proxy_info_get_host(connect_data->gpi), |
| 1042 | purple_proxy_info_get_port(connect_data->gpi)); | |
| 1 | 1043 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1044 | connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1045 | if (connect_data->fd < 0) |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1046 | { |
| 15884 | 1047 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1048 | _("Unable to create socket:\n%s"), strerror(errno)); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1049 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1050 | } |
| 1 | 1051 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1052 | fcntl(connect_data->fd, F_SETFL, O_NONBLOCK); |
|
10172
8400788b226c
[gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10170
diff
changeset
|
1053 | #ifndef _WIN32 |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1054 | fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); |
|
10172
8400788b226c
[gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10170
diff
changeset
|
1055 | #endif |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1056 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1057 | if (connect(connect_data->fd, addr, addrlen) != 0) |
|
14161
e959d0e476be
[gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents:
14159
diff
changeset
|
1058 | { |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1059 | if ((errno == EINPROGRESS) || (errno == EINTR)) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1060 | { |
| 15884 | 1061 | purple_debug_info("proxy", "Connection in progress.\n"); |
| 1062 | connect_data->inpa = purple_input_add(connect_data->fd, | |
| 1063 | PURPLE_INPUT_WRITE, s4_canwrite, connect_data); | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1064 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1065 | else |
|
14161
e959d0e476be
[gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents:
14159
diff
changeset
|
1066 | { |
| 15884 | 1067 | purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1068 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1069 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1070 | else |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1071 | { |
| 15884 | 1072 | purple_debug_info("proxy", "Connected immediately.\n"); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1073 | |
| 15884 | 1074 | s4_canwrite(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1075 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1076 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1077 | |
|
17446
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1078 | static gboolean |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1079 | s5_ensure_buffer_length(PurpleProxyConnectData *connect_data, int len) |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1080 | { |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1081 | if(connect_data->read_len < len) { |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1082 | if(connect_data->read_buf_len < len) { |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1083 | /* it's not just that we haven't read enough, it's that we haven't tried to read enough yet */ |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1084 | purple_debug_info("s5", "reallocing from %d to %d\n", connect_data->read_buf_len, len); |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1085 | connect_data->read_buf_len = len; |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1086 | connect_data->read_buffer = g_realloc(connect_data->read_buffer, connect_data->read_buf_len); |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1087 | } |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1088 | return FALSE; |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1089 | } |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1090 | |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1091 | return TRUE; |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1092 | } |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1093 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1094 | static void |
| 15884 | 1095 | s5_canread_again(gpointer data, gint source, PurpleInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1096 | { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1097 | guchar *dest, *buf; |
| 15884 | 1098 | PurpleProxyConnectData *connect_data = data; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1099 | int len; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1100 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1101 | if (connect_data->read_buffer == NULL) { |
|
17446
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1102 | connect_data->read_buf_len = 4; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1103 | connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1104 | connect_data->read_len = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1105 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1106 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1107 | dest = connect_data->read_buffer + connect_data->read_len; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1108 | buf = connect_data->read_buffer; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1109 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1110 | len = read(connect_data->fd, dest, (connect_data->read_buf_len - connect_data->read_len)); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1111 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1112 | if (len == 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1113 | { |
| 15884 | 1114 | purple_proxy_connect_data_disconnect(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1115 | _("Server closed the connection.")); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1116 | return; |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1117 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1118 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1119 | if (len < 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1120 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1121 | if (errno == EAGAIN) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1122 | /* No worries */ |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1123 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1124 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1125 | /* Error! */ |
| 15884 | 1126 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1127 | _("Lost connection with server:\n%s"), strerror(errno)); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1128 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1129 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1130 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1131 | connect_data->read_len += len; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1132 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1133 | if(connect_data->read_len < 4) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1134 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1135 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1136 | if ((buf[0] != 0x05) || (buf[1] != 0x00)) { |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1137 | if ((buf[0] == 0x05) && (buf[1] < 0x09)) { |
| 15884 | 1138 | purple_debug_error("socks5 proxy", socks5errors[buf[1]]); |
| 1139 | purple_proxy_connect_data_disconnect(connect_data, | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1140 | socks5errors[buf[1]]); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1141 | } else { |
| 15884 | 1142 | purple_debug_error("socks5 proxy", "Bad data.\n"); |
| 1143 | purple_proxy_connect_data_disconnect(connect_data, | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1144 | _("Received invalid data on connection with server.")); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1145 | } |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1146 | return; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1147 | } |
|
670
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
1148 | |
| 8262 | 1149 | /* Skip past BND.ADDR */ |
| 1150 | switch(buf[3]) { | |
| 1151 | case 0x01: /* the address is a version-4 IP address, with a length of 4 octets */ | |
|
17446
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1152 | if(!s5_ensure_buffer_length(connect_data, 4 + 4)) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1153 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1154 | buf += 4 + 4; |
| 8262 | 1155 | break; |
| 1156 | case 0x03: /* the address field contains a fully-qualified domain name. The first | |
| 1157 | octet of the address field contains the number of octets of name that | |
| 1158 | follow, there is no terminating NUL octet. */ | |
|
17446
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1159 | if(!s5_ensure_buffer_length(connect_data, 4 + 1)) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1160 | return; |
|
17446
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1161 | buf += 4; |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1162 | if(!s5_ensure_buffer_length(connect_data, 4 + 1 + buf[0])) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1163 | return; |
|
17446
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1164 | buf += buf[0] + 1; |
| 8262 | 1165 | break; |
| 1166 | case 0x04: /* the address is a version-6 IP address, with a length of 16 octets */ | |
|
17446
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1167 | if(!s5_ensure_buffer_length(connect_data, 4 + 16)) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1168 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1169 | buf += 4 + 16; |
| 8262 | 1170 | break; |
| 1171 | } | |
| 1172 | ||
|
17446
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1173 | /* Skip past BND.PORT */ |
|
fd9e235a88e7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17102
diff
changeset
|
1174 | if(!s5_ensure_buffer_length(connect_data, (buf - connect_data->read_buffer) + 2)) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1175 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1176 | |
| 15884 | 1177 | purple_proxy_connect_data_connected(connect_data); |
| 1 | 1178 | } |
| 1179 | ||
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1180 | static void |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1181 | s5_sendconnect(gpointer data, int source) |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1182 | { |
| 15884 | 1183 | PurpleProxyConnectData *connect_data = data; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1184 | int hlen = strlen(connect_data->host); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1185 | connect_data->write_buf_len = 5 + hlen + 2; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1186 | connect_data->write_buffer = g_malloc(connect_data->write_buf_len); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1187 | connect_data->written_len = 0; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1188 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1189 | connect_data->write_buffer[0] = 0x05; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1190 | connect_data->write_buffer[1] = 0x01; /* CONNECT */ |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1191 | connect_data->write_buffer[2] = 0x00; /* reserved */ |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1192 | connect_data->write_buffer[3] = 0x03; /* address type -- host name */ |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1193 | connect_data->write_buffer[4] = hlen; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1194 | memcpy(connect_data->write_buffer + 5, connect_data->host, hlen); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1195 | connect_data->write_buffer[5 + hlen] = connect_data->port >> 8; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1196 | connect_data->write_buffer[5 + hlen + 1] = connect_data->port & 0xff; |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1197 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1198 | connect_data->read_cb = s5_canread_again; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1199 | |
| 15884 | 1200 | connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data); |
| 1201 | proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1202 | } |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1203 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1204 | static void |
| 15884 | 1205 | s5_readauth(gpointer data, gint source, PurpleInputCondition cond) |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1206 | { |
| 15884 | 1207 | PurpleProxyConnectData *connect_data = data; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1208 | int len; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1209 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1210 | if (connect_data->read_buffer == NULL) { |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1211 | connect_data->read_buf_len = 2; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1212 | connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1213 | connect_data->read_len = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1214 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1215 | |
| 15884 | 1216 | purple_debug_info("socks5 proxy", "Got auth response.\n"); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1217 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1218 | len = read(connect_data->fd, connect_data->read_buffer + connect_data->read_len, |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1219 | connect_data->read_buf_len - connect_data->read_len); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1220 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1221 | if (len == 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1222 | { |
| 15884 | 1223 | purple_proxy_connect_data_disconnect(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1224 | _("Server closed the connection.")); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1225 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1226 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1227 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1228 | if (len < 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1229 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1230 | if (errno == EAGAIN) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1231 | /* No worries */ |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1232 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1233 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1234 | /* Error! */ |
| 15884 | 1235 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1236 | _("Lost connection with server:\n%s"), strerror(errno)); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1237 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1238 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1239 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1240 | connect_data->read_len += len; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1241 | if (connect_data->read_len < 2) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1242 | return; |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1243 | |
| 15884 | 1244 | purple_input_remove(connect_data->inpa); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1245 | connect_data->inpa = 0; |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1246 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1247 | if ((connect_data->read_buffer[0] != 0x01) || (connect_data->read_buffer[1] != 0x00)) { |
| 15884 | 1248 | purple_proxy_connect_data_disconnect(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1249 | _("Received invalid data on connection with server.")); |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1250 | return; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1251 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1252 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1253 | g_free(connect_data->read_buffer); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1254 | connect_data->read_buffer = NULL; |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1255 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1256 | s5_sendconnect(connect_data, connect_data->fd); |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1257 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1258 | |
|
14159
0fcdaa463a32
[gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents:
14158
diff
changeset
|
1259 | static void |
|
0fcdaa463a32
[gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents:
14158
diff
changeset
|
1260 | hmacmd5_chap(const unsigned char * challenge, int challen, const char * passwd, unsigned char * response) |
| 10561 | 1261 | { |
| 15884 | 1262 | PurpleCipher *cipher; |
| 1263 | PurpleCipherContext *ctx; | |
| 10561 | 1264 | int i; |
| 1265 | unsigned char Kxoripad[65]; | |
| 1266 | unsigned char Kxoropad[65]; | |
| 1267 | int pwlen; | |
| 1268 | ||
| 15884 | 1269 | cipher = purple_ciphers_find_cipher("md5"); |
| 1270 | ctx = purple_cipher_context_new(cipher, NULL); | |
|
10684
0325b164a7eb
[gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
10626
diff
changeset
|
1271 | |
|
12765
0c1580860d16
[gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12758
diff
changeset
|
1272 | memset(Kxoripad,0,sizeof(Kxoripad)); |
|
0c1580860d16
[gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12758
diff
changeset
|
1273 | memset(Kxoropad,0,sizeof(Kxoropad)); |
|
0c1580860d16
[gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12758
diff
changeset
|
1274 | |
| 10561 | 1275 | pwlen=strlen(passwd); |
| 1276 | if (pwlen>64) { | |
| 15884 | 1277 | purple_cipher_context_append(ctx, (const guchar *)passwd, strlen(passwd)); |
| 1278 | purple_cipher_context_digest(ctx, sizeof(Kxoripad), Kxoripad, NULL); | |
| 10561 | 1279 | pwlen=16; |
|
12765
0c1580860d16
[gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12758
diff
changeset
|
1280 | } else { |
|
0c1580860d16
[gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12758
diff
changeset
|
1281 | memcpy(Kxoripad, passwd, pwlen); |
| 10561 | 1282 | } |
|
12765
0c1580860d16
[gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12758
diff
changeset
|
1283 | memcpy(Kxoropad,Kxoripad,pwlen); |
| 10561 | 1284 | |
| 1285 | for (i=0;i<64;i++) { | |
| 1286 | Kxoripad[i]^=0x36; | |
| 1287 | Kxoropad[i]^=0x5c; | |
| 1288 | } | |
|
10684
0325b164a7eb
[gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
10626
diff
changeset
|
1289 | |
| 15884 | 1290 | purple_cipher_context_reset(ctx, NULL); |
| 1291 | purple_cipher_context_append(ctx, Kxoripad, 64); | |
| 1292 | purple_cipher_context_append(ctx, challenge, challen); | |
| 1293 | purple_cipher_context_digest(ctx, sizeof(Kxoripad), Kxoripad, NULL); | |
| 10561 | 1294 | |
| 15884 | 1295 | purple_cipher_context_reset(ctx, NULL); |
| 1296 | purple_cipher_context_append(ctx, Kxoropad, 64); | |
| 1297 | purple_cipher_context_append(ctx, Kxoripad, 16); | |
| 1298 | purple_cipher_context_digest(ctx, 16, response, NULL); | |
|
10684
0325b164a7eb
[gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
10626
diff
changeset
|
1299 | |
| 15884 | 1300 | purple_cipher_context_destroy(ctx); |
| 10561 | 1301 | } |
| 1302 | ||
| 1303 | static void | |
| 15884 | 1304 | s5_readchap(gpointer data, gint source, PurpleInputCondition cond) |
| 10561 | 1305 | { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1306 | guchar *cmdbuf, *buf; |
| 15884 | 1307 | PurpleProxyConnectData *connect_data = data; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1308 | int len, navas, currentav; |
| 10561 | 1309 | |
| 15884 | 1310 | purple_debug(PURPLE_DEBUG_INFO, "socks5 proxy", "Got CHAP response.\n"); |
| 10561 | 1311 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1312 | if (connect_data->read_buffer == NULL) { |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1313 | connect_data->read_buf_len = 20; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1314 | connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1315 | connect_data->read_len = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1316 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1317 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1318 | len = read(connect_data->fd, connect_data->read_buffer + connect_data->read_len, |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1319 | connect_data->read_buf_len - connect_data->read_len); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1320 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1321 | if (len == 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1322 | { |
| 15884 | 1323 | purple_proxy_connect_data_disconnect(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1324 | _("Server closed the connection.")); |
| 10561 | 1325 | return; |
| 1326 | } | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1327 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1328 | if (len < 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1329 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1330 | if (errno == EAGAIN) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1331 | /* No worries */ |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1332 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1333 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1334 | /* Error! */ |
| 15884 | 1335 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1336 | _("Lost connection with server:\n%s"), strerror(errno)); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1337 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1338 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1339 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1340 | connect_data->read_len += len; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1341 | if (connect_data->read_len < 2) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1342 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1343 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1344 | cmdbuf = connect_data->read_buffer; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1345 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1346 | if (*cmdbuf != 0x01) { |
| 15884 | 1347 | purple_proxy_connect_data_disconnect(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1348 | _("Received invalid data on connection with server.")); |
| 10561 | 1349 | return; |
| 1350 | } | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1351 | cmdbuf++; |
| 10561 | 1352 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1353 | navas = *cmdbuf; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1354 | cmdbuf++; |
| 10561 | 1355 | |
| 1356 | for (currentav = 0; currentav < navas; currentav++) { | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1357 | if (connect_data->read_len - (cmdbuf - connect_data->read_buffer) < 2) |
| 10561 | 1358 | return; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1359 | if (connect_data->read_len - (cmdbuf - connect_data->read_buffer) < cmdbuf[1]) |
| 10561 | 1360 | return; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1361 | buf = cmdbuf + 2; |
| 10561 | 1362 | switch (cmdbuf[0]) { |
| 1363 | case 0x00: | |
| 1364 | /* Did auth work? */ | |
| 1365 | if (buf[0] == 0x00) { | |
| 15884 | 1366 | purple_input_remove(connect_data->inpa); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1367 | connect_data->inpa = 0; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1368 | g_free(connect_data->read_buffer); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1369 | connect_data->read_buffer = NULL; |
| 10561 | 1370 | /* Success */ |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1371 | s5_sendconnect(connect_data, connect_data->fd); |
|
10613
33c94d9a9e89
[gaim-migrate @ 12072]
Torrey McMahon <tmcmahon2@users.sourceforge.net>
parents:
10562
diff
changeset
|
1372 | return; |
| 10561 | 1373 | } else { |
| 1374 | /* Failure */ | |
| 15884 | 1375 | purple_debug_warning("proxy", |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1376 | "socks5 CHAP authentication " |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1377 | "failed. Disconnecting..."); |
| 15884 | 1378 | purple_proxy_connect_data_disconnect(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1379 | _("Authentication failed")); |
| 10561 | 1380 | return; |
| 1381 | } | |
| 1382 | break; | |
| 1383 | case 0x03: | |
| 1384 | /* Server wants our credentials */ | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1385 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1386 | connect_data->write_buf_len = 16 + 4; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1387 | connect_data->write_buffer = g_malloc(connect_data->write_buf_len); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1388 | connect_data->written_len = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1389 | |
| 10561 | 1390 | hmacmd5_chap(buf, cmdbuf[1], |
| 15884 | 1391 | purple_proxy_info_get_password(connect_data->gpi), |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1392 | connect_data->write_buffer + 4); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1393 | connect_data->write_buffer[0] = 0x01; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1394 | connect_data->write_buffer[1] = 0x01; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1395 | connect_data->write_buffer[2] = 0x04; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1396 | connect_data->write_buffer[3] = 0x10; |
| 10561 | 1397 | |
| 15884 | 1398 | purple_input_remove(connect_data->inpa); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1399 | g_free(connect_data->read_buffer); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1400 | connect_data->read_buffer = NULL; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1401 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1402 | connect_data->read_cb = s5_readchap; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1403 | |
| 15884 | 1404 | connect_data->inpa = purple_input_add(connect_data->fd, |
| 1405 | PURPLE_INPUT_WRITE, proxy_do_write, connect_data); | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1406 | |
| 15884 | 1407 | proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
| 10561 | 1408 | break; |
| 1409 | case 0x11: | |
| 1410 | /* Server wants to select an algorithm */ | |
| 1411 | if (buf[0] != 0x85) { | |
| 1412 | /* Only currently support HMAC-MD5 */ | |
| 15884 | 1413 | purple_debug_warning("proxy", |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1414 | "Server tried to select an " |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1415 | "algorithm that we did not advertise " |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1416 | "as supporting. This is a violation " |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1417 | "of the socks5 CHAP specification. " |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1418 | "Disconnecting..."); |
| 15884 | 1419 | purple_proxy_connect_data_disconnect(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1420 | _("Received invalid data on connection with server.")); |
| 10561 | 1421 | return; |
| 1422 | } | |
| 1423 | break; | |
| 1424 | } | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1425 | cmdbuf = buf + cmdbuf[1]; |
| 10561 | 1426 | } |
| 1427 | /* Fell through. We ran out of CHAP events to process, but haven't | |
| 1428 | * succeeded or failed authentication - there may be more to come. | |
| 1429 | * If this is the case, come straight back here. */ | |
| 1430 | } | |
| 1431 | ||
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1432 | static void |
| 15884 | 1433 | s5_canread(gpointer data, gint source, PurpleInputCondition cond) |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1434 | { |
| 15884 | 1435 | PurpleProxyConnectData *connect_data = data; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1436 | int len; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1437 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1438 | if (connect_data->read_buffer == NULL) { |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1439 | connect_data->read_buf_len = 2; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1440 | connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1441 | connect_data->read_len = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1442 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1443 | |
| 15884 | 1444 | purple_debug_info("socks5 proxy", "Able to read.\n"); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1445 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1446 | len = read(connect_data->fd, connect_data->read_buffer + connect_data->read_len, |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1447 | connect_data->read_buf_len - connect_data->read_len); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1448 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1449 | if (len == 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1450 | { |
| 15884 | 1451 | purple_proxy_connect_data_disconnect(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1452 | _("Server closed the connection.")); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1453 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1454 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1455 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1456 | if (len < 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1457 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1458 | if (errno == EAGAIN) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1459 | /* No worries */ |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1460 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1461 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1462 | /* Error! */ |
| 15884 | 1463 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1464 | _("Lost connection with server:\n%s"), strerror(errno)); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1465 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1466 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1467 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1468 | connect_data->read_len += len; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1469 | if (connect_data->read_len < 2) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1470 | return; |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1471 | |
| 15884 | 1472 | purple_input_remove(connect_data->inpa); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1473 | connect_data->inpa = 0; |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1474 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1475 | if ((connect_data->read_buffer[0] != 0x05) || (connect_data->read_buffer[1] == 0xff)) { |
| 15884 | 1476 | purple_proxy_connect_data_disconnect(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1477 | _("Received invalid data on connection with server.")); |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1478 | return; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1479 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1480 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1481 | if (connect_data->read_buffer[1] == 0x02) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1482 | gsize i, j; |
|
10912
ec7c127a435b
[gaim-migrate @ 12667]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10711
diff
changeset
|
1483 | const char *u, *p; |
| 9129 | 1484 | |
| 15884 | 1485 | u = purple_proxy_info_get_username(connect_data->gpi); |
| 1486 | p = purple_proxy_info_get_password(connect_data->gpi); | |
|
10912
ec7c127a435b
[gaim-migrate @ 12667]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10711
diff
changeset
|
1487 | |
|
ec7c127a435b
[gaim-migrate @ 12667]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10711
diff
changeset
|
1488 | i = (u == NULL) ? 0 : strlen(u); |
|
ec7c127a435b
[gaim-migrate @ 12667]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10711
diff
changeset
|
1489 | j = (p == NULL) ? 0 : strlen(p); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1490 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1491 | connect_data->write_buf_len = 1 + 1 + i + 1 + j; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1492 | connect_data->write_buffer = g_malloc(connect_data->write_buf_len); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1493 | connect_data->written_len = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1494 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1495 | connect_data->write_buffer[0] = 0x01; /* version 1 */ |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1496 | connect_data->write_buffer[1] = i; |
|
10917
f32ea2da503b
[gaim-migrate @ 12678]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10912
diff
changeset
|
1497 | if (u != NULL) |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1498 | memcpy(connect_data->write_buffer + 2, u, i); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1499 | connect_data->write_buffer[2 + i] = j; |
|
10917
f32ea2da503b
[gaim-migrate @ 12678]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10912
diff
changeset
|
1500 | if (p != NULL) |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1501 | memcpy(connect_data->write_buffer + 2 + i + 1, p, j); |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1502 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1503 | g_free(connect_data->read_buffer); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1504 | connect_data->read_buffer = NULL; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1505 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1506 | connect_data->read_cb = s5_readauth; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1507 | |
| 15884 | 1508 | connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1509 | proxy_do_write, connect_data); |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1510 | |
| 15884 | 1511 | proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1512 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1513 | return; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1514 | } else if (connect_data->read_buffer[1] == 0x03) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1515 | gsize userlen; |
| 15884 | 1516 | userlen = strlen(purple_proxy_info_get_username(connect_data->gpi)); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1517 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1518 | connect_data->write_buf_len = 7 + userlen; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1519 | connect_data->write_buffer = g_malloc(connect_data->write_buf_len); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1520 | connect_data->written_len = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1521 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1522 | connect_data->write_buffer[0] = 0x01; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1523 | connect_data->write_buffer[1] = 0x02; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1524 | connect_data->write_buffer[2] = 0x11; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1525 | connect_data->write_buffer[3] = 0x01; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1526 | connect_data->write_buffer[4] = 0x85; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1527 | connect_data->write_buffer[5] = 0x02; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1528 | connect_data->write_buffer[6] = userlen; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1529 | memcpy(connect_data->write_buffer + 7, |
| 15884 | 1530 | purple_proxy_info_get_username(connect_data->gpi), userlen); |
| 10561 | 1531 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1532 | g_free(connect_data->read_buffer); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1533 | connect_data->read_buffer = NULL; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1534 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1535 | connect_data->read_cb = s5_readchap; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1536 | |
| 15884 | 1537 | connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1538 | proxy_do_write, connect_data); |
| 10561 | 1539 | |
| 15884 | 1540 | proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1541 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1542 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1543 | } else { |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1544 | g_free(connect_data->read_buffer); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1545 | connect_data->read_buffer = NULL; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1546 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1547 | s5_sendconnect(connect_data, connect_data->fd); |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1548 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1549 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1550 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1551 | static void |
| 15884 | 1552 | s5_canwrite(gpointer data, gint source, PurpleInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1553 | { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1554 | unsigned char buf[5]; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1555 | int i; |
| 15884 | 1556 | PurpleProxyConnectData *connect_data = data; |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1557 | int error = ETIMEDOUT; |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1558 | int ret; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1559 | |
| 15884 | 1560 | purple_debug_info("socks5 proxy", "Connected.\n"); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1561 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1562 | if (connect_data->inpa > 0) |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1563 | { |
| 15884 | 1564 | purple_input_remove(connect_data->inpa); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1565 | connect_data->inpa = 0; |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1566 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1567 | |
| 15884 | 1568 | ret = purple_input_get_error(connect_data->fd, &error); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1569 | if ((ret != 0) || (error != 0)) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1570 | { |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1571 | if (ret != 0) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1572 | error = errno; |
| 15884 | 1573 | purple_proxy_connect_data_disconnect(connect_data, strerror(error)); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1574 | return; |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1575 | } |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1576 | |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1577 | i = 0; |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1087
diff
changeset
|
1578 | buf[0] = 0x05; /* SOCKS version 5 */ |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1579 | |
| 15884 | 1580 | if (purple_proxy_info_get_username(connect_data->gpi) != NULL) { |
| 10561 | 1581 | buf[1] = 0x03; /* three methods */ |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1582 | buf[2] = 0x00; /* no authentication */ |
| 10561 | 1583 | buf[3] = 0x03; /* CHAP authentication */ |
| 1584 | buf[4] = 0x02; /* username/password authentication */ | |
| 1585 | i = 5; | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1586 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1587 | else { |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1588 | buf[1] = 0x01; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1589 | buf[2] = 0x00; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1590 | i = 3; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1591 | } |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1592 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1593 | connect_data->write_buf_len = i; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1594 | connect_data->write_buffer = g_malloc(connect_data->write_buf_len); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1595 | memcpy(connect_data->write_buffer, buf, i); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1596 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1597 | connect_data->read_cb = s5_canread; |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1598 | |
| 15884 | 1599 | connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data); |
| 1600 | proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1601 | } |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1602 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1603 | static void |
| 15884 | 1604 | proxy_connect_socks5(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1605 | { |
| 15884 | 1606 | purple_debug_info("proxy", |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1607 | "Connecting to %s:%d via %s:%d using SOCKS5\n", |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1608 | connect_data->host, connect_data->port, |
| 15884 | 1609 | purple_proxy_info_get_host(connect_data->gpi), |
| 1610 | purple_proxy_info_get_port(connect_data->gpi)); | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1611 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1612 | connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1613 | if (connect_data->fd < 0) |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1614 | { |
| 15884 | 1615 | purple_proxy_connect_data_disconnect_formatted(connect_data, |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1616 | _("Unable to create socket:\n%s"), strerror(errno)); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1617 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1618 | } |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1619 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1620 | fcntl(connect_data->fd, F_SETFL, O_NONBLOCK); |
|
10172
8400788b226c
[gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10170
diff
changeset
|
1621 | #ifndef _WIN32 |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1622 | fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); |
|
10172
8400788b226c
[gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10170
diff
changeset
|
1623 | #endif |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1624 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1625 | if (connect(connect_data->fd, addr, addrlen) != 0) |
|
14161
e959d0e476be
[gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents:
14159
diff
changeset
|
1626 | { |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1627 | if ((errno == EINPROGRESS) || (errno == EINTR)) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1628 | { |
| 15884 | 1629 | purple_debug_info("socks5 proxy", "Connection in progress\n"); |
| 1630 | connect_data->inpa = purple_input_add(connect_data->fd, | |
| 1631 | PURPLE_INPUT_WRITE, s5_canwrite, connect_data); | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1632 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1633 | else |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1634 | { |
| 15884 | 1635 | purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1636 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1637 | } |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1638 | else |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1639 | { |
| 15884 | 1640 | purple_debug_info("proxy", "Connected immediately.\n"); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1641 | |
| 15884 | 1642 | s5_canwrite(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1643 | } |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1644 | } |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1645 | |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
1646 | /** |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1647 | * This function attempts to connect to the next IP address in the list |
| 15884 | 1648 | * of IP addresses returned to us by purple_dnsquery_a() and attemps |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
1649 | * to connect to each one. This is called after the hostname is |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1650 | * resolved, and each time a connection attempt fails (assuming there |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1651 | * is another IP address to try). |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
1652 | */ |
| 15884 | 1653 | static void try_connect(PurpleProxyConnectData *connect_data) |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1654 | { |
| 4678 | 1655 | size_t addrlen; |
| 1656 | struct sockaddr *addr; | |
|
14965
8051becb91fe
[gaim-migrate @ 17675]
Mark Doliner <markdoliner@pidgin.im>
parents:
14899
diff
changeset
|
1657 | char ipaddr[INET6_ADDRSTRLEN]; |
| 4634 | 1658 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1659 | addrlen = GPOINTER_TO_INT(connect_data->hosts->data); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1660 | connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1661 | addr = connect_data->hosts->data; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1662 | connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); |
|
14161
e959d0e476be
[gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents:
14159
diff
changeset
|
1663 | |
|
14965
8051becb91fe
[gaim-migrate @ 17675]
Mark Doliner <markdoliner@pidgin.im>
parents:
14899
diff
changeset
|
1664 | inet_ntop(addr->sa_family, &((struct sockaddr_in *)addr)->sin_addr, |
|
8051becb91fe
[gaim-migrate @ 17675]
Mark Doliner <markdoliner@pidgin.im>
parents:
14899
diff
changeset
|
1665 | ipaddr, sizeof(ipaddr)); |
| 15884 | 1666 | purple_debug_info("proxy", "Attempting connection to %s\n", ipaddr); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1667 | |
| 15884 | 1668 | switch (purple_proxy_info_get_type(connect_data->gpi)) { |
| 1669 | case PURPLE_PROXY_NONE: | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1670 | proxy_connect_none(connect_data, addr, addrlen); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1671 | break; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1672 | |
| 15884 | 1673 | case PURPLE_PROXY_HTTP: |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1674 | proxy_connect_http(connect_data, addr, addrlen); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1675 | break; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1676 | |
| 15884 | 1677 | case PURPLE_PROXY_SOCKS4: |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1678 | proxy_connect_socks4(connect_data, addr, addrlen); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1679 | break; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1680 | |
| 15884 | 1681 | case PURPLE_PROXY_SOCKS5: |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1682 | proxy_connect_socks5(connect_data, addr, addrlen); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1683 | break; |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1684 | |
| 15884 | 1685 | case PURPLE_PROXY_USE_ENVVAR: |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1686 | proxy_connect_http(connect_data, addr, addrlen); |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1687 | break; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1688 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1689 | default: |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1690 | break; |
| 4678 | 1691 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1692 | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1693 | g_free(addr); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1694 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1695 | |
| 9129 | 1696 | static void |
| 1697 | connection_host_resolved(GSList *hosts, gpointer data, | |
| 1698 | const char *error_message) | |
| 1699 | { | |
| 15884 | 1700 | PurpleProxyConnectData *connect_data; |
| 9129 | 1701 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1702 | connect_data = data; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1703 | connect_data->query_data = NULL; |
|
14300
68a0aa63f3b8
[gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
1704 | |
|
14161
e959d0e476be
[gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents:
14159
diff
changeset
|
1705 | if (error_message != NULL) |
|
e959d0e476be
[gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents:
14159
diff
changeset
|
1706 | { |
| 15884 | 1707 | purple_proxy_connect_data_disconnect(connect_data, error_message); |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1708 | return; |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1709 | } |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1710 | |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1711 | if (hosts == NULL) |
|
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
1712 | { |
| 15884 | 1713 | purple_proxy_connect_data_disconnect(connect_data, _("Could not resolve host name")); |
|
14300
68a0aa63f3b8
[gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
1714 | return; |
|
14161
e959d0e476be
[gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents:
14159
diff
changeset
|
1715 | } |
|
e959d0e476be
[gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents:
14159
diff
changeset
|
1716 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1717 | connect_data->hosts = hosts; |
| 9129 | 1718 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1719 | try_connect(connect_data); |
| 9129 | 1720 | } |
| 1721 | ||
| 15884 | 1722 | PurpleProxyInfo * |
| 1723 | purple_proxy_get_setup(PurpleAccount *account) | |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1724 | { |
| 15884 | 1725 | PurpleProxyInfo *gpi = NULL; |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1726 | const gchar *tmp; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1727 | |
|
15032
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1728 | /* This is used as a fallback so we don't overwrite the selected proxy type */ |
| 15884 | 1729 | static PurpleProxyInfo *tmp_none_proxy_info = NULL; |
|
15032
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1730 | if (!tmp_none_proxy_info) { |
| 15884 | 1731 | tmp_none_proxy_info = purple_proxy_info_new(); |
| 1732 | purple_proxy_info_set_type(tmp_none_proxy_info, PURPLE_PROXY_NONE); | |
|
15032
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1733 | } |
|
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1734 | |
| 15884 | 1735 | if (account && purple_account_get_proxy_info(account) != NULL) { |
| 1736 | gpi = purple_account_get_proxy_info(account); | |
| 1737 | if (purple_proxy_info_get_type(gpi) == PURPLE_PROXY_USE_GLOBAL) | |
|
15041
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1738 | gpi = NULL; |
|
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1739 | } |
|
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1740 | if (gpi == NULL) { |
| 15884 | 1741 | if (purple_running_gnome()) |
| 1742 | gpi = purple_gnome_proxy_get_info(); | |
|
15041
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1743 | else |
| 15884 | 1744 | gpi = purple_global_proxy_get_info(); |
|
15041
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1745 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1746 | |
| 15884 | 1747 | if (purple_proxy_info_get_type(gpi) == PURPLE_PROXY_USE_ENVVAR) { |
|
15032
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1748 | #ifdef _WIN32 |
| 15884 | 1749 | wpurple_check_for_proxy_changes(); |
|
15032
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1750 | #endif |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1751 | if ((tmp = g_getenv("HTTP_PROXY")) != NULL || |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1752 | (tmp = g_getenv("http_proxy")) != NULL || |
|
10534
c28eef1b882a
[gaim-migrate @ 11866]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10320
diff
changeset
|
1753 | (tmp = g_getenv("HTTPPROXY")) != NULL) { |
|
15032
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1754 | char *proxyhost, *proxyuser, *proxypasswd; |
|
7652
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1755 | int proxyport; |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1756 | |
| 9129 | 1757 | /* http_proxy-format: |
| 9227 | 1758 | * export http_proxy="http://user:passwd@your.proxy.server:port/" |
|
7652
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1759 | */ |
| 15884 | 1760 | if(purple_url_parse(tmp, &proxyhost, &proxyport, NULL, &proxyuser, &proxypasswd)) { |
| 1761 | purple_proxy_info_set_host(gpi, proxyhost); | |
|
7652
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1762 | g_free(proxyhost); |
|
15032
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1763 | |
| 15884 | 1764 | purple_proxy_info_set_username(gpi, proxyuser); |
|
15032
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1765 | g_free(proxyuser); |
|
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1766 | |
| 15884 | 1767 | purple_proxy_info_set_password(gpi, proxypasswd); |
|
15032
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1768 | g_free(proxypasswd); |
|
7652
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1769 | |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1770 | /* only for backward compatibility */ |
| 9129 | 1771 | if (proxyport == 80 && |
|
7652
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1772 | ((tmp = g_getenv("HTTP_PROXY_PORT")) != NULL || |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1773 | (tmp = g_getenv("http_proxy_port")) != NULL || |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1774 | (tmp = g_getenv("HTTPPROXYPORT")) != NULL)) |
|
15032
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1775 | proxyport = atoi(tmp); |
| 9129 | 1776 | |
| 15884 | 1777 | purple_proxy_info_set_port(gpi, proxyport); |
|
15041
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1778 | |
|
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1779 | /* XXX: Do we want to skip this step if user/password were part of url? */ |
|
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1780 | if ((tmp = g_getenv("HTTP_PROXY_USER")) != NULL || |
|
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1781 | (tmp = g_getenv("http_proxy_user")) != NULL || |
|
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1782 | (tmp = g_getenv("HTTPPROXYUSER")) != NULL) |
| 15884 | 1783 | purple_proxy_info_set_username(gpi, tmp); |
|
15041
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1784 | |
|
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1785 | if ((tmp = g_getenv("HTTP_PROXY_PASS")) != NULL || |
|
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1786 | (tmp = g_getenv("http_proxy_pass")) != NULL || |
|
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1787 | (tmp = g_getenv("HTTPPROXYPASS")) != NULL) |
| 15884 | 1788 | purple_proxy_info_set_password(gpi, tmp); |
|
15041
18a6f6cdce33
[gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents:
15032
diff
changeset
|
1789 | |
|
7652
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1790 | } |
|
10534
c28eef1b882a
[gaim-migrate @ 11866]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10320
diff
changeset
|
1791 | } else { |
|
c28eef1b882a
[gaim-migrate @ 11866]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10320
diff
changeset
|
1792 | /* no proxy environment variable found, don't use a proxy */ |
| 15884 | 1793 | purple_debug_info("proxy", "No environment settings found, not using a proxy\n"); |
|
15032
65a111aba7a8
[gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents:
15015
diff
changeset
|
1794 | gpi = tmp_none_proxy_info; |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1795 | } |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1796 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1797 | } |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1798 | |
| 13515 | 1799 | return gpi; |
| 1800 | } | |
| 1801 | ||
| 15884 | 1802 | PurpleProxyConnectData * |
| 1803 | purple_proxy_connect(void *handle, PurpleAccount *account, | |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1804 | const char *host, int port, |
| 15884 | 1805 | PurpleProxyConnectFunction connect_cb, gpointer data) |
| 13515 | 1806 | { |
| 1807 | const char *connecthost = host; | |
| 1808 | int connectport = port; | |
| 15884 | 1809 | PurpleProxyConnectData *connect_data; |
| 13515 | 1810 | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1811 | g_return_val_if_fail(host != NULL, NULL); |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1812 | g_return_val_if_fail(port > 0, NULL); |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1813 | g_return_val_if_fail(connect_cb != NULL, NULL); |
| 13515 | 1814 | |
| 15884 | 1815 | connect_data = g_new0(PurpleProxyConnectData, 1); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1816 | connect_data->fd = -1; |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1817 | connect_data->handle = handle; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1818 | connect_data->connect_cb = connect_cb; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1819 | connect_data->data = data; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1820 | connect_data->host = g_strdup(host); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1821 | connect_data->port = port; |
| 15884 | 1822 | connect_data->gpi = purple_proxy_get_setup(account); |
| 13515 | 1823 | |
| 15884 | 1824 | if ((purple_proxy_info_get_type(connect_data->gpi) != PURPLE_PROXY_NONE) && |
| 1825 | (purple_proxy_info_get_host(connect_data->gpi) == NULL || | |
| 1826 | purple_proxy_info_get_port(connect_data->gpi) <= 0)) { | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1827 | |
| 15884 | 1828 | purple_notify_error(NULL, NULL, _("Invalid proxy settings"), _("Either the host name or port number specified for your given proxy type is invalid.")); |
| 1829 | purple_proxy_connect_data_destroy(connect_data); | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1830 | return NULL; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1831 | } |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1832 | |
| 15884 | 1833 | switch (purple_proxy_info_get_type(connect_data->gpi)) |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1834 | { |
| 15884 | 1835 | case PURPLE_PROXY_NONE: |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1836 | break; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1837 | |
| 15884 | 1838 | case PURPLE_PROXY_HTTP: |
| 1839 | case PURPLE_PROXY_SOCKS4: | |
| 1840 | case PURPLE_PROXY_SOCKS5: | |
| 1841 | case PURPLE_PROXY_USE_ENVVAR: | |
| 1842 | connecthost = purple_proxy_info_get_host(connect_data->gpi); | |
| 1843 | connectport = purple_proxy_info_get_port(connect_data->gpi); | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1844 | break; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1845 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1846 | default: |
| 15884 | 1847 | purple_proxy_connect_data_destroy(connect_data); |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1848 | return NULL; |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1849 | } |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1850 | |
| 15884 | 1851 | connect_data->query_data = purple_dnsquery_a(connecthost, |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1852 | connectport, connection_host_resolved, connect_data); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1853 | if (connect_data->query_data == NULL) |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1854 | { |
| 15884 | 1855 | purple_proxy_connect_data_destroy(connect_data); |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1856 | return NULL; |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1857 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1858 | |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1859 | handles = g_slist_prepend(handles, connect_data); |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1860 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1861 | return connect_data; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1862 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1863 | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1864 | /* |
| 15884 | 1865 | * Combine some of this code with purple_proxy_connect() |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1866 | */ |
| 15884 | 1867 | PurpleProxyConnectData * |
| 1868 | purple_proxy_connect_socks5(void *handle, PurpleProxyInfo *gpi, | |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1869 | const char *host, int port, |
| 15884 | 1870 | PurpleProxyConnectFunction connect_cb, |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1871 | gpointer data) |
| 8262 | 1872 | { |
| 15884 | 1873 | PurpleProxyConnectData *connect_data; |
| 8262 | 1874 | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1875 | g_return_val_if_fail(host != NULL, NULL); |
| 15015 | 1876 | g_return_val_if_fail(port >= 0, NULL); |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1877 | g_return_val_if_fail(connect_cb != NULL, NULL); |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1878 | |
| 15884 | 1879 | connect_data = g_new0(PurpleProxyConnectData, 1); |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1880 | connect_data->fd = -1; |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1881 | connect_data->handle = handle; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1882 | connect_data->connect_cb = connect_cb; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1883 | connect_data->data = data; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1884 | connect_data->host = g_strdup(host); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1885 | connect_data->port = port; |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1886 | connect_data->gpi = gpi; |
| 8262 | 1887 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1888 | connect_data->query_data = |
| 15884 | 1889 | purple_dnsquery_a(purple_proxy_info_get_host(gpi), |
| 1890 | purple_proxy_info_get_port(gpi), | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1891 | connection_host_resolved, connect_data); |
|
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1892 | if (connect_data->query_data == NULL) |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1893 | { |
| 15884 | 1894 | purple_proxy_connect_data_destroy(connect_data); |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1895 | return NULL; |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1896 | } |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1897 | |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1898 | handles = g_slist_prepend(handles, connect_data); |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1899 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14300
diff
changeset
|
1900 | return connect_data; |
| 8262 | 1901 | } |
| 1902 | ||
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
1903 | void |
| 15884 | 1904 | purple_proxy_connect_cancel(PurpleProxyConnectData *connect_data) |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
1905 | { |
| 15884 | 1906 | purple_proxy_connect_data_disconnect(connect_data, NULL); |
| 1907 | purple_proxy_connect_data_destroy(connect_data); | |
|
14165
0f09ac2220f4
[gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents:
14161
diff
changeset
|
1908 | } |
| 8262 | 1909 | |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1910 | void |
| 15884 | 1911 | purple_proxy_connect_cancel_with_handle(void *handle) |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1912 | { |
|
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1913 | GSList *l, *l_next; |
|
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1914 | |
|
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1915 | for (l = handles; l != NULL; l = l_next) { |
| 15884 | 1916 | PurpleProxyConnectData *connect_data = l->data; |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1917 | |
|
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1918 | l_next = l->next; |
|
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1919 | |
|
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1920 | if (connect_data->handle == handle) |
| 15884 | 1921 | purple_proxy_connect_cancel(connect_data); |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1922 | } |
|
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1923 | } |
|
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
1924 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1925 | static void |
| 15884 | 1926 | proxy_pref_cb(const char *name, PurplePrefType type, |
|
12816
5f93e09fa9a6
[gaim-migrate @ 15164]
Mark Doliner <markdoliner@pidgin.im>
parents:
12811
diff
changeset
|
1927 | gconstpointer value, gpointer data) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1928 | { |
| 15884 | 1929 | PurpleProxyInfo *info = purple_global_proxy_get_info(); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1930 | |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1931 | if (!strcmp(name, "/purple/proxy/type")) { |
|
6001
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1932 | int proxytype; |
|
12816
5f93e09fa9a6
[gaim-migrate @ 15164]
Mark Doliner <markdoliner@pidgin.im>
parents:
12811
diff
changeset
|
1933 | const char *type = value; |
|
6001
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1934 | |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1935 | if (!strcmp(type, "none")) |
| 15884 | 1936 | proxytype = PURPLE_PROXY_NONE; |
|
6001
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1937 | else if (!strcmp(type, "http")) |
| 15884 | 1938 | proxytype = PURPLE_PROXY_HTTP; |
|
6001
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1939 | else if (!strcmp(type, "socks4")) |
| 15884 | 1940 | proxytype = PURPLE_PROXY_SOCKS4; |
|
6001
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1941 | else if (!strcmp(type, "socks5")) |
| 15884 | 1942 | proxytype = PURPLE_PROXY_SOCKS5; |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1943 | else if (!strcmp(type, "envvar")) |
| 15884 | 1944 | proxytype = PURPLE_PROXY_USE_ENVVAR; |
|
6001
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1945 | else |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1946 | proxytype = -1; |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1947 | |
| 15884 | 1948 | purple_proxy_info_set_type(info, proxytype); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1949 | } else if (!strcmp(name, "/purple/proxy/host")) |
| 15884 | 1950 | purple_proxy_info_set_host(info, value); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1951 | else if (!strcmp(name, "/purple/proxy/port")) |
| 15884 | 1952 | purple_proxy_info_set_port(info, GPOINTER_TO_INT(value)); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1953 | else if (!strcmp(name, "/purple/proxy/username")) |
| 15884 | 1954 | purple_proxy_info_set_username(info, value); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1955 | else if (!strcmp(name, "/purple/proxy/password")) |
| 15884 | 1956 | purple_proxy_info_set_password(info, value); |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1957 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1958 | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1959 | void * |
| 15884 | 1960 | purple_proxy_get_handle() |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1961 | { |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1962 | static int handle; |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1963 | |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1964 | return &handle; |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1965 | } |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1966 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1967 | void |
| 15884 | 1968 | purple_proxy_init(void) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1969 | { |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9863
diff
changeset
|
1970 | void *handle; |
|
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9863
diff
changeset
|
1971 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1972 | /* Initialize a default proxy info struct. */ |
| 15884 | 1973 | global_proxy_info = purple_proxy_info_new(); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1974 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1975 | /* Proxy */ |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1976 | purple_prefs_add_none("/purple/proxy"); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1977 | purple_prefs_add_string("/purple/proxy/type", "none"); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1978 | purple_prefs_add_string("/purple/proxy/host", ""); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1979 | purple_prefs_add_int("/purple/proxy/port", 0); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1980 | purple_prefs_add_string("/purple/proxy/username", ""); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1981 | purple_prefs_add_string("/purple/proxy/password", ""); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1982 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1983 | /* Setup callbacks for the preferences. */ |
| 15884 | 1984 | handle = purple_proxy_get_handle(); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1985 | purple_prefs_connect_callback(handle, "/purple/proxy/type", proxy_pref_cb, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1986 | NULL); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1987 | purple_prefs_connect_callback(handle, "/purple/proxy/host", proxy_pref_cb, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1988 | NULL); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1989 | purple_prefs_connect_callback(handle, "/purple/proxy/port", proxy_pref_cb, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1990 | NULL); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1991 | purple_prefs_connect_callback(handle, "/purple/proxy/username", |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1992 | proxy_pref_cb, NULL); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16037
diff
changeset
|
1993 | purple_prefs_connect_callback(handle, "/purple/proxy/password", |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13085
diff
changeset
|
1994 | proxy_pref_cb, NULL); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1995 | } |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9863
diff
changeset
|
1996 | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
1997 | void |
| 15884 | 1998 | purple_proxy_uninit(void) |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9863
diff
changeset
|
1999 | { |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14536
diff
changeset
|
2000 | while (handles != NULL) |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
2001 | { |
| 15884 | 2002 | purple_proxy_connect_data_disconnect(handles->data, NULL); |
| 2003 | purple_proxy_connect_data_destroy(handles->data); | |
|
14513
fe63cd247350
[gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents:
14454
diff
changeset
|
2004 | } |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9863
diff
changeset
|
2005 | } |