libpurple/proxy.c

Wed, 02 Apr 2014 02:37:34 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Wed, 02 Apr 2014 02:37:34 +0200
changeset 35717
45bde03f86a6
parent 35475
ec0d44434ba8
child 35683
8b6b8a3b5039
permissions
-rw-r--r--

Custom smileys: simplify storage implementation

20147
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 20055
diff changeset
1 /* purple
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
3 * 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
4 * 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
5 * source distribution.
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
6 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
8 * 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
9 * the Free Software Foundation; either version 2 of the License, or
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
10 * (at your option) any later version.
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 distributed in the hope that it will be useful,
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
15 * GNU General Public License for more details.
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 * You should have received a copy of the GNU General Public License
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
18 * 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
19 * 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
20 *
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
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
23 /* this is a little piece of code to handle proxy connection */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
24 /* 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
25 , 2nd provide an easy way to add socks support
5ed6b8356ebc [gaim-migrate @ 7401]
Mark Doliner <markdoliner@pidgin.im>
parents: 6621
diff changeset
26 , 3rd draw women to it like flies to honey */
31738
c0a7971ce0d2 purple: Fix some compiler warnings related to new API and missing prototypes.
Paul Aurich <darkrain42@pidgin.im>
parents: 31678
diff changeset
27 #define _PURPLE_PROXY_C_
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
28
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5681
diff changeset
29 #include "internal.h"
34567
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
30 #include "ciphers/md5hash.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5681
diff changeset
31 #include "debug.h"
14243
0bda01972ff2 [gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents: 14226
diff changeset
32 #include "dnsquery.h"
34219
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
33 #include "http.h"
6621
2a18ef3e5224 [gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents: 6320
diff changeset
34 #include "notify.h"
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
35 #include "ntlm.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5681
diff changeset
36 #include "prefs.h"
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
37 #include "proxy.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5681
diff changeset
38 #include "util.h"
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3376
diff changeset
39
32299
106311e19d3a Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32297
diff changeset
40 struct _PurpleProxyInfo
106311e19d3a Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32297
diff changeset
41 {
35462
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
42 PurpleProxyType type; /* The proxy type. */
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
43
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
44 char *host; /* The host. */
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
45 int port; /* The port number. */
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
46 char *username; /* The username. */
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
47 char *password; /* The password. */
32299
106311e19d3a Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32297
diff changeset
48 };
106311e19d3a Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32297
diff changeset
49
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
50 struct _PurpleProxyConnectData {
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
51 void *handle;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
52 PurpleProxyConnectFunction connect_cb;
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
53 gpointer data;
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
54 gchar *host;
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
55 int port;
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
56 int fd;
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
57 int socket_type;
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
58 guint inpa;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
59 PurpleProxyInfo *gpi;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
60 PurpleDnsQueryData *query_data;
14159
0fcdaa463a32 [gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents: 14158
diff changeset
61
35462
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
62 /*
14159
0fcdaa463a32 [gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents: 14158
diff changeset
63 * This contains alternating length/char* values. The char*
0fcdaa463a32 [gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents: 14158
diff changeset
64 * values need to be freed when removed from the linked list.
0fcdaa463a32 [gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents: 14158
diff changeset
65 */
9129
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
66 GSList *hosts;
14159
0fcdaa463a32 [gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents: 14158
diff changeset
67
32129
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
68 PurpleProxyConnectData *child;
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
69
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
70 /*
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
71 * All of the following variables are used when establishing a
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
72 * connection through a proxy.
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
73 */
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
74 guchar *write_buffer;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
75 gsize write_buf_len;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
76 gsize written_len;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
77 PurpleInputFunction read_cb;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
78 guchar *read_buffer;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
79 gsize read_buf_len;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
80 gsize read_len;
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
81 PurpleAccount *account;
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
82 };
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
83
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
84 static const char * const socks5errors[] = {
7982
db8c1b6137eb [gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents: 7834
diff changeset
85 "succeeded\n",
db8c1b6137eb [gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents: 7834
diff changeset
86 "general SOCKS server failure\n",
db8c1b6137eb [gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents: 7834
diff changeset
87 "connection not allowed by ruleset\n",
db8c1b6137eb [gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents: 7834
diff changeset
88 "Network unreachable\n",
db8c1b6137eb [gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents: 7834
diff changeset
89 "Host unreachable\n",
db8c1b6137eb [gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents: 7834
diff changeset
90 "Connection refused\n",
db8c1b6137eb [gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents: 7834
diff changeset
91 "TTL expired\n",
db8c1b6137eb [gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents: 7834
diff changeset
92 "Command not supported\n",
db8c1b6137eb [gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents: 7834
diff changeset
93 "Address type not supported\n"
db8c1b6137eb [gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents: 7834
diff changeset
94 };
db8c1b6137eb [gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents: 7834
diff changeset
95
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
96 static PurpleProxyInfo *global_proxy_info = NULL;
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
97
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
98 static GSList *handles = NULL;
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
99
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
100 static void try_connect(PurpleProxyConnectData *connect_data);
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
101
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
102 /*
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
103 * 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
104 * 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
105 */
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
106 #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
107
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 * Proxy structure API
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
110 **************************************************************************/
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
111 PurpleProxyInfo *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
112 purple_proxy_info_new(void)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
113 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
114 return g_new0(PurpleProxyInfo, 1);
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
115 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
116
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
117 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
118 purple_proxy_info_destroy(PurpleProxyInfo *info)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
119 {
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
120 g_return_if_fail(info != NULL);
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
121
14030
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13991
diff changeset
122 g_free(info->host);
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13991
diff changeset
123 g_free(info->username);
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13991
diff changeset
124 g_free(info->password);
5681
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 g_free(info);
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
127 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
128
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
129 void
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
130 purple_proxy_info_set_proxy_type(PurpleProxyInfo *info, PurpleProxyType type)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
131 {
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
132 g_return_if_fail(info != NULL);
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 info->type = type;
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
135 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
136
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
137 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
138 purple_proxy_info_set_host(PurpleProxyInfo *info, const char *host)
5681
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 g_return_if_fail(info != NULL);
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
141
14030
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13991
diff changeset
142 g_free(info->host);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14030
diff changeset
143 info->host = g_strdup(host);
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
144 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
145
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
146 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
147 purple_proxy_info_set_port(PurpleProxyInfo *info, int port)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
148 {
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
149 g_return_if_fail(info != NULL);
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 info->port = port;
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
152 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
153
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
154 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
155 purple_proxy_info_set_username(PurpleProxyInfo *info, const char *username)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
156 {
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
157 g_return_if_fail(info != NULL);
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
158
14030
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13991
diff changeset
159 g_free(info->username);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14030
diff changeset
160 info->username = g_strdup(username);
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
161 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
162
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
163 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
164 purple_proxy_info_set_password(PurpleProxyInfo *info, const char *password)
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 g_return_if_fail(info != NULL);
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
167
14030
23144f1dc950 [gaim-migrate @ 16525]
Mark Doliner <markdoliner@pidgin.im>
parents: 13991
diff changeset
168 g_free(info->password);
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 14030
diff changeset
169 info->password = g_strdup(password);
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
170 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
171
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
172 PurpleProxyType
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
173 purple_proxy_info_get_proxy_type(const PurpleProxyInfo *info)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
174 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
175 g_return_val_if_fail(info != NULL, PURPLE_PROXY_NONE);
5681
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 return info->type;
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
178 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
179
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
180 const char *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
181 purple_proxy_info_get_host(const PurpleProxyInfo *info)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
182 {
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
183 g_return_val_if_fail(info != NULL, NULL);
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 return info->host;
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
186 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
187
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
188 int
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
189 purple_proxy_info_get_port(const PurpleProxyInfo *info)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
190 {
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
191 g_return_val_if_fail(info != NULL, 0);
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 return info->port;
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
194 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
195
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
196 const char *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
197 purple_proxy_info_get_username(const PurpleProxyInfo *info)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
198 {
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
199 g_return_val_if_fail(info != NULL, NULL);
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 return info->username;
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
202 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
203
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
204 const char *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
205 purple_proxy_info_get_password(const PurpleProxyInfo *info)
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 g_return_val_if_fail(info != NULL, NULL);
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 return info->password;
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
210 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
211
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
212 /**************************************************************************
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
213 * Global Proxy API
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
214 **************************************************************************/
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
215 PurpleProxyInfo *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
216 purple_global_proxy_get_info(void)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
217 {
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
218 return global_proxy_info;
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
219 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
220
25858
ec60fbe5a4ab Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
221 void
ec60fbe5a4ab Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
222 purple_global_proxy_set_info(PurpleProxyInfo *info)
ec60fbe5a4ab Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
223 {
ec60fbe5a4ab Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
224 g_return_if_fail(info != NULL);
ec60fbe5a4ab Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
225
ec60fbe5a4ab Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
226 purple_proxy_info_destroy(global_proxy_info);
ec60fbe5a4ab Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
227
ec60fbe5a4ab Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
228 global_proxy_info = info;
ec60fbe5a4ab Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
229 }
ec60fbe5a4ab Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
230
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
231
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
232 /* index in gproxycmds below, keep them in sync */
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
233 #define GNOME_PROXY_MODE 0
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
234 #define GNOME_PROXY_USE_SAME_PROXY 1
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
235 #define GNOME_PROXY_SOCKS_HOST 2
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
236 #define GNOME_PROXY_SOCKS_PORT 3
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
237 #define GNOME_PROXY_HTTP_HOST 4
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
238 #define GNOME_PROXY_HTTP_PORT 5
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
239 #define GNOME_PROXY_HTTP_USER 6
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
240 #define GNOME_PROXY_HTTP_PASS 7
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
241 #define GNOME2_CMDS 0
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
242 #define GNOME3_CMDS 1
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
243
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
244 /* detect proxy settings for gnome2/gnome3 */
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
245 static const char* gproxycmds[][2] = {
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
246 { "gconftool-2 -g /system/proxy/mode" , "gsettings get org.gnome.system.proxy mode" },
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
247 { "gconftool-2 -g /system/http_proxy/use_same_proxy", "gsettings get org.gnome.system.proxy use-same-proxy" },
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
248 { "gconftool-2 -g /system/proxy/socks_host", "gsettings get org.gnome.system.proxy.socks host" },
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
249 { "gconftool-2 -g /system/proxy/socks_port", "gsettings get org.gnome.system.proxy.socks port" },
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
250 { "gconftool-2 -g /system/http_proxy/host", "gsettings get org.gnome.system.proxy.http host" },
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
251 { "gconftool-2 -g /system/http_proxy/port", "gsettings get org.gnome.system.proxy.http port"},
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
252 { "gconftool-2 -g /system/http_proxy/authentication_user", "gsettings get org.gnome.system.proxy.http authentication-user" },
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
253 { "gconftool-2 -g /system/http_proxy/authentication_password", "gsettings get org.gnome.system.proxy.http authentication-password" },
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
254 };
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
255
35462
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
256 /*
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
257 * purple_gnome_proxy_get_parameter:
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
258 * @parameter: One of the GNOME_PROXY_x constants defined above
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
259 * @gnome_version: GNOME2_CMDS or GNOME3_CMDS
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
260 *
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
261 * This is a utility function used to retrieve proxy parameter values from
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
262 * GNOME 2/3 environment.
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
263 *
35462
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
264 * Returns: The value of requested proxy parameter
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
265 */
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
266 static char *
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
267 purple_gnome_proxy_get_parameter(guint8 parameter, guint8 gnome_version)
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
268 {
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
269 gchar *param, *err;
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
270 size_t param_len;
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
271
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
272 if (parameter > GNOME_PROXY_HTTP_PASS)
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
273 return NULL;
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
274 if (gnome_version > GNOME3_CMDS)
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
275 return NULL;
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
276
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
277 if (!g_spawn_command_line_sync(gproxycmds[parameter][gnome_version],
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
278 &param, &err, NULL, NULL))
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
279 return NULL;
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
280 g_free(err);
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
281
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
282 g_strstrip(param);
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
283 if (param[0] == '\'' || param[0] == '\"') {
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
284 param_len = strlen(param);
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
285 memmove(param, param + 1, param_len); /* copy last \0 too */
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
286 --param_len;
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
287 if (param_len > 0 && (param[param_len - 1] == '\'' || param[param_len - 1] == '\"'))
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
288 param[param_len - 1] = '\0';
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
289 g_strstrip(param);
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
290 }
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
291
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
292 return param;
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
293 }
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
294
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
295 static PurpleProxyInfo *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
296 purple_gnome_proxy_get_info(void)
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
297 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
298 static PurpleProxyInfo info = {0, NULL, 0, NULL, NULL};
24156
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
299 gboolean use_same_proxy = FALSE;
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
300 gchar *tmp;
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
301 guint8 gnome_version = GNOME3_CMDS;
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
302
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
303 tmp = g_find_program_in_path("gsettings");
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
304 if (tmp == NULL) {
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
305 tmp = g_find_program_in_path("gconftool-2");
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
306 gnome_version = GNOME2_CMDS;
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
307 }
22554
dff2ca00b045 Short circuit and return out of the function early if gconftool-2
Mark Doliner <markdoliner@pidgin.im>
parents: 22553
diff changeset
308 if (tmp == NULL)
dff2ca00b045 Short circuit and return out of the function early if gconftool-2
Mark Doliner <markdoliner@pidgin.im>
parents: 22553
diff changeset
309 return purple_global_proxy_get_info();
12156
58a027264d6c [gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11878
diff changeset
310
22554
dff2ca00b045 Short circuit and return out of the function early if gconftool-2
Mark Doliner <markdoliner@pidgin.im>
parents: 22553
diff changeset
311 g_free(tmp);
12156
58a027264d6c [gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11878
diff changeset
312
22555
04cfb0cf0974 Improve our error handling of Gnome proxy settings.
Mark Doliner <markdoliner@pidgin.im>
parents: 22554
diff changeset
313 /* Check whether to use a proxy. */
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
314 tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_MODE, gnome_version);
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
315 if (!tmp)
22554
dff2ca00b045 Short circuit and return out of the function early if gconftool-2
Mark Doliner <markdoliner@pidgin.im>
parents: 22553
diff changeset
316 return purple_global_proxy_get_info();
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
317
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
318 if (purple_strequal(tmp, "none")) {
22554
dff2ca00b045 Short circuit and return out of the function early if gconftool-2
Mark Doliner <markdoliner@pidgin.im>
parents: 22553
diff changeset
319 info.type = PURPLE_PROXY_NONE;
12156
58a027264d6c [gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11878
diff changeset
320 g_free(tmp);
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
321 return &info;
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
322 }
22555
04cfb0cf0974 Improve our error handling of Gnome proxy settings.
Mark Doliner <markdoliner@pidgin.im>
parents: 22554
diff changeset
323
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
324 if (!purple_strequal(tmp, "manual")) {
22555
04cfb0cf0974 Improve our error handling of Gnome proxy settings.
Mark Doliner <markdoliner@pidgin.im>
parents: 22554
diff changeset
325 /* Unknown setting. Fallback to using our global proxy settings. */
22554
dff2ca00b045 Short circuit and return out of the function early if gconftool-2
Mark Doliner <markdoliner@pidgin.im>
parents: 22553
diff changeset
326 g_free(tmp);
dff2ca00b045 Short circuit and return out of the function early if gconftool-2
Mark Doliner <markdoliner@pidgin.im>
parents: 22553
diff changeset
327 return purple_global_proxy_get_info();
dff2ca00b045 Short circuit and return out of the function early if gconftool-2
Mark Doliner <markdoliner@pidgin.im>
parents: 22553
diff changeset
328 }
12156
58a027264d6c [gaim-migrate @ 14457]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11878
diff changeset
329
22554
dff2ca00b045 Short circuit and return out of the function early if gconftool-2
Mark Doliner <markdoliner@pidgin.im>
parents: 22553
diff changeset
330 g_free(tmp);
22555
04cfb0cf0974 Improve our error handling of Gnome proxy settings.
Mark Doliner <markdoliner@pidgin.im>
parents: 22554
diff changeset
331
22560
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
332 /* Free the old fields */
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
333 if (info.host) {
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
334 g_free(info.host);
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
335 info.host = NULL;
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
336 }
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
337 if (info.username) {
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
338 g_free(info.username);
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
339 info.username = NULL;
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
340 }
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
341 if (info.password) {
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
342 g_free(info.password);
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
343 info.password = NULL;
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
344 }
510c8edb3854 Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <markdoliner@pidgin.im>
parents: 22559
diff changeset
345
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
346 tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_USE_SAME_PROXY, gnome_version);
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
347 if (!tmp)
22554
dff2ca00b045 Short circuit and return out of the function early if gconftool-2
Mark Doliner <markdoliner@pidgin.im>
parents: 22553
diff changeset
348 return purple_global_proxy_get_info();
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
349
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
350 if (purple_strequal(tmp, "true"))
24156
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
351 use_same_proxy = TRUE;
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
352
24156
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
353 g_free(tmp);
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
354
24315
98e4a5f1d662 Fix a double free. Fixes #7047
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 24298
diff changeset
355 if (!use_same_proxy) {
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
356 info.host = purple_gnome_proxy_get_parameter(GNOME_PROXY_SOCKS_HOST, gnome_version);
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
357 if (!info.host)
24315
98e4a5f1d662 Fix a double free. Fixes #7047
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 24298
diff changeset
358 return purple_global_proxy_get_info();
98e4a5f1d662 Fix a double free. Fixes #7047
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 24298
diff changeset
359 }
24156
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
360
24315
98e4a5f1d662 Fix a double free. Fixes #7047
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 24298
diff changeset
361 if (!use_same_proxy && (info.host != NULL) && (*info.host != '\0')) {
24156
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
362 info.type = PURPLE_PROXY_SOCKS5;
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
363 tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_SOCKS_PORT, gnome_version);
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
364 if (!tmp) {
24156
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
365 g_free(info.host);
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
366 info.host = NULL;
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
367 return purple_global_proxy_get_info();
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
368 }
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
369 info.port = atoi(tmp);
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
370 g_free(tmp);
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
371 } else {
22555
04cfb0cf0974 Improve our error handling of Gnome proxy settings.
Mark Doliner <markdoliner@pidgin.im>
parents: 22554
diff changeset
372 g_free(info.host);
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
373 info.host = purple_gnome_proxy_get_parameter(GNOME_PROXY_HTTP_HOST, gnome_version);
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
374 if (!info.host)
24156
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
375 return purple_global_proxy_get_info();
24316
88c65c05a21e Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <datallah@pidgin.im>
parents: 24315
diff changeset
376
24156
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
377 /* If we get this far then we know we're using an HTTP proxy */
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
378 info.type = PURPLE_PROXY_HTTP;
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
379
24156
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
380 if (*info.host == '\0')
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
381 {
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
382 purple_debug_info("proxy", "Gnome proxy settings are set to "
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
383 "'manual' but no suitable proxy server is specified. Using "
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
384 "Pidgin's proxy settings instead.\n");
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
385 g_free(info.host);
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
386 info.host = NULL;
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
387 return purple_global_proxy_get_info();
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
388 }
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
389
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
390 info.username = purple_gnome_proxy_get_parameter(GNOME_PROXY_HTTP_USER, gnome_version);
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
391 if (!info.username)
24156
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
392 {
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
393 g_free(info.host);
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
394 info.host = NULL;
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
395 return purple_global_proxy_get_info();
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
396 }
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
397
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
398 info.password = purple_gnome_proxy_get_parameter(GNOME_PROXY_HTTP_PASS, gnome_version);
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
399 if (!info.password)
24156
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
400 {
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
401 g_free(info.host);
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
402 info.host = NULL;
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
403 g_free(info.username);
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
404 info.username = NULL;
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
405 return purple_global_proxy_get_info();
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
406 }
32136
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
407
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
408 tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_HTTP_PORT, gnome_version);
98a6cc751323 Add support for reading GNOME3 proxy settings.
Mihai Serban <mihai.serban@gmail.com>
parents: 32129
diff changeset
409 if (!tmp)
24156
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
410 {
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
411 g_free(info.host);
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
412 info.host = NULL;
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
413 g_free(info.username);
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
414 info.username = NULL;
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
415 g_free(info.password);
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
416 info.password = NULL;
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
417 return purple_global_proxy_get_info();
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
418 }
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
419 info.port = atoi(tmp);
6c7631ae7571 Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23532
diff changeset
420 g_free(tmp);
22555
04cfb0cf0974 Improve our error handling of Gnome proxy settings.
Mark Doliner <markdoliner@pidgin.im>
parents: 22554
diff changeset
421 }
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
422
22554
dff2ca00b045 Short circuit and return out of the function early if gconftool-2
Mark Doliner <markdoliner@pidgin.im>
parents: 22553
diff changeset
423 return &info;
11878
4c2661df91bb [gaim-migrate @ 14169]
Sean Egan <seanegan@pidgin.im>
parents: 11428
diff changeset
424 }
24171
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
425
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
426 #ifdef _WIN32
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
427
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
428 typedef BOOL (CALLBACK* LPFNWINHTTPGETIEPROXYCONFIG)(/*IN OUT*/ WINHTTP_CURRENT_USER_IE_PROXY_CONFIG* pProxyConfig);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
429
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
430 /* This modifies "host" in-place evilly */
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
431 static void
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
432 _proxy_fill_hostinfo(PurpleProxyInfo *info, char *host, int default_port)
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
433 {
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
434 int port = default_port;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
435 char *d;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
436
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
437 d = g_strrstr(host, ":");
30057
ab9790d588f9 Fix an invalid memory deref with Windows proxy settings when there's no ":port"
Marten Klencke <mklencke@gmx.net>
parents: 29365
diff changeset
438 if (d) {
24171
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
439 *d = '\0';
30057
ab9790d588f9 Fix an invalid memory deref with Windows proxy settings when there's no ":port"
Marten Klencke <mklencke@gmx.net>
parents: 29365
diff changeset
440
ab9790d588f9 Fix an invalid memory deref with Windows proxy settings when there's no ":port"
Marten Klencke <mklencke@gmx.net>
parents: 29365
diff changeset
441 d++;
ab9790d588f9 Fix an invalid memory deref with Windows proxy settings when there's no ":port"
Marten Klencke <mklencke@gmx.net>
parents: 29365
diff changeset
442 if (*d)
ab9790d588f9 Fix an invalid memory deref with Windows proxy settings when there's no ":port"
Marten Klencke <mklencke@gmx.net>
parents: 29365
diff changeset
443 sscanf(d, "%d", &port);
ab9790d588f9 Fix an invalid memory deref with Windows proxy settings when there's no ":port"
Marten Klencke <mklencke@gmx.net>
parents: 29365
diff changeset
444
ab9790d588f9 Fix an invalid memory deref with Windows proxy settings when there's no ":port"
Marten Klencke <mklencke@gmx.net>
parents: 29365
diff changeset
445 if (port == 0)
ab9790d588f9 Fix an invalid memory deref with Windows proxy settings when there's no ":port"
Marten Klencke <mklencke@gmx.net>
parents: 29365
diff changeset
446 port = default_port;
ab9790d588f9 Fix an invalid memory deref with Windows proxy settings when there's no ":port"
Marten Klencke <mklencke@gmx.net>
parents: 29365
diff changeset
447 }
24171
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
448
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
449 purple_proxy_info_set_host(info, host);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
450 purple_proxy_info_set_port(info, port);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
451 }
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
452
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
453 static PurpleProxyInfo *
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
454 purple_win32_proxy_get_info(void)
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
455 {
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
456 static LPFNWINHTTPGETIEPROXYCONFIG MyWinHttpGetIEProxyConfig = NULL;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
457 static gboolean loaded = FALSE;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
458 static PurpleProxyInfo info = {0, NULL, 0, NULL, NULL};
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
459
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
460 WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_proxy_config;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
461
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
462 if (!loaded) {
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
463 loaded = TRUE;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
464 MyWinHttpGetIEProxyConfig = (LPFNWINHTTPGETIEPROXYCONFIG)
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
465 wpurple_find_and_loadproc("winhttp.dll", "WinHttpGetIEProxyConfigForCurrentUser");
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
466 if (!MyWinHttpGetIEProxyConfig)
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27249
diff changeset
467 purple_debug_warning("proxy", "Unable to read Windows Proxy Settings.\n");
24171
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
468 }
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
469
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
470 if (!MyWinHttpGetIEProxyConfig)
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
471 return NULL;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
472
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
473 ZeroMemory(&ie_proxy_config, sizeof(ie_proxy_config));
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
474 if (!MyWinHttpGetIEProxyConfig(&ie_proxy_config)) {
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
475 purple_debug_error("proxy", "Error reading Windows Proxy Settings(%lu).\n", GetLastError());
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
476 return NULL;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
477 }
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
478
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
479 /* We can't do much if it is autodetect*/
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
480 if (ie_proxy_config.fAutoDetect) {
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
481 purple_debug_error("proxy", "Windows Proxy Settings set to autodetect (not supported).\n");
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
482
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
483 /* TODO: For 3.0.0 we'll revisit this (maybe)*/
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
484
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
485 return NULL;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
486
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
487 } else if (ie_proxy_config.lpszProxy) {
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
488 gchar *proxy_list = g_utf16_to_utf8(ie_proxy_config.lpszProxy, -1,
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
489 NULL, NULL, NULL);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
490
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
491 /* We can't do anything about the bypass list, as we don't have the url */
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
492 /* TODO: For 3.0.0 we'll revisit this*/
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
493
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
494 /* There are proxy settings for several protocols */
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
495 if (proxy_list && *proxy_list) {
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
496 char *specific = NULL, *tmp;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
497
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
498 /* If there is only a global proxy, which means "HTTP" */
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
499 if (!strchr(proxy_list, ';') || (specific = g_strstr_len(proxy_list, -1, "http=")) != NULL) {
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
500
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
501 if (specific) {
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
502 specific += strlen("http=");
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
503 tmp = strchr(specific, ';');
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
504 if (tmp)
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
505 *tmp = '\0';
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
506 /* specific now points the proxy server (and port) */
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
507 } else
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
508 specific = proxy_list;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
509
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
510 purple_proxy_info_set_proxy_type(&info, PURPLE_PROXY_HTTP);
24171
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
511 _proxy_fill_hostinfo(&info, specific, 80);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
512 /* TODO: is there a way to set the username/password? */
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
513 purple_proxy_info_set_username(&info, NULL);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
514 purple_proxy_info_set_password(&info, NULL);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
515
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
516 purple_debug_info("proxy", "Windows Proxy Settings: HTTP proxy: '%s:%d'.\n",
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
517 purple_proxy_info_get_host(&info),
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
518 purple_proxy_info_get_port(&info));
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
519
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
520 } else if ((specific = g_strstr_len(proxy_list, -1, "socks=")) != NULL) {
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
521
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
522 specific += strlen("socks=");
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
523 tmp = strchr(specific, ';');
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
524 if (tmp)
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
525 *tmp = '\0';
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
526 /* specific now points the proxy server (and port) */
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
527
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
528 purple_proxy_info_set_proxy_type(&info, PURPLE_PROXY_SOCKS5);
24171
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
529 _proxy_fill_hostinfo(&info, specific, 1080);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
530 /* TODO: is there a way to set the username/password? */
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
531 purple_proxy_info_set_username(&info, NULL);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
532 purple_proxy_info_set_password(&info, NULL);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
533
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
534 purple_debug_info("proxy", "Windows Proxy Settings: SOCKS5 proxy: '%s:%d'.\n",
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
535 purple_proxy_info_get_host(&info),
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
536 purple_proxy_info_get_port(&info));
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
537
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
538 } else {
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
539
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
540 purple_debug_info("proxy", "Windows Proxy Settings: No supported proxy specified.\n");
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
541
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
542 purple_proxy_info_set_proxy_type(&info, PURPLE_PROXY_NONE);
24171
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
543
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
544 }
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
545 }
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
546
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
547 /* TODO: Fix API to be able look at proxy bypass settings */
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
548
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
549 g_free(proxy_list);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
550 } else {
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
551 purple_debug_info("proxy", "No Windows proxy set.\n");
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
552 purple_proxy_info_set_proxy_type(&info, PURPLE_PROXY_NONE);
24171
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
553 }
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
554
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
555 if (ie_proxy_config.lpszAutoConfigUrl)
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
556 GlobalFree(ie_proxy_config.lpszAutoConfigUrl);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
557 if (ie_proxy_config.lpszProxy)
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
558 GlobalFree(ie_proxy_config.lpszProxy);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
559 if (ie_proxy_config.lpszProxyBypass)
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
560 GlobalFree(ie_proxy_config.lpszProxyBypass);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
561
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
562 return &info;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
563 }
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
564 #endif
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
565
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
566
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
567 /**************************************************************************
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
568 * Proxy API
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
569 **************************************************************************/
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
570
35462
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
571 /*
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
572 * Whoever calls this needs to have called
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
573 * purple_proxy_connect_data_disconnect() beforehand.
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
574 */
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
575 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
576 purple_proxy_connect_data_destroy(PurpleProxyConnectData *connect_data)
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
577 {
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
578 handles = g_slist_remove(handles, connect_data);
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
579
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
580 if (connect_data->query_data != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
581 purple_dnsquery_destroy(connect_data->query_data);
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
582
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
583 while (connect_data->hosts != NULL)
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
584 {
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
585 /* Discard the length... */
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
586 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
587 /* Free the address... */
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
588 g_free(connect_data->hosts->data);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
589 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
590 }
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
591
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
592 g_free(connect_data->host);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
593 g_free(connect_data);
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
594 }
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
595
35462
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
596 /*
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
597 * purple_proxy_connect_data_disconnect:
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
598 * @error_message: An error message explaining why the connection
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
599 * failed. This will be passed to the callback function
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
600 * specified in the call to purple_proxy_connect(). If the
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
601 * connection was successful then pass in null.
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
602 *
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
603 * Free all information dealing with a connection attempt and
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
604 * 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
605 * to another IP address.
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
606 *
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
607 * 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
608 * attempt failed. If the connection attempt failed and
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
609 * 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
610 * If the connection attempt failed and we have no more hosts
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
611 * 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
612 * then destroy the connect_data.
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
613 */
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
614 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
615 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
616 {
32129
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
617 if (connect_data->child != NULL)
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
618 {
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
619 purple_proxy_connect_cancel(connect_data->child);
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
620 connect_data->child = NULL;
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
621 }
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
622
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
623 if (connect_data->inpa > 0)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
624 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
625 purple_input_remove(connect_data->inpa);
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
626 connect_data->inpa = 0;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
627 }
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
628
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
629 if (connect_data->fd >= 0)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
630 {
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
631 close(connect_data->fd);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
632 connect_data->fd = -1;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
633 }
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
634
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
635 g_free(connect_data->write_buffer);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
636 connect_data->write_buffer = NULL;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
637
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
638 g_free(connect_data->read_buffer);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
639 connect_data->read_buffer = NULL;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
640
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
641 if (error_message != NULL)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
642 {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27249
diff changeset
643 purple_debug_error("proxy", "Connection attempt failed: %s\n",
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
644 error_message);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
645 if (connect_data->hosts != NULL)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
646 try_connect(connect_data);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
647 else
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
648 {
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
649 /* Everything failed! Tell the originator of the request. */
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
650 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
651 purple_proxy_connect_data_destroy(connect_data);
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
652 }
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
653 }
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
654 }
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
655
35462
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
656 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
657 * 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
658 * specify the error_message using a printf()-like syntax.
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
659 */
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
660 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
661 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
662 {
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
663 va_list args;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
664 gchar *tmp;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
665
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
666 va_start(args, format);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
667 tmp = g_strdup_vprintf(format, args);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
668 va_end(args);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
669
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
670 purple_proxy_connect_data_disconnect(connect_data, tmp);
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
671 g_free(tmp);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
672 }
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
673
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
674 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
675 purple_proxy_connect_data_connected(PurpleProxyConnectData *connect_data)
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
676 {
27943
129a272c34f2 Add an explicit "Connected" message right before passing control from proxy subsystem to whomever called purple_proxy_connect.
Paul Aurich <darkrain42@pidgin.im>
parents: 27635
diff changeset
677 purple_debug_info("proxy", "Connected to %s:%d.\n",
129a272c34f2 Add an explicit "Connected" message right before passing control from proxy subsystem to whomever called purple_proxy_connect.
Paul Aurich <darkrain42@pidgin.im>
parents: 27635
diff changeset
678 connect_data->host, connect_data->port);
129a272c34f2 Add an explicit "Connected" message right before passing control from proxy subsystem to whomever called purple_proxy_connect.
Paul Aurich <darkrain42@pidgin.im>
parents: 27635
diff changeset
679
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
680 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
681
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
682 /*
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
683 * 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
684 * 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
685 * we destroy the connect_data.
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
686 */
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
687 connect_data->fd = -1;
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
688
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
689 purple_proxy_connect_data_disconnect(connect_data, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
690 purple_proxy_connect_data_destroy(connect_data);
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
691 }
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
692
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
693 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
694 socket_ready_cb(gpointer data, gint source, PurpleInputCondition cond)
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
695 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
696 PurpleProxyConnectData *connect_data = data;
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
697 int error = 0;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
698 int ret;
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
699
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
700 /* 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
701 * 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
702 */
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
703 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
704 return;
20053
68ce40196f8a grab revision 6be36979d022284283217c2a32f2b812740cbbf3
Luke Schierer <lschiere@pidgin.im>
parents: 19985
diff changeset
705
24411
fdf9068e4492 This string appears before the connection attempt, so it shouldn't be
Kevin Stange <kstange@pidgin.im>
parents: 24316
diff changeset
706 purple_debug_info("proxy", "Connecting 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
707 connect_data->host, connect_data->port);
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
708
8273
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
709 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
710 * 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
711 * really messed up (bad descriptor, usually). Otherwise, it returns 0 and
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
712 * error holds what connect would have returned if it blocked until now.
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
713 * Thus, error == 0 is success, error == EINPROGRESS means "try again",
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
714 * and anything else is a real error.
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
715 *
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
716 * (error == EINPROGRESS can happen after a select because the kernel can
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
717 * be overly optimistic sometimes. select is just a hint that you might be
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
718 * able to do something.)
7882af5843e9 [gaim-migrate @ 8997]
Scott Lamb
parents: 8269
diff changeset
719 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
720 ret = purple_input_get_error(connect_data->fd, &error);
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
721
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
722 if (ret == 0 && error == EINPROGRESS) {
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
723 /* No worries - we'll be called again later */
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
724 /* 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
725 purple_debug_info("proxy", "(ret == 0 && error == EINPROGRESS)\n");
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
726 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
727 }
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
728
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
729 if (ret != 0 || error != 0) {
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
730 if (ret != 0)
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
731 error = errno;
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27249
diff changeset
732 purple_debug_error("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
733 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
734
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 21091
diff changeset
735 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error));
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
736 return;
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
737 }
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
738
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
739 purple_proxy_connect_data_connected(connect_data);
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
740 }
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
741
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
742 static gboolean
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
743 clean_connect(gpointer data)
1868
31b44ef2b061 [gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1844
diff changeset
744 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
745 purple_proxy_connect_data_connected(data);
1868
31b44ef2b061 [gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1844
diff changeset
746
31b44ef2b061 [gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1844
diff changeset
747 return FALSE;
31b44ef2b061 [gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1844
diff changeset
748 }
31b44ef2b061 [gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1844
diff changeset
749
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
750 static void
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
751 proxy_connect_udp_none(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen)
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
752 {
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
753 int flags;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
754
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
755 purple_debug_info("proxy", "UDP Connecting to %s:%d with no proxy\n",
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
756 connect_data->host, connect_data->port);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
757
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
758 connect_data->fd = socket(addr->sa_family, SOCK_DGRAM, 0);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
759 if (connect_data->fd < 0)
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
760 {
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
761 purple_proxy_connect_data_disconnect_formatted(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
762 _("Unable to create socket: %s"), g_strerror(errno));
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
763 return;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
764 }
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
765
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
766 flags = fcntl(connect_data->fd, F_GETFL);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
767 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
768 #ifndef _WIN32
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
769 fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
770 #endif
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
771
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
772 if (connect(connect_data->fd, addr, addrlen) != 0)
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
773 {
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
774 if ((errno == EINPROGRESS) || (errno == EINTR))
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
775 {
33877
d33b4fa5ea06 win32: hack for webkit's feature of replacing backslash with yen sign; silencing some warnings in gtkconv.c; consistent messages in proxy.c
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33440
diff changeset
776 purple_debug_info("proxy", "UDP connection in progress\n");
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
777 connect_data->inpa = purple_input_add(connect_data->fd,
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
778 PURPLE_INPUT_WRITE, socket_ready_cb, connect_data);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
779 }
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
780 else
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
781 {
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
782 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno));
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
783 }
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
784 }
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
785 else
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
786 {
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
787 /*
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
788 * The connection happened IMMEDIATELY... strange, but whatever.
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
789 */
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
790 int error = ETIMEDOUT;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
791 int ret;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
792
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
793 purple_debug_info("proxy", "UDP Connected immediately.\n");
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
794
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
795 ret = purple_input_get_error(connect_data->fd, &error);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
796 if ((ret != 0) || (error != 0))
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
797 {
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
798 if (ret != 0)
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
799 error = errno;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
800 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error));
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
801 return;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
802 }
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
803
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
804 /*
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
805 * We want to call the "connected" callback eventually, but we
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
806 * don't want to call it before we return, just in case.
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
807 */
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
808 purple_timeout_add(10, clean_connect, connect_data);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
809 }
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
810 }
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
811
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
812 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
813 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
814 {
20239
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
815 int flags;
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
816
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
817 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
818 connect_data->host, connect_data->port);
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
819
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
820 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
821 if (connect_data->fd < 0)
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
822 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
823 purple_proxy_connect_data_disconnect_formatted(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
824 _("Unable to create socket: %s"), g_strerror(errno));
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
825 return;
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
826 }
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
827
20239
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
828 flags = fcntl(connect_data->fd, F_GETFL);
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
829 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK);
10172
8400788b226c [gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10170
diff changeset
830 #ifndef _WIN32
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
831 fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC);
10172
8400788b226c [gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10170
diff changeset
832 #endif
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
833
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
834 if (connect(connect_data->fd, addr, addrlen) != 0)
14161
e959d0e476be [gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents: 14159
diff changeset
835 {
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
836 if ((errno == EINPROGRESS) || (errno == EINTR))
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
837 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
838 purple_debug_info("proxy", "Connection in progress\n");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
839 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
840 PURPLE_INPUT_WRITE, socket_ready_cb, connect_data);
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
841 }
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
842 else
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
843 {
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 21091
diff changeset
844 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno));
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
845 }
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
846 }
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
847 else
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
848 {
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
849 /*
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
850 * The connection happened IMMEDIATELY... strange, but whatever.
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
851 */
2048
4ac8b9622c9e [gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1881
diff changeset
852 int error = ETIMEDOUT;
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
853 int ret;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
854
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
855 purple_debug_info("proxy", "Connected immediately.\n");
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
856
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
857 ret = purple_input_get_error(connect_data->fd, &error);
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
858 if ((ret != 0) || (error != 0))
14161
e959d0e476be [gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents: 14159
diff changeset
859 {
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
860 if (ret != 0)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
861 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
862 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error));
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
863 return;
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
864 }
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
865
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
866 /*
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
867 * We want to call the "connected" callback eventually, but we
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
868 * 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
869 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
870 purple_timeout_add(10, clean_connect, connect_data);
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
871 }
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
872 }
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
873
35462
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
874 /*
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
875 * 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
876 * connect functions. It writes data from a buffer to a socket.
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
877 * 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
878 * response and call a specified function.
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
879 */
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
880 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
881 proxy_do_write(gpointer data, gint source, PurpleInputCondition cond)
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
882 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
883 PurpleProxyConnectData *connect_data;
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
884 const guchar *request;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
885 gsize request_len;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
886 int ret;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
887
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
888 connect_data = data;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
889 request = connect_data->write_buffer + connect_data->written_len;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
890 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
891
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
892 ret = write(connect_data->fd, request, request_len);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
893 if (ret <= 0)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
894 {
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
895 if (errno == EAGAIN)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
896 /* No worries */
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
897 return;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
898
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
899 /* 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
900 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno));
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
901 return;
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
902 }
34305
5804117fb298 Fix the rest of libpurple warnings about -Wsign-compare
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34252
diff changeset
903 if ((gsize)ret < request_len) {
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
904 connect_data->written_len += ret;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
905 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
906 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
907
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
908 /* We're done writing data! Wait for a response. */
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
909 g_free(connect_data->write_buffer);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
910 connect_data->write_buffer = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
911 purple_input_remove(connect_data->inpa);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
912 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
913 PURPLE_INPUT_READ, connect_data->read_cb, connect_data);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
914 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
915
35462
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
916 /*
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
917 * 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
918 * response to the CONNECT request.
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
919 */
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
920 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
921 http_canread(gpointer data, gint source, PurpleInputCondition cond)
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
922 {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
923 int len, headers_len, status = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
924 gboolean error;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
925 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
926 char *p;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
927 gsize max_read;
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
928
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
929 if (connect_data->read_buffer == NULL) {
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
930 connect_data->read_buf_len = 8192;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
931 connect_data->read_buffer = g_malloc(connect_data->read_buf_len);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
932 connect_data->read_len = 0;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
933 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
934
17519
500d04f3bf87 Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents: 17446
diff changeset
935 p = (char *)connect_data->read_buffer + connect_data->read_len;
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
936 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
937
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
938 len = read(connect_data->fd, p, max_read);
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
939
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
940 if (len == 0) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
941 purple_proxy_connect_data_disconnect(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
942 _("Server closed the connection"));
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
943 return;
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
944 }
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
945
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
946 if (len < 0) {
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
947 if (errno == EAGAIN)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
948 /* No worries */
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
949 return;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
950
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
951 /* Error! */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
952 purple_proxy_connect_data_disconnect_formatted(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
953 _("Lost connection with server: %s"), g_strerror(errno));
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
954 return;
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
955 }
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
956
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
957 connect_data->read_len += len;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
958 p[len] = '\0';
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
959
17519
500d04f3bf87 Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@pidgin.im>
parents: 17446
diff changeset
960 p = g_strstr_len((const gchar *)connect_data->read_buffer,
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
961 connect_data->read_len, "\r\n\r\n");
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
962 if (p != NULL) {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
963 *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
964 headers_len = (p - (char *)connect_data->read_buffer) + 4;
34305
5804117fb298 Fix the rest of libpurple warnings about -Wsign-compare
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34252
diff changeset
965 } else if((gsize)len == max_read)
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
966 headers_len = len;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
967 else
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
968 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
969
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
970 error = strncmp((const char *)connect_data->read_buffer, "HTTP/", 5) != 0;
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
971 if (!error) {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
972 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
973 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
974 major = strtol(p, &p, 10);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
975 error = (major == 0) || (*p != '.');
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
976 if(!error) {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
977 int minor;
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
978 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
979 minor = strtol(p, &p, 10);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
980 error = (*p != ' ');
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
981 if(!error) {
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
982 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
983 status = strtol(p, &p, 10);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
984 error = (*p != ' ');
33892
ef97228bc5f0 Fix most of warnings for gtk2 and linux
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33885
diff changeset
985 (void)minor; /* we don't need it's value */
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
986 }
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
987 }
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
988 }
9129
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
989
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
990 /* 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
991 p = g_strrstr((const gchar *)connect_data->read_buffer, "Content-Length: ");
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
992 if (p != NULL) {
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
993 gchar *tmp;
35230
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
994 gsize content_len;
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
995 char tmpc;
35230
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
996
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
997 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
998 tmp = strchr(p, '\r');
13405
9abc78d6db91 [gaim-migrate @ 15779]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13387
diff changeset
999 if(tmp)
9abc78d6db91 [gaim-migrate @ 15779]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13387
diff changeset
1000 *tmp = '\0';
35230
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1001 if (sscanf(p, "%" G_GSIZE_FORMAT, &content_len) != 1) {
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1002 /* Couldn't read content length */
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1003 purple_debug_error("proxy", "Couldn't read content length value "
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1004 "from %s\n", p);
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1005 if(tmp)
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1006 *tmp = '\r';
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1007 purple_proxy_connect_data_disconnect_formatted(connect_data,
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1008 _("Unable to parse response from HTTP proxy: %s"),
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1009 connect_data->read_buffer);
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1010 return;
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1011 }
13405
9abc78d6db91 [gaim-migrate @ 15779]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13387
diff changeset
1012 if(tmp)
9abc78d6db91 [gaim-migrate @ 15779]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 13387
diff changeset
1013 *tmp = '\r';
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1014
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1015 /* Compensate for what has already been read */
35230
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1016 content_len -= connect_data->read_len - headers_len;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1017 /* 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
1018 complaining / breaking since we don't read the whole page */
35230
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1019 while (content_len--) {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1020 /* TODO: deal with EAGAIN (and other errors) better */
35230
dd8ee564e065 Improve how our HTTP proxy code reads the content-length header.
Mark Doliner <mark@kingant.net>
parents: 32136
diff changeset
1021 /* TODO: Reading 1 byte at a time is horrible and stupid. */
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1022 if (read(connect_data->fd, &tmpc, 1) < 0 && errno != EAGAIN)
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1023 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1024 }
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
1025 }
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1026
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1027 if (error) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1028 purple_proxy_connect_data_disconnect_formatted(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1029 _("Unable to parse response from HTTP proxy: %s"),
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1030 connect_data->read_buffer);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1031 return;
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
1032 }
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1033 else if (status != 200) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1034 purple_debug_error("proxy",
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1035 "Proxy server replied with:\n%s\n",
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1036 connect_data->read_buffer);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1037
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1038 if (status == 407 /* Proxy Auth */) {
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1039 const char *header;
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1040 gchar *request;
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
1041
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1042 header = g_strrstr((const gchar *)connect_data->read_buffer,
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1043 "Proxy-Authenticate: NTLM");
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1044 if (header != NULL) {
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1045 const char *header_end = header + strlen("Proxy-Authenticate: NTLM");
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1046 const char *domain = purple_proxy_info_get_username(connect_data->gpi);
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1047 char *username = NULL, hostname[256];
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1048 gchar *response;
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1049 int ret;
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
1050
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1051 ret = gethostname(hostname, sizeof(hostname));
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1052 hostname[sizeof(hostname) - 1] = '\0';
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1053 if (ret < 0 || hostname[0] == '\0') {
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1054 purple_debug_warning("proxy", "gethostname() failed -- is your hostname set?");
31961
7216d16cf3bc Copy hostname fallbacks using g_strlcpy instead of strcpy.
Ethan Blanton <elb@pidgin.im>
parents: 31744
diff changeset
1055 g_strlcpy(hostname, "localhost", sizeof(hostname));
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1056 }
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
1057
20251
a606cd1aa177 applied changes from e33c17e58da161b8cffaf13e9d79e9bb4b9ce4ce
Luke Schierer <lschiere@pidgin.im>
parents: 20239
diff changeset
1058 if (domain != NULL)
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1059 username = (char*) strchr(domain, '\\');
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1060 if (username == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1061 purple_proxy_connect_data_disconnect_formatted(connect_data,
14418
95ecfabb1797 [gaim-migrate @ 17062]
Mark Doliner <markdoliner@pidgin.im>
parents: 14324
diff changeset
1062 _("HTTP proxy connection error %d"), status);
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
1063 return;
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
1064 }
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1065 *username = '\0';
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
1066
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1067 /* Is there a message? */
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1068 if (*header_end == ' ') {
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1069 /* Check for Type-2 */
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1070 char *tmp = (char*) header;
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1071 guint8 *nonce;
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
1072
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1073 header_end++;
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1074 username++;
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1075 while(*tmp != '\r' && *tmp != '\0') tmp++;
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1076 *tmp = '\0';
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1077 nonce = purple_ntlm_parse_type2(header_end, NULL);
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1078 response = purple_ntlm_gen_type3(username,
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1079 (gchar*) purple_proxy_info_get_password(connect_data->gpi),
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1080 hostname,
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1081 domain, nonce, NULL);
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1082 username--;
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1083 } else /* Empty message */
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1084 response = purple_ntlm_gen_type1(hostname, domain);
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1085
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
1086 *username = '\\';
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1087
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1088 request = g_strdup_printf(
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1089 "CONNECT %s:%d HTTP/1.1\r\n"
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1090 "Host: %s:%d\r\n"
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1091 "Proxy-Authorization: NTLM %s\r\n"
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1092 "Proxy-Connection: Keep-Alive\r\n\r\n",
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1093 connect_data->host, connect_data->port,
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1094 connect_data->host, connect_data->port,
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1095 response);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1096
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1097 g_free(response);
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1098
30626
bec413ce77c7 Fix some "Dead nested assignment"s and then kill off some useless
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30057
diff changeset
1099 } else if (g_strrstr((const char *)connect_data->read_buffer, "Proxy-Authenticate: Basic") != NULL) {
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1100 gchar *t1, *t2;
24788
302028de1bff Prevent a NULL printf crash.
Daniel Atallah <datallah@pidgin.im>
parents: 24683
diff changeset
1101 const char *username, *password;
302028de1bff Prevent a NULL printf crash.
Daniel Atallah <datallah@pidgin.im>
parents: 24683
diff changeset
1102
302028de1bff Prevent a NULL printf crash.
Daniel Atallah <datallah@pidgin.im>
parents: 24683
diff changeset
1103 username = purple_proxy_info_get_username(connect_data->gpi);
302028de1bff Prevent a NULL printf crash.
Daniel Atallah <datallah@pidgin.im>
parents: 24683
diff changeset
1104 password = purple_proxy_info_get_password(connect_data->gpi);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1105
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1106 t1 = g_strdup_printf("%s:%s",
24788
302028de1bff Prevent a NULL printf crash.
Daniel Atallah <datallah@pidgin.im>
parents: 24683
diff changeset
1107 username ? username : "",
302028de1bff Prevent a NULL printf crash.
Daniel Atallah <datallah@pidgin.im>
parents: 24683
diff changeset
1108 password ? password : "");
302028de1bff Prevent a NULL printf crash.
Daniel Atallah <datallah@pidgin.im>
parents: 24683
diff changeset
1109 t2 = purple_base64_encode((guchar *)t1, strlen(t1));
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1110 g_free(t1);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1111
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1112 request = g_strdup_printf(
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1113 "CONNECT %s:%d HTTP/1.1\r\n"
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1114 "Host: %s:%d\r\n"
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1115 "Proxy-Authorization: Basic %s\r\n",
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1116 connect_data->host, connect_data->port,
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1117 connect_data->host, connect_data->port,
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1118 t2);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1119
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1120 g_free(t2);
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1121
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
1122 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1123 purple_proxy_connect_data_disconnect_formatted(connect_data,
14418
95ecfabb1797 [gaim-migrate @ 17062]
Mark Doliner <markdoliner@pidgin.im>
parents: 14324
diff changeset
1124 _("HTTP proxy connection error %d"), status);
13209
439ad2dad2e1 [gaim-migrate @ 15572]
Daniel Atallah <datallah@pidgin.im>
parents: 13201
diff changeset
1125 return;
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
1126 }
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1127
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1128 purple_input_remove(connect_data->inpa);
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1129 g_free(connect_data->read_buffer);
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1130 connect_data->read_buffer = NULL;
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1131
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1132 connect_data->write_buffer = (guchar *)request;
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1133 connect_data->write_buf_len = strlen(request);
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1134 connect_data->written_len = 0;
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1135
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1136 connect_data->read_cb = http_canread;
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1137
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1138 connect_data->inpa = purple_input_add(connect_data->fd,
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1139 PURPLE_INPUT_WRITE, proxy_do_write, connect_data);
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1140
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1141 proxy_do_write(connect_data, connect_data->fd, cond);
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1142
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1143 return;
12391
2866c00556d9 [gaim-migrate @ 14698]
Ethan Blanton <elb@pidgin.im>
parents: 12273
diff changeset
1144 }
24188
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1145
c061c6d246c4 Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <datallah@pidgin.im>
parents: 24171
diff changeset
1146 if (status == 403) {
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1147 /* Forbidden */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1148 purple_proxy_connect_data_disconnect_formatted(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1149 _("Access denied: HTTP proxy server forbids port %d tunneling"),
14418
95ecfabb1797 [gaim-migrate @ 17062]
Mark Doliner <markdoliner@pidgin.im>
parents: 14324
diff changeset
1150 connect_data->port);
8917
1301b17bc141 [gaim-migrate @ 9687]
Mark Doliner <markdoliner@pidgin.im>
parents: 8889
diff changeset
1151 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1152 purple_proxy_connect_data_disconnect_formatted(connect_data,
14418
95ecfabb1797 [gaim-migrate @ 17062]
Mark Doliner <markdoliner@pidgin.im>
parents: 14324
diff changeset
1153 _("HTTP proxy connection error %d"), status);
7834
6a092463d774 [gaim-migrate @ 8487]
Mike Hearn <mike@theoretic.com>
parents: 7652
diff changeset
1154 }
6a092463d774 [gaim-migrate @ 8487]
Mike Hearn <mike@theoretic.com>
parents: 7652
diff changeset
1155 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1156 purple_input_remove(connect_data->inpa);
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1157 connect_data->inpa = 0;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1158 g_free(connect_data->read_buffer);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1159 connect_data->read_buffer = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1160 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
1161 purple_proxy_connect_data_connected(connect_data);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1162 return;
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1163 }
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1164 }
9129
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
1165
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1166 static void
23234
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1167 http_start_connect_tunneling(PurpleProxyConnectData *connect_data) {
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1168 GString *request;
29075
ce87999db7c5 disapproval of revision '03dfea50314e7fb72bea23f343e6525941b33d55'
Mark Doliner <markdoliner@pidgin.im>
parents: 29068
diff changeset
1169 int ret;
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
1170
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1171 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
1172 connect_data->host, connect_data->port);
1843
aeeac3ee7ac5 [gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1840
diff changeset
1173
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1174 request = g_string_sized_new(4096);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1175 g_string_append_printf(request,
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1176 "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
1177 connect_data->host, connect_data->port,
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1178 connect_data->host, connect_data->port);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1179
29005
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1180 if (purple_proxy_info_get_username(connect_data->gpi) != NULL)
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1181 {
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1182 char *t1, *t2, *ntlm_type1;
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1183 char hostname[256];
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1184
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1185 ret = gethostname(hostname, sizeof(hostname));
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1186 hostname[sizeof(hostname) - 1] = '\0';
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1187 if (ret < 0 || hostname[0] == '\0') {
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1188 purple_debug_warning("proxy", "gethostname() failed -- is your hostname set?");
31961
7216d16cf3bc Copy hostname fallbacks using g_strlcpy instead of strcpy.
Ethan Blanton <elb@pidgin.im>
parents: 31744
diff changeset
1189 g_strlcpy(hostname, "localhost", sizeof(hostname));
29005
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1190 }
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1191
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1192 t1 = g_strdup_printf("%s:%s",
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1193 purple_proxy_info_get_username(connect_data->gpi),
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1194 purple_proxy_info_get_password(connect_data->gpi) ?
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1195 purple_proxy_info_get_password(connect_data->gpi) : "");
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1196 t2 = purple_base64_encode((const guchar *)t1, strlen(t1));
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1197 g_free(t1);
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1198
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1199 ntlm_type1 = purple_ntlm_gen_type1(hostname, "");
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1200
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1201 g_string_append_printf(request,
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1202 "Proxy-Authorization: Basic %s\r\n"
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1203 "Proxy-Authorization: NTLM %s\r\n"
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1204 "Proxy-Connection: Keep-Alive\r\n",
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1205 t2, ntlm_type1);
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1206 g_free(ntlm_type1);
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1207 g_free(t2);
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1208 }
a41059276313 disapproval of revision '91b156de0ca0323eacfa2f7ff90987613f034372'
Paul Aurich <darkrain42@pidgin.im>
parents: 29004
diff changeset
1209
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1210 g_string_append(request, "\r\n");
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1211
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1212 connect_data->write_buf_len = request->len;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1213 connect_data->write_buffer = (guchar *)g_string_free(request, FALSE);
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1214 connect_data->written_len = 0;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1215 connect_data->read_cb = http_canread;
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1216
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1217 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
1218 PURPLE_INPUT_WRITE, proxy_do_write, connect_data);
23234
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1219 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE);
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1220 }
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1221
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1222 static void
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1223 http_canwrite(gpointer data, gint source, PurpleInputCondition cond) {
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1224 PurpleProxyConnectData *connect_data = data;
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1225 int ret, error = ETIMEDOUT;
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1226
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1227 purple_debug_info("proxy", "Connected to %s:%d.\n",
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1228 connect_data->host, connect_data->port);
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1229
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1230 if (connect_data->inpa > 0) {
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1231 purple_input_remove(connect_data->inpa);
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1232 connect_data->inpa = 0;
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1233 }
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1234
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1235 ret = purple_input_get_error(connect_data->fd, &error);
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1236 if (ret != 0 || error != 0) {
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1237 if (ret != 0)
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1238 error = errno;
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1239 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error));
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1240 return;
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1241 }
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1242
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1243 if (connect_data->port == 80) {
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1244 /*
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1245 * If we're trying to connect to something running on
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1246 * port 80 then we assume the traffic using this
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1247 * connection is going to be HTTP traffic. If it's
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1248 * not then this will fail (uglily). But it's good
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1249 * to avoid using the CONNECT method because it's
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1250 * not always allowed.
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1251 */
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1252 purple_debug_info("proxy", "HTTP proxy connection established\n");
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1253 purple_proxy_connect_data_connected(connect_data);
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1254 } else {
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1255 http_start_connect_tunneling(connect_data);
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1256 }
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1257
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1258 }
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1259
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1260 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1261 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
1262 {
20239
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
1263 int flags;
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
1264
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1265 purple_debug_info("proxy",
5211
94d9756c381f [gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents: 4993
diff changeset
1266 "Connecting to %s:%d via %s:%d using HTTP\n",
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1267 connect_data->host, connect_data->port,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1268 (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
1269 purple_proxy_info_get_port(connect_data->gpi));
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
1270
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1271 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1272 if (connect_data->fd < 0)
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1273 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1274 purple_proxy_connect_data_disconnect_formatted(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1275 _("Unable to create socket: %s"), g_strerror(errno));
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1276 return;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1277 }
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
1278
20239
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
1279 flags = fcntl(connect_data->fd, F_GETFL);
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
1280 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK);
10172
8400788b226c [gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10170
diff changeset
1281 #ifndef _WIN32
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1282 fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC);
10172
8400788b226c [gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10170
diff changeset
1283 #endif
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
1284
23234
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1285 if (connect(connect_data->fd, addr, addrlen) != 0) {
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1286 if (errno == EINPROGRESS || errno == EINTR) {
33877
d33b4fa5ea06 win32: hack for webkit's feature of replacing backslash with yen sign; silencing some warnings in gtkconv.c; consistent messages in proxy.c
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33440
diff changeset
1287 purple_debug_info("proxy", "HTTP connection in progress\n");
9655
7cfd0424ec23 [gaim-migrate @ 10503]
Luke Schierer <lschiere@pidgin.im>
parents: 9653
diff changeset
1288
23234
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1289 connect_data->inpa = purple_input_add(connect_data->fd,
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1290 PURPLE_INPUT_WRITE, http_canwrite, connect_data);
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1291 } else
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 21091
diff changeset
1292 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno));
23234
01e07d16cc75 Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <datallah@pidgin.im>
parents: 23232
diff changeset
1293 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1294 purple_debug_info("proxy", "Connected immediately.\n");
5211
94d9756c381f [gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents: 4993
diff changeset
1295
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1296 http_canwrite(connect_data, connect_data->fd, PURPLE_INPUT_WRITE);
1695
30db76d87de8 [gaim-migrate @ 1705]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1451
diff changeset
1297 }
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1298 }
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1299
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1300 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1301 s4_canread(gpointer data, gint source, PurpleInputCondition cond)
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1302 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1303 PurpleProxyConnectData *connect_data = data;
13387
c6be7551b0a6 [gaim-migrate @ 15759]
Mark Doliner <markdoliner@pidgin.im>
parents: 13313
diff changeset
1304 guchar *buf;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1305 int len, max_read;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1306
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1307 /* 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
1308 * be correct, we deal with the unlikely scenario */
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1309
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1310 if (connect_data->read_buffer == NULL) {
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1311 connect_data->read_buf_len = 12;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1312 connect_data->read_buffer = g_malloc(connect_data->read_buf_len);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1313 connect_data->read_len = 0;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1314 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1315
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1316 buf = connect_data->read_buffer + connect_data->read_len;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1317 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
1318
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1319 len = read(connect_data->fd, buf, max_read);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1320
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1321 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
1322 return;
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1323 else if (len + connect_data->read_len >= 4) {
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1324 if (connect_data->read_buffer[1] == 90) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1325 purple_proxy_connect_data_connected(connect_data);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1326 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1327 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1328 }
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1329
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 21091
diff changeset
1330 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno));
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1331 }
1705
cc63a8819c1c [gaim-migrate @ 1715]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1695
diff changeset
1332
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1333 static void
25622
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1334 s4_host_resolved(GSList *hosts, gpointer data, const char *error_message)
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1335 {
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1336 PurpleProxyConnectData *connect_data = data;
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1337 unsigned char packet[9];
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1338 struct sockaddr *addr;
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1339
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1340 connect_data->query_data = NULL;
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1341
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1342 if (error_message != NULL) {
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1343 purple_proxy_connect_data_disconnect(connect_data, error_message);
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1344 return;
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1345 }
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1346
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1347 if (hosts == NULL) {
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1348 purple_proxy_connect_data_disconnect_formatted(connect_data,
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1349 _("Error resolving %s"), connect_data->host);
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1350 return;
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1351 }
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1352
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1353 /* Discard the length... */
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1354 hosts = g_slist_delete_link(hosts, hosts);
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1355 addr = hosts->data;
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1356 hosts = g_slist_delete_link(hosts, hosts);
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1357
25624
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1358 packet[0] = 0x04;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1359 packet[1] = 0x01;
25622
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1360 packet[2] = connect_data->port >> 8;
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1361 packet[3] = connect_data->port & 0xff;
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1362 memcpy(packet + 4, &((struct sockaddr_in *)addr)->sin_addr.s_addr, 4);
25624
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1363 packet[8] = 0x00;
25622
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1364
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1365 g_free(addr);
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1366
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1367 /* We could try the other hosts, but hopefully that shouldn't be necessary */
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1368 while (hosts != NULL) {
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1369 /* Discard the length... */
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1370 hosts = g_slist_delete_link(hosts, hosts);
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1371 /* Free the address... */
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1372 g_free(hosts->data);
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1373 hosts = g_slist_delete_link(hosts, hosts);
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1374 }
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1375
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1376 connect_data->write_buffer = g_memdup(packet, sizeof(packet));
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1377 connect_data->write_buf_len = sizeof(packet);
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1378 connect_data->written_len = 0;
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1379 connect_data->read_cb = s4_canread;
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1380
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1381 connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data);
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1382
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1383 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE);
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1384 }
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1385
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1386 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1387 s4_canwrite(gpointer data, gint source, PurpleInputCondition cond)
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1388 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1389 PurpleProxyConnectData *connect_data = data;
2048
4ac8b9622c9e [gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1881
diff changeset
1390 int error = ETIMEDOUT;
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1391 int ret;
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
1392
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1393 purple_debug_info("socks4 proxy", "Connected.\n");
5211
94d9756c381f [gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents: 4993
diff changeset
1394
25622
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1395 if (connect_data->inpa > 0) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1396 purple_input_remove(connect_data->inpa);
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1397 connect_data->inpa = 0;
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
1398 }
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1399
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1400 ret = purple_input_get_error(connect_data->fd, &error);
25622
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1401 if ((ret != 0) || (error != 0)) {
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1402 if (ret != 0)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1403 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
1404 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error));
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1405 return;
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1406 }
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
1407
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1408 /*
25624
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1409 * The socks4 spec doesn't include support for doing host name lookups by
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1410 * the proxy. Many socks4 servers do this via the "socks4a" extension to
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1411 * the protocol. There doesn't appear to be a way to detect if a server
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1412 * supports this, so we require that the user set a global option.
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1413 */
25624
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1414 if (purple_prefs_get_bool("/purple/proxy/socks4_remotedns")) {
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1415 unsigned char packet[9];
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1416 int len;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1417
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1418 purple_debug_info("socks4 proxy", "Attempting to use remote DNS.\n");
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1419
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1420 packet[0] = 0x04;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1421 packet[1] = 0x01;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1422 packet[2] = connect_data->port >> 8;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1423 packet[3] = connect_data->port & 0xff;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1424 packet[4] = 0x00;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1425 packet[5] = 0x00;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1426 packet[6] = 0x00;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1427 packet[7] = 0x01;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1428 packet[8] = 0x00;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1429
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1430 len = sizeof(packet) + strlen(connect_data->host) + 1;
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
1431
25624
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1432 connect_data->write_buffer = g_malloc0(len);
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1433 memcpy(connect_data->write_buffer, packet, sizeof(packet));
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1434 memcpy(connect_data->write_buffer + sizeof(packet), connect_data->host, strlen(connect_data->host));
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1435 connect_data->write_buf_len = len;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1436 connect_data->written_len = 0;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1437 connect_data->read_cb = s4_canread;
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1438
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1439 connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data);
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1440
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1441 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE);
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1442 } else {
32297
100ef65e9664 Replace purple_dnsquery_a_account with purple_dnsquery_a.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31961
diff changeset
1443 connect_data->query_data = purple_dnsquery_a(
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
1444 connect_data->account, connect_data->host,
25624
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1445 connect_data->port, s4_host_resolved, connect_data);
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1446
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1447 if (connect_data->query_data == NULL) {
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1448 purple_debug_error("proxy", "dns query failed unexpectedly.\n");
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1449 purple_proxy_connect_data_destroy(connect_data);
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
1450 }
25622
6db20d0b5950 Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <datallah@pidgin.im>
parents: 24866
diff changeset
1451 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1452 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1453
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1454 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1455 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
1456 {
20239
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
1457 int flags;
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
1458
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1459 purple_debug_info("proxy",
5211
94d9756c381f [gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents: 4993
diff changeset
1460 "Connecting to %s:%d via %s:%d using SOCKS4\n",
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1461 connect_data->host, connect_data->port,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1462 purple_proxy_info_get_host(connect_data->gpi),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1463 purple_proxy_info_get_port(connect_data->gpi));
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1464
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1465 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1466 if (connect_data->fd < 0)
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1467 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1468 purple_proxy_connect_data_disconnect_formatted(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1469 _("Unable to create socket: %s"), g_strerror(errno));
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1470 return;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1471 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1472
20239
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
1473 flags = fcntl(connect_data->fd, F_GETFL);
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
1474 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK);
10172
8400788b226c [gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10170
diff changeset
1475 #ifndef _WIN32
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1476 fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC);
10172
8400788b226c [gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10170
diff changeset
1477 #endif
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1478
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1479 if (connect(connect_data->fd, addr, addrlen) != 0)
14161
e959d0e476be [gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents: 14159
diff changeset
1480 {
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1481 if ((errno == EINPROGRESS) || (errno == EINTR))
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1482 {
33877
d33b4fa5ea06 win32: hack for webkit's feature of replacing backslash with yen sign; silencing some warnings in gtkconv.c; consistent messages in proxy.c
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33440
diff changeset
1483 purple_debug_info("proxy", "SOCKS4 connection in progress\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1484 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
1485 PURPLE_INPUT_WRITE, s4_canwrite, connect_data);
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1486 }
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1487 else
14161
e959d0e476be [gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents: 14159
diff changeset
1488 {
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 21091
diff changeset
1489 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno));
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1490 }
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1491 }
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1492 else
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1493 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1494 purple_debug_info("proxy", "Connected immediately.\n");
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1495
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1496 s4_canwrite(connect_data, connect_data->fd, PURPLE_INPUT_WRITE);
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1497 }
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1498 }
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1499
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
1500 static gboolean
34305
5804117fb298 Fix the rest of libpurple warnings about -Wsign-compare
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34252
diff changeset
1501 s5_ensure_buffer_length(PurpleProxyConnectData *connect_data, guint len)
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
1502 {
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
1503 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
1504 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
1505 /* it's not just that we haven't read enough, it's that we haven't tried to read enough yet */
22622
1ecb840b5101 Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <markdoliner@pidgin.im>
parents: 22560
diff changeset
1506 purple_debug_info("s5", "reallocing from %" G_GSIZE_FORMAT
1ecb840b5101 Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <markdoliner@pidgin.im>
parents: 22560
diff changeset
1507 " to %d\n", connect_data->read_buf_len, len);
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
1508 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
1509 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
1510 }
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
1511 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
1512 }
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
1513
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
1514 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
1515 }
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
1516
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1517 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1518 s5_canread_again(gpointer data, gint source, PurpleInputCondition cond)
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1519 {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1520 guchar *dest, *buf;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1521 PurpleProxyConnectData *connect_data = data;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1522 int len;
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1523
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1524 if (connect_data->read_buffer == NULL) {
23232
4042947ec6c4 Fix SOCK5 error handling to abort when we get a bogus ATYP response. Make the
Daniel Atallah <datallah@pidgin.im>
parents: 22674
diff changeset
1525 connect_data->read_buf_len = 5;
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1526 connect_data->read_buffer = g_malloc(connect_data->read_buf_len);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1527 connect_data->read_len = 0;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1528 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1529
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1530 dest = connect_data->read_buffer + connect_data->read_len;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1531 buf = connect_data->read_buffer;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1532
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1533 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
1534
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1535 if (len == 0)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1536 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1537 purple_proxy_connect_data_disconnect(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1538 _("Server closed the connection"));
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1539 return;
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
1540 }
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1541
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1542 if (len < 0)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1543 {
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1544 if (errno == EAGAIN)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1545 /* No worries */
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1546 return;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1547
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1548 /* Error! */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1549 purple_proxy_connect_data_disconnect_formatted(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1550 _("Lost connection with server: %s"), g_strerror(errno));
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1551 return;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1552 }
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1553
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1554 connect_data->read_len += len;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1555
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1556 if(connect_data->read_len < 4)
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1557 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1558
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1559 if ((buf[0] != 0x05) || (buf[1] != 0x00)) {
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1560 if ((buf[0] == 0x05) && (buf[1] < 0x09)) {
24683
3481a3320313 Backport the 'purple_debug_*(msg)' -> 'purple_debug_*("%s", msg);' fixes.
Richard Laager <rlaager@pidgin.im>
parents: 24491
diff changeset
1561 purple_debug_error("socks5 proxy", "%s", socks5errors[buf[1]]);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1562 purple_proxy_connect_data_disconnect(connect_data,
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1563 socks5errors[buf[1]]);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1564 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1565 purple_debug_error("socks5 proxy", "Bad data.\n");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1566 purple_proxy_connect_data_disconnect(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1567 _("Received invalid data on connection with server"));
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1568 }
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1569 return;
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1570 }
670
1690e6b432ae [gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 664
diff changeset
1571
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1572 /* Skip past BND.ADDR */
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1573 switch(buf[3]) {
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1574 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
1575 if(!s5_ensure_buffer_length(connect_data, 4 + 4))
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1576 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1577 buf += 4 + 4;
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1578 break;
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1579 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
1580 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
1581 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
1582 if(!s5_ensure_buffer_length(connect_data, 4 + 1))
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1583 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
1584 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
1585 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
1586 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
1587 buf += buf[0] + 1;
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1588 break;
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1589 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
1590 if(!s5_ensure_buffer_length(connect_data, 4 + 16))
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1591 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1592 buf += 4 + 16;
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1593 break;
23232
4042947ec6c4 Fix SOCK5 error handling to abort when we get a bogus ATYP response. Make the
Daniel Atallah <datallah@pidgin.im>
parents: 22674
diff changeset
1594 default:
4042947ec6c4 Fix SOCK5 error handling to abort when we get a bogus ATYP response. Make the
Daniel Atallah <datallah@pidgin.im>
parents: 22674
diff changeset
1595 purple_debug_error("socks5 proxy", "Invalid ATYP received (0x%X)\n", buf[3]);
4042947ec6c4 Fix SOCK5 error handling to abort when we get a bogus ATYP response. Make the
Daniel Atallah <datallah@pidgin.im>
parents: 22674
diff changeset
1596 purple_proxy_connect_data_disconnect(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1597 _("Received invalid data on connection with server"));
23232
4042947ec6c4 Fix SOCK5 error handling to abort when we get a bogus ATYP response. Make the
Daniel Atallah <datallah@pidgin.im>
parents: 22674
diff changeset
1598 return;
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1599 }
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
1600
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
1601 /* 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
1602 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
1603 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1604
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1605 purple_proxy_connect_data_connected(connect_data);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1606 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1607
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1608 static void
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
1609 s5_sendconnect(gpointer data, int source)
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
1610 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1611 PurpleProxyConnectData *connect_data = data;
25623
99cd350834e7 A few type fixes.
Daniel Atallah <datallah@pidgin.im>
parents: 25622
diff changeset
1612 size_t hlen = strlen(connect_data->host);
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1613 connect_data->write_buf_len = 5 + hlen + 2;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1614 connect_data->write_buffer = g_malloc(connect_data->write_buf_len);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1615 connect_data->written_len = 0;
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
1616
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1617 connect_data->write_buffer[0] = 0x05;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1618 connect_data->write_buffer[1] = 0x01; /* CONNECT */
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1619 connect_data->write_buffer[2] = 0x00; /* reserved */
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1620 connect_data->write_buffer[3] = 0x03; /* address type -- host name */
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1621 connect_data->write_buffer[4] = hlen;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1622 memcpy(connect_data->write_buffer + 5, connect_data->host, hlen);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1623 connect_data->write_buffer[5 + hlen] = connect_data->port >> 8;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1624 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
1625
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1626 connect_data->read_cb = s5_canread_again;
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1627
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1628 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
1629 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
1630 }
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
1631
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1632 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1633 s5_readauth(gpointer data, gint source, PurpleInputCondition cond)
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1634 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1635 PurpleProxyConnectData *connect_data = data;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1636 int len;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1637
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1638 if (connect_data->read_buffer == NULL) {
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1639 connect_data->read_buf_len = 2;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1640 connect_data->read_buffer = g_malloc(connect_data->read_buf_len);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1641 connect_data->read_len = 0;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1642 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1643
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1644 purple_debug_info("socks5 proxy", "Got auth response.\n");
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1645
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1646 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
1647 connect_data->read_buf_len - connect_data->read_len);
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1648
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1649 if (len == 0)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1650 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1651 purple_proxy_connect_data_disconnect(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1652 _("Server closed the connection"));
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1653 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1654 }
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1655
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1656 if (len < 0)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1657 {
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1658 if (errno == EAGAIN)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1659 /* No worries */
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1660 return;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1661
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1662 /* Error! */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1663 purple_proxy_connect_data_disconnect_formatted(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1664 _("Lost connection with server: %s"), g_strerror(errno));
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1665 return;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1666 }
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1667
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1668 connect_data->read_len += len;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1669 if (connect_data->read_len < 2)
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1670 return;
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1671
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1672 purple_input_remove(connect_data->inpa);
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1673 connect_data->inpa = 0;
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1674
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1675 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
1676 purple_proxy_connect_data_disconnect(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1677 _("Received invalid data on connection with server"));
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1678 return;
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1679 }
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1680
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1681 g_free(connect_data->read_buffer);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1682 connect_data->read_buffer = NULL;
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1683
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1684 s5_sendconnect(connect_data, connect_data->fd);
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1685 }
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1686
14159
0fcdaa463a32 [gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents: 14158
diff changeset
1687 static void
0fcdaa463a32 [gaim-migrate @ 16726]
Mark Doliner <markdoliner@pidgin.im>
parents: 14158
diff changeset
1688 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
1689 {
34567
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1690 PurpleHash *hash;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1691 int i;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1692 unsigned char Kxoripad[65];
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1693 unsigned char Kxoropad[65];
25623
99cd350834e7 A few type fixes.
Daniel Atallah <datallah@pidgin.im>
parents: 25622
diff changeset
1694 size_t pwlen;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1695
34567
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1696 hash = purple_md5_hash_new();
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents: 10626
diff changeset
1697
12765
0c1580860d16 [gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 12758
diff changeset
1698 memset(Kxoripad,0,sizeof(Kxoripad));
0c1580860d16 [gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 12758
diff changeset
1699 memset(Kxoropad,0,sizeof(Kxoropad));
0c1580860d16 [gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 12758
diff changeset
1700
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1701 pwlen=strlen(passwd);
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1702 if (pwlen>64) {
34567
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1703 purple_hash_append(hash, (const guchar *)passwd, strlen(passwd));
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1704 purple_hash_digest(hash, Kxoripad, sizeof(Kxoripad));
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1705 pwlen=16;
12765
0c1580860d16 [gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 12758
diff changeset
1706 } else {
0c1580860d16 [gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 12758
diff changeset
1707 memcpy(Kxoripad, passwd, pwlen);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1708 }
12765
0c1580860d16 [gaim-migrate @ 15112]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 12758
diff changeset
1709 memcpy(Kxoropad,Kxoripad,pwlen);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1710
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1711 for (i=0;i<64;i++) {
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1712 Kxoripad[i]^=0x36;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1713 Kxoropad[i]^=0x5c;
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1714 }
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents: 10626
diff changeset
1715
34567
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1716 purple_hash_reset(hash);
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1717 purple_hash_append(hash, Kxoripad, 64);
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1718 purple_hash_append(hash, challenge, challen);
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1719 purple_hash_digest(hash, Kxoripad, sizeof(Kxoripad));
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1720
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1721 purple_hash_reset(hash);
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1722 purple_hash_append(hash, Kxoropad, 64);
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1723 purple_hash_append(hash, Kxoripad, 16);
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1724 purple_hash_digest(hash, response, 16);
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1725
ea5103f66b0e Refactor the codebase to use PurpleHash
Ankit Vani <a@nevitus.org>
parents: 34558
diff changeset
1726 g_object_unref(hash);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1727 }
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1728
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1729 static void
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1730 s5_readchap(gpointer data, gint source, PurpleInputCondition cond);
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1731
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1732 /*
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1733 * Return how many bytes we processed
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1734 * -1 means we've shouldn't keep reading from the buffer
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1735 */
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1736 static gssize
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1737 s5_parse_chap_msg(PurpleProxyConnectData *connect_data)
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1738 {
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1739 guchar *buf, *cmdbuf = connect_data->read_buffer;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1740 int len, navas, currentav;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1741
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1742 purple_debug_misc("socks5 proxy", "Reading CHAP message: %x\n", *cmdbuf);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1743
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1744 if (*cmdbuf != 0x01) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1745 purple_proxy_connect_data_disconnect(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1746 _("Received invalid data on connection with server"));
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1747 return -1;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1748 }
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1749 cmdbuf++;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1750
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1751 navas = *cmdbuf;
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1752
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1753 purple_debug_misc("socks5 proxy", "Expecting %d attribute(s).\n", navas);
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1754
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1755 cmdbuf++;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1756
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1757 for (currentav = 0; currentav < navas; currentav++) {
22674
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1758
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1759 len = connect_data->read_len - (cmdbuf - connect_data->read_buffer);
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1760 /* We don't have enough data to even know how long the next attribute is,
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1761 * or we don't have the full length of the next attribute. */
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1762 if (len < 2 || len < (cmdbuf[1] + 2)) {
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1763 /* Clear out the attributes that have been read - decrease the attribute count */
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1764 connect_data->read_buffer[1] = navas - currentav;
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1765 /* Move the unprocessed data into the first attribute position */
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1766 memmove((connect_data->read_buffer + 2), cmdbuf, len);
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1767 /* Decrease the read count accordingly */
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1768 connect_data->read_len = len + 2;
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1769
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1770 purple_debug_info("socks5 proxy", "Need more data to retrieve attribute %d.\n", currentav);
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1771
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1772 return -1;
22674
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1773 }
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1774
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1775 buf = cmdbuf + 2;
22674
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1776
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1777 if (cmdbuf[1] == 0) {
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1778 purple_debug_error("socks5 proxy", "Attribute %x Value length of 0; ignoring.\n", cmdbuf[0]);
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1779 cmdbuf = buf;
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1780 continue;
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1781 }
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1782
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1783 switch (cmdbuf[0]) {
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1784 case 0x00:
22674
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1785 purple_debug_info("socks5 proxy", "Received STATUS of %x\n", buf[0]);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1786 /* Did auth work? */
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1787 if (buf[0] == 0x00) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1788 purple_input_remove(connect_data->inpa);
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1789 connect_data->inpa = 0;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1790 g_free(connect_data->read_buffer);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1791 connect_data->read_buffer = NULL;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1792 /* Success */
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1793 s5_sendconnect(connect_data, connect_data->fd);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1794 } else {
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1795 /* Failure */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1796 purple_debug_warning("proxy",
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1797 "socks5 CHAP authentication "
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1798 "failed. Disconnecting...");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1799 purple_proxy_connect_data_disconnect(connect_data,
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1800 _("Authentication failed"));
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1801 }
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1802 return -1;
24298
e4dc493363d7 Add support for printing out the TEXT-MESSAGE in SOCKS5 CHAP auth.
Daniel Atallah <datallah@pidgin.im>
parents: 24297
diff changeset
1803 case 0x01:
e4dc493363d7 Add support for printing out the TEXT-MESSAGE in SOCKS5 CHAP auth.
Daniel Atallah <datallah@pidgin.im>
parents: 24297
diff changeset
1804 /* We've already validated that cmdbuf[1] is sane. */
e4dc493363d7 Add support for printing out the TEXT-MESSAGE in SOCKS5 CHAP auth.
Daniel Atallah <datallah@pidgin.im>
parents: 24297
diff changeset
1805 purple_debug_info("socks5 proxy", "Received TEXT-MESSAGE of '%.*s'\n", (int) cmdbuf[1], buf);
e4dc493363d7 Add support for printing out the TEXT-MESSAGE in SOCKS5 CHAP auth.
Daniel Atallah <datallah@pidgin.im>
parents: 24297
diff changeset
1806 break;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1807 case 0x03:
22674
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1808 purple_debug_info("socks5 proxy", "Received CHALLENGE\n");
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1809 /* Server wants our credentials */
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1810
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1811 connect_data->write_buf_len = 16 + 4;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1812 connect_data->write_buffer = g_malloc(connect_data->write_buf_len);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1813 connect_data->written_len = 0;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1814
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1815 hmacmd5_chap(buf, cmdbuf[1],
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1816 purple_proxy_info_get_password(connect_data->gpi),
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1817 connect_data->write_buffer + 4);
24298
e4dc493363d7 Add support for printing out the TEXT-MESSAGE in SOCKS5 CHAP auth.
Daniel Atallah <datallah@pidgin.im>
parents: 24297
diff changeset
1818 /* TODO: What about USER-IDENTITY? */
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1819 connect_data->write_buffer[0] = 0x01;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1820 connect_data->write_buffer[1] = 0x01;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1821 connect_data->write_buffer[2] = 0x04;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1822 connect_data->write_buffer[3] = 0x10;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1823
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1824 purple_input_remove(connect_data->inpa);
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1825 g_free(connect_data->read_buffer);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1826 connect_data->read_buffer = NULL;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1827
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1828 connect_data->read_cb = s5_readchap;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1829
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1830 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
1831 PURPLE_INPUT_WRITE, proxy_do_write, connect_data);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1832
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1833 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE);
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1834 return -1;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1835 case 0x11:
22674
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1836 purple_debug_info("socks5 proxy", "Received ALGORIGTHMS of %x\n", buf[0]);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1837 /* Server wants to select an algorithm */
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1838 if (buf[0] != 0x85) {
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1839 /* Only currently support HMAC-MD5 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1840 purple_debug_warning("proxy",
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1841 "Server tried to select an "
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1842 "algorithm that we did not advertise "
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1843 "as supporting. This is a violation "
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1844 "of the socks5 CHAP specification. "
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1845 "Disconnecting...");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1846 purple_proxy_connect_data_disconnect(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1847 _("Received invalid data on connection with server"));
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1848 return -1;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1849 }
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1850 break;
22674
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1851 default:
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1852 purple_debug_info("socks5 proxy", "Received unused command %x, length=%d\n", cmdbuf[0], cmdbuf[1]);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1853 }
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1854 cmdbuf = buf + cmdbuf[1];
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1855 }
22674
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1856
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1857 return (cmdbuf - connect_data->read_buffer);
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1858 }
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1859
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1860 static void
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1861 s5_readchap(gpointer data, gint source, PurpleInputCondition cond)
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1862 {
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1863 gssize msg_ret;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1864 PurpleProxyConnectData *connect_data = data;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1865 int len;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1866
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1867 purple_debug(PURPLE_DEBUG_INFO, "socks5 proxy", "Got CHAP response.\n");
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1868
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1869 if (connect_data->read_buffer == NULL) {
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1870 /* A big enough butfer to read the message header (2 bytes) and at least one complete attribute and value (1 + 1 + 255). */
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1871 connect_data->read_buf_len = 259;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1872 connect_data->read_buffer = g_malloc(connect_data->read_buf_len);
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1873 connect_data->read_len = 0;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1874 }
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1875
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1876 if (connect_data->read_buf_len - connect_data->read_len == 0) {
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1877 /*If the stuff below is right, this shouldn't be possible. */
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1878 purple_debug_error("socks5 proxy", "This is about to suck because the read buffer is full (shouldn't happen).\n");
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1879 }
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1880
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1881 len = read(connect_data->fd, connect_data->read_buffer + connect_data->read_len,
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1882 connect_data->read_buf_len - connect_data->read_len);
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1883
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1884 if (len == 0) {
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1885 purple_proxy_connect_data_disconnect(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1886 _("Server closed the connection"));
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1887 return;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1888 }
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1889
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1890 if (len < 0) {
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1891 if (errno == EAGAIN)
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1892 /* No worries */
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1893 return;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1894
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1895 /* Error! */
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1896 purple_proxy_connect_data_disconnect_formatted(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1897 _("Lost connection with server: %s"), g_strerror(errno));
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1898 return;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1899 }
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1900
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1901 connect_data->read_len += len;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1902
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1903 /* We may have read more than one message into the buffer, we need to make sure to process them all */
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1904 while (1) {
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1905
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1906 /* We need more to be able to read this message */
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1907 if (connect_data->read_len < 2)
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1908 return;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1909
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1910 msg_ret = s5_parse_chap_msg(connect_data);
25623
99cd350834e7 A few type fixes.
Daniel Atallah <datallah@pidgin.im>
parents: 25622
diff changeset
1911
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1912 if (msg_ret < 0)
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1913 return;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1914
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1915 /* See if we have another message already in the buffer */
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1916 if ((len = connect_data->read_len - msg_ret) > 0) {
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1917
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1918 /* Move on to the next message */
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1919 memmove(connect_data->read_buffer, connect_data->read_buffer + msg_ret, len);
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1920 /* Decrease the read count accordingly */
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1921 connect_data->read_len = len;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1922
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1923 /* Try to read the message that connect_data->read_buffer now points to */
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1924 continue;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1925 }
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1926
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1927 break;
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1928 }
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1929
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1930 /* Fell through. We ran out of CHAP events to process, but haven't
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1931 * succeeded or failed authentication - there may be more to come.
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1932 * If this is the case, come straight back here. */
22674
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1933
24297
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1934 purple_debug_info("socks5 proxy", "Waiting for another message from which to read CHAP info.\n");
d791093e412f Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <datallah@pidgin.im>
parents: 24188
diff changeset
1935
22674
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1936 /* We've processed all the available attributes, so get ready for a whole new message */
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1937 g_free(connect_data->read_buffer);
2628be97bebd Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <datallah@pidgin.im>
parents: 22622
diff changeset
1938 connect_data->read_buffer = NULL;
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1939 }
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
1940
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1941 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1942 s5_canread(gpointer data, gint source, PurpleInputCondition cond)
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1943 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1944 PurpleProxyConnectData *connect_data = data;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1945 int len;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1946
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1947 if (connect_data->read_buffer == NULL) {
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1948 connect_data->read_buf_len = 2;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1949 connect_data->read_buffer = g_malloc(connect_data->read_buf_len);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1950 connect_data->read_len = 0;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1951 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1952
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1953 purple_debug_info("socks5 proxy", "Able to read.\n");
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1954
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1955 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
1956 connect_data->read_buf_len - connect_data->read_len);
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1957
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1958 if (len == 0)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1959 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1960 purple_proxy_connect_data_disconnect(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1961 _("Server closed the connection"));
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1962 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1963 }
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1964
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1965 if (len < 0)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1966 {
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1967 if (errno == EAGAIN)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1968 /* No worries */
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1969 return;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1970
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1971 /* Error! */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1972 purple_proxy_connect_data_disconnect_formatted(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1973 _("Lost connection with server: %s"), g_strerror(errno));
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1974 return;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1975 }
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
1976
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1977 connect_data->read_len += len;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1978 if (connect_data->read_len < 2)
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
1979 return;
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1980
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1981 purple_input_remove(connect_data->inpa);
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1982 connect_data->inpa = 0;
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1983
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1984 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
1985 purple_proxy_connect_data_disconnect(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
1986 _("Received invalid data on connection with server"));
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1987 return;
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1988 }
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
1989
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
1990 if (connect_data->read_buffer[1] == 0x02) {
25623
99cd350834e7 A few type fixes.
Daniel Atallah <datallah@pidgin.im>
parents: 25622
diff changeset
1991 size_t i, j;
10912
ec7c127a435b [gaim-migrate @ 12667]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10711
diff changeset
1992 const char *u, *p;
9129
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
1993
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
1994 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
1995 p = purple_proxy_info_get_password(connect_data->gpi);
10912
ec7c127a435b [gaim-migrate @ 12667]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10711
diff changeset
1996
ec7c127a435b [gaim-migrate @ 12667]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10711
diff changeset
1997 i = (u == NULL) ? 0 : strlen(u);
ec7c127a435b [gaim-migrate @ 12667]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10711
diff changeset
1998 j = (p == NULL) ? 0 : strlen(p);
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
1999
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2000 connect_data->write_buf_len = 1 + 1 + i + 1 + j;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2001 connect_data->write_buffer = g_malloc(connect_data->write_buf_len);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2002 connect_data->written_len = 0;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2003
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2004 connect_data->write_buffer[0] = 0x01; /* version 1 */
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2005 connect_data->write_buffer[1] = i;
10917
f32ea2da503b [gaim-migrate @ 12678]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10912
diff changeset
2006 if (u != NULL)
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2007 memcpy(connect_data->write_buffer + 2, u, i);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2008 connect_data->write_buffer[2 + i] = j;
10917
f32ea2da503b [gaim-migrate @ 12678]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10912
diff changeset
2009 if (p != NULL)
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2010 memcpy(connect_data->write_buffer + 2 + i + 1, p, j);
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
2011
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2012 g_free(connect_data->read_buffer);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2013 connect_data->read_buffer = NULL;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2014
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2015 connect_data->read_cb = s5_readauth;
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2016
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2017 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
2018 proxy_do_write, connect_data);
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
2019
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2020 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
2021
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2022 return;
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2023 } else if (connect_data->read_buffer[1] == 0x03) {
25623
99cd350834e7 A few type fixes.
Daniel Atallah <datallah@pidgin.im>
parents: 25622
diff changeset
2024 size_t userlen;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2025 userlen = strlen(purple_proxy_info_get_username(connect_data->gpi));
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2026
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2027 connect_data->write_buf_len = 7 + userlen;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2028 connect_data->write_buffer = g_malloc(connect_data->write_buf_len);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2029 connect_data->written_len = 0;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2030
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2031 connect_data->write_buffer[0] = 0x01;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2032 connect_data->write_buffer[1] = 0x02;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2033 connect_data->write_buffer[2] = 0x11;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2034 connect_data->write_buffer[3] = 0x01;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2035 connect_data->write_buffer[4] = 0x85;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2036 connect_data->write_buffer[5] = 0x02;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2037 connect_data->write_buffer[6] = userlen;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2038 memcpy(connect_data->write_buffer + 7,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2039 purple_proxy_info_get_username(connect_data->gpi), userlen);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
2040
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2041 g_free(connect_data->read_buffer);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2042 connect_data->read_buffer = NULL;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2043
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2044 connect_data->read_cb = s5_readchap;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2045
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2046 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
2047 proxy_do_write, connect_data);
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
2048
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2049 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
2050
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2051 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2052 } else {
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2053 g_free(connect_data->read_buffer);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2054 connect_data->read_buffer = NULL;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2055
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2056 s5_sendconnect(connect_data, connect_data->fd);
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
2057 }
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
2058 }
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
2059
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2060 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2061 s5_canwrite(gpointer data, gint source, PurpleInputCondition cond)
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
2062 {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2063 unsigned char buf[5];
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
2064 int i;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2065 PurpleProxyConnectData *connect_data = data;
2048
4ac8b9622c9e [gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1881
diff changeset
2066 int error = ETIMEDOUT;
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2067 int ret;
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
2068
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2069 purple_debug_info("socks5 proxy", "Connected.\n");
5211
94d9756c381f [gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents: 4993
diff changeset
2070
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2071 if (connect_data->inpa > 0)
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2072 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2073 purple_input_remove(connect_data->inpa);
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2074 connect_data->inpa = 0;
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2075 }
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2076
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2077 ret = purple_input_get_error(connect_data->fd, &error);
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2078 if ((ret != 0) || (error != 0))
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2079 {
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2080 if (ret != 0)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2081 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
2082 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error));
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
2083 return;
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
2084 }
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
2085
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1087
diff changeset
2086 buf[0] = 0x05; /* SOCKS version 5 */
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2087
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2088 if (purple_proxy_info_get_username(connect_data->gpi) != NULL) {
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
2089 buf[1] = 0x03; /* three methods */
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
2090 buf[2] = 0x00; /* no authentication */
10561
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
2091 buf[3] = 0x03; /* CHAP authentication */
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
2092 buf[4] = 0x02; /* username/password authentication */
948b707577e9 [gaim-migrate @ 11939]
Malcolm Smith
parents: 10534
diff changeset
2093 i = 5;
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2094 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2095 else {
1844
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
2096 buf[1] = 0x01;
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
2097 buf[2] = 0x00;
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
2098 i = 3;
161c00c36474 [gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1843
diff changeset
2099 }
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
2100
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2101 connect_data->write_buf_len = i;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2102 connect_data->write_buffer = g_malloc(connect_data->write_buf_len);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2103 memcpy(connect_data->write_buffer, buf, i);
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2104
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2105 connect_data->read_cb = s5_canread;
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
2106
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2107 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
2108 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
2109 }
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
2110
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2111 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2112 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
2113 {
20239
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
2114 int flags;
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
2115
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2116 purple_debug_info("proxy",
5211
94d9756c381f [gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents: 4993
diff changeset
2117 "Connecting to %s:%d via %s:%d using SOCKS5\n",
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2118 connect_data->host, connect_data->port,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2119 purple_proxy_info_get_host(connect_data->gpi),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2120 purple_proxy_info_get_port(connect_data->gpi));
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
2121
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2122 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2123 if (connect_data->fd < 0)
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2124 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2125 purple_proxy_connect_data_disconnect_formatted(connect_data,
27629
508e7ceb9255 Remove periods and newlines from many error messages that end up being used
Mark Doliner <markdoliner@pidgin.im>
parents: 27497
diff changeset
2126 _("Unable to create socket: %s"), g_strerror(errno));
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2127 return;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2128 }
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
2129
20239
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
2130 flags = fcntl(connect_data->fd, F_GETFL);
ae122f419324 applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
2131 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK);
10172
8400788b226c [gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10170
diff changeset
2132 #ifndef _WIN32
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2133 fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC);
10172
8400788b226c [gaim-migrate @ 11275]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10170
diff changeset
2134 #endif
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2135
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2136 if (connect(connect_data->fd, addr, addrlen) != 0)
14161
e959d0e476be [gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents: 14159
diff changeset
2137 {
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2138 if ((errno == EINPROGRESS) || (errno == EINTR))
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2139 {
33877
d33b4fa5ea06 win32: hack for webkit's feature of replacing backslash with yen sign; silencing some warnings in gtkconv.c; consistent messages in proxy.c
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33440
diff changeset
2140 purple_debug_info("proxy", "SOCKS5 connection in progress\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2141 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
2142 PURPLE_INPUT_WRITE, s5_canwrite, connect_data);
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2143 }
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2144 else
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2145 {
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 21091
diff changeset
2146 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno));
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
2147 }
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2148 }
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2149 else
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2150 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2151 purple_debug_info("proxy", "Connected immediately.\n");
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2152
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2153 s5_canwrite(connect_data, connect_data->fd, PURPLE_INPUT_WRITE);
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
2154 }
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
2155 }
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
2156
35462
901dfa763f15 Fix some gtk-doc warnings till proxy.c
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
2157 /*
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2158 * This function attempts to connect to the next IP address in the list
32297
100ef65e9664 Replace purple_dnsquery_a_account with purple_dnsquery_a.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31961
diff changeset
2159 * of IP addresses returned to us by purple_dnsquery_a() and attempts
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
2160 * 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
2161 * resolved, and each time a connection attempt fails (assuming there
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2162 * is another IP address to try).
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
2163 */
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 23234
diff changeset
2164 #ifndef INET6_ADDRSTRLEN
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 23234
diff changeset
2165 #define INET6_ADDRSTRLEN 46
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 23234
diff changeset
2166 #endif
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 23234
diff changeset
2167
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2168 static void try_connect(PurpleProxyConnectData *connect_data)
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
2169 {
25623
99cd350834e7 A few type fixes.
Daniel Atallah <datallah@pidgin.im>
parents: 25622
diff changeset
2170 socklen_t addrlen;
4678
4fe99bee3ecc [gaim-migrate @ 4989]
Nathan Walp <nwalp@pidgin.im>
parents: 4648
diff changeset
2171 struct sockaddr *addr;
14965
8051becb91fe [gaim-migrate @ 17675]
Mark Doliner <markdoliner@pidgin.im>
parents: 14899
diff changeset
2172 char ipaddr[INET6_ADDRSTRLEN];
4634
c4318fc60090 [gaim-migrate @ 4941]
Nathan Walp <nwalp@pidgin.im>
parents: 4499
diff changeset
2173
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2174 addrlen = GPOINTER_TO_INT(connect_data->hosts->data);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2175 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
2176 addr = connect_data->hosts->data;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2177 connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data);
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 23234
diff changeset
2178 #ifdef HAVE_INET_NTOP
29365
9b185470561d proxy: Fix printing IPv6 addresses
Paul Aurich <darkrain42@pidgin.im>
parents: 29076
diff changeset
2179 if (addr->sa_family == AF_INET)
9b185470561d proxy: Fix printing IPv6 addresses
Paul Aurich <darkrain42@pidgin.im>
parents: 29076
diff changeset
2180 inet_ntop(addr->sa_family, &((struct sockaddr_in *)addr)->sin_addr,
9b185470561d proxy: Fix printing IPv6 addresses
Paul Aurich <darkrain42@pidgin.im>
parents: 29076
diff changeset
2181 ipaddr, sizeof(ipaddr));
9b185470561d proxy: Fix printing IPv6 addresses
Paul Aurich <darkrain42@pidgin.im>
parents: 29076
diff changeset
2182 else if (addr->sa_family == AF_INET6)
9b185470561d proxy: Fix printing IPv6 addresses
Paul Aurich <darkrain42@pidgin.im>
parents: 29076
diff changeset
2183 inet_ntop(addr->sa_family, &((struct sockaddr_in6 *)addr)->sin6_addr,
9b185470561d proxy: Fix printing IPv6 addresses
Paul Aurich <darkrain42@pidgin.im>
parents: 29076
diff changeset
2184 ipaddr, sizeof(ipaddr));
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 23234
diff changeset
2185 #else
25623
99cd350834e7 A few type fixes.
Daniel Atallah <datallah@pidgin.im>
parents: 25622
diff changeset
2186 memcpy(ipaddr, inet_ntoa(((struct sockaddr_in *)addr)->sin_addr),
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 23234
diff changeset
2187 sizeof(ipaddr));
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 23234
diff changeset
2188 #endif
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2189 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
2190
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2191 if (connect_data->socket_type == SOCK_DGRAM) {
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2192 proxy_connect_udp_none(connect_data, addr, addrlen);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2193 g_free(addr);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2194 return;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2195 }
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2196
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
2197 switch (purple_proxy_info_get_proxy_type(connect_data->gpi)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2198 case PURPLE_PROXY_NONE:
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2199 proxy_connect_none(connect_data, addr, addrlen);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2200 break;
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2201
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2202 case PURPLE_PROXY_HTTP:
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2203 proxy_connect_http(connect_data, addr, addrlen);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2204 break;
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2205
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2206 case PURPLE_PROXY_SOCKS4:
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2207 proxy_connect_socks4(connect_data, addr, addrlen);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2208 break;
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2209
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2210 case PURPLE_PROXY_SOCKS5:
31677
042eaab1468c Add a new proxy type of "Tor". This is really just a SOCKS5 proxy, but can be
Daniel Atallah <datallah@pidgin.im>
parents: 30626
diff changeset
2211 case PURPLE_PROXY_TOR:
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2212 proxy_connect_socks5(connect_data, addr, addrlen);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2213 break;
6621
2a18ef3e5224 [gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents: 6320
diff changeset
2214
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2215 case PURPLE_PROXY_USE_ENVVAR:
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2216 proxy_connect_http(connect_data, addr, addrlen);
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2217 break;
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2218
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2219 default:
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
2220 break;
4678
4fe99bee3ecc [gaim-migrate @ 4989]
Nathan Walp <nwalp@pidgin.im>
parents: 4648
diff changeset
2221 }
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2222
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2223 g_free(addr);
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
2224 }
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
2225
9129
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
2226 static void
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
2227 connection_host_resolved(GSList *hosts, gpointer data,
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
2228 const char *error_message)
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
2229 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2230 PurpleProxyConnectData *connect_data;
9129
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
2231
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2232 connect_data = data;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2233 connect_data->query_data = NULL;
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
2234
14161
e959d0e476be [gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents: 14159
diff changeset
2235 if (error_message != NULL)
e959d0e476be [gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents: 14159
diff changeset
2236 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2237 purple_proxy_connect_data_disconnect(connect_data, error_message);
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2238 return;
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2239 }
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2240
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2241 if (hosts == NULL)
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2242 {
27635
0cd19038c417 More uniformity among disconnect error messages
Mark Doliner <markdoliner@pidgin.im>
parents: 27629
diff changeset
2243 purple_proxy_connect_data_disconnect(connect_data, _("Unable to resolve hostname"));
14300
68a0aa63f3b8 [gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
2244 return;
14161
e959d0e476be [gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents: 14159
diff changeset
2245 }
e959d0e476be [gaim-migrate @ 16728]
Mark Doliner <markdoliner@pidgin.im>
parents: 14159
diff changeset
2246
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2247 connect_data->hosts = hosts;
9129
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
2248
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2249 try_connect(connect_data);
9129
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
2250 }
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
2251
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2252 PurpleProxyInfo *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2253 purple_proxy_get_setup(PurpleAccount *account)
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
2254 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2255 PurpleProxyInfo *gpi = NULL;
6621
2a18ef3e5224 [gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents: 6320
diff changeset
2256 const gchar *tmp;
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2257
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15015
diff changeset
2258 /* 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
2259 static PurpleProxyInfo *tmp_none_proxy_info = NULL;
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15015
diff changeset
2260 if (!tmp_none_proxy_info) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2261 tmp_none_proxy_info = purple_proxy_info_new();
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
2262 purple_proxy_info_set_proxy_type(tmp_none_proxy_info, PURPLE_PROXY_NONE);
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15015
diff changeset
2263 }
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15015
diff changeset
2264
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2265 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
2266 gpi = purple_account_get_proxy_info(account);
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
2267 if (purple_proxy_info_get_proxy_type(gpi) == PURPLE_PROXY_USE_GLOBAL)
15041
18a6f6cdce33 [gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents: 15032
diff changeset
2268 gpi = NULL;
18a6f6cdce33 [gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents: 15032
diff changeset
2269 }
18a6f6cdce33 [gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents: 15032
diff changeset
2270 if (gpi == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2271 if (purple_running_gnome())
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2272 gpi = purple_gnome_proxy_get_info();
15041
18a6f6cdce33 [gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents: 15032
diff changeset
2273 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2274 gpi = purple_global_proxy_get_info();
15041
18a6f6cdce33 [gaim-migrate @ 17758]
Daniel Atallah <datallah@pidgin.im>
parents: 15032
diff changeset
2275 }
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2276
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
2277 if (purple_proxy_info_get_proxy_type(gpi) == PURPLE_PROXY_USE_ENVVAR) {
6621
2a18ef3e5224 [gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents: 6320
diff changeset
2278 if ((tmp = g_getenv("HTTP_PROXY")) != NULL ||
2a18ef3e5224 [gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents: 6320
diff changeset
2279 (tmp = g_getenv("http_proxy")) != NULL ||
34219
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2280 (tmp = g_getenv("HTTPPROXY")) != NULL)
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2281 {
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2282 PurpleHttpURL *url;
6621
2a18ef3e5224 [gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents: 6320
diff changeset
2283
9129
9510867e614f [gaim-migrate @ 9907]
Nathan Walp <nwalp@pidgin.im>
parents: 9100
diff changeset
2284 /* http_proxy-format:
9227
95c28297b72c [gaim-migrate @ 10023]
Don Seiler <rizzo@gentoo.org>
parents: 9148
diff changeset
2285 * 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
2286 */
34219
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2287 url = purple_http_url_parse(tmp);
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2288 if (!url) {
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2289 purple_debug_warning("proxy", "Couldn't parse URL\n");
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2290 return gpi;
7652
d60ba2565661 [gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 7475
diff changeset
2291 }
34219
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2292
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2293 purple_proxy_info_set_host(gpi, purple_http_url_get_host(url));
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2294 purple_proxy_info_set_username(gpi, purple_http_url_get_username(url));
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2295 purple_proxy_info_set_password(gpi, purple_http_url_get_password(url));
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2296 purple_proxy_info_set_port(gpi, purple_http_url_get_port(url));
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2297
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2298 /* XXX: Do we want to skip this step if user/password/port were part of url? */
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2299 if ((tmp = g_getenv("HTTP_PROXY_USER")) != NULL ||
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2300 (tmp = g_getenv("http_proxy_user")) != NULL ||
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2301 (tmp = g_getenv("HTTPPROXYUSER")) != NULL)
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2302 purple_proxy_info_set_username(gpi, tmp);
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2303
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2304 if ((tmp = g_getenv("HTTP_PROXY_PASS")) != NULL ||
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2305 (tmp = g_getenv("http_proxy_pass")) != NULL ||
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2306 (tmp = g_getenv("HTTPPROXYPASS")) != NULL)
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2307 purple_proxy_info_set_password(gpi, tmp);
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2308
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2309 if ((tmp = g_getenv("HTTP_PROXY_PORT")) != NULL ||
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2310 (tmp = g_getenv("http_proxy_port")) != NULL ||
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2311 (tmp = g_getenv("HTTPPROXYPORT")) != NULL)
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34218
diff changeset
2312 purple_proxy_info_set_port(gpi, atoi(tmp));
10534
c28eef1b882a [gaim-migrate @ 11866]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10320
diff changeset
2313 } else {
24171
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
2314 #ifdef _WIN32
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
2315 PurpleProxyInfo *wgpi;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
2316 if ((wgpi = purple_win32_proxy_get_info()) != NULL)
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
2317 return wgpi;
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 24156
diff changeset
2318 #endif
10534
c28eef1b882a [gaim-migrate @ 11866]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10320
diff changeset
2319 /* 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
2320 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
2321 gpi = tmp_none_proxy_info;
6621
2a18ef3e5224 [gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents: 6320
diff changeset
2322 }
2a18ef3e5224 [gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents: 6320
diff changeset
2323
2a18ef3e5224 [gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents: 6320
diff changeset
2324 }
2a18ef3e5224 [gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents: 6320
diff changeset
2325
13515
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
2326 return gpi;
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
2327 }
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
2328
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2329 PurpleProxyConnectData *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2330 purple_proxy_connect(void *handle, PurpleAccount *account,
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2331 const char *host, int port,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2332 PurpleProxyConnectFunction connect_cb, gpointer data)
13515
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
2333 {
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
2334 const char *connecthost = host;
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
2335 int connectport = port;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2336 PurpleProxyConnectData *connect_data;
13515
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
2337
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2338 g_return_val_if_fail(host != NULL, NULL);
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2339 g_return_val_if_fail(port > 0, NULL);
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2340 g_return_val_if_fail(connect_cb != NULL, NULL);
13515
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
2341
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2342 connect_data = g_new0(PurpleProxyConnectData, 1);
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2343 connect_data->fd = -1;
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2344 connect_data->socket_type = SOCK_STREAM;
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2345 connect_data->handle = handle;
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2346 connect_data->connect_cb = connect_cb;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2347 connect_data->data = data;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2348 connect_data->host = g_strdup(host);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2349 connect_data->port = port;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2350 connect_data->gpi = purple_proxy_get_setup(account);
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2351 connect_data->account = account;
13515
0cea461e904c [gaim-migrate @ 15890]
Bartosz Oler <bartosz@pidgin.im>
parents: 13426
diff changeset
2352
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
2353 if ((purple_proxy_info_get_proxy_type(connect_data->gpi) != PURPLE_PROXY_NONE) &&
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2354 (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
2355 purple_proxy_info_get_port(connect_data->gpi) <= 0)) {
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2356
34449
bbcb198650b7 Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 34305
diff changeset
2357 purple_notify_error(NULL, NULL, _("Invalid proxy settings"),
bbcb198650b7 Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 34305
diff changeset
2358 _("Either the host name or port number specified for "
bbcb198650b7 Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 34305
diff changeset
2359 "your given proxy type is invalid."),
bbcb198650b7 Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 34305
diff changeset
2360 purple_request_cpar_from_account(account));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2361 purple_proxy_connect_data_destroy(connect_data);
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2362 return NULL;
1840
770bc15f419c [gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1705
diff changeset
2363 }
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
2364
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
2365 switch (purple_proxy_info_get_proxy_type(connect_data->gpi))
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
2366 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2367 case PURPLE_PROXY_NONE:
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
2368 break;
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2369
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2370 case PURPLE_PROXY_HTTP:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2371 case PURPLE_PROXY_SOCKS4:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2372 case PURPLE_PROXY_SOCKS5:
31677
042eaab1468c Add a new proxy type of "Tor". This is really just a SOCKS5 proxy, but can be
Daniel Atallah <datallah@pidgin.im>
parents: 30626
diff changeset
2373 case PURPLE_PROXY_TOR:
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2374 case PURPLE_PROXY_USE_ENVVAR:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2375 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
2376 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
2377 break;
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2378
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
2379 default:
24491
70d99d66cceb Add debug output when proxy configuration issues are seen. This will help to
Daniel Atallah <datallah@pidgin.im>
parents: 24316
diff changeset
2380 purple_debug_error("proxy", "Invalid Proxy type (%d) specified.\n",
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
2381 purple_proxy_info_get_proxy_type(connect_data->gpi));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2382 purple_proxy_connect_data_destroy(connect_data);
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2383 return NULL;
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2384 }
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2385
32297
100ef65e9664 Replace purple_dnsquery_a_account with purple_dnsquery_a.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31961
diff changeset
2386 connect_data->query_data = purple_dnsquery_a(account, connecthost,
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2387 connectport, connection_host_resolved, connect_data);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2388 if (connect_data->query_data == NULL)
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2389 {
24491
70d99d66cceb Add debug output when proxy configuration issues are seen. This will help to
Daniel Atallah <datallah@pidgin.im>
parents: 24316
diff changeset
2390 purple_debug_error("proxy", "dns query failed unexpectedly.\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2391 purple_proxy_connect_data_destroy(connect_data);
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2392 return NULL;
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 3867
diff changeset
2393 }
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2394
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2395 handles = g_slist_prepend(handles, connect_data);
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2396
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2397 return connect_data;
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2398 }
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2399
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2400 PurpleProxyConnectData *
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2401 purple_proxy_connect_udp(void *handle, PurpleAccount *account,
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2402 const char *host, int port,
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2403 PurpleProxyConnectFunction connect_cb, gpointer data)
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2404 {
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2405 const char *connecthost = host;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2406 int connectport = port;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2407 PurpleProxyConnectData *connect_data;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2408
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2409 g_return_val_if_fail(host != NULL, NULL);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2410 g_return_val_if_fail(port > 0, NULL);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2411 g_return_val_if_fail(connect_cb != NULL, NULL);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2412
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2413 connect_data = g_new0(PurpleProxyConnectData, 1);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2414 connect_data->fd = -1;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2415 connect_data->socket_type = SOCK_DGRAM;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2416 connect_data->handle = handle;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2417 connect_data->connect_cb = connect_cb;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2418 connect_data->data = data;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2419 connect_data->host = g_strdup(host);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2420 connect_data->port = port;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2421 connect_data->gpi = purple_proxy_get_setup(account);
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2422 connect_data->account = account;
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2423
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
2424 if ((purple_proxy_info_get_proxy_type(connect_data->gpi) != PURPLE_PROXY_NONE) &&
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2425 (purple_proxy_info_get_host(connect_data->gpi) == NULL ||
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2426 purple_proxy_info_get_port(connect_data->gpi) <= 0)) {
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2427
34449
bbcb198650b7 Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 34305
diff changeset
2428 purple_notify_error(NULL, NULL, _("Invalid proxy settings"),
bbcb198650b7 Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 34305
diff changeset
2429 _("Either the host name or port number specified for "
bbcb198650b7 Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 34305
diff changeset
2430 "your given proxy type is invalid."),
bbcb198650b7 Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 34305
diff changeset
2431 purple_request_cpar_from_account(account));
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2432 purple_proxy_connect_data_destroy(connect_data);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2433 return NULL;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2434 }
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2435
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
2436 switch (purple_proxy_info_get_proxy_type(connect_data->gpi))
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2437 {
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2438 case PURPLE_PROXY_NONE:
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2439 break;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2440
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2441 case PURPLE_PROXY_HTTP:
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2442 case PURPLE_PROXY_SOCKS4:
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2443 case PURPLE_PROXY_SOCKS5:
31677
042eaab1468c Add a new proxy type of "Tor". This is really just a SOCKS5 proxy, but can be
Daniel Atallah <datallah@pidgin.im>
parents: 30626
diff changeset
2444 case PURPLE_PROXY_TOR:
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2445 case PURPLE_PROXY_USE_ENVVAR:
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2446 purple_debug_info("proxy", "Ignoring Proxy type (%d) for UDP.\n",
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
2447 purple_proxy_info_get_proxy_type(connect_data->gpi));
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2448 break;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2449
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2450 default:
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2451 purple_debug_error("proxy", "Invalid Proxy type (%d) specified.\n",
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
2452 purple_proxy_info_get_proxy_type(connect_data->gpi));
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2453 purple_proxy_connect_data_destroy(connect_data);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2454 return NULL;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2455 }
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2456
32297
100ef65e9664 Replace purple_dnsquery_a_account with purple_dnsquery_a.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31961
diff changeset
2457 connect_data->query_data = purple_dnsquery_a(account, connecthost,
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2458 connectport, connection_host_resolved, connect_data);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2459 if (connect_data->query_data == NULL)
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2460 {
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2461 purple_proxy_connect_data_destroy(connect_data);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2462 return NULL;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2463 }
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2464
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2465 handles = g_slist_prepend(handles, connect_data);
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2466
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2467 return connect_data;
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2468 }
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2469
31742
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2470 /* This is called when we connect to the SOCKS5 proxy server (through any
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2471 * relevant account proxy)
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2472 */
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2473 static void socks5_connected_to_proxy(gpointer data, gint source,
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2474 const gchar *error_message) {
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2475 /* This is the PurpleProxyConnectData for the overall SOCKS5 connection */
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2476 PurpleProxyConnectData *connect_data = data;
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2477
32129
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
2478 purple_debug_error("proxy", "Connect Data is %p\n", connect_data);
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
2479
31742
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2480 /* Check that the overall SOCKS5 connection wasn't cancelled while we were
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2481 * connecting to it (we don't have a way of associating the process of
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2482 * connecting to the SOCKS5 server to the overall PurpleProxyConnectData)
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2483 */
32129
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
2484 if (!PURPLE_PROXY_CONNECT_DATA_IS_VALID(connect_data)) {
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
2485 purple_debug_error("proxy", "Data had gone out of scope :(\n");
31742
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2486 return;
32129
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
2487 }
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
2488
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
2489 /* Break the link between the two PurpleProxyConnectDatas */
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
2490 connect_data->child = NULL;
31742
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2491
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2492 if (error_message != NULL) {
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2493 purple_debug_error("proxy", "Unable to connect to SOCKS5 host.\n");
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2494 connect_data->connect_cb(connect_data->data, source, error_message);
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2495 return;
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2496 }
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2497
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2498 purple_debug_info("proxy", "Initiating SOCKS5 negotiation.\n");
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2499
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2500 purple_debug_info("proxy",
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2501 "Connecting to %s:%d via %s:%d using SOCKS5\n",
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2502 connect_data->host, connect_data->port,
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2503 purple_proxy_info_get_host(connect_data->gpi),
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2504 purple_proxy_info_get_port(connect_data->gpi));
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2505
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2506 connect_data->fd = source;
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2507
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2508 s5_canwrite(connect_data, connect_data->fd, PURPLE_INPUT_WRITE);
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2509 }
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2510
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2511 /*
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2512 * Combine some of this code with purple_proxy_connect()
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2513 */
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2514 PurpleProxyConnectData *
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2515 purple_proxy_connect_socks5_account(void *handle, PurpleAccount *account,
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2516 PurpleProxyInfo *gpi,
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2517 const char *host, int port,
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2518 PurpleProxyConnectFunction connect_cb,
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2519 gpointer data)
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2520 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2521 PurpleProxyConnectData *connect_data;
31742
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2522 PurpleProxyConnectData *account_proxy_conn_data;
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
2523
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2524 g_return_val_if_fail(host != NULL, NULL);
15015
7af69d172538 [gaim-migrate @ 17732]
Nathan Walp <nwalp@pidgin.im>
parents: 14965
diff changeset
2525 g_return_val_if_fail(port >= 0, NULL);
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2526 g_return_val_if_fail(connect_cb != NULL, NULL);
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2527
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2528 connect_data = g_new0(PurpleProxyConnectData, 1);
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2529 connect_data->fd = -1;
27249
3f5b531ae0b3 Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents: 25911
diff changeset
2530 connect_data->socket_type = SOCK_STREAM;
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2531 connect_data->handle = handle;
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2532 connect_data->connect_cb = connect_cb;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2533 connect_data->data = data;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2534 connect_data->host = g_strdup(host);
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2535 connect_data->port = port;
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2536 connect_data->gpi = gpi;
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31677
diff changeset
2537 connect_data->account = account;
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
2538
31742
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2539 /* If there is an account proxy, use it to connect to the desired SOCKS5
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2540 * proxy.
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2541 */
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2542 account_proxy_conn_data = purple_proxy_connect(connect_data->handle,
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2543 connect_data->account,
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2544 purple_proxy_info_get_host(connect_data->gpi),
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2545 purple_proxy_info_get_port(connect_data->gpi),
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2546 socks5_connected_to_proxy, connect_data);
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2547
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2548 if (account_proxy_conn_data == NULL) {
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2549 purple_debug_error("proxy", "Unable to initiate connection to account proxy.\n");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2550 purple_proxy_connect_data_destroy(connect_data);
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2551 return NULL;
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2552 }
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2553
32129
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
2554 connect_data->child = account_proxy_conn_data;
31742
e6eb15f2734b proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <datallah@pidgin.im>
parents: 31678
diff changeset
2555
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2556 handles = g_slist_prepend(handles, connect_data);
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2557
14324
8cbedd82b6ac [gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents: 14300
diff changeset
2558 return connect_data;
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
2559 }
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
2560
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
2561 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2562 purple_proxy_connect_cancel(PurpleProxyConnectData *connect_data)
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
2563 {
32129
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
2564 g_return_if_fail(connect_data != NULL);
5f9d676cefdb Fix a possible XMPP remote crash
Mark Doliner <markdoliner@pidgin.im>
parents: 32070
diff changeset
2565
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2566 purple_proxy_connect_data_disconnect(connect_data, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2567 purple_proxy_connect_data_destroy(connect_data);
14165
0f09ac2220f4 [gaim-migrate @ 16734]
Mark Doliner <markdoliner@pidgin.im>
parents: 14161
diff changeset
2568 }
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8231
diff changeset
2569
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2570 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2571 purple_proxy_connect_cancel_with_handle(void *handle)
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2572 {
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2573 GSList *l, *l_next;
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2574
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2575 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
2576 PurpleProxyConnectData *connect_data = l->data;
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2577
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2578 l_next = l->next;
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2579
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2580 if (connect_data->handle == handle)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2581 purple_proxy_connect_cancel(connect_data);
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2582 }
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2583 }
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2584
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2585 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2586 proxy_pref_cb(const char *name, PurplePrefType type,
12816
5f93e09fa9a6 [gaim-migrate @ 15164]
Mark Doliner <markdoliner@pidgin.im>
parents: 12811
diff changeset
2587 gconstpointer value, gpointer data)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2588 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2589 PurpleProxyInfo *info = purple_global_proxy_get_info();
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2590
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24866
diff changeset
2591 if (purple_strequal(name, "/purple/proxy/type")) {
6001
1abbeff6571c [gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents: 5970
diff changeset
2592 int proxytype;
12816
5f93e09fa9a6 [gaim-migrate @ 15164]
Mark Doliner <markdoliner@pidgin.im>
parents: 12811
diff changeset
2593 const char *type = value;
6001
1abbeff6571c [gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents: 5970
diff changeset
2594
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24866
diff changeset
2595 if (purple_strequal(type, "none"))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2596 proxytype = PURPLE_PROXY_NONE;
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24866
diff changeset
2597 else if (purple_strequal(type, "http"))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2598 proxytype = PURPLE_PROXY_HTTP;
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24866
diff changeset
2599 else if (purple_strequal(type, "socks4"))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2600 proxytype = PURPLE_PROXY_SOCKS4;
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24866
diff changeset
2601 else if (purple_strequal(type, "socks5"))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2602 proxytype = PURPLE_PROXY_SOCKS5;
31677
042eaab1468c Add a new proxy type of "Tor". This is really just a SOCKS5 proxy, but can be
Daniel Atallah <datallah@pidgin.im>
parents: 30626
diff changeset
2603 else if (purple_strequal(type, "tor"))
042eaab1468c Add a new proxy type of "Tor". This is really just a SOCKS5 proxy, but can be
Daniel Atallah <datallah@pidgin.im>
parents: 30626
diff changeset
2604 proxytype = PURPLE_PROXY_TOR;
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24866
diff changeset
2605 else if (purple_strequal(type, "envvar"))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2606 proxytype = PURPLE_PROXY_USE_ENVVAR;
6001
1abbeff6571c [gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents: 5970
diff changeset
2607 else
1abbeff6571c [gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents: 5970
diff changeset
2608 proxytype = -1;
1abbeff6571c [gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents: 5970
diff changeset
2609
35378
5d9e2581005b gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents: 35265
diff changeset
2610 purple_proxy_info_set_proxy_type(info, proxytype);
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24866
diff changeset
2611 } else if (purple_strequal(name, "/purple/proxy/host"))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2612 purple_proxy_info_set_host(info, value);
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24866
diff changeset
2613 else if (purple_strequal(name, "/purple/proxy/port"))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2614 purple_proxy_info_set_port(info, GPOINTER_TO_INT(value));
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24866
diff changeset
2615 else if (purple_strequal(name, "/purple/proxy/username"))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2616 purple_proxy_info_set_username(info, value);
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 24866
diff changeset
2617 else if (purple_strequal(name, "/purple/proxy/password"))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2618 purple_proxy_info_set_password(info, value);
1087
bc9c6b635358 [gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1057
diff changeset
2619 }
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2620
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2621 void *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2622 purple_proxy_get_handle()
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2623 {
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2624 static int handle;
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2625
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2626 return &handle;
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2627 }
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2628
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2629 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2630 purple_proxy_init(void)
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2631 {
10087
e5b80a38939d [gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9863
diff changeset
2632 void *handle;
e5b80a38939d [gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9863
diff changeset
2633
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2634 /* Initialize a default proxy info struct. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2635 global_proxy_info = purple_proxy_info_new();
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2636
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2637 /* 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
2638 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
2639 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
2640 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
2641 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
2642 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
2643 purple_prefs_add_string("/purple/proxy/password", "");
25624
62b56bc39896 Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <datallah@pidgin.im>
parents: 25623
diff changeset
2644 purple_prefs_add_bool("/purple/proxy/socks4_remotedns", FALSE);
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2645
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2646 /* Setup callbacks for the preferences. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2647 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
2648 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
2649 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
2650 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
2651 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
2652 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
2653 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
2654 purple_prefs_connect_callback(handle, "/purple/proxy/username",
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2655 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
2656 purple_prefs_connect_callback(handle, "/purple/proxy/password",
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13085
diff changeset
2657 proxy_pref_cb, NULL);
20053
68ce40196f8a grab revision 6be36979d022284283217c2a32f2b812740cbbf3
Luke Schierer <lschiere@pidgin.im>
parents: 19985
diff changeset
2658
68ce40196f8a grab revision 6be36979d022284283217c2a32f2b812740cbbf3
Luke Schierer <lschiere@pidgin.im>
parents: 19985
diff changeset
2659 /* Load the initial proxy settings */
20055
ca7144d5605f grab revision 240d37f3b465527200f862ff3c0da77618ae32ae
Luke Schierer <lschiere@pidgin.im>
parents: 20053
diff changeset
2660 purple_prefs_trigger_callback("/purple/proxy/type");
ca7144d5605f grab revision 240d37f3b465527200f862ff3c0da77618ae32ae
Luke Schierer <lschiere@pidgin.im>
parents: 20053
diff changeset
2661 purple_prefs_trigger_callback("/purple/proxy/host");
ca7144d5605f grab revision 240d37f3b465527200f862ff3c0da77618ae32ae
Luke Schierer <lschiere@pidgin.im>
parents: 20053
diff changeset
2662 purple_prefs_trigger_callback("/purple/proxy/port");
ca7144d5605f grab revision 240d37f3b465527200f862ff3c0da77618ae32ae
Luke Schierer <lschiere@pidgin.im>
parents: 20053
diff changeset
2663 purple_prefs_trigger_callback("/purple/proxy/username");
ca7144d5605f grab revision 240d37f3b465527200f862ff3c0da77618ae32ae
Luke Schierer <lschiere@pidgin.im>
parents: 20053
diff changeset
2664 purple_prefs_trigger_callback("/purple/proxy/password");
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5580
diff changeset
2665 }
10087
e5b80a38939d [gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9863
diff changeset
2666
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 14097
diff changeset
2667 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2668 purple_proxy_uninit(void)
10087
e5b80a38939d [gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9863
diff changeset
2669 {
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14536
diff changeset
2670 while (handles != NULL)
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2671 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2672 purple_proxy_connect_data_disconnect(handles->data, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15746
diff changeset
2673 purple_proxy_connect_data_destroy(handles->data);
14513
fe63cd247350 [gaim-migrate @ 17165]
Mark Doliner <markdoliner@pidgin.im>
parents: 14454
diff changeset
2674 }
28177
e62fe687ca6c Clean up various file-scoped globals at uninit.
Paul Aurich <darkrain42@pidgin.im>
parents: 27943
diff changeset
2675
e62fe687ca6c Clean up various file-scoped globals at uninit.
Paul Aurich <darkrain42@pidgin.im>
parents: 27943
diff changeset
2676 purple_prefs_disconnect_by_handle(purple_proxy_get_handle());
e62fe687ca6c Clean up various file-scoped globals at uninit.
Paul Aurich <darkrain42@pidgin.im>
parents: 27943
diff changeset
2677
e62fe687ca6c Clean up various file-scoped globals at uninit.
Paul Aurich <darkrain42@pidgin.im>
parents: 27943
diff changeset
2678 purple_proxy_info_destroy(global_proxy_info);
e62fe687ca6c Clean up various file-scoped globals at uninit.
Paul Aurich <darkrain42@pidgin.im>
parents: 27943
diff changeset
2679 global_proxy_info = NULL;
10087
e5b80a38939d [gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9863
diff changeset
2680 }

mercurial