src/proxy.c

Mon, 25 Aug 2003 02:49:42 +0000

author
Robert McQueen <robot101@debian.org>
date
Mon, 25 Aug 2003 02:49:42 +0000
changeset 6621
2a18ef3e5224
parent 6320
d220a4d78795
child 6856
5ed6b8356ebc
permissions
-rw-r--r--

[gaim-migrate @ 7145]
Individual accounts remember the "No Proxy" setting instead of reverting
back to "Use Global Proxy Settings"

Proxy settings for individual accounts do not revert to "No Proxy" if
you open an account, don't change the proxy drop down, then save the
account.

Those two sound like the same thing, but they're different. I think.

Added the "use environmental variables" setting in a way that isn't
horrible.

We're not using that thing that splits the proxy variable into
host:port yet. I'll do that later. I would have done that
earlier, but I had to go buy a bike.

Also, I'd like to show what the environmental variables are set to
somewhere. That'll come later.


Also a patch from Robot101:
(22:10:25) Bzubhipheron: I have a patch that replaces #define WFLAG_* with
GaimMessageFlags GAIM_MESSAGE_*
(22:10:30) Bzubhipheron: (an enum in disguise)
(22:14:18) Bzubhipheron: GaimMessageFlags protrays much better typing
information than "int". most of the other #defines are gone, and glib
standardises on enums for its flags too.
(22:14:27) Bzubhipheron: (gone or going)
(22:14:45) Bzubhipheron: and it makes the prototype of my message queueing stuff prettier.

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

mercurial