libpurple/proxy.c

Thu, 13 Sep 2007 01:25:22 +0000

author
Daniel Atallah <datallah@pidgin.im>
date
Thu, 13 Sep 2007 01:25:22 +0000
changeset 19985
b3d60f27292e
parent 19859
71d37b57eff2
child 20053
68ce40196f8a
permissions
-rw-r--r--

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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
5 * purple
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
6 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
7 * Purple is the legal property of its developers, whose names are too numerous
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7982
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7982
diff changeset
9 * source distribution.
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
10 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
14 * (at your option) any later version.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
15 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
19 * GNU General Public License for more details.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
20 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
24 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
25 */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
26
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
27 /* this is a little piece of code to handle proxy connection */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
37 #include "ntlm.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5681
diff changeset
38 #include "prefs.h"
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
39 #include "proxy.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5681
diff changeset
40 #include "util.h"
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3376
diff changeset
41
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
42 struct _PurpleProxyConnectData {
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
43 void *handle;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
50 PurpleProxyInfo *gpi;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
99 PurpleProxyInfo *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
100 purple_proxy_info_new(void)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
101 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
160 PurpleProxyType
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
203 PurpleProxyInfo *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
209 static PurpleProxyInfo *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
210 purple_gnome_proxy_get_info(void)
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
211 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
212 static PurpleProxyInfo info = {0, NULL, 0, NULL, NULL};
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
213 gchar *path;
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
214 if ((path = g_find_program_in_path("gconftool-2"))) {
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
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
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
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
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
221 NULL, NULL, NULL))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
224 info.type = PURPLE_PROXY_NONE;
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
229 return purple_global_proxy_get_info();
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
230 }
12156
58a027264d6c [gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11878
diff changeset
231
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
232 g_free(tmp);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
233 info.type = PURPLE_PROXY_HTTP;
12156
58a027264d6c [gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11878
diff changeset
234
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
235 /* Free the old fields */
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
236 if (info.host) {
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
237 g_free(info.host);
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
238 info.host = NULL;
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
239 }
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
240 if (info.username) {
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
241 g_free(info.username);
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
242 info.username = NULL;
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
243 }
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
244 if (info.password) {
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
245 g_free(info.password);
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
246 info.password = NULL;
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
247 }
12156
58a027264d6c [gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11878
diff changeset
248
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
249 /* Get the new ones */
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
250 if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/host", &info.host,
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
251 NULL, NULL, NULL))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
252 return purple_global_proxy_get_info();
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
253 g_strchomp(info.host);
12156
58a027264d6c [gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11878
diff changeset
254
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
255 if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/authentication_user", &info.username,
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
256 NULL, NULL, NULL))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
257 return purple_global_proxy_get_info();
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
258 g_strchomp(info.username);
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
259
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
260 if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/authentication_password", &info.password,
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
261 NULL, NULL, NULL))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
262 return purple_global_proxy_get_info();
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
263 g_strchomp(info.password);
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
264
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
265 if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/port", &tmp,
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
266 NULL, NULL, NULL))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
267 return purple_global_proxy_get_info();
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
268 info.port = atoi(tmp);
12156
58a027264d6c [gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11878
diff changeset
269 g_free(tmp);
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
270
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
271 return &info;
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
272 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
273 return purple_global_proxy_get_info();
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
387 purple_proxy_connect_data_disconnect(connect_data, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
407 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
408 * purple_input_get_error after a non-blocking connect returns -1 if something is
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
409 * really messed up (bad descriptor, usually). Otherwise, it returns 0 and
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
410 * error holds what connect would have returned if it blocked until now.
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
411 * Thus, error == 0 is success, error == EINPROGRESS means "try again",
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
412 * and anything else is a real error.
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
413 *
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
414 * (error == EINPROGRESS can happen after a select because the kernel can
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
415 * be overly optimistic sometimes. select is just a hint that you might be
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
416 * able to do something.)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
417 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
449 proxy_connect_none(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
450 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
471 purple_debug_info("proxy", "Connection in progress\n");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
472 connect_data->inpa = purple_input_add(connect_data->fd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
488 purple_debug_info("proxy", "Connected immediately.\n");
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
489
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
544 purple_input_remove(connect_data->inpa);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
545 connect_data->inpa = purple_input_add(connect_data->fd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
9fc15174bd67 [gaim-migrate @ 3395]
Ethan Blanton <elb@pidgin.im>
parents: 3283
diff changeset
549 #define HTTP_GOODSTRING "HTTP/1.0 200"
9fc15174bd67 [gaim-migrate @ 3395]
Ethan Blanton <elb@pidgin.im>
parents: 3283
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
628
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
633 gchar *tmp;
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
634 int len = 0;
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
635 char tmpc;
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
688 gchar *domain = (gchar*)purple_proxy_info_get_username(connect_data->gpi);
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
689 gchar *username;
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
690 gchar *request;
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
698 return;
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
705 nonce = purple_ntlm_parse_type2(ntlm, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
706 response = purple_ntlm_gen_type3(username,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
710 username--;
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
729 purple_input_remove(connect_data->inpa);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
730 connect_data->inpa = purple_input_add(connect_data->fd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
735 gchar request[2048];
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
736 gchar *domain = (gchar*) purple_proxy_info_get_username(connect_data->gpi);
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
737 gchar *username;
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
744 return;
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
745 }
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
746 *username = '\0';
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
747
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
753
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
754 g_return_if_fail(request_len < sizeof(request));
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
760 *username = '\\';
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
761
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
772 connect_data->inpa = purple_input_add(connect_data->fd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
776 return;
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
777 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
781 }
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
6a092463d774 [gaim-migrate @ 8487]
Mike Hearn <mike@theoretic.com>
parents: 7652
diff changeset
792 }
6a092463d774 [gaim-migrate @ 8487]
Mike Hearn <mike@theoretic.com>
parents: 7652
diff changeset
793 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
798 purple_debug_info("proxy", "HTTP proxy connection established\n");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
803
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
804 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
6a092463d774 [gaim-migrate @ 8487]
Mike Hearn <mike@theoretic.com>
parents: 7652
diff changeset
831
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
854 purple_proxy_info_get_username(connect_data->gpi),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
855 purple_proxy_info_get_password(connect_data->gpi) ?
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
856 purple_proxy_info_get_password(connect_data->gpi) : "");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
875 connect_data->inpa = purple_input_add(connect_data->fd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
886 (purple_proxy_info_get_host(connect_data->gpi) ? purple_proxy_info_get_host(connect_data->gpi) : "(null)"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
905 purple_debug_info("proxy", "Connection in progress\n");
9655
7cfd0424ec23 [gaim-migrate @ 10503]
Luke Schierer <lschiere@pidgin.im>
parents: 9653
diff changeset
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
6a092463d774 [gaim-migrate @ 8487]
Mike Hearn <mike@theoretic.com>
parents: 7652
diff changeset
909 /* we need to do CONNECT first */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
910 connect_data->inpa = purple_input_add(connect_data->fd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
923 purple_debug_info("proxy", "HTTP proxy connection established\n");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
924 purple_proxy_connect_data_connected(connect_data);
7834
6a092463d774 [gaim-migrate @ 8487]
Mike Hearn <mike@theoretic.com>
parents: 7652
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
934 purple_debug_info("proxy", "Connected immediately.\n");
5211
94d9756c381f [gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents: 4993
diff changeset
935
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
999 /*
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1000 * The socks4 spec doesn't include support for doing host name
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1001 * lookups by the proxy. Some socks4 servers do this via
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1002 * extensions to the protocol. Since we don't know if a
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1003 * server supports this, it would need to be implemented
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1004 * with an option, or some detection mechanism - in the
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1005 * meantime, stick with plain old SOCKS4.
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1006 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1033 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1034
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1035 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1036 proxy_connect_socks4(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1037 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1041 purple_proxy_info_get_host(connect_data->gpi),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1042 purple_proxy_info_get_port(connect_data->gpi));
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1061 purple_debug_info("proxy", "Connection in progress.\n");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1062 connect_data->inpa = purple_input_add(connect_data->fd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1072 purple_debug_info("proxy", "Connected immediately.\n");
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1073
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1138 purple_debug_error("socks5 proxy", socks5errors[buf[1]]);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1142 purple_debug_error("socks5 proxy", "Bad data.\n");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1149 /* Skip past BND.ADDR */
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1150 switch(buf[3]) {
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
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
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1155 break;
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1156 case 0x03: /* the address field contains a fully-qualified domain name. The first
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1157 octet of the address field contains the number of octets of name that
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
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
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1165 break;
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
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
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1170 break;
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1171 }
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1177 purple_proxy_connect_data_connected(connect_data);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1178 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1200 connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1261 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1262 PurpleCipher *cipher;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1263 PurpleCipherContext *ctx;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1264 int i;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1265 unsigned char Kxoripad[65];
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1266 unsigned char Kxoropad[65];
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1267 int pwlen;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1268
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1269 cipher = purple_ciphers_find_cipher("md5");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1275 pwlen=strlen(passwd);
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1276 if (pwlen>64) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1277 purple_cipher_context_append(ctx, (const guchar *)passwd, strlen(passwd));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1278 purple_cipher_context_digest(ctx, sizeof(Kxoripad), Kxoripad, NULL);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1282 }
12765
0c1580860d16 [gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 12758
diff changeset
1283 memcpy(Kxoropad,Kxoripad,pwlen);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1284
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1285 for (i=0;i<64;i++) {
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1286 Kxoripad[i]^=0x36;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1287 Kxoropad[i]^=0x5c;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1288 }
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents: 10626
diff changeset
1289
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1290 purple_cipher_context_reset(ctx, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1291 purple_cipher_context_append(ctx, Kxoripad, 64);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1292 purple_cipher_context_append(ctx, challenge, challen);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1293 purple_cipher_context_digest(ctx, sizeof(Kxoripad), Kxoripad, NULL);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1294
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1295 purple_cipher_context_reset(ctx, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1296 purple_cipher_context_append(ctx, Kxoropad, 64);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1297 purple_cipher_context_append(ctx, Kxoripad, 16);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1300 purple_cipher_context_destroy(ctx);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1301 }
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1302
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1303 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1304 s5_readchap(gpointer data, gint source, PurpleInputCondition cond)
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1305 {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1306 guchar *cmdbuf, *buf;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1309
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1310 purple_debug(PURPLE_DEBUG_INFO, "socks5 proxy", "Got CHAP response.\n");
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1325 return;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1349 return;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1350 }
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1351 cmdbuf++;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1355
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1360 return;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1361 buf = cmdbuf + 2;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1362 switch (cmdbuf[0]) {
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1363 case 0x00:
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1364 /* Did auth work? */
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1365 if (buf[0] == 0x00) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1373 } else {
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1374 /* Failure */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1380 return;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1381 }
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1382 break;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1383 case 0x03:
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1390 hmacmd5_chap(buf, cmdbuf[1],
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1397
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1404 connect_data->inpa = purple_input_add(connect_data->fd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1407 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1408 break;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1409 case 0x11:
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1410 /* Server wants to select an algorithm */
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1411 if (buf[0] != 0x85) {
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1412 /* Only currently support HMAC-MD5 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1421 return;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1422 }
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1423 break;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1424 }
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1425 cmdbuf = buf + cmdbuf[1];
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1426 }
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1427 /* Fell through. We ran out of CHAP events to process, but haven't
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1428 * succeeded or failed authentication - there may be more to come.
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1429 * If this is the case, come straight back here. */
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1430 }
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1431
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1432 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
1484
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1485 u = purple_proxy_info_get_username(connect_data->gpi);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1530 purple_proxy_info_get_username(connect_data->gpi), userlen);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1539
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1580 if (purple_proxy_info_get_username(connect_data->gpi) != NULL) {
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
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
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1583 buf[3] = 0x03; /* CHAP authentication */
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1584 buf[4] = 0x02; /* username/password authentication */
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1599 connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1609 purple_proxy_info_get_host(connect_data->gpi),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1629 purple_debug_info("socks5 proxy", "Connection in progress\n");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1630 connect_data->inpa = purple_input_add(connect_data->fd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1640 purple_debug_info("proxy", "Connected immediately.\n");
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1641
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4fe99bee3ecc [gaim-migrate @ 4989]
Nathan Walp <nwalp@pidgin.im>
parents: 4648
diff changeset
1655 size_t addrlen;
4fe99bee3ecc [gaim-migrate @ 4989]
Nathan Walp <nwalp@pidgin.im>
parents: 4648
diff changeset
1656 struct sockaddr *addr;
14965
8051becb91fe [gaim-migrate @ 17675]
Mark Doliner <markdoliner@pidgin.im>
parents: 14899
diff changeset
1657 char ipaddr[INET6_ADDRSTRLEN];
4634
c4318fc60090 [gaim-migrate @ 4941]
Nathan Walp <nwalp@pidgin.im>
parents: 4499
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1668 switch (purple_proxy_info_get_type(connect_data->gpi)) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4fe99bee3ecc [gaim-migrate @ 4989]
Nathan Walp <nwalp@pidgin.im>
parents: 4648
diff changeset
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
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
1696 static void
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
1697 connection_host_resolved(GSList *hosts, gpointer data,
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
1698 const char *error_message)
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
1699 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1700 PurpleProxyConnectData *connect_data;
9129
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
1718
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1719 try_connect(connect_data);
9129
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
1720 }
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
1721
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1722 PurpleProxyInfo *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1723 purple_proxy_get_setup(PurpleAccount *account)
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
1724 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1731 tmp_none_proxy_info = purple_proxy_info_new();
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1735 if (account && purple_account_get_proxy_info(account) != NULL) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1736 gpi = purple_account_get_proxy_info(account);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1741 if (purple_running_gnome())
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1742 gpi = purple_gnome_proxy_get_info();
15041
18a6f6cdce33 [gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents: 15032
diff changeset
1743 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
1757 /* http_proxy-format:
9227
95c28297b72c [gaim-migrate @ 10023]
Don Seiler <rizzo@gentoo.org>
parents: 9148
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1760 if(purple_url_parse(tmp, &proxyhost, &proxyport, NULL, &proxyuser, &proxypasswd)) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
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
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
1776
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
1799 return gpi;
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
1800 }
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
1801
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1802 PurpleProxyConnectData *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1805 PurpleProxyConnectFunction connect_cb, gpointer data)
13515
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
1806 {
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
1807 const char *connecthost = host;
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
1808 int connectport = port;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1809 PurpleProxyConnectData *connect_data;
13515
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
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
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
1814
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1822 connect_data->gpi = purple_proxy_get_setup(account);
13515
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
1823
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1824 if ((purple_proxy_info_get_type(connect_data->gpi) != PURPLE_PROXY_NONE) &&
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1825 (purple_proxy_info_get_host(connect_data->gpi) == NULL ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1828 purple_notify_error(NULL, NULL, _("Invalid proxy settings"), _("Either the host name or port number specified for your given proxy type is invalid."));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1838 case PURPLE_PROXY_HTTP:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1839 case PURPLE_PROXY_SOCKS4:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1840 case PURPLE_PROXY_SOCKS5:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1841 case PURPLE_PROXY_USE_ENVVAR:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1842 connecthost = purple_proxy_info_get_host(connect_data->gpi);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1867 PurpleProxyConnectData *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1870 PurpleProxyConnectFunction connect_cb,
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
1871 gpointer data)
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1872 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1873 PurpleProxyConnectData *connect_data;
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
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
7af69d172538 [gaim-migrate @ 17732]
Nathan Walp <nwalp@pidgin.im>
parents: 14965
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1887
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1888 connect_data->query_data =
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1889 purple_dnsquery_a(purple_proxy_info_get_host(gpi),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1901 }
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1902
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
1903 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1904 purple_proxy_connect_cancel(PurpleProxyConnectData *connect_data)
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
1905 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1906 purple_proxy_connect_data_disconnect(connect_data, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1907 purple_proxy_connect_data_destroy(connect_data);
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
1908 }
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1909
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
1910 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2002 purple_proxy_connect_data_disconnect(handles->data, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
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 }

mercurial