Sun, 04 Jan 2004 04:27:17 +0000
[gaim-migrate @ 8659]
" When any error condition is returned by a socks5 proxy,
the debug window just shows "Bad data".
This patch shows the error message corresponding to the
returned error code, so that the user may know why the
socks5 proxy is refusing to process the request.
Background: I'd been trying to establish why I couldn't
connect to MSN through SOCKS5. Adding this patch
enabled me to see that it wsan't a bug in gaim as I'd
originally thought, but that the proxy server I was
using was configured to deny connections to
nexus.passport.com:443." --Gavan Fantom (gavan)
committer: Luke Schierer <lschiere@pidgin.im>
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1 | /** |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
2 | * @file proxy.c Proxy API |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
3 | * @ingroup core |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
4 | * |
| 1 | 5 | * gaim |
| 6 | * | |
| 7 | * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
8 | * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org> |
| 1 | 9 | * |
| 10 | * This program is free software; you can redistribute it and/or modify | |
| 11 | * it under the terms of the GNU General Public License as published by | |
| 12 | * the Free Software Foundation; either version 2 of the License, or | |
| 13 | * (at your option) any later version. | |
| 14 | * | |
| 15 | * This program is distributed in the hope that it will be useful, | |
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 | * GNU General Public License for more details. | |
| 19 | * | |
| 20 | * You should have received a copy of the GNU General Public License | |
| 21 | * along with this program; if not, write to the Free Software | |
| 22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 23 | * | |
| 24 | */ | |
| 25 | ||
| 26 | /* this is a little piece of code to handle proxy connection */ | |
| 27 | /* 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
|
28 | , 2nd provide an easy way to add socks support |
|
5ed6b8356ebc
[gaim-migrate @ 7401]
Mark Doliner <markdoliner@pidgin.im>
parents:
6621
diff
changeset
|
29 | , 3rd draw women to it like flies to honey */ |
| 1 | 30 | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
31 | #include "internal.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
32 | #include "debug.h" |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
33 | #include "notify.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
34 | #include "prefs.h" |
| 1 | 35 | #include "proxy.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
36 | #include "util.h" |
| 3630 | 37 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
38 | #define GAIM_READ_COND (G_IO_IN | G_IO_HUP | G_IO_ERR) |
|
2229
355ebbe18fe0
[gaim-migrate @ 2239]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2096
diff
changeset
|
39 | #define GAIM_WRITE_COND (G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL) |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
40 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
41 | static GaimProxyInfo *global_proxy_info = NULL; |
|
1881
bcd5d457cdbb
[gaim-migrate @ 1891]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1868
diff
changeset
|
42 | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
43 | static int opt_debug = 0; |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
44 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
45 | struct PHB { |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
46 | GaimInputFunction func; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
47 | gpointer data; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
48 | char *host; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
49 | int port; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
50 | gint inpa; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
51 | GaimProxyInfo *gpi; |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5532
diff
changeset
|
52 | GaimAccount *account; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
53 | }; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
54 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
55 | typedef struct _GaimIOClosure { |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
56 | GaimInputFunction function; |
|
2300
06a3c10f4918
[gaim-migrate @ 2310]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2266
diff
changeset
|
57 | guint result; |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
58 | gpointer data; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
59 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
60 | } GaimIOClosure; |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
61 | |
|
7982
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
62 | const char* socks5errors[] = { |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
63 | "succeeded\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
64 | "general SOCKS server failure\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
65 | "connection not allowed by ruleset\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
66 | "Network unreachable\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
67 | "Host unreachable\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
68 | "Connection refused\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
69 | "TTL expired\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
70 | "Command not supported\n", |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
71 | "Address type not supported\n" |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
72 | }; |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
73 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
74 | /************************************************************************** |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
75 | * Proxy structure API |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
76 | **************************************************************************/ |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
77 | GaimProxyInfo * |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
78 | gaim_proxy_info_new(void) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
79 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
80 | return g_new0(GaimProxyInfo, 1); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
81 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
82 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
83 | void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
84 | gaim_proxy_info_destroy(GaimProxyInfo *info) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
85 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
86 | g_return_if_fail(info != NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
87 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
88 | if (info->host != NULL) g_free(info->host); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
89 | if (info->username != NULL) g_free(info->username); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
90 | if (info->password != NULL) g_free(info->password); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
91 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
92 | g_free(info); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
93 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
94 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
95 | void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
96 | gaim_proxy_info_set_type(GaimProxyInfo *info, GaimProxyType type) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
97 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
98 | g_return_if_fail(info != NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
99 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
100 | info->type = type; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
101 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
102 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
103 | void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
104 | gaim_proxy_info_set_host(GaimProxyInfo *info, const char *host) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
105 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
106 | g_return_if_fail(info != NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
107 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
108 | if (info->host != NULL) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
109 | g_free(info->host); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
110 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
111 | info->host = (host == NULL ? NULL : g_strdup(host)); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
112 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
113 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
114 | void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
115 | gaim_proxy_info_set_port(GaimProxyInfo *info, int port) |
|
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 | g_return_if_fail(info != NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
118 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
119 | info->port = port; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
120 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
121 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
122 | void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
123 | gaim_proxy_info_set_username(GaimProxyInfo *info, const char *username) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
124 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
125 | g_return_if_fail(info != NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
126 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
127 | if (info->username != NULL) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
128 | g_free(info->username); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
129 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
130 | info->username = (username == NULL ? NULL : g_strdup(username)); |
|
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 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
133 | void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
134 | gaim_proxy_info_set_password(GaimProxyInfo *info, const char *password) |
|
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 | g_return_if_fail(info != NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
137 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
138 | if (info->password != NULL) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
139 | g_free(info->password); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
140 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
141 | info->password = (password == NULL ? NULL : g_strdup(password)); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
142 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
143 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
144 | GaimProxyType |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
145 | gaim_proxy_info_get_type(const GaimProxyInfo *info) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
146 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
147 | g_return_val_if_fail(info != NULL, GAIM_PROXY_NONE); |
|
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 | return info->type; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
150 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
151 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
152 | const char * |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
153 | gaim_proxy_info_get_host(const GaimProxyInfo *info) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
154 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
155 | g_return_val_if_fail(info != NULL, NULL); |
|
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 | return info->host; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
158 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
159 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
160 | int |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
161 | gaim_proxy_info_get_port(const GaimProxyInfo *info) |
|
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 | g_return_val_if_fail(info != NULL, 0); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
164 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
165 | return info->port; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
166 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
167 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
168 | const char * |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
169 | gaim_proxy_info_get_username(const GaimProxyInfo *info) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
170 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
171 | g_return_val_if_fail(info != NULL, NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
172 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
173 | return info->username; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
174 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
175 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
176 | const char * |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
177 | gaim_proxy_info_get_password(const GaimProxyInfo *info) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
178 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
179 | g_return_val_if_fail(info != NULL, NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
180 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
181 | return info->password; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
182 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
183 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
184 | /************************************************************************** |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
185 | * Global Proxy API |
|
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 | GaimProxyInfo * |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
188 | gaim_global_proxy_get_info(void) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
189 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
190 | return global_proxy_info; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
191 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
192 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
193 | /************************************************************************** |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
194 | * Proxy API |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
195 | **************************************************************************/ |
|
2096
06aacd5e4b2a
[gaim-migrate @ 2106]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2090
diff
changeset
|
196 | static void gaim_io_destroy(gpointer data) |
|
06aacd5e4b2a
[gaim-migrate @ 2106]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2090
diff
changeset
|
197 | { |
|
06aacd5e4b2a
[gaim-migrate @ 2106]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2090
diff
changeset
|
198 | g_free(data); |
|
06aacd5e4b2a
[gaim-migrate @ 2106]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2090
diff
changeset
|
199 | } |
|
06aacd5e4b2a
[gaim-migrate @ 2106]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2090
diff
changeset
|
200 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
201 | static gboolean gaim_io_invoke(GIOChannel *source, GIOCondition condition, gpointer data) |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
202 | { |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
203 | GaimIOClosure *closure = data; |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
204 | GaimInputCondition gaim_cond = 0; |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
205 | |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
206 | if (condition & GAIM_READ_COND) |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
207 | gaim_cond |= GAIM_INPUT_READ; |
|
2754
1deb656ee517
[gaim-migrate @ 2767]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2477
diff
changeset
|
208 | if (condition & GAIM_WRITE_COND) |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
209 | gaim_cond |= GAIM_INPUT_WRITE; |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
210 | |
| 7834 | 211 | #if 0 |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
212 | gaim_debug(GAIM_DEBUG_MISC, "proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
213 | "CLOSURE: callback for %d, fd is %d\n", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
214 | closure->result, g_io_channel_unix_get_fd(source)); |
| 7834 | 215 | #endif |
|
2300
06a3c10f4918
[gaim-migrate @ 2310]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2266
diff
changeset
|
216 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
217 | closure->function(closure->data, g_io_channel_unix_get_fd(source), gaim_cond); |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
218 | |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
219 | return TRUE; |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
220 | } |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
221 | |
|
2372
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2306
diff
changeset
|
222 | gint gaim_input_add(gint source, GaimInputCondition condition, GaimInputFunction function, gpointer data) |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
223 | { |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
224 | GaimIOClosure *closure = g_new0(GaimIOClosure, 1); |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
225 | GIOChannel *channel; |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
226 | GIOCondition cond = 0; |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
227 | |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
228 | closure->function = function; |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
229 | closure->data = data; |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
230 | |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
231 | if (condition & GAIM_INPUT_READ) |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
232 | cond |= GAIM_READ_COND; |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
233 | if (condition & GAIM_INPUT_WRITE) |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
234 | cond |= GAIM_WRITE_COND; |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
235 | |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
236 | channel = g_io_channel_unix_new(source); |
|
2300
06a3c10f4918
[gaim-migrate @ 2310]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2266
diff
changeset
|
237 | closure->result = g_io_add_watch_full(channel, G_PRIORITY_DEFAULT, cond, |
|
2372
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2306
diff
changeset
|
238 | gaim_io_invoke, closure, gaim_io_destroy); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
239 | |
| 7834 | 240 | #if 0 |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
241 | gaim_debug(GAIM_DEBUG_MISC, "proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
242 | "CLOSURE: adding input watcher %d for fd %d\n", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
243 | closure->result, source); |
| 7834 | 244 | #endif |
|
2300
06a3c10f4918
[gaim-migrate @ 2310]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2266
diff
changeset
|
245 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
246 | g_io_channel_unref(channel); |
|
2300
06a3c10f4918
[gaim-migrate @ 2310]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2266
diff
changeset
|
247 | return closure->result; |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
248 | } |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
249 | |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
250 | void gaim_input_remove(gint tag) |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
251 | { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
252 | /* gaim_debug(GAIM_DEBUG_MISC, "proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
253 | "CLOSURE: removing input watcher %d\n", tag); */ |
|
2477
e5e8902b54e4
[gaim-migrate @ 2490]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2372
diff
changeset
|
254 | if (tag > 0) |
|
e5e8902b54e4
[gaim-migrate @ 2490]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2372
diff
changeset
|
255 | g_source_remove(tag); |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
256 | } |
|
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
257 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
258 | |
| 4678 | 259 | typedef void (*dns_callback_t)(GSList *hosts, gpointer data, |
| 260 | const char *error_message); | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
261 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
262 | #ifdef __unix__ |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
263 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
264 | /* This structure represents both a pending DNS request and |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
265 | * a free child process. |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
266 | */ |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
267 | typedef struct { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
268 | char *host; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
269 | int port; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
270 | dns_callback_t callback; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
271 | gpointer data; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
272 | gint inpa; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
273 | int fd_in, fd_out; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
274 | pid_t dns_pid; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
275 | } pending_dns_request_t; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
276 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
277 | static GSList *free_dns_children = NULL; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
278 | static GQueue *queued_requests = NULL; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
279 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
280 | static int number_of_dns_children = 0; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
281 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
282 | const int MAX_DNS_CHILDREN = 2; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
283 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
284 | typedef struct { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
285 | char hostname[512]; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
286 | int port; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
287 | } dns_params_t; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
288 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
289 | typedef struct { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
290 | dns_params_t params; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
291 | dns_callback_t callback; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
292 | gpointer data; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
293 | } queued_dns_request_t; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
294 | |
| 4434 | 295 | static void req_free(pending_dns_request_t *req) |
| 296 | { | |
| 297 | g_return_if_fail(req != NULL); | |
| 298 | if(req->host) | |
| 299 | g_free(req->host); | |
| 300 | close(req->fd_in); | |
| 301 | close(req->fd_out); | |
| 302 | g_free(req); | |
| 303 | number_of_dns_children--; | |
| 304 | } | |
| 305 | ||
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
306 | static int send_dns_request_to_child(pending_dns_request_t *req, dns_params_t *dns_params) |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
307 | { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
308 | char ch; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
309 | int rc; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
310 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
311 | /* Are you alive? */ |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
312 | if(kill(req->dns_pid, 0) != 0) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
313 | gaim_debug(GAIM_DEBUG_WARNING, "dns", |
|
5218
b19d74418232
[gaim-migrate @ 5588]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
314 | "DNS child %d no longer exists\n", req->dns_pid); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
315 | return -1; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
316 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
317 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
318 | /* Let's contact this lost child! */ |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
319 | rc = write(req->fd_in, dns_params, sizeof(*dns_params)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
320 | if(rc<0) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
321 | gaim_debug(GAIM_DEBUG_ERROR, "dns", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
322 | "Unable to write to DNS child %d: %d\n", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
323 | req->dns_pid, strerror(errno)); |
| 4434 | 324 | close(req->fd_in); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
325 | return -1; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
326 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
327 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
328 | g_return_val_if_fail(rc == sizeof(*dns_params), -1); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
329 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
330 | /* Did you hear me? (This avoids some race conditions) */ |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
331 | rc = read(req->fd_out, &ch, 1); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
332 | if(rc != 1 || ch!='Y') { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
333 | gaim_debug(GAIM_DEBUG_WARNING, "dns", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
334 | "DNS child %d not responding. Killing it!\n", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
335 | req->dns_pid); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
336 | kill(req->dns_pid, SIGKILL); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
337 | return -1; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
338 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
339 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
340 | gaim_debug(GAIM_DEBUG_INFO, "dns", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
341 | "Successfully sent DNS request to child %d\n", req->dns_pid); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
342 | return 0; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
343 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
344 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
345 | static void host_resolved(gpointer data, gint source, GaimInputCondition cond); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
346 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
347 | static void release_dns_child(pending_dns_request_t *req) |
|
2911
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
348 | { |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
349 | g_free(req->host); |
| 4434 | 350 | req->host=NULL; |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
351 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
352 | if(queued_requests && !g_queue_is_empty(queued_requests)) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
353 | queued_dns_request_t *r = g_queue_pop_head(queued_requests); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
354 | req->host = g_strdup(r->params.hostname); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
355 | req->port = r->params.port; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
356 | req->callback = r->callback; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
357 | req->data = r->data; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
358 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
359 | gaim_debug(GAIM_DEBUG_INFO, "dns", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
360 | "Processing queued DNS query for '%s' with child %d\n", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
361 | req->host, req->dns_pid); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
362 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
363 | if(send_dns_request_to_child(req, &(r->params)) != 0) { |
| 4434 | 364 | req_free(req); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
365 | req = NULL; |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
366 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
367 | gaim_debug(GAIM_DEBUG_WARNING, "dns", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
368 | "Intent of process queued query of '%s' failed, " |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
369 | "requeueing...\n", r->params.hostname); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
370 | g_queue_push_head(queued_requests, r); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
371 | } else { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
372 | req->inpa = gaim_input_add(req->fd_out, GAIM_INPUT_READ, host_resolved, req); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
373 | g_free(r); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
374 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
375 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
376 | } else { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
377 | req->host = NULL; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
378 | req->callback = NULL; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
379 | req->data = NULL; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
380 | free_dns_children = g_slist_append(free_dns_children, req); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
381 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
382 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
383 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
384 | static void host_resolved(gpointer data, gint source, GaimInputCondition cond) |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
385 | { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
386 | pending_dns_request_t *req = (pending_dns_request_t*)data; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
387 | int rc, err; |
| 4678 | 388 | GSList *hosts = NULL; |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
389 | struct sockaddr *addr = NULL; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
390 | socklen_t addrlen; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
391 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
392 | gaim_debug(GAIM_DEBUG_INFO, "dns", "Host '%s' resolved\n", req->host); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
393 | gaim_input_remove(req->inpa); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
394 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
395 | rc=read(req->fd_out, &err, sizeof(err)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
396 | if((rc==4) && (err!=0)) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
397 | char message[1024]; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
398 | g_snprintf(message, sizeof(message), "DNS error: %s (pid=%d)", |
|
7475
987384816492
[gaim-migrate @ 8088]
Mark Doliner <markdoliner@pidgin.im>
parents:
7106
diff
changeset
|
399 | #if HAVE_GETADDRINFO |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
400 | gai_strerror(err), |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
401 | #else |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
402 | hstrerror(err), |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
403 | #endif |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
404 | req->dns_pid); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
405 | gaim_debug(GAIM_DEBUG_ERROR, "dns", "%s\n", message); |
| 4678 | 406 | req->callback(NULL, req->data, message); |
| 407 | release_dns_child(req); | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
408 | return; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
409 | } |
|
4367
e96fd092f723
[gaim-migrate @ 4633]
Mark Doliner <markdoliner@pidgin.im>
parents:
4366
diff
changeset
|
410 | if(rc>0) { |
| 4678 | 411 | while(rc > 0) { |
| 412 | rc=read(req->fd_out, &addrlen, sizeof(addrlen)); | |
| 413 | if(rc>0 && addrlen > 0) { | |
| 414 | addr=g_malloc(addrlen); | |
| 415 | rc=read(req->fd_out, addr, addrlen); | |
| 416 | hosts = g_slist_append(hosts, GINT_TO_POINTER(addrlen)); | |
| 417 | hosts = g_slist_append(hosts, addr); | |
| 418 | } else { | |
| 419 | break; | |
| 420 | } | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
421 | } |
| 4678 | 422 | } else if(rc==-1) { |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
423 | char message[1024]; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
424 | g_snprintf(message, sizeof(message), "Error reading from DNS child: %s",strerror(errno)); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
425 | gaim_debug(GAIM_DEBUG_ERROR, "dns", "%s\n", message); |
| 4678 | 426 | req->callback(NULL, req->data, message); |
| 4434 | 427 | req_free(req); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
428 | return; |
| 4678 | 429 | } else if(rc==0) { |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
430 | char message[1024]; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
431 | g_snprintf(message, sizeof(message), "EOF reading from DNS child"); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
432 | close(req->fd_out); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
433 | gaim_debug(GAIM_DEBUG_ERROR, "dns", "%s\n", message); |
| 4678 | 434 | req->callback(NULL, req->data, message); |
| 4434 | 435 | req_free(req); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
436 | return; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
437 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
438 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
439 | /* wait4(req->dns_pid, NULL, WNOHANG, NULL); */ |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
440 | |
| 4678 | 441 | req->callback(hosts, req->data, NULL); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
442 | |
| 4678 | 443 | while(hosts) { |
| 444 | hosts = g_slist_remove(hosts, hosts->data); | |
| 445 | g_free(hosts->data); | |
| 446 | hosts = g_slist_remove(hosts, hosts->data); | |
| 447 | } | |
| 448 | ||
| 449 | release_dns_child(req); | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
450 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
451 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
452 | static void trap_gdb_bug() |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
453 | { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
454 | const char *message = |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
455 | "Gaim's DNS child got a SIGTRAP signal. \n" |
|
5435
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5426
diff
changeset
|
456 | "This can be caused by trying to run gaim inside gdb.\n" |
|
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5426
diff
changeset
|
457 | "There is a known gdb bug which prevents this. Supposedly gaim\n" |
|
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5426
diff
changeset
|
458 | "should have detected you were using gdb and used an ugly hack,\n" |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
459 | "check cope_with_gdb_brokenness() in proxy.c.\n\n" |
|
5435
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5426
diff
changeset
|
460 | "For more info about this bug, see http://sources.redhat.com/ml/gdb/2001-07/msg00349.html\n"; |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
461 | fputs("\n* * *\n",stderr); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
462 | fputs(message,stderr); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
463 | fputs("* * *\n\n",stderr); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
464 | execlp("xmessage","xmessage","-center", message, NULL); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
465 | _exit(1); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
466 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
467 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
468 | static void cope_with_gdb_brokenness() |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
469 | { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
470 | static gboolean already_done = FALSE; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
471 | char s[300], e[300]; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
472 | int n; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
473 | pid_t ppid; |
|
2911
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
474 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
475 | #ifdef __linux__ |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
476 | if(already_done) |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
477 | return; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
478 | already_done = TRUE; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
479 | ppid = getppid(); |
|
5435
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5426
diff
changeset
|
480 | snprintf(s, 300, "/proc/%d/exe", ppid); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
481 | n = readlink(s, e, sizeof(e)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
482 | e[MAX(n,sizeof(e)-1)] = '\0'; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
483 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
484 | if(strstr(e,"gdb")) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
485 | gaim_debug(GAIM_DEBUG_INFO, "dns", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
486 | "Debugger detected, performing useless query...\n"); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
487 | gethostbyname("x.x.x.x.x"); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
488 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
489 | #endif |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
490 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
491 | |
| 4434 | 492 | int gaim_gethostbyname_async(const char *hostname, int port, dns_callback_t callback, gpointer data) |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
493 | { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
494 | pending_dns_request_t *req = NULL; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
495 | dns_params_t dns_params; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
496 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
497 | strncpy(dns_params.hostname, hostname, sizeof(dns_params.hostname)-1); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
498 | dns_params.hostname[sizeof(dns_params.hostname)-1] = '\0'; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
499 | dns_params.port = port; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
500 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
501 | /* Is there a free available child? */ |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
502 | while(free_dns_children && !req) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
503 | GSList *l = free_dns_children; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
504 | free_dns_children = g_slist_remove_link(free_dns_children, l); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
505 | req = l->data; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
506 | g_slist_free(l); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
507 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
508 | if(send_dns_request_to_child(req, &dns_params) != 0) { |
| 4434 | 509 | req_free(req); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
510 | req = NULL; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
511 | continue; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
512 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
513 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
514 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
515 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
516 | if(!req) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
517 | int child_out[2], child_in[2]; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
518 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
519 | if(number_of_dns_children >= MAX_DNS_CHILDREN) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
520 | queued_dns_request_t *r = g_new(queued_dns_request_t, 1); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
521 | memcpy(&(r->params), &dns_params, sizeof(dns_params)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
522 | r->callback = callback; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
523 | r->data = data; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
524 | if(!queued_requests) |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
525 | queued_requests = g_queue_new(); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
526 | g_queue_push_tail(queued_requests, r); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
527 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
528 | gaim_debug(GAIM_DEBUG_INFO, "dns", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
529 | "DNS query for '%s' queued\n", hostname); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
530 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
531 | return 0; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
532 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
533 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
534 | if(pipe(child_out) || pipe(child_in)) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
535 | gaim_debug(GAIM_DEBUG_ERROR, "dns", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
536 | "Could not create pipes: %s\n", strerror(errno)); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
537 | return -1; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
538 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
539 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
540 | /* We need to create a new child. */ |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
541 | req = g_new(pending_dns_request_t,1); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
542 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
543 | cope_with_gdb_brokenness(); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
544 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
545 | req->dns_pid=fork(); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
546 | if(req->dns_pid==0) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
547 | const int zero = 0; |
| 4394 | 548 | int rc; |
| 549 | ||
|
7475
987384816492
[gaim-migrate @ 8088]
Mark Doliner <markdoliner@pidgin.im>
parents:
7106
diff
changeset
|
550 | #if HAVE_GETADDRINFO |
| 4678 | 551 | struct addrinfo hints, *res, *tmp; |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
552 | char servname[20]; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
553 | #else |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
554 | struct sockaddr_in sin; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
555 | const socklen_t addrlen = sizeof(sin); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
556 | #endif |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
557 | #ifdef HAVE_SIGNAL_H |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
558 | signal(SIGHUP, SIG_DFL); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
559 | signal(SIGINT, SIG_DFL); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
560 | signal(SIGQUIT, SIG_DFL); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
561 | signal(SIGCHLD, SIG_DFL); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
562 | signal(SIGTERM, SIG_DFL); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
563 | signal(SIGTRAP, trap_gdb_bug); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
564 | #endif |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
565 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
566 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
567 | close(child_out[0]); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
568 | close(child_in[1]); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
569 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
570 | while(1) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
571 | if(dns_params.hostname[0] == '\0') { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
572 | const char Y = 'Y'; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
573 | fd_set fds; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
574 | struct timeval tv = { .tv_sec = 40 , .tv_usec = 0 }; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
575 | FD_ZERO(&fds); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
576 | FD_SET(child_in[0], &fds); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
577 | rc = select(child_in[0]+1, &fds, NULL, NULL, &tv); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
578 | if(!rc) { |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
579 | if (opt_debug) |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
580 | fprintf(stderr,"dns[%d]: nobody needs me... =(\n", getpid()); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
581 | break; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
582 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
583 | rc = read(child_in[0], &dns_params, sizeof(dns_params)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
584 | if(rc < 0) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
585 | perror("read()"); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
586 | break; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
587 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
588 | if(rc==0) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
589 | if(opt_debug) |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
590 | fprintf(stderr,"dns[%d]: Ops, father has gone, wait for me, wait...!\n", getpid()); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
591 | _exit(0); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
592 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
593 | if(dns_params.hostname[0] == '\0') { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
594 | fprintf(stderr, "dns[%d]: hostname = \"\" (port = %d)!!!\n", getpid(), dns_params.port); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
595 | _exit(1); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
596 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
597 | write(child_out[1], &Y, 1); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
598 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
599 | |
|
7475
987384816492
[gaim-migrate @ 8088]
Mark Doliner <markdoliner@pidgin.im>
parents:
7106
diff
changeset
|
600 | #if HAVE_GETADDRINFO |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
601 | g_snprintf(servname, sizeof(servname), "%d", dns_params.port); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
602 | memset(&hints,0,sizeof(hints)); |
| 4434 | 603 | |
| 604 | /* This is only used to convert a service | |
| 605 | * name to a port number. As we know we are | |
| 606 | * passing a number already, we know this | |
| 607 | * value will not be really used by the C | |
| 608 | * library. | |
| 609 | */ | |
| 610 | hints.ai_socktype = SOCK_STREAM; | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
611 | rc = getaddrinfo(dns_params.hostname, servname, &hints, &res); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
612 | if(rc) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
613 | write(child_out[1], &rc, sizeof(int)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
614 | close(child_out[1]); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
615 | if(opt_debug) |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
616 | fprintf(stderr,"dns[%d] Error: getaddrinfo returned %d\n", |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
617 | getpid(), rc); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
618 | dns_params.hostname[0] = '\0'; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
619 | continue; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
620 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
621 | write(child_out[1], &zero, sizeof(zero)); |
| 4679 | 622 | tmp = res; |
| 4678 | 623 | while(res) { |
| 624 | write(child_out[1], &(res->ai_addrlen), sizeof(res->ai_addrlen)); | |
| 625 | write(child_out[1], res->ai_addr, res->ai_addrlen); | |
| 626 | res = res->ai_next; | |
| 627 | } | |
| 4679 | 628 | freeaddrinfo(tmp); |
| 4678 | 629 | write(child_out[1], &zero, sizeof(zero)); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
630 | #else |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
631 | if (!inet_aton(hostname, &sin.sin_addr)) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
632 | struct hostent *hp; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
633 | if(!(hp = gethostbyname(dns_params.hostname))) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
634 | write(child_out[1], &h_errno, sizeof(int)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
635 | close(child_out[1]); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
636 | if(opt_debug) |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
637 | fprintf(stderr,"DNS Error: %s\n",hstrerror(h_errno)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
638 | _exit(0); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
639 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
640 | memset(&sin, 0, sizeof(struct sockaddr_in)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
641 | memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
642 | sin.sin_family = hp->h_addrtype; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
643 | } else |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
644 | sin.sin_family = AF_INET; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
645 | sin.sin_port = htons(dns_params.port); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
646 | write(child_out[1], &zero, sizeof(zero)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
647 | write(child_out[1], &addrlen, sizeof(addrlen)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
648 | write(child_out[1], &sin, addrlen); |
| 4678 | 649 | write(child_out[1], &zero, sizeof(zero)); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
650 | #endif |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
651 | dns_params.hostname[0] = '\0'; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
652 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
653 | close(child_out[1]); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
654 | close(child_in[0]); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
655 | _exit(0); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
656 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
657 | close(child_out[1]); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
658 | close(child_in[0]); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
659 | if(req->dns_pid==-1) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
660 | gaim_debug(GAIM_DEBUG_ERROR, "dns", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
661 | "Could not create child process for DNS: %s\n", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
662 | strerror(errno)); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
663 | g_free(req); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
664 | return -1; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
665 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
666 | req->fd_in = child_in[1]; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
667 | req->fd_out = child_out[0]; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
668 | number_of_dns_children++; |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
669 | gaim_debug(GAIM_DEBUG_INFO, "dns", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
670 | "Created new DNS child %d, there are now %d children.\n", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
671 | req->dns_pid, number_of_dns_children); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
672 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
673 | req->host=g_strdup(hostname); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
674 | req->port=port; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
675 | req->callback=callback; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
676 | req->data=data; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
677 | req->inpa = gaim_input_add(req->fd_out, GAIM_INPUT_READ, host_resolved, req); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
678 | return 0; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
679 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
680 | #else |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
681 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
682 | typedef struct { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
683 | gpointer data; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
684 | size_t addrlen; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
685 | struct sockaddr *addr; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
686 | dns_callback_t callback; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
687 | } pending_dns_request_t; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
688 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
689 | static gboolean host_resolved(gpointer data) |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
690 | { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
691 | pending_dns_request_t *req = (pending_dns_request_t*)data; |
| 4678 | 692 | GSList *hosts = NULL; |
| 693 | hosts = g_slist_append(hosts, GINT_TO_POINTER(req->addrlen)); | |
| 694 | hosts = g_slist_append(hosts, req->addr); | |
| 695 | req->callback(hosts, req->data, NULL); | |
| 696 | g_slist_free(hosts); | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
697 | g_free(req->addr); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
698 | g_free(req); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
699 | return FALSE; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
700 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
701 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
702 | int |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
703 | gaim_gethostbyname_async(const char *hostname, int port, |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
704 | dns_callback_t callback, gpointer data) |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
705 | { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
706 | struct sockaddr_in sin; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
707 | pending_dns_request_t *req; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
708 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
709 | if (!inet_aton(hostname, &sin.sin_addr)) { |
|
2911
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
710 | struct hostent *hp; |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
711 | if(!(hp = gethostbyname(hostname))) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
712 | gaim_debug(GAIM_DEBUG_ERROR, "dns", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
713 | "gaim_gethostbyname(\"%s\", %d) failed: %s\n", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
714 | hostname, port, hstrerror(h_errno)); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
715 | return -1; |
|
2911
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
716 | } |
|
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
717 | memset(&sin, 0, sizeof(struct sockaddr_in)); |
|
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
718 | memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); |
|
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
719 | sin.sin_family = hp->h_addrtype; |
|
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
720 | } else |
|
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
721 | sin.sin_family = AF_INET; |
|
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
722 | sin.sin_port = htons(port); |
|
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
723 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
724 | req = g_new(pending_dns_request_t, 1); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
725 | req->addr = (struct sockaddr*) g_memdup(&sin, sizeof(sin)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
726 | req->addrlen = sizeof(sin); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
727 | req->data = data; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
728 | req->callback = callback; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
729 | g_timeout_add(10, host_resolved, req); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
730 | return 0; |
|
2911
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
731 | } |
|
b20669ca1281
[gaim-migrate @ 2924]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2907
diff
changeset
|
732 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
733 | #endif |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
734 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
735 | static void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
736 | no_one_calls(gpointer data, gint source, GaimInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
737 | { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
738 | struct PHB *phb = data; |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
739 | unsigned int len; |
|
4648
22f8080928e0
[gaim-migrate @ 4959]
Herman Bloggs <herman@bluedigits.com>
parents:
4634
diff
changeset
|
740 | int error=0; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
741 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
742 | gaim_debug(GAIM_DEBUG_INFO, "proxy", "Connected.\n"); |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
743 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
744 | len = sizeof(error); |
|
4648
22f8080928e0
[gaim-migrate @ 4959]
Herman Bloggs <herman@bluedigits.com>
parents:
4634
diff
changeset
|
745 | |
|
5970
797f5f43c1bd
[gaim-migrate @ 6417]
Mark Doliner <markdoliner@pidgin.im>
parents:
5872
diff
changeset
|
746 | if (getsockopt(source, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { |
|
797f5f43c1bd
[gaim-migrate @ 6417]
Mark Doliner <markdoliner@pidgin.im>
parents:
5872
diff
changeset
|
747 | /* if (ret < 0 || error != 0) { */ |
|
797f5f43c1bd
[gaim-migrate @ 6417]
Mark Doliner <markdoliner@pidgin.im>
parents:
5872
diff
changeset
|
748 | /* The fourth parameter above isn't really "error", is it? */ |
|
797f5f43c1bd
[gaim-migrate @ 6417]
Mark Doliner <markdoliner@pidgin.im>
parents:
5872
diff
changeset
|
749 | /* if(ret==0) errno = error; */ |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
750 | close(source); |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
751 | gaim_input_remove(phb->inpa); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
752 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
753 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
754 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
755 | |
| 4993 | 756 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
757 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
758 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
759 | g_free(phb->host); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
760 | g_free(phb); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
761 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
762 | gaim_debug(GAIM_DEBUG_ERROR, "proxy", |
|
5225
95b959a471e3
[gaim-migrate @ 5595]
Herman Bloggs <herman@bluedigits.com>
parents:
5218
diff
changeset
|
763 | "getsockopt SO_ERROR check: %s\n", strerror(errno)); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
764 | return; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
765 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
766 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
767 | fcntl(source, F_SETFL, 0); |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
768 | gaim_input_remove(phb->inpa); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
769 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
770 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
771 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
772 | |
| 4993 | 773 | phb->func(phb->data, source, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
774 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
775 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
776 | g_free(phb->host); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
777 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
778 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
779 | |
|
1868
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
780 | static gboolean clean_connect(gpointer data) |
|
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
781 | { |
|
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
782 | struct PHB *phb = data; |
|
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
783 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
784 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
785 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
786 | |
| 4993 | 787 | phb->func(phb->data, phb->port, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
788 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
789 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
790 | g_free(phb->host); |
|
1868
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
791 | g_free(phb); |
|
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
792 | |
|
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
793 | return FALSE; |
|
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
794 | } |
|
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
795 | |
|
31b44ef2b061
[gaim-migrate @ 1878]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1844
diff
changeset
|
796 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
797 | static int |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
798 | proxy_connect_none(struct PHB *phb, struct sockaddr *addr, socklen_t addrlen) |
| 1 | 799 | { |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
800 | int fd = -1; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
801 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
802 | gaim_debug(GAIM_DEBUG_INFO, "proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
803 | "Connecting to %s:%d with no proxy\n", phb->host, phb->port); |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
804 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
805 | if ((fd = socket(addr->sa_family, SOCK_STREAM, 0)) < 0) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
806 | gaim_debug(GAIM_DEBUG_ERROR, "proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
807 | "Unable to create socket: %s\n", strerror(errno)); |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
808 | return -1; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
809 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
810 | fcntl(fd, F_SETFL, O_NONBLOCK); |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
811 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
812 | if (connect(fd, (struct sockaddr *)addr, addrlen) < 0) { |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
813 | if ((errno == EINPROGRESS) || (errno == EINTR)) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
814 | gaim_debug(GAIM_DEBUG_WARNING, "proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
815 | "Connect would have blocked.\n"); |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
816 | phb->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, no_one_calls, phb); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
817 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
818 | else { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
819 | gaim_debug(GAIM_DEBUG_ERROR, "proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
820 | "Connect failed (errno %d)\n", errno); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
821 | close(fd); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
822 | return -1; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
823 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
824 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
825 | else { |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
826 | unsigned int len; |
|
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
827 | int error = ETIMEDOUT; |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
828 | gaim_debug(GAIM_DEBUG_MISC, "proxy", "Connect didn't block.\n"); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
829 | len = sizeof(error); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
830 | if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
831 | gaim_debug(GAIM_DEBUG_ERROR, "proxy", "getsockopt failed.\n"); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
832 | close(fd); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
833 | return -1; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
834 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
835 | fcntl(fd, F_SETFL, 0); |
|
2372
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2306
diff
changeset
|
836 | phb->port = fd; /* bleh */ |
|
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2306
diff
changeset
|
837 | g_timeout_add(50, clean_connect, phb); /* we do this because we never |
|
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2306
diff
changeset
|
838 | want to call our callback |
|
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2306
diff
changeset
|
839 | before we return. */ |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
840 | } |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
841 | |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
842 | return fd; |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
843 | } |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
844 | |
| 3376 | 845 | #define HTTP_GOODSTRING "HTTP/1.0 200" |
| 846 | #define HTTP_GOODSTRING2 "HTTP/1.1 200" | |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
847 | |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
848 | #if 0 |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
849 | /* QQQ */ |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
850 | static void |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
851 | http_uri_get_host(const char *uri) |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
852 | { |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
853 | GaimProxyInfo *info; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
854 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
855 | char *c, *d; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
856 | char buffer[2048]; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
857 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
858 | char host[128]; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
859 | char user[128]; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
860 | char pass[128]; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
861 | int port = 0; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
862 | int len = 0; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
863 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
864 | host[0] = '\0'; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
865 | user[0] = '\0'; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
866 | pass[0] = '\0'; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
867 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
868 | gaim_debug(GAIM_DEBUG_MISC, "gaimrc", |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
869 | "gaimrc_parse_proxy_uri(%s)\n", proxy); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
870 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
871 | if ((c = strchr(proxy, ':')) == NULL) |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
872 | { |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
873 | gaim_debug(GAIM_DEBUG_ERROR, "gaimrc", |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
874 | "No URI detected.\n"); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
875 | /* No URI detected. */ |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
876 | return FALSE; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
877 | } |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
878 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
879 | len = c - proxy; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
880 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
881 | if (strncmp(proxy, "http://", len + 3)) |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
882 | return FALSE; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
883 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
884 | gaim_debug(GAIM_DEBUG_MISC, "gaimrc", "Found HTTP proxy.\n"); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
885 | /* Get past "://" */ |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
886 | c += 3; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
887 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
888 | gaim_debug(GAIM_DEBUG_MISC, "gaimrc", "Looking at %s\n", c); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
889 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
890 | for (;;) |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
891 | { |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
892 | *buffer = '\0'; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
893 | d = buffer; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
894 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
895 | while (*c != '\0' && *c != '@' && *c != ':' && *c != '/') |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
896 | *d++ = *c++; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
897 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
898 | *d = '\0'; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
899 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
900 | if (*c == ':') |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
901 | { |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
902 | /* |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
903 | * If there is a '@' in there somewhere, we are in the auth part. |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
904 | * If not, host. |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
905 | */ |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
906 | if (strchr(c, '@') != NULL) |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
907 | strcpy(user, buffer); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
908 | else |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
909 | strcpy(host, buffer); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
910 | } |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
911 | else if (*c == '@') |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
912 | { |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
913 | if (user[0] == '\0') |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
914 | strcpy(user, buffer); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
915 | else |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
916 | strcpy(pass, buffer); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
917 | } |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
918 | else if (*c == '/' || *c == '\0') |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
919 | { |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
920 | if (host[0] == '\0') |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
921 | strcpy(host, buffer); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
922 | else |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
923 | port = atoi(buffer); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
924 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
925 | /* Done. */ |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
926 | break; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
927 | } |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
928 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
929 | c++; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
930 | } |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
931 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
932 | /* NOTE: HTTP_PROXY takes precendence. */ |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
933 | info = gaim_global_proxy_get_info(); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
934 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
935 | if (*host) gaim_proxy_info_set_host(info, host); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
936 | if (*user) gaim_proxy_info_set_username(info, user); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
937 | if (*pass) gaim_proxy_info_set_password(info, pass); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
938 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
939 | gaim_proxy_info_set_port(info, port); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
940 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
941 | gaim_debug(GAIM_DEBUG_MISC, "gaimrc", |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
942 | "Host: '%s', User: '%s', Password: '%s', Port: %d\n", |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
943 | gaim_proxy_info_get_host(info), |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
944 | gaim_proxy_info_get_username(info), |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
945 | gaim_proxy_info_get_password(info), |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
946 | gaim_proxy_info_get_port(info)); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
947 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
948 | return TRUE; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
949 | } |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
950 | #endif |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
951 | |
| 7834 | 952 | |
| 953 | static void | |
| 954 | http_complete(struct PHB *phb, gint source) | |
| 955 | { | |
| 956 | gaim_debug(GAIM_DEBUG_INFO, "http proxy", "proxy connection established\n"); | |
| 957 | if(!phb->account || phb->account->gc) | |
| 958 | phb->func(phb->data, source, GAIM_INPUT_READ); | |
| 959 | g_free(phb->host); | |
| 960 | g_free(phb); | |
| 961 | } | |
| 962 | ||
| 963 | ||
| 964 | /* read the response to the CONNECT request, if we are requesting a non-port-80 tunnel */ | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
965 | static void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
966 | http_canread(gpointer data, gint source, GaimInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
967 | { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
968 | int nlc = 0; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
969 | int pos = 0; |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
970 | int minor, major, status, error=0; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
971 | struct PHB *phb = data; |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
972 | char inputline[8192], *p; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
973 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
974 | gaim_input_remove(phb->inpa); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
975 | |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
976 | while ((nlc != 2) && (read(source, &inputline[pos++], 1) == 1)) { |
|
2372
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2306
diff
changeset
|
977 | if (inputline[pos - 1] == '\n') |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
978 | nlc++; |
|
2372
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2306
diff
changeset
|
979 | else if (inputline[pos - 1] != '\r') |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
980 | nlc = 0; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
981 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
982 | inputline[pos] = '\0'; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
983 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
984 | error = strncmp(inputline, "HTTP/", 5) != 0; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
985 | if(!error) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
986 | p = inputline + 5; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
987 | major = strtol(p, &p, 10); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
988 | error = (major==0) || (*p != '.'); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
989 | if(!error) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
990 | p++; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
991 | minor = strtol(p, &p, 10); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
992 | error = (*p!=' '); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
993 | if(!error) { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
994 | p++; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
995 | status = strtol(p, &p, 10); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
996 | error = (*p!=' '); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
997 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
998 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
999 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1000 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1001 | if(error) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1002 | gaim_debug(GAIM_DEBUG_ERROR, "proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1003 | "Unable to parse proxy's response: %s\n", inputline); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1004 | close(source); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1005 | source=-1; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1006 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1007 | else if(status!=200) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1008 | gaim_debug(GAIM_DEBUG_ERROR, "proxy", |
| 7834 | 1009 | "Proxy server replied with:\n%s\n", p); |
| 1010 | close(source); | |
| 1011 | source = -1; | |
| 1012 | ||
| 1013 | if ( status == 403 /* Forbidden */ ) | |
| 1014 | gaim_connection_error(phb->account->gc, _("Access denied: proxy server forbids port 80 tunnelling.")); | |
| 1015 | else { | |
| 1016 | char *msg = g_strdup_printf(_("Proxy connection error %d"), status); | |
| 1017 | gaim_connection_error(phb->account->gc, msg); | |
| 1018 | g_free(msg); | |
| 1019 | } | |
| 1020 | ||
| 1021 | } else { | |
| 1022 | http_complete(phb, source); | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1023 | } |
| 7834 | 1024 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1025 | return; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1026 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1027 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1028 | static void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1029 | http_canwrite(gpointer data, gint source, GaimInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1030 | { |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1031 | char request[8192]; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1032 | int request_len = 0; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1033 | struct PHB *phb = data; |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1034 | unsigned int len; |
|
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1035 | int error = ETIMEDOUT; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1036 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1037 | gaim_debug(GAIM_DEBUG_INFO, "http proxy", "Connected.\n"); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1038 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1039 | if (phb->inpa > 0) |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1040 | gaim_input_remove(phb->inpa); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1041 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1042 | len = sizeof(error); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1043 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1044 | if (getsockopt(source, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1045 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1046 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1047 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1048 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1049 | |
| 4993 | 1050 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1051 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1052 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1053 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1054 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1055 | return; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1056 | } |
| 7834 | 1057 | |
| 1058 | gaim_debug(GAIM_DEBUG_INFO, "proxy", "using CONNECT tunnelling for %s:%d\n", phb->host, phb->port); | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1059 | request_len = g_snprintf(request, sizeof(request), |
| 7834 | 1060 | "CONNECT %s:%d HTTP/1.1\r\nHost: %s:%d\r\n", |
| 1061 | phb->host, phb->port, phb->host, phb->port); | |
|
1843
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
1062 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1063 | if (gaim_proxy_info_get_username(phb->gpi) != NULL) { |
|
1843
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
1064 | char *t1, *t2; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1065 | t1 = g_strdup_printf("%s:%s", |
| 7834 | 1066 | gaim_proxy_info_get_username(phb->gpi), |
| 1067 | gaim_proxy_info_get_password(phb->gpi) ? | |
| 1068 | gaim_proxy_info_get_password(phb->gpi) : ""); | |
|
7106
eaeff5775818
[gaim-migrate @ 7671]
Christian Hammond <chipx86@chipx86.com>
parents:
6856
diff
changeset
|
1069 | t2 = gaim_base64_encode(t1, strlen(t1)); |
|
1843
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
1070 | g_free(t1); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1071 | g_return_if_fail(request_len < sizeof(request)); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1072 | request_len += g_snprintf(request + request_len, |
| 7834 | 1073 | sizeof(request) - request_len, |
| 1074 | "Proxy-Authorization: Basic %s\r\n", t2); | |
|
1843
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
1075 | g_free(t2); |
|
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
1076 | } |
|
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
1077 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1078 | g_return_if_fail(request_len < sizeof(request)); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1079 | strcpy(request + request_len, "\r\n"); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1080 | request_len += 2; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1081 | |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1082 | if (write(source, request, request_len) < 0) { |
|
1843
aeeac3ee7ac5
[gaim-migrate @ 1853]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1840
diff
changeset
|
1083 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1084 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1085 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1086 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1087 | |
| 4993 | 1088 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1089 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1090 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1091 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1092 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1093 | return; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1094 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1095 | |
| 7834 | 1096 | /* register the response handler for the CONNECT request */ |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1097 | phb->inpa = gaim_input_add(source, GAIM_INPUT_READ, http_canread, phb); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1098 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1099 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1100 | static int |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1101 | proxy_connect_http(struct PHB *phb, struct sockaddr *addr, socklen_t addrlen) |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1102 | { |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1103 | int fd = -1; |
| 1 | 1104 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1105 | gaim_debug(GAIM_DEBUG_INFO, "http proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1106 | "Connecting to %s:%d via %s:%d using HTTP\n", |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1107 | phb->host, phb->port, |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1108 | gaim_proxy_info_get_host(phb->gpi), |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1109 | gaim_proxy_info_get_port(phb->gpi)); |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1110 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1111 | if ((fd = socket(addr->sa_family, SOCK_STREAM, 0)) < 0) { |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1112 | return -1; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1113 | } |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1114 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1115 | fcntl(fd, F_SETFL, O_NONBLOCK); |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1116 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1117 | if (connect(fd, addr, addrlen) < 0) { |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1118 | if ((errno == EINPROGRESS) || (errno == EINTR)) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1119 | gaim_debug(GAIM_DEBUG_WARNING, "http proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1120 | "Connect would have blocked.\n"); |
| 7834 | 1121 | |
| 1122 | if (phb->port != 80) { | |
| 1123 | /* we need to do CONNECT first */ | |
| 1124 | phb->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, | |
| 1125 | http_canwrite, phb); | |
| 1126 | } else { | |
| 1127 | http_complete(phb, fd); | |
| 1128 | } | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1129 | } else { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1130 | close(fd); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1131 | return -1; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1132 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1133 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1134 | else { |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1135 | unsigned int len; |
|
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1136 | int error = ETIMEDOUT; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1137 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1138 | gaim_debug(GAIM_DEBUG_MISC, "http proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1139 | "Connect didn't block.\n"); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1140 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1141 | len = sizeof(error); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1142 | if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1143 | close(fd); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1144 | return -1; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1145 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1146 | fcntl(fd, F_SETFL, 0); |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1147 | http_canwrite(phb, fd, GAIM_INPUT_WRITE); |
|
1695
30db76d87de8
[gaim-migrate @ 1705]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1451
diff
changeset
|
1148 | } |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1149 | |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1150 | return fd; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1151 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1152 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1153 | static void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1154 | s4_canread(gpointer data, gint source, GaimInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1155 | { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1156 | unsigned char packet[12]; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1157 | struct PHB *phb = data; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1158 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1159 | gaim_input_remove(phb->inpa); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1160 | |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1161 | memset(packet, 0, sizeof(packet)); |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1162 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1163 | if (read(source, packet, 9) >= 4 && packet[1] == 90) { |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1164 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1165 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1166 | |
| 6017 | 1167 | phb->func(phb->data, source, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1168 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1169 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1170 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1171 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1172 | return; |
|
1695
30db76d87de8
[gaim-migrate @ 1705]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1451
diff
changeset
|
1173 | } |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1174 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1175 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1176 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1177 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1178 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1179 | |
| 4993 | 1180 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1181 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1182 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1183 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1184 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1185 | } |
|
1705
cc63a8819c1c
[gaim-migrate @ 1715]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1695
diff
changeset
|
1186 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1187 | static void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1188 | s4_canwrite(gpointer data, gint source, GaimInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1189 | { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1190 | unsigned char packet[12]; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1191 | struct hostent *hp; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1192 | struct PHB *phb = data; |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1193 | unsigned int len; |
|
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1194 | int error = ETIMEDOUT; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1195 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1196 | gaim_debug(GAIM_DEBUG_INFO, "s4 proxy", "Connected.\n"); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1197 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1198 | if (phb->inpa > 0) |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1199 | gaim_input_remove(phb->inpa); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1200 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1201 | len = sizeof(error); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1202 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1203 | if (getsockopt(source, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1204 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1205 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1206 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1207 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1208 | |
| 4993 | 1209 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1210 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1211 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1212 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1213 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1214 | return; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1215 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1216 | fcntl(source, F_SETFL, 0); |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1217 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1218 | /* XXX does socks4 not support host name lookups by the proxy? */ |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1219 | if (!(hp = gethostbyname(phb->host))) { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1220 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1221 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1222 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1223 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1224 | |
| 4993 | 1225 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1226 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1227 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1228 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1229 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1230 | return; |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1231 | } |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1232 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1233 | packet[0] = 4; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1234 | packet[1] = 1; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1235 | packet[2] = phb->port >> 8; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1236 | packet[3] = phb->port & 0xff; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1237 | packet[4] = (unsigned char)(hp->h_addr_list[0])[0]; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1238 | packet[5] = (unsigned char)(hp->h_addr_list[0])[1]; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1239 | packet[6] = (unsigned char)(hp->h_addr_list[0])[2]; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1240 | packet[7] = (unsigned char)(hp->h_addr_list[0])[3]; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1241 | packet[8] = 0; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1242 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1243 | if (write(source, packet, 9) != 9) { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1244 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1245 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1246 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1247 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1248 | |
| 4993 | 1249 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1250 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1251 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1252 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1253 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1254 | return; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1255 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1256 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1257 | phb->inpa = gaim_input_add(source, GAIM_INPUT_READ, s4_canread, phb); |
| 1 | 1258 | } |
| 1259 | ||
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1260 | static int |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1261 | proxy_connect_socks4(struct PHB *phb, struct sockaddr *addr, socklen_t addrlen) |
| 1 | 1262 | { |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1263 | int fd = -1; |
| 1 | 1264 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1265 | gaim_debug(GAIM_DEBUG_INFO, "socks4 proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1266 | "Connecting to %s:%d via %s:%d using SOCKS4\n", |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1267 | phb->host, phb->port, |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1268 | gaim_proxy_info_get_host(phb->gpi), |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1269 | gaim_proxy_info_get_port(phb->gpi)); |
| 1 | 1270 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1271 | if ((fd = socket(addr->sa_family, SOCK_STREAM, 0)) < 0) |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1272 | return -1; |
| 1 | 1273 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1274 | fcntl(fd, F_SETFL, O_NONBLOCK); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1275 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1276 | if (connect(fd, addr, addrlen) < 0) { |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1277 | if ((errno == EINPROGRESS) || (errno == EINTR)) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1278 | gaim_debug(GAIM_DEBUG_WARNING, "socks4 proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1279 | "Connect would have blocked.\n"); |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1280 | phb->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, s4_canwrite, phb); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1281 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1282 | else { |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1283 | close(fd); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1284 | return -1; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1285 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1286 | } else { |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1287 | unsigned int len; |
|
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1288 | int error = ETIMEDOUT; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1289 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1290 | gaim_debug(GAIM_DEBUG_MISC, "socks4 proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1291 | "Connect didn't block.\n"); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1292 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1293 | len = sizeof(error); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1294 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1295 | if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1296 | close(fd); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1297 | return -1; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1298 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1299 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1300 | fcntl(fd, F_SETFL, 0); |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1301 | s4_canwrite(phb, fd, GAIM_INPUT_WRITE); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1302 | } |
|
670
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
1303 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1304 | return fd; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1305 | } |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1306 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1307 | static void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1308 | s5_canread_again(gpointer data, gint source, GaimInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1309 | { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1310 | unsigned char buf[512]; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1311 | struct PHB *phb = data; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1312 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1313 | gaim_input_remove(phb->inpa); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1314 | gaim_debug(GAIM_DEBUG_INFO, "socks5 proxy", "Able to read again.\n"); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1315 | |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1316 | if (read(source, buf, 10) < 10) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1317 | gaim_debug(GAIM_DEBUG_WARNING, "socks5 proxy", "or not...\n"); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1318 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1319 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1320 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1321 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1322 | |
| 6017 | 1323 | phb->func(phb->data, source, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1324 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1325 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1326 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1327 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1328 | return; |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1329 | } |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1330 | if ((buf[0] != 0x05) || (buf[1] != 0x00)) { |
|
7982
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
1331 | if ((buf[0] == 0x05) && (buf[1] < 0x09)) |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
1332 | gaim_debug(GAIM_DEBUG_ERROR, "socks5 proxy", socks5errors[buf[1]]); |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
1333 | else |
|
db8c1b6137eb
[gaim-migrate @ 8659]
Gavan Fantom <gavan@users.sourceforge.net>
parents:
7834
diff
changeset
|
1334 | gaim_debug(GAIM_DEBUG_ERROR, "socks5 proxy", "Bad data.\n"); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1335 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1336 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1337 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1338 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1339 | |
| 4993 | 1340 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1341 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1342 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1343 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1344 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1345 | return; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1346 | } |
|
670
1690e6b432ae
[gaim-migrate @ 680]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
664
diff
changeset
|
1347 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1348 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1349 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1350 | |
| 4993 | 1351 | phb->func(phb->data, source, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1352 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1353 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1354 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1355 | g_free(phb); |
| 1 | 1356 | } |
| 1357 | ||
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1358 | static void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1359 | s5_sendconnect(gpointer data, gint source) |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1360 | { |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1361 | unsigned char buf[512]; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1362 | struct PHB *phb = data; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1363 | int hlen = strlen(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1364 | |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1365 | buf[0] = 0x05; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1366 | buf[1] = 0x01; /* CONNECT */ |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1367 | buf[2] = 0x00; /* reserved */ |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1368 | buf[3] = 0x03; /* address type -- host name */ |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1369 | buf[4] = hlen; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1370 | memcpy(buf + 5, phb->host, hlen); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1371 | buf[5 + strlen(phb->host)] = phb->port >> 8; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1372 | buf[5 + strlen(phb->host) + 1] = phb->port & 0xff; |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1373 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1374 | if (write(source, buf, (5 + strlen(phb->host) + 2)) < (5 + strlen(phb->host) + 2)) { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1375 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1376 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1377 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1378 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1379 | |
| 4993 | 1380 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1381 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1382 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1383 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1384 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1385 | return; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1386 | } |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1387 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1388 | phb->inpa = gaim_input_add(source, GAIM_INPUT_READ, s5_canread_again, phb); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1389 | } |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1390 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1391 | static void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1392 | s5_readauth(gpointer data, gint source, GaimInputCondition cond) |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1393 | { |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1394 | unsigned char buf[512]; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1395 | struct PHB *phb = data; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1396 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1397 | gaim_input_remove(phb->inpa); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1398 | gaim_debug(GAIM_DEBUG_INFO, "socks5 proxy", "Got auth response.\n"); |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1399 | |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1400 | if (read(source, buf, 2) < 2) { |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1401 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1402 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1403 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1404 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1405 | |
| 4993 | 1406 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1407 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1408 | |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1409 | g_free(phb->host); |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1410 | g_free(phb); |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1411 | return; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1412 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1413 | |
| 2790 | 1414 | if ((buf[0] != 0x01) || (buf[1] != 0x00)) { |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1415 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1416 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1417 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1418 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1419 | |
| 4993 | 1420 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1421 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1422 | |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1423 | g_free(phb->host); |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1424 | g_free(phb); |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1425 | return; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1426 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1427 | |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1428 | s5_sendconnect(phb, source); |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1429 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1430 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1431 | static void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1432 | s5_canread(gpointer data, gint source, GaimInputCondition cond) |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1433 | { |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1434 | unsigned char buf[512]; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1435 | struct PHB *phb = data; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1436 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1437 | gaim_input_remove(phb->inpa); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1438 | gaim_debug(GAIM_DEBUG_INFO, "socks5 proxy", "Able to read.\n"); |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1439 | |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1440 | if (read(source, buf, 2) < 2) { |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1441 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1442 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1443 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1444 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1445 | |
| 6017 | 1446 | phb->func(phb->data, source, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1447 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1448 | |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1449 | g_free(phb->host); |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1450 | g_free(phb); |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1451 | return; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1452 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1453 | |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1454 | if ((buf[0] != 0x05) || (buf[1] == 0xff)) { |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1455 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1456 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1457 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1458 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1459 | |
| 4993 | 1460 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1461 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1462 | |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1463 | g_free(phb->host); |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1464 | g_free(phb); |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1465 | return; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1466 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1467 | |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1468 | if (buf[1] == 0x02) { |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1469 | unsigned int i, j; |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1470 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1471 | i = strlen(gaim_proxy_info_get_username(phb->gpi)); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1472 | j = strlen(gaim_proxy_info_get_password(phb->gpi)); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1473 | |
|
2372
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2306
diff
changeset
|
1474 | buf[0] = 0x01; /* version 1 */ |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1475 | buf[1] = i; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1476 | memcpy(buf + 2, gaim_proxy_info_get_username(phb->gpi), i); |
|
2372
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2306
diff
changeset
|
1477 | buf[2 + i] = j; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1478 | memcpy(buf + 2 + i + 1, gaim_proxy_info_get_password(phb->gpi), j); |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1479 | |
|
2372
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2306
diff
changeset
|
1480 | if (write(source, buf, 3 + i + j) < 3 + i + j) { |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1481 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1482 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1483 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1484 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1485 | |
| 4993 | 1486 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1487 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1488 | |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1489 | g_free(phb->host); |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1490 | g_free(phb); |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1491 | return; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1492 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1493 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1494 | phb->inpa = gaim_input_add(source, GAIM_INPUT_READ, s5_readauth, phb); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1495 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1496 | else { |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1497 | s5_sendconnect(phb, source); |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1498 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1499 | } |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1500 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1501 | static void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1502 | s5_canwrite(gpointer data, gint source, GaimInputCondition cond) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1503 | { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1504 | unsigned char buf[512]; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1505 | int i; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1506 | struct PHB *phb = data; |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1507 | unsigned int len; |
|
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1508 | int error = ETIMEDOUT; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1509 | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
1510 | gaim_debug(GAIM_DEBUG_INFO, "socks5 proxy", "Connected.\n"); |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1511 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1512 | if (phb->inpa > 0) |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1513 | gaim_input_remove(phb->inpa); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1514 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1515 | len = sizeof(error); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1516 | if (getsockopt(source, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1517 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1518 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1519 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1520 | |
| 4993 | 1521 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1522 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1523 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1524 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1525 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1526 | return; |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1527 | } |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1528 | fcntl(source, F_SETFL, 0); |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1529 | |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1530 | i = 0; |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1087
diff
changeset
|
1531 | buf[0] = 0x05; /* SOCKS version 5 */ |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1532 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1533 | if (gaim_proxy_info_get_username(phb->gpi) != NULL) { |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1534 | buf[1] = 0x02; /* two methods */ |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1535 | buf[2] = 0x00; /* no authentication */ |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1536 | buf[3] = 0x02; /* username/password authentication */ |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1537 | i = 4; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1538 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1539 | else { |
|
1844
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1540 | buf[1] = 0x01; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1541 | buf[2] = 0x00; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1542 | i = 3; |
|
161c00c36474
[gaim-migrate @ 1854]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1843
diff
changeset
|
1543 | } |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1544 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1545 | if (write(source, buf, i) < i) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1546 | gaim_debug(GAIM_DEBUG_ERROR, "socks5 proxy", "Unable to write\n"); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1547 | close(source); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1548 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1549 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1550 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1551 | |
| 4993 | 1552 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1553 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1554 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1555 | g_free(phb->host); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1556 | g_free(phb); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1557 | return; |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1558 | } |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1559 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1560 | phb->inpa = gaim_input_add(source, GAIM_INPUT_READ, s5_canread, phb); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1561 | } |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1562 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1563 | static int |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1564 | proxy_connect_socks5(struct PHB *phb, struct sockaddr *addr, socklen_t addrlen) |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1565 | { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1566 | int fd = -1; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1567 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1568 | gaim_debug(GAIM_DEBUG_INFO, "socks5 proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1569 | "Connecting to %s:%d via %s:%d using SOCKS5\n", |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1570 | phb->host, phb->port, |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1571 | gaim_proxy_info_get_host(phb->gpi), |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1572 | gaim_proxy_info_get_port(phb->gpi)); |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1573 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1574 | if ((fd = socket(addr->sa_family, SOCK_STREAM, 0)) < 0) |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1575 | return -1; |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1576 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1577 | fcntl(fd, F_SETFL, O_NONBLOCK); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1578 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1579 | if (connect(fd, addr, addrlen) < 0) { |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1580 | if ((errno == EINPROGRESS) || (errno == EINTR)) { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1581 | gaim_debug(GAIM_DEBUG_WARNING, "socks5 proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1582 | "Connect would have blocked.\n"); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1583 | |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1584 | phb->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, s5_canwrite, phb); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1585 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1586 | else { |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1587 | close(fd); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1588 | return -1; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1589 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1590 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1591 | else { |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1592 | unsigned int len; |
|
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1881
diff
changeset
|
1593 | int error = ETIMEDOUT; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3630
diff
changeset
|
1594 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1595 | gaim_debug(GAIM_DEBUG_MISC, "socks5 proxy", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
4993
diff
changeset
|
1596 | "Connect didn't block.\n"); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1597 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1598 | len = sizeof(error); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1599 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1600 | if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1601 | close(fd); |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1602 | return -1; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1603 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1604 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1605 | fcntl(fd, F_SETFL, 0); |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
1606 | s5_canwrite(phb, fd, GAIM_INPUT_WRITE); |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1607 | } |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1608 | |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1609 | return fd; |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1610 | } |
|
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1611 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1612 | static void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1613 | connection_host_resolved(GSList *hosts, gpointer data, |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1614 | const char *error_message) |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1615 | { |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1616 | struct PHB *phb = (struct PHB*)data; |
| 4678 | 1617 | size_t addrlen; |
| 1618 | struct sockaddr *addr; | |
| 1619 | int ret = -1; | |
| 4634 | 1620 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1621 | while (hosts) { |
| 4678 | 1622 | addrlen = GPOINTER_TO_INT(hosts->data); |
| 1623 | hosts = hosts->next; | |
| 1624 | addr = hosts->data; | |
| 1625 | hosts = hosts->next; | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1626 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1627 | switch (gaim_proxy_info_get_type(phb->gpi)) |
| 4678 | 1628 | { |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1629 | case GAIM_PROXY_NONE: |
| 4678 | 1630 | ret = proxy_connect_none(phb, addr, addrlen); |
| 1631 | break; | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1632 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1633 | case GAIM_PROXY_HTTP: |
| 4678 | 1634 | ret = proxy_connect_http(phb, addr, addrlen); |
| 1635 | break; | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1636 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1637 | case GAIM_PROXY_SOCKS4: |
| 4678 | 1638 | ret = proxy_connect_socks4(phb, addr, addrlen); |
| 1639 | break; | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1640 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1641 | case GAIM_PROXY_SOCKS5: |
| 4678 | 1642 | ret = proxy_connect_socks5(phb, addr, addrlen); |
| 1643 | break; | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1644 | |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1645 | case GAIM_PROXY_USE_ENVVAR: |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1646 | ret = proxy_connect_http(phb, addr, addrlen); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1647 | break; |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1648 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1649 | default: |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1650 | break; |
| 4678 | 1651 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1652 | |
| 4678 | 1653 | if (ret > 0) |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1654 | break; |
| 4678 | 1655 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1656 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1657 | if (ret < 0) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1658 | if (phb->account == NULL || |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1659 | gaim_account_get_connection(phb->account) != NULL) { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1660 | |
| 4993 | 1661 | phb->func(phb->data, -1, GAIM_INPUT_READ); |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1662 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1663 | |
| 4678 | 1664 | g_free(phb->host); |
| 1665 | g_free(phb); | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1666 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1667 | } |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1668 | |
| 4452 | 1669 | int |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1670 | gaim_proxy_connect(GaimAccount *account, const char *host, int port, |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1671 | GaimInputFunction func, gpointer data) |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1672 | { |
|
5580
a5a3e6dfb409
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5572
diff
changeset
|
1673 | const char *connecthost = host; |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1674 | int connectport = port; |
|
6040
ab00305db747
[gaim-migrate @ 6490]
Mark Doliner <markdoliner@pidgin.im>
parents:
6017
diff
changeset
|
1675 | struct PHB *phb; |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1676 | const gchar *tmp; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1677 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1678 | g_return_val_if_fail(host != NULL, -1); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1679 | g_return_val_if_fail(port != 0 && port != -1, -1); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1680 | g_return_val_if_fail(func != NULL, -1); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1681 | |
|
6040
ab00305db747
[gaim-migrate @ 6490]
Mark Doliner <markdoliner@pidgin.im>
parents:
6017
diff
changeset
|
1682 | phb = g_new0(struct PHB, 1); |
|
ab00305db747
[gaim-migrate @ 6490]
Mark Doliner <markdoliner@pidgin.im>
parents:
6017
diff
changeset
|
1683 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1684 | if (account == NULL || gaim_account_get_proxy_info(account) == NULL) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1685 | phb->gpi = gaim_global_proxy_get_info(); |
| 4634 | 1686 | else |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1687 | phb->gpi = gaim_account_get_proxy_info(account); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1688 | |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1689 | phb->func = func; |
|
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1690 | phb->data = data; |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1691 | phb->host = g_strdup(host); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1692 | phb->port = port; |
| 4993 | 1693 | phb->account = account; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1694 | |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1695 | if (gaim_proxy_info_get_type(phb->gpi) == GAIM_PROXY_USE_ENVVAR) { |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1696 | if ((tmp = g_getenv("HTTP_PROXY")) != NULL || |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1697 | (tmp = g_getenv("http_proxy")) != NULL || |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1698 | (tmp= g_getenv("HTTPPROXY")) != NULL) { |
|
7652
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1699 | char *proxyhost,*proxypath; |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1700 | int proxyport; |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1701 | |
|
7652
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1702 | /* http_proxy-format: |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1703 | * export http_proxy="http://your.proxy.server:port/" |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1704 | */ |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1705 | if(gaim_url_parse(tmp, &proxyhost, &proxyport, &proxypath)) { |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1706 | gaim_proxy_info_set_host(phb->gpi, proxyhost); |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1707 | g_free(proxyhost); |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1708 | g_free(proxypath); |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1709 | |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1710 | /* only for backward compatibility */ |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1711 | if (proxyport == 80 && |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1712 | ((tmp = g_getenv("HTTP_PROXY_PORT")) != NULL || |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1713 | (tmp = g_getenv("http_proxy_port")) != NULL || |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1714 | (tmp = g_getenv("HTTPPROXYPORT")) != NULL)) |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1715 | proxyport = atoi(tmp); |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1716 | |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1717 | gaim_proxy_info_set_port(phb->gpi, proxyport); |
|
d60ba2565661
[gaim-migrate @ 8296]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7475
diff
changeset
|
1718 | } |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1719 | } |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1720 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1721 | if ((tmp = g_getenv("HTTP_PROXY_USER")) != NULL || |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1722 | (tmp = g_getenv("http_proxy_user")) != NULL || |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1723 | (tmp = g_getenv("HTTPPROXYUSER")) != NULL) |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1724 | gaim_proxy_info_set_username(phb->gpi, tmp); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1725 | |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1726 | if ((tmp = g_getenv("HTTP_PROXY_PASS")) != NULL || |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1727 | (tmp = g_getenv("http_proxy_pass")) != NULL || |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1728 | (tmp = g_getenv("HTTPPROXYPASS")) != NULL) |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1729 | gaim_proxy_info_set_password(phb->gpi, tmp); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1730 | } |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1731 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1732 | if ((gaim_proxy_info_get_type(phb->gpi) != GAIM_PROXY_NONE) && |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1733 | (gaim_proxy_info_get_host(phb->gpi) == NULL || |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1734 | gaim_proxy_info_get_port(phb->gpi) <= 0)) { |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1735 | |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1736 | gaim_notify_error(NULL, NULL, _("Invalid proxy settings"), _("Either the host name or port number specified for your given proxy type is invalid.")); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1737 | g_free(phb->host); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1738 | g_free(phb); |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1739 | return -1; |
|
1840
770bc15f419c
[gaim-migrate @ 1850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1705
diff
changeset
|
1740 | } |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1741 | |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1742 | switch (gaim_proxy_info_get_type(phb->gpi)) |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1743 | { |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1744 | case GAIM_PROXY_NONE: |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1745 | break; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1746 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1747 | case GAIM_PROXY_HTTP: |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1748 | case GAIM_PROXY_SOCKS4: |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1749 | case GAIM_PROXY_SOCKS5: |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1750 | case GAIM_PROXY_USE_ENVVAR: |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1751 | connecthost = gaim_proxy_info_get_host(phb->gpi); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1752 | connectport = gaim_proxy_info_get_port(phb->gpi); |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1753 | break; |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1754 | |
|
4366
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1755 | default: |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1756 | g_free(phb->host); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1757 | g_free(phb); |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1758 | return -1; |
|
d2b52a5ff6fc
[gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
3867
diff
changeset
|
1759 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1760 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1761 | return gaim_gethostbyname_async(connecthost, connectport, |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1762 | connection_host_resolved, phb); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1763 | } |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1764 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1765 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1766 | static void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1767 | proxy_pref_cb(const char *name, GaimPrefType type, gpointer value, |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1768 | gpointer data) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1769 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1770 | GaimProxyInfo *info = gaim_global_proxy_get_info(); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1771 | |
|
6001
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1772 | if (!strcmp(name, "/core/proxy/type")) { |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1773 | int proxytype; |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1774 | char *type = value; |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1775 | |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1776 | if (!strcmp(type, "none")) |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1777 | proxytype = GAIM_PROXY_NONE; |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1778 | else if (!strcmp(type, "http")) |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1779 | proxytype = GAIM_PROXY_HTTP; |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1780 | else if (!strcmp(type, "socks4")) |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1781 | proxytype = GAIM_PROXY_SOCKS4; |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1782 | else if (!strcmp(type, "socks5")) |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1783 | proxytype = GAIM_PROXY_SOCKS5; |
|
6621
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1784 | else if (!strcmp(type, "envvar")) |
|
2a18ef3e5224
[gaim-migrate @ 7145]
Robert McQueen <robot101@debian.org>
parents:
6320
diff
changeset
|
1785 | proxytype = GAIM_PROXY_USE_ENVVAR; |
|
6001
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1786 | else |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1787 | proxytype = -1; |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1788 | |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1789 | gaim_proxy_info_set_type(info, proxytype); |
|
1abbeff6571c
[gaim-migrate @ 6449]
Mark Doliner <markdoliner@pidgin.im>
parents:
5970
diff
changeset
|
1790 | } else if (!strcmp(name, "/core/proxy/host")) |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1791 | gaim_proxy_info_set_host(info, value); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1792 | else if (!strcmp(name, "/core/proxy/port")) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1793 | gaim_proxy_info_set_port(info, GPOINTER_TO_INT(value)); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1794 | else if (!strcmp(name, "/core/proxy/username")) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1795 | gaim_proxy_info_set_username(info, value); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1796 | else if (!strcmp(name, "/core/proxy/password")) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1797 | gaim_proxy_info_set_password(info, value); |
|
1087
bc9c6b635358
[gaim-migrate @ 1097]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1057
diff
changeset
|
1798 | } |
|
5681
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1799 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1800 | void |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1801 | gaim_proxy_init(void) |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1802 | { |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1803 | /* Initialize a default proxy info struct. */ |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1804 | global_proxy_info = gaim_proxy_info_new(); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1805 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1806 | /* Proxy */ |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1807 | gaim_prefs_add_none("/core/proxy"); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1808 | gaim_prefs_add_string("/core/proxy/type", "none"); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1809 | gaim_prefs_add_string("/core/proxy/host", ""); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1810 | gaim_prefs_add_int("/core/proxy/port", 0); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1811 | gaim_prefs_add_string("/core/proxy/username", ""); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1812 | gaim_prefs_add_string("/core/proxy/password", ""); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1813 | |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1814 | /* Setup callbacks for the preferences. */ |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1815 | gaim_prefs_connect_callback("/core/proxy/type", |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1816 | proxy_pref_cb, NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1817 | gaim_prefs_connect_callback("/core/proxy/host", |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1818 | proxy_pref_cb, NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1819 | gaim_prefs_connect_callback("/core/proxy/port", |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1820 | proxy_pref_cb, NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1821 | gaim_prefs_connect_callback("/core/proxy/username", |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1822 | proxy_pref_cb, NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1823 | gaim_prefs_connect_callback("/core/proxy/password", |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1824 | proxy_pref_cb, NULL); |
|
514fbc5374dc
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1825 | } |