libpurple/proxy.c

Wed, 05 Mar 2008 09:40:16 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Wed, 05 Mar 2008 09:40:16 +0000
changeset 22553
d5101ee4e1e1
parent 22454
e7d161907c67
child 22554
dff2ca00b045
child 22558
11833f17f394
permissions
-rw-r--r--

These things are always NULL, so these if statements are never triggered

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

mercurial