Mercurial > pidgin
annotate libpurple/proxy.c @ 32796:5ae7e1f36b43
Fix a possible XMPP remote crash
A series of specially crafted file transfer requests can cause clients
to reference invalid memory. The user must have accepted one of the
file transfer requests.
The fix is to correctly cancel and free a SOCKS5 connection attempt so
that it does not trigger an attempt to access invalid memory later.
This was reported to us by Jos«± Valent«żn Guti«±rrez and this patch is
written by Paul Aurich.
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Mon, 07 May 2012 03:16:31 +0000 |
parents | 9f26efb70c67 |
children | fa666e7f747e 6fa0e854cfc6 |
rev | line source |
---|---|
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1 /** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2 * @file proxy.c Proxy API |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3 * @ingroup core |
20074
6bf32c9e15a7
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents:
20040
diff
changeset
|
4 */ |
6bf32c9e15a7
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents:
20040
diff
changeset
|
5 |
6bf32c9e15a7
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents:
20040
diff
changeset
|
6 /* purple |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
7 * |
15822 | 8 * Purple is the legal property of its developers, whose names are too numerous |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
9 * to list here. Please refer to the COPYRIGHT file distributed with this |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
10 * source distribution. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
11 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
12 * This program is free software; you can redistribute it and/or modify |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
13 * it under the terms of the GNU General Public License as published by |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
14 * the Free Software Foundation; either version 2 of the License, or |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
15 * (at your option) any later version. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
16 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
17 * This program is distributed in the hope that it will be useful, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
20 * GNU General Public License for more details. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
21 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
22 * You should have received a copy of the GNU General Public License |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
23 * along with this program; if not, write to the Free Software |
19681
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19662
diff
changeset
|
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
25 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
26 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
27 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
28 /* this is a little piece of code to handle proxy connection */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
29 /* it is intended to : 1st handle http proxy, using the CONNECT command |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
30 , 2nd provide an easy way to add socks support |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
31 , 3rd draw women to it like flies to honey */ |
31528
92f3d821653f
purple: Fix some compiler warnings related to new API and missing prototypes.
Paul Aurich <paul@darkrain42.org>
parents:
31479
diff
changeset
|
32 #define _PURPLE_PROXY_C_ |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
33 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
34 #include "internal.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
35 #include "cipher.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
36 #include "debug.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
37 #include "dnsquery.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
38 #include "notify.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
39 #include "ntlm.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
40 #include "prefs.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
41 #include "proxy.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
42 #include "util.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
43 |
15822 | 44 struct _PurpleProxyConnectData { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
45 void *handle; |
15822 | 46 PurpleProxyConnectFunction connect_cb; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
47 gpointer data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
48 gchar *host; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
49 int port; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
50 int fd; |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
51 int socket_type; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
52 guint inpa; |
15822 | 53 PurpleProxyInfo *gpi; |
54 PurpleDnsQueryData *query_data; | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
55 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
56 /** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
57 * This contains alternating length/char* values. The char* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
58 * values need to be freed when removed from the linked list. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
59 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
60 GSList *hosts; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
61 |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
62 PurpleProxyConnectData *child; |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
63 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
64 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
65 * All of the following variables are used when establishing a |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
66 * connection through a proxy. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
67 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
68 guchar *write_buffer; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
69 gsize write_buf_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
70 gsize written_len; |
15822 | 71 PurpleInputFunction read_cb; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
72 guchar *read_buffer; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
73 gsize read_buf_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
74 gsize read_len; |
31479
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
75 PurpleAccount *account; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
76 }; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
77 |
21015
787b3897ba9f
Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@hxbc.us>
parents:
20359
diff
changeset
|
78 static const char * const socks5errors[] = { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
79 "succeeded\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
80 "general SOCKS server failure\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
81 "connection not allowed by ruleset\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
82 "Network unreachable\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
83 "Host unreachable\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
84 "Connection refused\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
85 "TTL expired\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
86 "Command not supported\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
87 "Address type not supported\n" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
88 }; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
89 |
15822 | 90 static PurpleProxyInfo *global_proxy_info = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
91 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
92 static GSList *handles = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
93 |
15822 | 94 static void try_connect(PurpleProxyConnectData *connect_data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
95 |
15976
a6a79b8616bf
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evan.s@dreskin.net>
parents:
15822
diff
changeset
|
96 /* |
a6a79b8616bf
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evan.s@dreskin.net>
parents:
15822
diff
changeset
|
97 * TODO: Eventually (GObjectification) this bad boy will be removed, because it is |
a6a79b8616bf
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evan.s@dreskin.net>
parents:
15822
diff
changeset
|
98 * a gross fix for a crashy problem. |
a6a79b8616bf
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evan.s@dreskin.net>
parents:
15822
diff
changeset
|
99 */ |
a6a79b8616bf
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evan.s@dreskin.net>
parents:
15822
diff
changeset
|
100 #define PURPLE_PROXY_CONNECT_DATA_IS_VALID(connect_data) g_slist_find(handles, connect_data) |
a6a79b8616bf
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evan.s@dreskin.net>
parents:
15822
diff
changeset
|
101 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
102 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
103 * Proxy structure API |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
104 **************************************************************************/ |
15822 | 105 PurpleProxyInfo * |
106 purple_proxy_info_new(void) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
107 { |
15822 | 108 return g_new0(PurpleProxyInfo, 1); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
109 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
110 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
111 void |
15822 | 112 purple_proxy_info_destroy(PurpleProxyInfo *info) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
113 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
114 g_return_if_fail(info != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
115 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
116 g_free(info->host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
117 g_free(info->username); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
118 g_free(info->password); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
119 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
120 g_free(info); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
121 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
122 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
123 void |
15822 | 124 purple_proxy_info_set_type(PurpleProxyInfo *info, PurpleProxyType type) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
125 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
126 g_return_if_fail(info != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
127 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
128 info->type = type; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
129 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
130 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
131 void |
15822 | 132 purple_proxy_info_set_host(PurpleProxyInfo *info, const char *host) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
133 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
134 g_return_if_fail(info != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
135 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
136 g_free(info->host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
137 info->host = g_strdup(host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
138 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
139 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
140 void |
15822 | 141 purple_proxy_info_set_port(PurpleProxyInfo *info, int port) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
142 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
143 g_return_if_fail(info != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
144 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
145 info->port = port; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
146 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
147 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
148 void |
15822 | 149 purple_proxy_info_set_username(PurpleProxyInfo *info, const char *username) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
150 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
151 g_return_if_fail(info != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
152 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
153 g_free(info->username); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
154 info->username = g_strdup(username); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
155 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
156 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
157 void |
15822 | 158 purple_proxy_info_set_password(PurpleProxyInfo *info, const char *password) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
159 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
160 g_return_if_fail(info != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
161 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
162 g_free(info->password); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
163 info->password = g_strdup(password); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
164 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
165 |
15822 | 166 PurpleProxyType |
167 purple_proxy_info_get_type(const PurpleProxyInfo *info) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
168 { |
15822 | 169 g_return_val_if_fail(info != NULL, PURPLE_PROXY_NONE); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
170 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
171 return info->type; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
172 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
173 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
174 const char * |
15822 | 175 purple_proxy_info_get_host(const PurpleProxyInfo *info) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
176 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
177 g_return_val_if_fail(info != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
178 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
179 return info->host; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
180 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
181 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
182 int |
15822 | 183 purple_proxy_info_get_port(const PurpleProxyInfo *info) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
184 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
185 g_return_val_if_fail(info != NULL, 0); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
186 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
187 return info->port; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
188 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
189 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
190 const char * |
15822 | 191 purple_proxy_info_get_username(const PurpleProxyInfo *info) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
192 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
193 g_return_val_if_fail(info != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
194 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
195 return info->username; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
196 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
197 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
198 const char * |
15822 | 199 purple_proxy_info_get_password(const PurpleProxyInfo *info) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
200 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
201 g_return_val_if_fail(info != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
202 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
203 return info->password; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
204 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
205 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
206 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
207 * Global Proxy API |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
208 **************************************************************************/ |
15822 | 209 PurpleProxyInfo * |
210 purple_global_proxy_get_info(void) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
211 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
212 return global_proxy_info; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
213 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
214 |
25901
4670851af098
Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
215 void |
4670851af098
Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
216 purple_global_proxy_set_info(PurpleProxyInfo *info) |
4670851af098
Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
217 { |
4670851af098
Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
218 g_return_if_fail(info != NULL); |
4670851af098
Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
219 |
4670851af098
Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
220 purple_proxy_info_destroy(global_proxy_info); |
4670851af098
Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
221 |
4670851af098
Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
222 global_proxy_info = info; |
4670851af098
Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
223 } |
4670851af098
Patch from fqueze to add API for setting the global proxy settings. Fixes #7610.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
224 |
15822 | 225 static PurpleProxyInfo * |
226 purple_gnome_proxy_get_info(void) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
227 { |
15822 | 228 static PurpleProxyInfo info = {0, NULL, 0, NULL, NULL}; |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
229 gboolean use_same_proxy = FALSE; |
24119
d4239c588fcf
Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24118
diff
changeset
|
230 gchar *tmp, *err = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
231 |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
232 tmp = g_find_program_in_path("gconftool-2"); |
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
233 if (tmp == NULL) |
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
234 return purple_global_proxy_get_info(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
235 |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
236 g_free(tmp); |
24119
d4239c588fcf
Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24118
diff
changeset
|
237 tmp = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
238 |
22420
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
239 /* Check whether to use a proxy. */ |
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
240 if (!g_spawn_command_line_sync("gconftool-2 -g /system/proxy/mode", |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
241 &tmp, &err, NULL, NULL)) |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
242 return purple_global_proxy_get_info(); |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
243 g_free(err); |
24119
d4239c588fcf
Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24118
diff
changeset
|
244 err = NULL; |
22418
6eb0749ad46c
disapproval of revision 'd5ef30aafa0c0ecff773017ab7ac542f9ba7b4b4'
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
245 |
25894
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
24750
diff
changeset
|
246 if (purple_strequal(tmp, "none\n")) { |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
247 info.type = PURPLE_PROXY_NONE; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
248 g_free(tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
249 return &info; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
250 } |
22420
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
251 |
28086
30497d814cb9
Fix GNOME proxy settings. Fixes #10051.
Paul Aurich <paul@darkrain42.org>
parents:
27900
diff
changeset
|
252 if (!purple_strequal(tmp, "manual\n")) { |
22420
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
253 /* Unknown setting. Fallback to using our global proxy settings. */ |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
254 g_free(tmp); |
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
255 return purple_global_proxy_get_info(); |
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
256 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
257 |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
258 g_free(tmp); |
24119
d4239c588fcf
Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24118
diff
changeset
|
259 tmp = NULL; |
22420
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
260 |
22422
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
261 /* Free the old fields */ |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
262 if (info.host) { |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
263 g_free(info.host); |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
264 info.host = NULL; |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
265 } |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
266 if (info.username) { |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
267 g_free(info.username); |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
268 info.username = NULL; |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
269 } |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
270 if (info.password) { |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
271 g_free(info.password); |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
272 info.password = NULL; |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
273 } |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
274 |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
275 if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/use_same_proxy", |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
276 &tmp, &err, NULL, NULL)) |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
277 return purple_global_proxy_get_info(); |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
278 g_free(err); |
24119
d4239c588fcf
Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24118
diff
changeset
|
279 err = NULL; |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
280 |
25894
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
24750
diff
changeset
|
281 if (purple_strequal(tmp, "true\n")) |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
282 use_same_proxy = TRUE; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
283 g_free(tmp); |
24119
d4239c588fcf
Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24118
diff
changeset
|
284 tmp = NULL; |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
285 |
24118
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
286 if (!use_same_proxy) { |
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
287 if (!g_spawn_command_line_sync("gconftool-2 -g /system/proxy/socks_host", |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
288 &info.host, &err, NULL, NULL)) |
24118
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
289 return purple_global_proxy_get_info(); |
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
290 g_free(err); |
24119
d4239c588fcf
Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24118
diff
changeset
|
291 err = NULL; |
24118
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
292 } |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
293 |
24118
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
294 if(info.host != NULL) |
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
295 g_strchomp(info.host); |
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
296 |
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
297 if (!use_same_proxy && (info.host != NULL) && (*info.host != '\0')) { |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
298 info.type = PURPLE_PROXY_SOCKS5; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
299 if (!g_spawn_command_line_sync("gconftool-2 -g /system/proxy/socks_port", |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
300 &tmp, &err, NULL, NULL)) |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
301 { |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
302 g_free(info.host); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
303 info.host = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
304 return purple_global_proxy_get_info(); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
305 } |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
306 g_free(err); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
307 info.port = atoi(tmp); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
308 g_free(tmp); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
309 } else { |
22420
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
310 g_free(info.host); |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
311 if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/host", |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
312 &info.host, &err, NULL, NULL)) |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
313 return purple_global_proxy_get_info(); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
314 g_free(err); |
24119
d4239c588fcf
Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24118
diff
changeset
|
315 err = NULL; |
d4239c588fcf
Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24118
diff
changeset
|
316 |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
317 /* If we get this far then we know we're using an HTTP proxy */ |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
318 info.type = PURPLE_PROXY_HTTP; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
319 |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
320 g_strchomp(info.host); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
321 if (*info.host == '\0') |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
322 { |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
323 purple_debug_info("proxy", "Gnome proxy settings are set to " |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
324 "'manual' but no suitable proxy server is specified. Using " |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
325 "Pidgin's proxy settings instead.\n"); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
326 g_free(info.host); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
327 info.host = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
328 return purple_global_proxy_get_info(); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
329 } |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
330 |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
331 if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/authentication_user", |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
332 &info.username, &err, NULL, NULL)) |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
333 { |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
334 g_free(info.host); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
335 info.host = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
336 return purple_global_proxy_get_info(); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
337 } |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
338 g_free(err); |
24119
d4239c588fcf
Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24118
diff
changeset
|
339 err = NULL; |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
340 g_strchomp(info.username); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
341 |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
342 if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/authentication_password", |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
343 &info.password, &err, NULL, NULL)) |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
344 { |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
345 g_free(info.host); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
346 info.host = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
347 g_free(info.username); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
348 info.username = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
349 return purple_global_proxy_get_info(); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
350 } |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
351 g_free(err); |
24119
d4239c588fcf
Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24118
diff
changeset
|
352 err = NULL; |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
353 g_strchomp(info.password); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
354 |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
355 if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/port", |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
356 &tmp, &err, NULL, NULL)) |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
357 { |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
358 g_free(info.host); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
359 info.host = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
360 g_free(info.username); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
361 info.username = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
362 g_free(info.password); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
363 info.password = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
364 return purple_global_proxy_get_info(); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
365 } |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
366 g_free(err); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
367 info.port = atoi(tmp); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
368 g_free(tmp); |
22420
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
369 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
370 |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
371 return &info; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
372 } |
23970
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
373 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
374 #ifdef _WIN32 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
375 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
376 typedef BOOL (CALLBACK* LPFNWINHTTPGETIEPROXYCONFIG)(/*IN OUT*/ WINHTTP_CURRENT_USER_IE_PROXY_CONFIG* pProxyConfig); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
377 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
378 /* This modifies "host" in-place evilly */ |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
379 static void |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
380 _proxy_fill_hostinfo(PurpleProxyInfo *info, char *host, int default_port) |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
381 { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
382 int port = default_port; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
383 char *d; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
384 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
385 d = g_strrstr(host, ":"); |
29773
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
386 if (d) { |
23970
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
387 *d = '\0'; |
29773
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
388 |
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
389 d++; |
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
390 if (*d) |
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
391 sscanf(d, "%d", &port); |
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
392 |
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
393 if (port == 0) |
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
394 port = default_port; |
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
395 } |
23970
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
396 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
397 purple_proxy_info_set_host(info, host); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
398 purple_proxy_info_set_port(info, port); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
399 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
400 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
401 static PurpleProxyInfo * |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
402 purple_win32_proxy_get_info(void) |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
403 { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
404 static LPFNWINHTTPGETIEPROXYCONFIG MyWinHttpGetIEProxyConfig = NULL; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
405 static gboolean loaded = FALSE; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
406 static PurpleProxyInfo info = {0, NULL, 0, NULL, NULL}; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
407 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
408 WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_proxy_config; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
409 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
410 if (!loaded) { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
411 loaded = TRUE; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
412 MyWinHttpGetIEProxyConfig = (LPFNWINHTTPGETIEPROXYCONFIG) |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
413 wpurple_find_and_loadproc("winhttp.dll", "WinHttpGetIEProxyConfigForCurrentUser"); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
414 if (!MyWinHttpGetIEProxyConfig) |
27231
627d23bfdb05
Increase the logging level of some debugging messages that seemed to be a
mauro.brasil@tqi.com.br
parents:
27032
diff
changeset
|
415 purple_debug_warning("proxy", "Unable to read Windows Proxy Settings.\n"); |
23970
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
416 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
417 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
418 if (!MyWinHttpGetIEProxyConfig) |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
419 return NULL; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
420 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
421 ZeroMemory(&ie_proxy_config, sizeof(ie_proxy_config)); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
422 if (!MyWinHttpGetIEProxyConfig(&ie_proxy_config)) { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
423 purple_debug_error("proxy", "Error reading Windows Proxy Settings(%lu).\n", GetLastError()); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
424 return NULL; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
425 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
426 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
427 /* We can't do much if it is autodetect*/ |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
428 if (ie_proxy_config.fAutoDetect) { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
429 purple_debug_error("proxy", "Windows Proxy Settings set to autodetect (not supported).\n"); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
430 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
431 /* TODO: For 3.0.0 we'll revisit this (maybe)*/ |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
432 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
433 return NULL; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
434 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
435 } else if (ie_proxy_config.lpszProxy) { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
436 gchar *proxy_list = g_utf16_to_utf8(ie_proxy_config.lpszProxy, -1, |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
437 NULL, NULL, NULL); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
438 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
439 /* We can't do anything about the bypass list, as we don't have the url */ |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
440 /* TODO: For 3.0.0 we'll revisit this*/ |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
441 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
442 /* There are proxy settings for several protocols */ |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
443 if (proxy_list && *proxy_list) { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
444 char *specific = NULL, *tmp; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
445 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
446 /* If there is only a global proxy, which means "HTTP" */ |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
447 if (!strchr(proxy_list, ';') || (specific = g_strstr_len(proxy_list, -1, "http=")) != NULL) { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
448 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
449 if (specific) { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
450 specific += strlen("http="); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
451 tmp = strchr(specific, ';'); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
452 if (tmp) |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
453 *tmp = '\0'; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
454 /* specific now points the proxy server (and port) */ |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
455 } else |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
456 specific = proxy_list; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
457 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
458 purple_proxy_info_set_type(&info, PURPLE_PROXY_HTTP); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
459 _proxy_fill_hostinfo(&info, specific, 80); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
460 /* TODO: is there a way to set the username/password? */ |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
461 purple_proxy_info_set_username(&info, NULL); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
462 purple_proxy_info_set_password(&info, NULL); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
463 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
464 purple_debug_info("proxy", "Windows Proxy Settings: HTTP proxy: '%s:%d'.\n", |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
465 purple_proxy_info_get_host(&info), |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
466 purple_proxy_info_get_port(&info)); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
467 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
468 } else if ((specific = g_strstr_len(proxy_list, -1, "socks=")) != NULL) { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
469 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
470 specific += strlen("socks="); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
471 tmp = strchr(specific, ';'); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
472 if (tmp) |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
473 *tmp = '\0'; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
474 /* specific now points the proxy server (and port) */ |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
475 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
476 purple_proxy_info_set_type(&info, PURPLE_PROXY_SOCKS5); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
477 _proxy_fill_hostinfo(&info, specific, 1080); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
478 /* TODO: is there a way to set the username/password? */ |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
479 purple_proxy_info_set_username(&info, NULL); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
480 purple_proxy_info_set_password(&info, NULL); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
481 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
482 purple_debug_info("proxy", "Windows Proxy Settings: SOCKS5 proxy: '%s:%d'.\n", |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
483 purple_proxy_info_get_host(&info), |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
484 purple_proxy_info_get_port(&info)); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
485 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
486 } else { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
487 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
488 purple_debug_info("proxy", "Windows Proxy Settings: No supported proxy specified.\n"); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
489 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
490 purple_proxy_info_set_type(&info, PURPLE_PROXY_NONE); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
491 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
492 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
493 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
494 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
495 /* TODO: Fix API to be able look at proxy bypass settings */ |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
496 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
497 g_free(proxy_list); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
498 } else { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
499 purple_debug_info("proxy", "No Windows proxy set.\n"); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
500 purple_proxy_info_set_type(&info, PURPLE_PROXY_NONE); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
501 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
502 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
503 if (ie_proxy_config.lpszAutoConfigUrl) |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
504 GlobalFree(ie_proxy_config.lpszAutoConfigUrl); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
505 if (ie_proxy_config.lpszProxy) |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
506 GlobalFree(ie_proxy_config.lpszProxy); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
507 if (ie_proxy_config.lpszProxyBypass) |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
508 GlobalFree(ie_proxy_config.lpszProxyBypass); |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
509 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
510 return &info; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
511 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
512 #endif |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
513 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
514 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
515 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
516 * Proxy API |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
517 **************************************************************************/ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
518 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
519 /** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
520 * Whoever calls this needs to have called |
15822 | 521 * purple_proxy_connect_data_disconnect() beforehand. |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
522 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
523 static void |
15822 | 524 purple_proxy_connect_data_destroy(PurpleProxyConnectData *connect_data) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
525 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
526 handles = g_slist_remove(handles, connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
527 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
528 if (connect_data->query_data != NULL) |
15822 | 529 purple_dnsquery_destroy(connect_data->query_data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
530 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
531 while (connect_data->hosts != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
532 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
533 /* Discard the length... */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
534 connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
535 /* Free the address... */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
536 g_free(connect_data->hosts->data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
537 connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
538 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
539 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
540 g_free(connect_data->host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
541 g_free(connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
542 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
543 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
544 /** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
545 * Free all information dealing with a connection attempt and |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
546 * reset the connect_data to prepare for it to try to connect |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
547 * to another IP address. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
548 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
549 * If an error message is passed in, then we know the connection |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
550 * attempt failed. If the connection attempt failed and |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
551 * connect_data->hosts is not empty then we try the next IP address. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
552 * If the connection attempt failed and we have no more hosts |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
553 * try try then we call the callback with the given error message, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
554 * then destroy the connect_data. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
555 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
556 * @param error_message An error message explaining why the connection |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
557 * failed. This will be passed to the callback function |
15822 | 558 * specified in the call to purple_proxy_connect(). If the |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
559 * connection was successful then pass in null. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
560 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
561 static void |
15822 | 562 purple_proxy_connect_data_disconnect(PurpleProxyConnectData *connect_data, const gchar *error_message) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
563 { |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
564 if (connect_data->child != NULL) |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
565 { |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
566 purple_proxy_connect_cancel(connect_data->child); |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
567 connect_data->child = NULL; |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
568 } |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
569 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
570 if (connect_data->inpa > 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
571 { |
15822 | 572 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
573 connect_data->inpa = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
574 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
575 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
576 if (connect_data->fd >= 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
577 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
578 close(connect_data->fd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
579 connect_data->fd = -1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
580 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
581 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
582 g_free(connect_data->write_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
583 connect_data->write_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
584 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
585 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
586 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
587 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
588 if (error_message != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
589 { |
27231
627d23bfdb05
Increase the logging level of some debugging messages that seemed to be a
mauro.brasil@tqi.com.br
parents:
27032
diff
changeset
|
590 purple_debug_error("proxy", "Connection attempt failed: %s\n", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
591 error_message); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
592 if (connect_data->hosts != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
593 try_connect(connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
594 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
595 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
596 /* Everything failed! Tell the originator of the request. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
597 connect_data->connect_cb(connect_data->data, -1, error_message); |
15822 | 598 purple_proxy_connect_data_destroy(connect_data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
599 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
600 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
601 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
602 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
603 /** |
15822 | 604 * This calls purple_proxy_connect_data_disconnect(), but it lets you |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
605 * specify the error_message using a printf()-like syntax. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
606 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
607 static void |
15822 | 608 purple_proxy_connect_data_disconnect_formatted(PurpleProxyConnectData *connect_data, const char *format, ...) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
609 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
610 va_list args; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
611 gchar *tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
612 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
613 va_start(args, format); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
614 tmp = g_strdup_vprintf(format, args); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
615 va_end(args); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
616 |
15822 | 617 purple_proxy_connect_data_disconnect(connect_data, tmp); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
618 g_free(tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
619 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
620 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
621 static void |
15822 | 622 purple_proxy_connect_data_connected(PurpleProxyConnectData *connect_data) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
623 { |
27678
3712ef8bf231
Add an explicit "Connected" message right before passing control from proxy subsystem to whomever called purple_proxy_connect.
Paul Aurich <paul@darkrain42.org>
parents:
27381
diff
changeset
|
624 purple_debug_info("proxy", "Connected to %s:%d.\n", |
3712ef8bf231
Add an explicit "Connected" message right before passing control from proxy subsystem to whomever called purple_proxy_connect.
Paul Aurich <paul@darkrain42.org>
parents:
27381
diff
changeset
|
625 connect_data->host, connect_data->port); |
3712ef8bf231
Add an explicit "Connected" message right before passing control from proxy subsystem to whomever called purple_proxy_connect.
Paul Aurich <paul@darkrain42.org>
parents:
27381
diff
changeset
|
626 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
627 connect_data->connect_cb(connect_data->data, connect_data->fd, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
628 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
629 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
630 * We've passed the file descriptor to the protocol, so it's no longer |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
631 * our responsibility, and we should be careful not to free it when |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
632 * we destroy the connect_data. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
633 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
634 connect_data->fd = -1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
635 |
15822 | 636 purple_proxy_connect_data_disconnect(connect_data, NULL); |
637 purple_proxy_connect_data_destroy(connect_data); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
638 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
639 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
640 static void |
15822 | 641 socket_ready_cb(gpointer data, gint source, PurpleInputCondition cond) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
642 { |
15822 | 643 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
644 int error = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
645 int ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
646 |
15976
a6a79b8616bf
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evan.s@dreskin.net>
parents:
15822
diff
changeset
|
647 /* If the socket-connected message had already been triggered when connect_data |
a6a79b8616bf
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evan.s@dreskin.net>
parents:
15822
diff
changeset
|
648 * was destroyed via purple_proxy_connect_cancel(), we may get here with a freed connect_data. |
a6a79b8616bf
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evan.s@dreskin.net>
parents:
15822
diff
changeset
|
649 */ |
a6a79b8616bf
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evan.s@dreskin.net>
parents:
15822
diff
changeset
|
650 if (!PURPLE_PROXY_CONNECT_DATA_IS_VALID(connect_data)) |
a6a79b8616bf
I commonly see a crash in which socket_ready_cb(), shortly after a laptop wakes from sleep, is passed invalid (previously freed) connect_data. It looks like this:
Evan Schoenberg <evan.s@dreskin.net>
parents:
15822
diff
changeset
|
651 return; |
20039
1846fd2da2b4
Fix proxy settings to be loaded correctly when libpurple is initialized. This was broken because it relied on the prefs being loaded after proxy initialization so that the pref callbacks would be triggered and I changed the prefs loading to happen right at the beginning to fix other issues. Fixes #3092.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
19781
diff
changeset
|
652 |
24749
333f03472486
This string appears before the connection attempt, so it shouldn't be
Kevin Stange <kevin@simguy.net>
parents:
24119
diff
changeset
|
653 purple_debug_info("proxy", "Connecting to %s:%d.\n", |
15681
14d85ee22d78
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15497
diff
changeset
|
654 connect_data->host, connect_data->port); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
655 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
656 /* |
15822 | 657 * purple_input_get_error after a non-blocking connect returns -1 if something is |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
658 * really messed up (bad descriptor, usually). Otherwise, it returns 0 and |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
659 * error holds what connect would have returned if it blocked until now. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
660 * Thus, error == 0 is success, error == EINPROGRESS means "try again", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
661 * and anything else is a real error. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
662 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
663 * (error == EINPROGRESS can happen after a select because the kernel can |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
664 * be overly optimistic sometimes. select is just a hint that you might be |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
665 * able to do something.) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
666 */ |
15822 | 667 ret = purple_input_get_error(connect_data->fd, &error); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
668 |
15681
14d85ee22d78
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15497
diff
changeset
|
669 if (ret == 0 && error == EINPROGRESS) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
670 /* No worries - we'll be called again later */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
671 /* TODO: Does this ever happen? */ |
19654
941965d6fd88
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17431
diff
changeset
|
672 purple_debug_info("proxy", "(ret == 0 && error == EINPROGRESS)\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
673 return; |
15681
14d85ee22d78
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15497
diff
changeset
|
674 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
675 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
676 if (ret != 0 || error != 0) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
677 if (ret != 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
678 error = errno; |
27231
627d23bfdb05
Increase the logging level of some debugging messages that seemed to be a
mauro.brasil@tqi.com.br
parents:
27032
diff
changeset
|
679 purple_debug_error("proxy", "Error connecting to %s:%d (%s).\n", |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
680 connect_data->host, connect_data->port, g_strerror(error)); |
15681
14d85ee22d78
Added a new GaimEventLoopUiOps item, input_get_error(). This function allows the UI to return the current error status on a socket/input. If the UI does not implement it (as Pidgin and gntgaim do not, since glib's handling of sockets is sane), it is just a wrapper around getsockopt(). Implemented or not, its return values should match those of getsockopt() with a level of SOL_SOCKET and an option of SO_ERROR. For curious souls, Adium will be using this to provide a working version of getsockopt(); the CoreFoundation CFSocket class which is used for socket read/write calls getsockopt() with SO_ERROR itself, thereby clearing the error flag [as documented in getsockopt()'s behavior], so depending upon it for determining if an error occurred leads to significant misbehavior.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15497
diff
changeset
|
681 |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
682 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
683 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
684 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
685 |
15822 | 686 purple_proxy_connect_data_connected(connect_data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
687 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
688 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
689 static gboolean |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
690 clean_connect(gpointer data) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
691 { |
15822 | 692 purple_proxy_connect_data_connected(data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
693 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
694 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
695 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
696 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
697 static void |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
698 proxy_connect_udp_none(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
699 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
700 int flags; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
701 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
702 purple_debug_info("proxy", "UDP Connecting to %s:%d with no proxy\n", |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
703 connect_data->host, connect_data->port); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
704 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
705 connect_data->fd = socket(addr->sa_family, SOCK_DGRAM, 0); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
706 if (connect_data->fd < 0) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
707 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
708 purple_proxy_connect_data_disconnect_formatted(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
709 _("Unable to create socket: %s"), g_strerror(errno)); |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
710 return; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
711 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
712 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
713 flags = fcntl(connect_data->fd, F_GETFL); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
714 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
715 #ifndef _WIN32 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
716 fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
717 #endif |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
718 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
719 if (connect(connect_data->fd, addr, addrlen) != 0) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
720 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
721 if ((errno == EINPROGRESS) || (errno == EINTR)) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
722 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
723 purple_debug_info("proxy", "UDP Connection in progress\n"); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
724 connect_data->inpa = purple_input_add(connect_data->fd, |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
725 PURPLE_INPUT_WRITE, socket_ready_cb, connect_data); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
726 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
727 else |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
728 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
729 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
730 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
731 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
732 else |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
733 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
734 /* |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
735 * The connection happened IMMEDIATELY... strange, but whatever. |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
736 */ |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
737 int error = ETIMEDOUT; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
738 int ret; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
739 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
740 purple_debug_info("proxy", "UDP Connected immediately.\n"); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
741 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
742 ret = purple_input_get_error(connect_data->fd, &error); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
743 if ((ret != 0) || (error != 0)) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
744 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
745 if (ret != 0) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
746 error = errno; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
747 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
748 return; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
749 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
750 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
751 /* |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
752 * We want to call the "connected" callback eventually, but we |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
753 * don't want to call it before we return, just in case. |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
754 */ |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
755 purple_timeout_add(10, clean_connect, connect_data); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
756 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
757 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
758 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
759 static void |
15822 | 760 proxy_connect_none(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
761 { |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
762 int flags; |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
763 |
15822 | 764 purple_debug_info("proxy", "Connecting to %s:%d with no proxy\n", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
765 connect_data->host, connect_data->port); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
766 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
767 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
768 if (connect_data->fd < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
769 { |
15822 | 770 purple_proxy_connect_data_disconnect_formatted(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
771 _("Unable to create socket: %s"), g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
772 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
773 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
774 |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
775 flags = fcntl(connect_data->fd, F_GETFL); |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
776 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
777 #ifndef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
778 fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
779 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
780 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
781 if (connect(connect_data->fd, addr, addrlen) != 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
782 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
783 if ((errno == EINPROGRESS) || (errno == EINTR)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
784 { |
15822 | 785 purple_debug_info("proxy", "Connection in progress\n"); |
786 connect_data->inpa = purple_input_add(connect_data->fd, | |
787 PURPLE_INPUT_WRITE, socket_ready_cb, connect_data); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
788 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
789 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
790 { |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
791 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
792 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
793 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
794 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
795 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
796 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
797 * The connection happened IMMEDIATELY... strange, but whatever. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
798 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
799 int error = ETIMEDOUT; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
800 int ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
801 |
15822 | 802 purple_debug_info("proxy", "Connected immediately.\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
803 |
15822 | 804 ret = purple_input_get_error(connect_data->fd, &error); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
805 if ((ret != 0) || (error != 0)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
806 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
807 if (ret != 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
808 error = errno; |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
809 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
810 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
811 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
812 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
813 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
814 * We want to call the "connected" callback eventually, but we |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
815 * don't want to call it before we return, just in case. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
816 */ |
15822 | 817 purple_timeout_add(10, clean_connect, connect_data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
818 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
819 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
820 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
821 /** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
822 * This is a utility function used by the HTTP, SOCKS4 and SOCKS5 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
823 * connect functions. It writes data from a buffer to a socket. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
824 * When all the data is written it sets up a watcher to read a |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
825 * response and call a specified function. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
826 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
827 static void |
15822 | 828 proxy_do_write(gpointer data, gint source, PurpleInputCondition cond) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
829 { |
15822 | 830 PurpleProxyConnectData *connect_data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
831 const guchar *request; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
832 gsize request_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
833 int ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
834 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
835 connect_data = data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
836 request = connect_data->write_buffer + connect_data->written_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
837 request_len = connect_data->write_buf_len - connect_data->written_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
838 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
839 ret = write(connect_data->fd, request, request_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
840 if (ret <= 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
841 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
842 if (errno == EAGAIN) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
843 /* No worries */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
844 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
845 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
846 /* Error! */ |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
847 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
848 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
849 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
850 if (ret < request_len) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
851 connect_data->written_len += ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
852 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
853 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
854 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
855 /* We're done writing data! Wait for a response. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
856 g_free(connect_data->write_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
857 connect_data->write_buffer = NULL; |
15822 | 858 purple_input_remove(connect_data->inpa); |
859 connect_data->inpa = purple_input_add(connect_data->fd, | |
860 PURPLE_INPUT_READ, connect_data->read_cb, connect_data); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
861 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
862 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
863 #define HTTP_GOODSTRING "HTTP/1.0 200" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
864 #define HTTP_GOODSTRING2 "HTTP/1.1 200" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
865 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
866 /** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
867 * We're using an HTTP proxy for a non-port 80 tunnel. Read the |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
868 * response to the CONNECT request. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
869 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
870 static void |
15822 | 871 http_canread(gpointer data, gint source, PurpleInputCondition cond) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
872 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
873 int len, headers_len, status = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
874 gboolean error; |
15822 | 875 PurpleProxyConnectData *connect_data = data; |
17431
79ecaab86f91
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@wiktel.com>
parents:
17372
diff
changeset
|
876 char *p; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
877 gsize max_read; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
878 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
879 if (connect_data->read_buffer == NULL) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
880 connect_data->read_buf_len = 8192; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
881 connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
882 connect_data->read_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
883 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
884 |
17431
79ecaab86f91
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@wiktel.com>
parents:
17372
diff
changeset
|
885 p = (char *)connect_data->read_buffer + connect_data->read_len; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
886 max_read = connect_data->read_buf_len - connect_data->read_len - 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
887 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
888 len = read(connect_data->fd, p, max_read); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
889 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
890 if (len == 0) { |
15822 | 891 purple_proxy_connect_data_disconnect(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
892 _("Server closed the connection")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
893 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
894 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
895 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
896 if (len < 0) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
897 if (errno == EAGAIN) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
898 /* No worries */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
899 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
900 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
901 /* Error! */ |
15822 | 902 purple_proxy_connect_data_disconnect_formatted(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
903 _("Lost connection with server: %s"), g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
904 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
905 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
906 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
907 connect_data->read_len += len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
908 p[len] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
909 |
17431
79ecaab86f91
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@wiktel.com>
parents:
17372
diff
changeset
|
910 p = g_strstr_len((const gchar *)connect_data->read_buffer, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
911 connect_data->read_len, "\r\n\r\n"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
912 if (p != NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
913 *p = '\0'; |
17431
79ecaab86f91
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@wiktel.com>
parents:
17372
diff
changeset
|
914 headers_len = (p - (char *)connect_data->read_buffer) + 4; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
915 } else if(len == max_read) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
916 headers_len = len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
917 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
918 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
919 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
920 error = strncmp((const char *)connect_data->read_buffer, "HTTP/", 5) != 0; |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
921 if (!error) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
922 int major; |
17431
79ecaab86f91
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@wiktel.com>
parents:
17372
diff
changeset
|
923 p = (char *)connect_data->read_buffer + 5; |
79ecaab86f91
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@wiktel.com>
parents:
17372
diff
changeset
|
924 major = strtol(p, &p, 10); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
925 error = (major == 0) || (*p != '.'); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
926 if(!error) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
927 int minor; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
928 p++; |
17431
79ecaab86f91
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@wiktel.com>
parents:
17372
diff
changeset
|
929 minor = strtol(p, &p, 10); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
930 error = (*p != ' '); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
931 if(!error) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
932 p++; |
17431
79ecaab86f91
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@wiktel.com>
parents:
17372
diff
changeset
|
933 status = strtol(p, &p, 10); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
934 error = (*p != ' '); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
935 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
936 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
937 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
938 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
939 /* Read the contents */ |
17431
79ecaab86f91
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@wiktel.com>
parents:
17372
diff
changeset
|
940 p = g_strrstr((const gchar *)connect_data->read_buffer, "Content-Length: "); |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
941 if (p != NULL) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
942 gchar *tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
943 int len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
944 char tmpc; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
945 p += strlen("Content-Length: "); |
17431
79ecaab86f91
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@wiktel.com>
parents:
17372
diff
changeset
|
946 tmp = strchr(p, '\r'); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
947 if(tmp) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
948 *tmp = '\0'; |
17431
79ecaab86f91
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@wiktel.com>
parents:
17372
diff
changeset
|
949 len = atoi(p); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
950 if(tmp) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
951 *tmp = '\r'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
952 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
953 /* Compensate for what has already been read */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
954 len -= connect_data->read_len - headers_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
955 /* I'm assuming that we're doing this to prevent the server from |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
956 complaining / breaking since we don't read the whole page */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
957 while (len--) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
958 /* TODO: deal with EAGAIN (and other errors) better */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
959 if (read(connect_data->fd, &tmpc, 1) < 0 && errno != EAGAIN) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
960 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
961 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
962 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
963 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
964 if (error) { |
15822 | 965 purple_proxy_connect_data_disconnect_formatted(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
966 _("Unable to parse response from HTTP proxy: %s"), |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
967 connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
968 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
969 } |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
970 else if (status != 200) { |
15822 | 971 purple_debug_error("proxy", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
972 "Proxy server replied with:\n%s\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
973 connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
974 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
975 if (status == 407 /* Proxy Auth */) { |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
976 const char *header; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
977 gchar *request; |
19781
6dcab2412c22
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
19681
diff
changeset
|
978 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
979 header = g_strrstr((const gchar *)connect_data->read_buffer, |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
980 "Proxy-Authenticate: NTLM"); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
981 if (header != NULL) { |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
982 const char *header_end = header + strlen("Proxy-Authenticate: NTLM"); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
983 const char *domain = purple_proxy_info_get_username(connect_data->gpi); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
984 char *username = NULL, hostname[256]; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
985 gchar *response; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
986 int ret; |
19781
6dcab2412c22
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
19681
diff
changeset
|
987 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
988 ret = gethostname(hostname, sizeof(hostname)); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
989 hostname[sizeof(hostname) - 1] = '\0'; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
990 if (ret < 0 || hostname[0] == '\0') { |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
991 purple_debug_warning("proxy", "gethostname() failed -- is your hostname set?"); |
31777
5498ee1aa30b
Copy hostname fallbacks using g_strlcpy instead of strcpy.
Ethan Blanton <elb@pidgin.im>
parents:
31534
diff
changeset
|
992 g_strlcpy(hostname, "localhost", sizeof(hostname)); |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
993 } |
19781
6dcab2412c22
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
19681
diff
changeset
|
994 |
20359
36da9249f3a9
applied changes from e33c17e58da161b8cffaf13e9d79e9bb4b9ce4ce
Luke Schierer <lschiere@pidgin.im>
parents:
20347
diff
changeset
|
995 if (domain != NULL) |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
996 username = (char*) strchr(domain, '\\'); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
997 if (username == NULL) { |
15822 | 998 purple_proxy_connect_data_disconnect_formatted(connect_data, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
999 _("HTTP proxy connection error %d"), status); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1000 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1001 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1002 *username = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1003 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1004 /* Is there a message? */ |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1005 if (*header_end == ' ') { |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1006 /* Check for Type-2 */ |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1007 char *tmp = (char*) header; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1008 guint8 *nonce; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1009 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1010 header_end++; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1011 username++; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1012 while(*tmp != '\r' && *tmp != '\0') tmp++; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1013 *tmp = '\0'; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1014 nonce = purple_ntlm_parse_type2(header_end, NULL); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1015 response = purple_ntlm_gen_type3(username, |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1016 (gchar*) purple_proxy_info_get_password(connect_data->gpi), |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1017 hostname, |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1018 domain, nonce, NULL); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1019 username--; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1020 } else /* Empty message */ |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1021 response = purple_ntlm_gen_type1(hostname, domain); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1022 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1023 *username = '\\'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1024 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1025 request = g_strdup_printf( |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1026 "CONNECT %s:%d HTTP/1.1\r\n" |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1027 "Host: %s:%d\r\n" |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1028 "Proxy-Authorization: NTLM %s\r\n" |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1029 "Proxy-Connection: Keep-Alive\r\n\r\n", |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1030 connect_data->host, connect_data->port, |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1031 connect_data->host, connect_data->port, |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1032 response); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1033 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1034 g_free(response); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1035 |
30413
7c871249318b
Fix some "Dead nested assignment"s and then kill off some useless
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
29773
diff
changeset
|
1036 } else if (g_strrstr((const char *)connect_data->read_buffer, "Proxy-Authenticate: Basic") != NULL) { |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1037 gchar *t1, *t2; |
24526
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1038 const char *username, *password; |
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1039 |
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1040 username = purple_proxy_info_get_username(connect_data->gpi); |
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1041 password = purple_proxy_info_get_password(connect_data->gpi); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1042 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1043 t1 = g_strdup_printf("%s:%s", |
24526
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1044 username ? username : "", |
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1045 password ? password : ""); |
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1046 t2 = purple_base64_encode((guchar *)t1, strlen(t1)); |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1047 g_free(t1); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1048 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1049 request = g_strdup_printf( |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1050 "CONNECT %s:%d HTTP/1.1\r\n" |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1051 "Host: %s:%d\r\n" |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1052 "Proxy-Authorization: Basic %s\r\n", |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1053 connect_data->host, connect_data->port, |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1054 connect_data->host, connect_data->port, |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1055 t2); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1056 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1057 g_free(t2); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1058 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1059 } else { |
15822 | 1060 purple_proxy_connect_data_disconnect_formatted(connect_data, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1061 _("HTTP proxy connection error %d"), status); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1062 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1063 } |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1064 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1065 purple_input_remove(connect_data->inpa); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1066 g_free(connect_data->read_buffer); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1067 connect_data->read_buffer = NULL; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1068 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1069 connect_data->write_buffer = (guchar *)request; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1070 connect_data->write_buf_len = strlen(request); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1071 connect_data->written_len = 0; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1072 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1073 connect_data->read_cb = http_canread; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1074 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1075 connect_data->inpa = purple_input_add(connect_data->fd, |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1076 PURPLE_INPUT_WRITE, proxy_do_write, connect_data); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1077 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1078 proxy_do_write(connect_data, connect_data->fd, cond); |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1079 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1080 return; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1081 } |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1082 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1083 if (status == 403) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1084 /* Forbidden */ |
15822 | 1085 purple_proxy_connect_data_disconnect_formatted(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1086 _("Access denied: HTTP proxy server forbids port %d tunneling"), |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1087 connect_data->port); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1088 } else { |
15822 | 1089 purple_proxy_connect_data_disconnect_formatted(connect_data, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1090 _("HTTP proxy connection error %d"), status); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1091 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1092 } else { |
15822 | 1093 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1094 connect_data->inpa = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1095 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1096 connect_data->read_buffer = NULL; |
15822 | 1097 purple_debug_info("proxy", "HTTP proxy connection established\n"); |
1098 purple_proxy_connect_data_connected(connect_data); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1099 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1100 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1101 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1102 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1103 static void |
23010
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1104 http_start_connect_tunneling(PurpleProxyConnectData *connect_data) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1105 GString *request; |
28738
9750ec16f325
disapproval of revision '04b807937c8e058bcddca1fe81be8cf681345ae8'
Mark Doliner <mark@kingant.net>
parents:
28737
diff
changeset
|
1106 int ret; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1107 |
15822 | 1108 purple_debug_info("proxy", "Using CONNECT tunneling for %s:%d\n", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1109 connect_data->host, connect_data->port); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1110 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1111 request = g_string_sized_new(4096); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1112 g_string_append_printf(request, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1113 "CONNECT %s:%d HTTP/1.1\r\nHost: %s:%d\r\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1114 connect_data->host, connect_data->port, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1115 connect_data->host, connect_data->port); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1116 |
28745
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1117 if (purple_proxy_info_get_username(connect_data->gpi) != NULL) |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1118 { |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1119 char *t1, *t2, *ntlm_type1; |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1120 char hostname[256]; |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1121 |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1122 ret = gethostname(hostname, sizeof(hostname)); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1123 hostname[sizeof(hostname) - 1] = '\0'; |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1124 if (ret < 0 || hostname[0] == '\0') { |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1125 purple_debug_warning("proxy", "gethostname() failed -- is your hostname set?"); |
31777
5498ee1aa30b
Copy hostname fallbacks using g_strlcpy instead of strcpy.
Ethan Blanton <elb@pidgin.im>
parents:
31534
diff
changeset
|
1126 g_strlcpy(hostname, "localhost", sizeof(hostname)); |
28745
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1127 } |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1128 |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1129 t1 = g_strdup_printf("%s:%s", |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1130 purple_proxy_info_get_username(connect_data->gpi), |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1131 purple_proxy_info_get_password(connect_data->gpi) ? |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1132 purple_proxy_info_get_password(connect_data->gpi) : ""); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1133 t2 = purple_base64_encode((const guchar *)t1, strlen(t1)); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1134 g_free(t1); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1135 |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1136 ntlm_type1 = purple_ntlm_gen_type1(hostname, ""); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1137 |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1138 g_string_append_printf(request, |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1139 "Proxy-Authorization: Basic %s\r\n" |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1140 "Proxy-Authorization: NTLM %s\r\n" |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1141 "Proxy-Connection: Keep-Alive\r\n", |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1142 t2, ntlm_type1); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1143 g_free(ntlm_type1); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1144 g_free(t2); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1145 } |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1146 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1147 g_string_append(request, "\r\n"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1148 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1149 connect_data->write_buf_len = request->len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1150 connect_data->write_buffer = (guchar *)g_string_free(request, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1151 connect_data->written_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1152 connect_data->read_cb = http_canread; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1153 |
15822 | 1154 connect_data->inpa = purple_input_add(connect_data->fd, |
1155 PURPLE_INPUT_WRITE, proxy_do_write, connect_data); | |
23010
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1156 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1157 } |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1158 |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1159 static void |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1160 http_canwrite(gpointer data, gint source, PurpleInputCondition cond) { |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1161 PurpleProxyConnectData *connect_data = data; |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1162 int ret, error = ETIMEDOUT; |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1163 |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1164 purple_debug_info("proxy", "Connected to %s:%d.\n", |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1165 connect_data->host, connect_data->port); |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1166 |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1167 if (connect_data->inpa > 0) { |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1168 purple_input_remove(connect_data->inpa); |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1169 connect_data->inpa = 0; |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1170 } |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1171 |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1172 ret = purple_input_get_error(connect_data->fd, &error); |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1173 if (ret != 0 || error != 0) { |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1174 if (ret != 0) |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1175 error = errno; |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1176 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1177 return; |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1178 } |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1179 |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1180 if (connect_data->port == 80) { |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1181 /* |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1182 * If we're trying to connect to something running on |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1183 * port 80 then we assume the traffic using this |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1184 * connection is going to be HTTP traffic. If it's |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1185 * not then this will fail (uglily). But it's good |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1186 * to avoid using the CONNECT method because it's |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1187 * not always allowed. |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1188 */ |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1189 purple_debug_info("proxy", "HTTP proxy connection established\n"); |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1190 purple_proxy_connect_data_connected(connect_data); |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1191 } else { |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1192 http_start_connect_tunneling(connect_data); |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1193 } |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1194 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1195 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1196 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1197 static void |
15822 | 1198 proxy_connect_http(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1199 { |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1200 int flags; |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1201 |
15822 | 1202 purple_debug_info("proxy", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1203 "Connecting to %s:%d via %s:%d using HTTP\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1204 connect_data->host, connect_data->port, |
15822 | 1205 (purple_proxy_info_get_host(connect_data->gpi) ? purple_proxy_info_get_host(connect_data->gpi) : "(null)"), |
1206 purple_proxy_info_get_port(connect_data->gpi)); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1207 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1208 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1209 if (connect_data->fd < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1210 { |
15822 | 1211 purple_proxy_connect_data_disconnect_formatted(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1212 _("Unable to create socket: %s"), g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1213 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1214 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1215 |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1216 flags = fcntl(connect_data->fd, F_GETFL); |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1217 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1218 #ifndef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1219 fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1220 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1221 |
23010
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1222 if (connect(connect_data->fd, addr, addrlen) != 0) { |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1223 if (errno == EINPROGRESS || errno == EINTR) { |
15822 | 1224 purple_debug_info("proxy", "Connection in progress\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1225 |
23010
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1226 connect_data->inpa = purple_input_add(connect_data->fd, |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1227 PURPLE_INPUT_WRITE, http_canwrite, connect_data); |
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1228 } else |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
1229 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
23010
2b91ea8c94d5
Rearrange some of the HTTP proxy handling to make sure that we're actually
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23008
diff
changeset
|
1230 } else { |
15822 | 1231 purple_debug_info("proxy", "Connected immediately.\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1232 |
15822 | 1233 http_canwrite(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1234 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1235 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1236 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1237 static void |
15822 | 1238 s4_canread(gpointer data, gint source, PurpleInputCondition cond) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1239 { |
15822 | 1240 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1241 guchar *buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1242 int len, max_read; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1243 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1244 /* This is really not going to block under normal circumstances, but to |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1245 * be correct, we deal with the unlikely scenario */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1246 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1247 if (connect_data->read_buffer == NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1248 connect_data->read_buf_len = 12; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1249 connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1250 connect_data->read_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1251 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1252 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1253 buf = connect_data->read_buffer + connect_data->read_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1254 max_read = connect_data->read_buf_len - connect_data->read_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1255 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1256 len = read(connect_data->fd, buf, max_read); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1257 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1258 if ((len < 0 && errno == EAGAIN) || (len > 0 && len + connect_data->read_len < 4)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1259 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1260 else if (len + connect_data->read_len >= 4) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1261 if (connect_data->read_buffer[1] == 90) { |
15822 | 1262 purple_proxy_connect_data_connected(connect_data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1263 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1264 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1265 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1266 |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
1267 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1268 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1269 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1270 static void |
25478
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1271 s4_host_resolved(GSList *hosts, gpointer data, const char *error_message) |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1272 { |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1273 PurpleProxyConnectData *connect_data = data; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1274 unsigned char packet[9]; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1275 struct sockaddr *addr; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1276 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1277 connect_data->query_data = NULL; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1278 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1279 if (error_message != NULL) { |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1280 purple_proxy_connect_data_disconnect(connect_data, error_message); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1281 return; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1282 } |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1283 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1284 if (hosts == NULL) { |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1285 purple_proxy_connect_data_disconnect_formatted(connect_data, |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1286 _("Error resolving %s"), connect_data->host); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1287 return; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1288 } |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1289 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1290 /* Discard the length... */ |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1291 hosts = g_slist_delete_link(hosts, hosts); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1292 addr = hosts->data; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1293 hosts = g_slist_delete_link(hosts, hosts); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1294 |
25480
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1295 packet[0] = 0x04; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1296 packet[1] = 0x01; |
25478
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1297 packet[2] = connect_data->port >> 8; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1298 packet[3] = connect_data->port & 0xff; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1299 memcpy(packet + 4, &((struct sockaddr_in *)addr)->sin_addr.s_addr, 4); |
25480
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1300 packet[8] = 0x00; |
25478
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1301 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1302 g_free(addr); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1303 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1304 /* We could try the other hosts, but hopefully that shouldn't be necessary */ |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1305 while (hosts != NULL) { |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1306 /* Discard the length... */ |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1307 hosts = g_slist_delete_link(hosts, hosts); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1308 /* Free the address... */ |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1309 g_free(hosts->data); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1310 hosts = g_slist_delete_link(hosts, hosts); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1311 } |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1312 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1313 connect_data->write_buffer = g_memdup(packet, sizeof(packet)); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1314 connect_data->write_buf_len = sizeof(packet); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1315 connect_data->written_len = 0; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1316 connect_data->read_cb = s4_canread; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1317 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1318 connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1319 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1320 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1321 } |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1322 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1323 static void |
15822 | 1324 s4_canwrite(gpointer data, gint source, PurpleInputCondition cond) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1325 { |
15822 | 1326 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1327 int error = ETIMEDOUT; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1328 int ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1329 |
15822 | 1330 purple_debug_info("socks4 proxy", "Connected.\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1331 |
25478
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1332 if (connect_data->inpa > 0) { |
15822 | 1333 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1334 connect_data->inpa = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1335 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1336 |
15822 | 1337 ret = purple_input_get_error(connect_data->fd, &error); |
25478
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1338 if ((ret != 0) || (error != 0)) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1339 if (ret != 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1340 error = errno; |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
1341 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1342 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1343 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1344 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1345 /* |
25480
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1346 * The socks4 spec doesn't include support for doing host name lookups by |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1347 * the proxy. Many socks4 servers do this via the "socks4a" extension to |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1348 * the protocol. There doesn't appear to be a way to detect if a server |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1349 * supports this, so we require that the user set a global option. |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1350 */ |
25480
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1351 if (purple_prefs_get_bool("/purple/proxy/socks4_remotedns")) { |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1352 unsigned char packet[9]; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1353 int len; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1354 |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1355 purple_debug_info("socks4 proxy", "Attempting to use remote DNS.\n"); |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1356 |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1357 packet[0] = 0x04; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1358 packet[1] = 0x01; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1359 packet[2] = connect_data->port >> 8; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1360 packet[3] = connect_data->port & 0xff; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1361 packet[4] = 0x00; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1362 packet[5] = 0x00; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1363 packet[6] = 0x00; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1364 packet[7] = 0x01; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1365 packet[8] = 0x00; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1366 |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1367 len = sizeof(packet) + strlen(connect_data->host) + 1; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1368 |
25480
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1369 connect_data->write_buffer = g_malloc0(len); |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1370 memcpy(connect_data->write_buffer, packet, sizeof(packet)); |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1371 memcpy(connect_data->write_buffer + sizeof(packet), connect_data->host, strlen(connect_data->host)); |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1372 connect_data->write_buf_len = len; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1373 connect_data->written_len = 0; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1374 connect_data->read_cb = s4_canread; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1375 |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1376 connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data); |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1377 |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1378 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1379 } else { |
31479
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
1380 connect_data->query_data = purple_dnsquery_a_account( |
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
1381 connect_data->account, connect_data->host, |
25480
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1382 connect_data->port, s4_host_resolved, connect_data); |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1383 |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1384 if (connect_data->query_data == NULL) { |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1385 purple_debug_error("proxy", "dns query failed unexpectedly.\n"); |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1386 purple_proxy_connect_data_destroy(connect_data); |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1387 } |
25478
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1388 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1389 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1390 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1391 static void |
15822 | 1392 proxy_connect_socks4(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1393 { |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1394 int flags; |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1395 |
15822 | 1396 purple_debug_info("proxy", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1397 "Connecting to %s:%d via %s:%d using SOCKS4\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1398 connect_data->host, connect_data->port, |
15822 | 1399 purple_proxy_info_get_host(connect_data->gpi), |
1400 purple_proxy_info_get_port(connect_data->gpi)); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1401 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1402 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1403 if (connect_data->fd < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1404 { |
15822 | 1405 purple_proxy_connect_data_disconnect_formatted(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1406 _("Unable to create socket: %s"), g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1407 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1408 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1409 |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1410 flags = fcntl(connect_data->fd, F_GETFL); |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1411 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1412 #ifndef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1413 fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1414 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1415 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1416 if (connect(connect_data->fd, addr, addrlen) != 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1417 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1418 if ((errno == EINPROGRESS) || (errno == EINTR)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1419 { |
15822 | 1420 purple_debug_info("proxy", "Connection in progress.\n"); |
1421 connect_data->inpa = purple_input_add(connect_data->fd, | |
1422 PURPLE_INPUT_WRITE, s4_canwrite, connect_data); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1423 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1424 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1425 { |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
1426 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1427 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1428 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1429 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1430 { |
15822 | 1431 purple_debug_info("proxy", "Connected immediately.\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1432 |
15822 | 1433 s4_canwrite(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1434 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1435 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1436 |
17372
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1437 static gboolean |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1438 s5_ensure_buffer_length(PurpleProxyConnectData *connect_data, int len) |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1439 { |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1440 if(connect_data->read_len < len) { |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1441 if(connect_data->read_buf_len < len) { |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1442 /* it's not just that we haven't read enough, it's that we haven't tried to read enough yet */ |
22486
3225c99785b8
Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <mark@kingant.net>
parents:
22422
diff
changeset
|
1443 purple_debug_info("s5", "reallocing from %" G_GSIZE_FORMAT |
3225c99785b8
Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <mark@kingant.net>
parents:
22422
diff
changeset
|
1444 " to %d\n", connect_data->read_buf_len, len); |
17372
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1445 connect_data->read_buf_len = len; |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1446 connect_data->read_buffer = g_realloc(connect_data->read_buffer, connect_data->read_buf_len); |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1447 } |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1448 return FALSE; |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1449 } |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1450 |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1451 return TRUE; |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1452 } |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1453 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1454 static void |
15822 | 1455 s5_canread_again(gpointer data, gint source, PurpleInputCondition cond) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1456 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1457 guchar *dest, *buf; |
15822 | 1458 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1459 int len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1460 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1461 if (connect_data->read_buffer == NULL) { |
23008
d0f933c88fc6
Fix SOCK5 error handling to abort when we get a bogus ATYP response. Make the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22539
diff
changeset
|
1462 connect_data->read_buf_len = 5; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1463 connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1464 connect_data->read_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1465 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1466 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1467 dest = connect_data->read_buffer + connect_data->read_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1468 buf = connect_data->read_buffer; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1469 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1470 len = read(connect_data->fd, dest, (connect_data->read_buf_len - connect_data->read_len)); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1471 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1472 if (len == 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1473 { |
15822 | 1474 purple_proxy_connect_data_disconnect(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1475 _("Server closed the connection")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1476 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1477 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1478 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1479 if (len < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1480 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1481 if (errno == EAGAIN) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1482 /* No worries */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1483 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1484 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1485 /* Error! */ |
15822 | 1486 purple_proxy_connect_data_disconnect_formatted(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1487 _("Lost connection with server: %s"), g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1488 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1489 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1490 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1491 connect_data->read_len += len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1492 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1493 if(connect_data->read_len < 4) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1494 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1495 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1496 if ((buf[0] != 0x05) || (buf[1] != 0x00)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1497 if ((buf[0] == 0x05) && (buf[1] < 0x09)) { |
24453
0320b4a33432
Backport the 'purple_debug_*(msg)' -> 'purple_debug_*("%s", msg);' fixes.
Richard Laager <rlaager@wiktel.com>
parents:
24273
diff
changeset
|
1498 purple_debug_error("socks5 proxy", "%s", socks5errors[buf[1]]); |
15822 | 1499 purple_proxy_connect_data_disconnect(connect_data, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1500 socks5errors[buf[1]]); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1501 } else { |
15822 | 1502 purple_debug_error("socks5 proxy", "Bad data.\n"); |
1503 purple_proxy_connect_data_disconnect(connect_data, | |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1504 _("Received invalid data on connection with server")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1505 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1506 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1507 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1508 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1509 /* Skip past BND.ADDR */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1510 switch(buf[3]) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1511 case 0x01: /* the address is a version-4 IP address, with a length of 4 octets */ |
17372
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1512 if(!s5_ensure_buffer_length(connect_data, 4 + 4)) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1513 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1514 buf += 4 + 4; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1515 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1516 case 0x03: /* the address field contains a fully-qualified domain name. The first |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1517 octet of the address field contains the number of octets of name that |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1518 follow, there is no terminating NUL octet. */ |
17372
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1519 if(!s5_ensure_buffer_length(connect_data, 4 + 1)) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1520 return; |
17372
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1521 buf += 4; |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1522 if(!s5_ensure_buffer_length(connect_data, 4 + 1 + buf[0])) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1523 return; |
17372
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1524 buf += buf[0] + 1; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1525 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1526 case 0x04: /* the address is a version-6 IP address, with a length of 16 octets */ |
17372
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1527 if(!s5_ensure_buffer_length(connect_data, 4 + 16)) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1528 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1529 buf += 4 + 16; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1530 break; |
23008
d0f933c88fc6
Fix SOCK5 error handling to abort when we get a bogus ATYP response. Make the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22539
diff
changeset
|
1531 default: |
d0f933c88fc6
Fix SOCK5 error handling to abort when we get a bogus ATYP response. Make the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22539
diff
changeset
|
1532 purple_debug_error("socks5 proxy", "Invalid ATYP received (0x%X)\n", buf[3]); |
d0f933c88fc6
Fix SOCK5 error handling to abort when we get a bogus ATYP response. Make the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22539
diff
changeset
|
1533 purple_proxy_connect_data_disconnect(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1534 _("Received invalid data on connection with server")); |
23008
d0f933c88fc6
Fix SOCK5 error handling to abort when we get a bogus ATYP response. Make the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22539
diff
changeset
|
1535 return; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1536 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1537 |
17372
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1538 /* Skip past BND.PORT */ |
5a51af9a61a7
fix socks5 from over-reading the headers, and throwing away data (fixes jabber file receiving)
Nathan Walp <nwalp@pidgin.im>
parents:
17058
diff
changeset
|
1539 if(!s5_ensure_buffer_length(connect_data, (buf - connect_data->read_buffer) + 2)) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1540 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1541 |
15822 | 1542 purple_proxy_connect_data_connected(connect_data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1543 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1544 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1545 static void |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1546 s5_sendconnect(gpointer data, int source) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1547 { |
15822 | 1548 PurpleProxyConnectData *connect_data = data; |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
1549 size_t hlen = strlen(connect_data->host); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1550 connect_data->write_buf_len = 5 + hlen + 2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1551 connect_data->write_buffer = g_malloc(connect_data->write_buf_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1552 connect_data->written_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1553 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1554 connect_data->write_buffer[0] = 0x05; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1555 connect_data->write_buffer[1] = 0x01; /* CONNECT */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1556 connect_data->write_buffer[2] = 0x00; /* reserved */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1557 connect_data->write_buffer[3] = 0x03; /* address type -- host name */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1558 connect_data->write_buffer[4] = hlen; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1559 memcpy(connect_data->write_buffer + 5, connect_data->host, hlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1560 connect_data->write_buffer[5 + hlen] = connect_data->port >> 8; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1561 connect_data->write_buffer[5 + hlen + 1] = connect_data->port & 0xff; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1562 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1563 connect_data->read_cb = s5_canread_again; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1564 |
15822 | 1565 connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data); |
1566 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1567 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1568 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1569 static void |
15822 | 1570 s5_readauth(gpointer data, gint source, PurpleInputCondition cond) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1571 { |
15822 | 1572 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1573 int len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1574 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1575 if (connect_data->read_buffer == NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1576 connect_data->read_buf_len = 2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1577 connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1578 connect_data->read_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1579 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1580 |
15822 | 1581 purple_debug_info("socks5 proxy", "Got auth response.\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1582 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1583 len = read(connect_data->fd, connect_data->read_buffer + connect_data->read_len, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1584 connect_data->read_buf_len - connect_data->read_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1585 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1586 if (len == 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1587 { |
15822 | 1588 purple_proxy_connect_data_disconnect(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1589 _("Server closed the connection")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1590 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1591 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1592 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1593 if (len < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1594 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1595 if (errno == EAGAIN) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1596 /* No worries */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1597 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1598 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1599 /* Error! */ |
15822 | 1600 purple_proxy_connect_data_disconnect_formatted(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1601 _("Lost connection with server: %s"), g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1602 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1603 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1604 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1605 connect_data->read_len += len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1606 if (connect_data->read_len < 2) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1607 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1608 |
15822 | 1609 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1610 connect_data->inpa = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1611 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1612 if ((connect_data->read_buffer[0] != 0x01) || (connect_data->read_buffer[1] != 0x00)) { |
15822 | 1613 purple_proxy_connect_data_disconnect(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1614 _("Received invalid data on connection with server")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1615 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1616 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1617 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1618 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1619 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1620 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1621 s5_sendconnect(connect_data, connect_data->fd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1622 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1623 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1624 static void |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1625 hmacmd5_chap(const unsigned char * challenge, int challen, const char * passwd, unsigned char * response) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1626 { |
15822 | 1627 PurpleCipher *cipher; |
1628 PurpleCipherContext *ctx; | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1629 int i; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1630 unsigned char Kxoripad[65]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1631 unsigned char Kxoropad[65]; |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
1632 size_t pwlen; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1633 |
15822 | 1634 cipher = purple_ciphers_find_cipher("md5"); |
1635 ctx = purple_cipher_context_new(cipher, NULL); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1636 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1637 memset(Kxoripad,0,sizeof(Kxoripad)); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1638 memset(Kxoropad,0,sizeof(Kxoropad)); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1639 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1640 pwlen=strlen(passwd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1641 if (pwlen>64) { |
15822 | 1642 purple_cipher_context_append(ctx, (const guchar *)passwd, strlen(passwd)); |
1643 purple_cipher_context_digest(ctx, sizeof(Kxoripad), Kxoripad, NULL); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1644 pwlen=16; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1645 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1646 memcpy(Kxoripad, passwd, pwlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1647 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1648 memcpy(Kxoropad,Kxoripad,pwlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1649 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1650 for (i=0;i<64;i++) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1651 Kxoripad[i]^=0x36; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1652 Kxoropad[i]^=0x5c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1653 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1654 |
15822 | 1655 purple_cipher_context_reset(ctx, NULL); |
1656 purple_cipher_context_append(ctx, Kxoripad, 64); | |
1657 purple_cipher_context_append(ctx, challenge, challen); | |
1658 purple_cipher_context_digest(ctx, sizeof(Kxoripad), Kxoripad, NULL); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1659 |
15822 | 1660 purple_cipher_context_reset(ctx, NULL); |
1661 purple_cipher_context_append(ctx, Kxoropad, 64); | |
1662 purple_cipher_context_append(ctx, Kxoripad, 16); | |
1663 purple_cipher_context_digest(ctx, 16, response, NULL); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1664 |
15822 | 1665 purple_cipher_context_destroy(ctx); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1666 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1667 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1668 static void |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1669 s5_readchap(gpointer data, gint source, PurpleInputCondition cond); |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1670 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1671 /* |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1672 * Return how many bytes we processed |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1673 * -1 means we've shouldn't keep reading from the buffer |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1674 */ |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1675 static gssize |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1676 s5_parse_chap_msg(PurpleProxyConnectData *connect_data) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1677 { |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1678 guchar *buf, *cmdbuf = connect_data->read_buffer; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1679 int len, navas, currentav; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1680 |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1681 purple_debug_misc("socks5 proxy", "Reading CHAP message: %x\n", *cmdbuf); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1682 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1683 if (*cmdbuf != 0x01) { |
15822 | 1684 purple_proxy_connect_data_disconnect(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1685 _("Received invalid data on connection with server")); |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1686 return -1; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1687 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1688 cmdbuf++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1689 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1690 navas = *cmdbuf; |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1691 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1692 purple_debug_misc("socks5 proxy", "Expecting %d attribute(s).\n", navas); |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1693 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1694 cmdbuf++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1695 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1696 for (currentav = 0; currentav < navas; currentav++) { |
22539
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1697 |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1698 len = connect_data->read_len - (cmdbuf - connect_data->read_buffer); |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1699 /* We don't have enough data to even know how long the next attribute is, |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1700 * or we don't have the full length of the next attribute. */ |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1701 if (len < 2 || len < (cmdbuf[1] + 2)) { |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1702 /* Clear out the attributes that have been read - decrease the attribute count */ |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1703 connect_data->read_buffer[1] = navas - currentav; |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1704 /* Move the unprocessed data into the first attribute position */ |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1705 memmove((connect_data->read_buffer + 2), cmdbuf, len); |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1706 /* Decrease the read count accordingly */ |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1707 connect_data->read_len = len + 2; |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1708 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1709 purple_debug_info("socks5 proxy", "Need more data to retrieve attribute %d.\n", currentav); |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1710 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1711 return -1; |
22539
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1712 } |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1713 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1714 buf = cmdbuf + 2; |
22539
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1715 |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1716 if (cmdbuf[1] == 0) { |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1717 purple_debug_error("socks5 proxy", "Attribute %x Value length of 0; ignoring.\n", cmdbuf[0]); |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1718 cmdbuf = buf; |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1719 continue; |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1720 } |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1721 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1722 switch (cmdbuf[0]) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1723 case 0x00: |
22539
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1724 purple_debug_info("socks5 proxy", "Received STATUS of %x\n", buf[0]); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1725 /* Did auth work? */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1726 if (buf[0] == 0x00) { |
15822 | 1727 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1728 connect_data->inpa = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1729 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1730 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1731 /* Success */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1732 s5_sendconnect(connect_data, connect_data->fd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1733 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1734 /* Failure */ |
15822 | 1735 purple_debug_warning("proxy", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1736 "socks5 CHAP authentication " |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1737 "failed. Disconnecting..."); |
15822 | 1738 purple_proxy_connect_data_disconnect(connect_data, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1739 _("Authentication failed")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1740 } |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1741 return -1; |
24107
71fecd0f4ce6
Add support for printing out the TEXT-MESSAGE in SOCKS5 CHAP auth.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24106
diff
changeset
|
1742 case 0x01: |
71fecd0f4ce6
Add support for printing out the TEXT-MESSAGE in SOCKS5 CHAP auth.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24106
diff
changeset
|
1743 /* We've already validated that cmdbuf[1] is sane. */ |
71fecd0f4ce6
Add support for printing out the TEXT-MESSAGE in SOCKS5 CHAP auth.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24106
diff
changeset
|
1744 purple_debug_info("socks5 proxy", "Received TEXT-MESSAGE of '%.*s'\n", (int) cmdbuf[1], buf); |
71fecd0f4ce6
Add support for printing out the TEXT-MESSAGE in SOCKS5 CHAP auth.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24106
diff
changeset
|
1745 break; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1746 case 0x03: |
22539
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1747 purple_debug_info("socks5 proxy", "Received CHALLENGE\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1748 /* Server wants our credentials */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1749 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1750 connect_data->write_buf_len = 16 + 4; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1751 connect_data->write_buffer = g_malloc(connect_data->write_buf_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1752 connect_data->written_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1753 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1754 hmacmd5_chap(buf, cmdbuf[1], |
15822 | 1755 purple_proxy_info_get_password(connect_data->gpi), |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1756 connect_data->write_buffer + 4); |
24107
71fecd0f4ce6
Add support for printing out the TEXT-MESSAGE in SOCKS5 CHAP auth.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24106
diff
changeset
|
1757 /* TODO: What about USER-IDENTITY? */ |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1758 connect_data->write_buffer[0] = 0x01; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1759 connect_data->write_buffer[1] = 0x01; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1760 connect_data->write_buffer[2] = 0x04; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1761 connect_data->write_buffer[3] = 0x10; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1762 |
15822 | 1763 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1764 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1765 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1766 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1767 connect_data->read_cb = s5_readchap; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1768 |
15822 | 1769 connect_data->inpa = purple_input_add(connect_data->fd, |
1770 PURPLE_INPUT_WRITE, proxy_do_write, connect_data); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1771 |
15822 | 1772 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1773 return -1; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1774 case 0x11: |
22539
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1775 purple_debug_info("socks5 proxy", "Received ALGORIGTHMS of %x\n", buf[0]); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1776 /* Server wants to select an algorithm */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1777 if (buf[0] != 0x85) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1778 /* Only currently support HMAC-MD5 */ |
15822 | 1779 purple_debug_warning("proxy", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1780 "Server tried to select an " |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1781 "algorithm that we did not advertise " |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1782 "as supporting. This is a violation " |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1783 "of the socks5 CHAP specification. " |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1784 "Disconnecting..."); |
15822 | 1785 purple_proxy_connect_data_disconnect(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1786 _("Received invalid data on connection with server")); |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1787 return -1; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1788 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1789 break; |
22539
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1790 default: |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1791 purple_debug_info("socks5 proxy", "Received unused command %x, length=%d\n", cmdbuf[0], cmdbuf[1]); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1792 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1793 cmdbuf = buf + cmdbuf[1]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1794 } |
22539
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1795 |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1796 return (cmdbuf - connect_data->read_buffer); |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1797 } |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1798 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1799 static void |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1800 s5_readchap(gpointer data, gint source, PurpleInputCondition cond) |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1801 { |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1802 gssize msg_ret; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1803 PurpleProxyConnectData *connect_data = data; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1804 int len; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1805 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1806 purple_debug(PURPLE_DEBUG_INFO, "socks5 proxy", "Got CHAP response.\n"); |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1807 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1808 if (connect_data->read_buffer == NULL) { |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1809 /* A big enough butfer to read the message header (2 bytes) and at least one complete attribute and value (1 + 1 + 255). */ |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1810 connect_data->read_buf_len = 259; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1811 connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1812 connect_data->read_len = 0; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1813 } |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1814 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1815 if (connect_data->read_buf_len - connect_data->read_len == 0) { |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1816 /*If the stuff below is right, this shouldn't be possible. */ |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1817 purple_debug_error("socks5 proxy", "This is about to suck because the read buffer is full (shouldn't happen).\n"); |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1818 } |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1819 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1820 len = read(connect_data->fd, connect_data->read_buffer + connect_data->read_len, |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1821 connect_data->read_buf_len - connect_data->read_len); |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1822 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1823 if (len == 0) { |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1824 purple_proxy_connect_data_disconnect(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1825 _("Server closed the connection")); |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1826 return; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1827 } |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1828 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1829 if (len < 0) { |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1830 if (errno == EAGAIN) |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1831 /* No worries */ |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1832 return; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1833 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1834 /* Error! */ |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1835 purple_proxy_connect_data_disconnect_formatted(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1836 _("Lost connection with server: %s"), g_strerror(errno)); |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1837 return; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1838 } |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1839 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1840 connect_data->read_len += len; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1841 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1842 /* We may have read more than one message into the buffer, we need to make sure to process them all */ |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1843 while (1) { |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1844 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1845 /* We need more to be able to read this message */ |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1846 if (connect_data->read_len < 2) |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1847 return; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1848 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1849 msg_ret = s5_parse_chap_msg(connect_data); |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
1850 |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1851 if (msg_ret < 0) |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1852 return; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1853 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1854 /* See if we have another message already in the buffer */ |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1855 if ((len = connect_data->read_len - msg_ret) > 0) { |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1856 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1857 /* Move on to the next message */ |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1858 memmove(connect_data->read_buffer, connect_data->read_buffer + msg_ret, len); |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1859 /* Decrease the read count accordingly */ |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1860 connect_data->read_len = len; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1861 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1862 /* Try to read the message that connect_data->read_buffer now points to */ |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1863 continue; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1864 } |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1865 |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1866 break; |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1867 } |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1868 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1869 /* Fell through. We ran out of CHAP events to process, but haven't |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1870 * succeeded or failed authentication - there may be more to come. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1871 * If this is the case, come straight back here. */ |
22539
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1872 |
24106
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1873 purple_debug_info("socks5 proxy", "Waiting for another message from which to read CHAP info.\n"); |
1fb2e7951f9b
Fix the SOCKS5 CHAP authentication to parse several messages if they are read at
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23992
diff
changeset
|
1874 |
22539
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1875 /* We've processed all the available attributes, so get ready for a whole new message */ |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1876 g_free(connect_data->read_buffer); |
5a0186edda97
Fix SOCKS5 CHAP authentication to be more robust; the current stuff depends on the attributes coming in in a specific order and the whole authentication having a maximum length of 20 bytes. Big thanks to Jonathan Rudolph ("simple" on IRC) for helping figure out what was wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
1877 connect_data->read_buffer = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1878 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1879 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1880 static void |
15822 | 1881 s5_canread(gpointer data, gint source, PurpleInputCondition cond) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1882 { |
15822 | 1883 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1884 int len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1885 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1886 if (connect_data->read_buffer == NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1887 connect_data->read_buf_len = 2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1888 connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1889 connect_data->read_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1890 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1891 |
15822 | 1892 purple_debug_info("socks5 proxy", "Able to read.\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1893 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1894 len = read(connect_data->fd, connect_data->read_buffer + connect_data->read_len, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1895 connect_data->read_buf_len - connect_data->read_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1896 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1897 if (len == 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1898 { |
15822 | 1899 purple_proxy_connect_data_disconnect(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1900 _("Server closed the connection")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1901 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1902 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1903 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1904 if (len < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1905 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1906 if (errno == EAGAIN) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1907 /* No worries */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1908 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1909 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1910 /* Error! */ |
15822 | 1911 purple_proxy_connect_data_disconnect_formatted(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1912 _("Lost connection with server: %s"), g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1913 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1914 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1915 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1916 connect_data->read_len += len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1917 if (connect_data->read_len < 2) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1918 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1919 |
15822 | 1920 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1921 connect_data->inpa = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1922 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1923 if ((connect_data->read_buffer[0] != 0x05) || (connect_data->read_buffer[1] == 0xff)) { |
15822 | 1924 purple_proxy_connect_data_disconnect(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
1925 _("Received invalid data on connection with server")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1926 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1927 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1928 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1929 if (connect_data->read_buffer[1] == 0x02) { |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
1930 size_t i, j; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1931 const char *u, *p; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1932 |
15822 | 1933 u = purple_proxy_info_get_username(connect_data->gpi); |
1934 p = purple_proxy_info_get_password(connect_data->gpi); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1935 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1936 i = (u == NULL) ? 0 : strlen(u); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1937 j = (p == NULL) ? 0 : strlen(p); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1938 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1939 connect_data->write_buf_len = 1 + 1 + i + 1 + j; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1940 connect_data->write_buffer = g_malloc(connect_data->write_buf_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1941 connect_data->written_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1942 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1943 connect_data->write_buffer[0] = 0x01; /* version 1 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1944 connect_data->write_buffer[1] = i; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1945 if (u != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1946 memcpy(connect_data->write_buffer + 2, u, i); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1947 connect_data->write_buffer[2 + i] = j; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1948 if (p != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1949 memcpy(connect_data->write_buffer + 2 + i + 1, p, j); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1950 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1951 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1952 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1953 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1954 connect_data->read_cb = s5_readauth; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1955 |
15822 | 1956 connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1957 proxy_do_write, connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1958 |
15822 | 1959 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1960 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1961 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1962 } else if (connect_data->read_buffer[1] == 0x03) { |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
1963 size_t userlen; |
15822 | 1964 userlen = strlen(purple_proxy_info_get_username(connect_data->gpi)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1965 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1966 connect_data->write_buf_len = 7 + userlen; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1967 connect_data->write_buffer = g_malloc(connect_data->write_buf_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1968 connect_data->written_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1969 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1970 connect_data->write_buffer[0] = 0x01; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1971 connect_data->write_buffer[1] = 0x02; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1972 connect_data->write_buffer[2] = 0x11; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1973 connect_data->write_buffer[3] = 0x01; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1974 connect_data->write_buffer[4] = 0x85; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1975 connect_data->write_buffer[5] = 0x02; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1976 connect_data->write_buffer[6] = userlen; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1977 memcpy(connect_data->write_buffer + 7, |
15822 | 1978 purple_proxy_info_get_username(connect_data->gpi), userlen); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1979 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1980 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1981 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1982 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1983 connect_data->read_cb = s5_readchap; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1984 |
15822 | 1985 connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1986 proxy_do_write, connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1987 |
15822 | 1988 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1989 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1990 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1991 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1992 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1993 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1994 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1995 s5_sendconnect(connect_data, connect_data->fd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1996 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1997 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1998 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1999 static void |
15822 | 2000 s5_canwrite(gpointer data, gint source, PurpleInputCondition cond) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2001 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2002 unsigned char buf[5]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2003 int i; |
15822 | 2004 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2005 int error = ETIMEDOUT; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2006 int ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2007 |
15822 | 2008 purple_debug_info("socks5 proxy", "Connected.\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2009 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2010 if (connect_data->inpa > 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2011 { |
15822 | 2012 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2013 connect_data->inpa = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2014 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2015 |
15822 | 2016 ret = purple_input_get_error(connect_data->fd, &error); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2017 if ((ret != 0) || (error != 0)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2018 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2019 if (ret != 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2020 error = errno; |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
2021 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2022 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2023 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2024 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2025 i = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2026 buf[0] = 0x05; /* SOCKS version 5 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2027 |
15822 | 2028 if (purple_proxy_info_get_username(connect_data->gpi) != NULL) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2029 buf[1] = 0x03; /* three methods */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2030 buf[2] = 0x00; /* no authentication */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2031 buf[3] = 0x03; /* CHAP authentication */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2032 buf[4] = 0x02; /* username/password authentication */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2033 i = 5; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2034 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2035 else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2036 buf[1] = 0x01; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2037 buf[2] = 0x00; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2038 i = 3; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2039 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2040 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2041 connect_data->write_buf_len = i; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2042 connect_data->write_buffer = g_malloc(connect_data->write_buf_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2043 memcpy(connect_data->write_buffer, buf, i); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2044 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2045 connect_data->read_cb = s5_canread; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2046 |
15822 | 2047 connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data); |
2048 proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2049 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2050 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2051 static void |
15822 | 2052 proxy_connect_socks5(PurpleProxyConnectData *connect_data, struct sockaddr *addr, socklen_t addrlen) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2053 { |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
2054 int flags; |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
2055 |
15822 | 2056 purple_debug_info("proxy", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2057 "Connecting to %s:%d via %s:%d using SOCKS5\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2058 connect_data->host, connect_data->port, |
15822 | 2059 purple_proxy_info_get_host(connect_data->gpi), |
2060 purple_proxy_info_get_port(connect_data->gpi)); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2061 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2062 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2063 if (connect_data->fd < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2064 { |
15822 | 2065 purple_proxy_connect_data_disconnect_formatted(connect_data, |
27375
70629a4a89ec
Remove periods and newlines from many error messages that end up being used
Mark Doliner <mark@kingant.net>
parents:
27231
diff
changeset
|
2066 _("Unable to create socket: %s"), g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2067 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2068 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2069 |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
2070 flags = fcntl(connect_data->fd, F_GETFL); |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
2071 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2072 #ifndef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2073 fcntl(connect_data->fd, F_SETFD, FD_CLOEXEC); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2074 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2075 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2076 if (connect(connect_data->fd, addr, addrlen) != 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2077 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2078 if ((errno == EINPROGRESS) || (errno == EINTR)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2079 { |
15822 | 2080 purple_debug_info("socks5 proxy", "Connection in progress\n"); |
2081 connect_data->inpa = purple_input_add(connect_data->fd, | |
2082 PURPLE_INPUT_WRITE, s5_canwrite, connect_data); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2083 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2084 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2085 { |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
2086 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2087 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2088 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2089 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2090 { |
15822 | 2091 purple_debug_info("proxy", "Connected immediately.\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2092 |
15822 | 2093 s5_canwrite(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2094 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2095 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2096 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2097 /** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2098 * This function attempts to connect to the next IP address in the list |
15822 | 2099 * of IP addresses returned to us by purple_dnsquery_a() and attemps |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2100 * to connect to each one. This is called after the hostname is |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2101 * resolved, and each time a connection attempt fails (assuming there |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2102 * is another IP address to try). |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2103 */ |
23201
313b87adb730
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23010
diff
changeset
|
2104 #ifndef INET6_ADDRSTRLEN |
313b87adb730
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23010
diff
changeset
|
2105 #define INET6_ADDRSTRLEN 46 |
313b87adb730
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23010
diff
changeset
|
2106 #endif |
313b87adb730
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23010
diff
changeset
|
2107 |
15822 | 2108 static void try_connect(PurpleProxyConnectData *connect_data) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2109 { |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
2110 socklen_t addrlen; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2111 struct sockaddr *addr; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2112 char ipaddr[INET6_ADDRSTRLEN]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2113 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2114 addrlen = GPOINTER_TO_INT(connect_data->hosts->data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2115 connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2116 addr = connect_data->hosts->data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2117 connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); |
23201
313b87adb730
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23010
diff
changeset
|
2118 #ifdef HAVE_INET_NTOP |
29042
0257b8fe21d6
proxy: Fix printing IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
28747
diff
changeset
|
2119 if (addr->sa_family == AF_INET) |
0257b8fe21d6
proxy: Fix printing IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
28747
diff
changeset
|
2120 inet_ntop(addr->sa_family, &((struct sockaddr_in *)addr)->sin_addr, |
0257b8fe21d6
proxy: Fix printing IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
28747
diff
changeset
|
2121 ipaddr, sizeof(ipaddr)); |
0257b8fe21d6
proxy: Fix printing IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
28747
diff
changeset
|
2122 else if (addr->sa_family == AF_INET6) |
0257b8fe21d6
proxy: Fix printing IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
28747
diff
changeset
|
2123 inet_ntop(addr->sa_family, &((struct sockaddr_in6 *)addr)->sin6_addr, |
0257b8fe21d6
proxy: Fix printing IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
28747
diff
changeset
|
2124 ipaddr, sizeof(ipaddr)); |
23201
313b87adb730
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23010
diff
changeset
|
2125 #else |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
2126 memcpy(ipaddr, inet_ntoa(((struct sockaddr_in *)addr)->sin_addr), |
23201
313b87adb730
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23010
diff
changeset
|
2127 sizeof(ipaddr)); |
313b87adb730
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23010
diff
changeset
|
2128 #endif |
15822 | 2129 purple_debug_info("proxy", "Attempting connection to %s\n", ipaddr); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2130 |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2131 if (connect_data->socket_type == SOCK_DGRAM) { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2132 proxy_connect_udp_none(connect_data, addr, addrlen); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2133 g_free(addr); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2134 return; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2135 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2136 |
15822 | 2137 switch (purple_proxy_info_get_type(connect_data->gpi)) { |
2138 case PURPLE_PROXY_NONE: | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2139 proxy_connect_none(connect_data, addr, addrlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2140 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2141 |
15822 | 2142 case PURPLE_PROXY_HTTP: |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2143 proxy_connect_http(connect_data, addr, addrlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2144 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2145 |
15822 | 2146 case PURPLE_PROXY_SOCKS4: |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2147 proxy_connect_socks4(connect_data, addr, addrlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2148 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2149 |
15822 | 2150 case PURPLE_PROXY_SOCKS5: |
31478
9a7c5d242521
Add a new proxy type of "Tor". This is really just a SOCKS5 proxy, but can be
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30413
diff
changeset
|
2151 case PURPLE_PROXY_TOR: |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2152 proxy_connect_socks5(connect_data, addr, addrlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2153 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2154 |
15822 | 2155 case PURPLE_PROXY_USE_ENVVAR: |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2156 proxy_connect_http(connect_data, addr, addrlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2157 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2158 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2159 default: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2160 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2161 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2162 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2163 g_free(addr); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2164 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2165 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2166 static void |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2167 connection_host_resolved(GSList *hosts, gpointer data, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2168 const char *error_message) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2169 { |
15822 | 2170 PurpleProxyConnectData *connect_data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2171 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2172 connect_data = data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2173 connect_data->query_data = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2174 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2175 if (error_message != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2176 { |
15822 | 2177 purple_proxy_connect_data_disconnect(connect_data, error_message); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2178 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2179 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2180 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2181 if (hosts == NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2182 { |
27381
f541583e31bd
More uniformity among disconnect error messages
Mark Doliner <mark@kingant.net>
parents:
27375
diff
changeset
|
2183 purple_proxy_connect_data_disconnect(connect_data, _("Unable to resolve hostname")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2184 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2185 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2186 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2187 connect_data->hosts = hosts; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2188 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2189 try_connect(connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2190 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2191 |
15822 | 2192 PurpleProxyInfo * |
2193 purple_proxy_get_setup(PurpleAccount *account) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2194 { |
15822 | 2195 PurpleProxyInfo *gpi = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2196 const gchar *tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2197 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2198 /* This is used as a fallback so we don't overwrite the selected proxy type */ |
15822 | 2199 static PurpleProxyInfo *tmp_none_proxy_info = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2200 if (!tmp_none_proxy_info) { |
15822 | 2201 tmp_none_proxy_info = purple_proxy_info_new(); |
2202 purple_proxy_info_set_type(tmp_none_proxy_info, PURPLE_PROXY_NONE); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2203 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2204 |
15822 | 2205 if (account && purple_account_get_proxy_info(account) != NULL) { |
2206 gpi = purple_account_get_proxy_info(account); | |
2207 if (purple_proxy_info_get_type(gpi) == PURPLE_PROXY_USE_GLOBAL) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2208 gpi = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2209 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2210 if (gpi == NULL) { |
15822 | 2211 if (purple_running_gnome()) |
2212 gpi = purple_gnome_proxy_get_info(); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2213 else |
15822 | 2214 gpi = purple_global_proxy_get_info(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2215 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2216 |
15822 | 2217 if (purple_proxy_info_get_type(gpi) == PURPLE_PROXY_USE_ENVVAR) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2218 if ((tmp = g_getenv("HTTP_PROXY")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2219 (tmp = g_getenv("http_proxy")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2220 (tmp = g_getenv("HTTPPROXY")) != NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2221 char *proxyhost, *proxyuser, *proxypasswd; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2222 int proxyport; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2223 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2224 /* http_proxy-format: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2225 * export http_proxy="http://user:passwd@your.proxy.server:port/" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2226 */ |
15822 | 2227 if(purple_url_parse(tmp, &proxyhost, &proxyport, NULL, &proxyuser, &proxypasswd)) { |
2228 purple_proxy_info_set_host(gpi, proxyhost); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2229 g_free(proxyhost); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2230 |
15822 | 2231 purple_proxy_info_set_username(gpi, proxyuser); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2232 g_free(proxyuser); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2233 |
15822 | 2234 purple_proxy_info_set_password(gpi, proxypasswd); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2235 g_free(proxypasswd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2236 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2237 /* only for backward compatibility */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2238 if (proxyport == 80 && |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2239 ((tmp = g_getenv("HTTP_PROXY_PORT")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2240 (tmp = g_getenv("http_proxy_port")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2241 (tmp = g_getenv("HTTPPROXYPORT")) != NULL)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2242 proxyport = atoi(tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2243 |
15822 | 2244 purple_proxy_info_set_port(gpi, proxyport); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2245 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2246 /* XXX: Do we want to skip this step if user/password were part of url? */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2247 if ((tmp = g_getenv("HTTP_PROXY_USER")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2248 (tmp = g_getenv("http_proxy_user")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2249 (tmp = g_getenv("HTTPPROXYUSER")) != NULL) |
15822 | 2250 purple_proxy_info_set_username(gpi, tmp); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2251 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2252 if ((tmp = g_getenv("HTTP_PROXY_PASS")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2253 (tmp = g_getenv("http_proxy_pass")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2254 (tmp = g_getenv("HTTPPROXYPASS")) != NULL) |
15822 | 2255 purple_proxy_info_set_password(gpi, tmp); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2256 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2257 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2258 } else { |
23970
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
2259 #ifdef _WIN32 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
2260 PurpleProxyInfo *wgpi; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
2261 if ((wgpi = purple_win32_proxy_get_info()) != NULL) |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
2262 return wgpi; |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
2263 #endif |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2264 /* no proxy environment variable found, don't use a proxy */ |
15822 | 2265 purple_debug_info("proxy", "No environment settings found, not using a proxy\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2266 gpi = tmp_none_proxy_info; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2267 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2268 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2269 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2270 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2271 return gpi; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2272 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2273 |
15822 | 2274 PurpleProxyConnectData * |
2275 purple_proxy_connect(void *handle, PurpleAccount *account, | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2276 const char *host, int port, |
15822 | 2277 PurpleProxyConnectFunction connect_cb, gpointer data) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2278 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2279 const char *connecthost = host; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2280 int connectport = port; |
15822 | 2281 PurpleProxyConnectData *connect_data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2282 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2283 g_return_val_if_fail(host != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2284 g_return_val_if_fail(port > 0, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2285 g_return_val_if_fail(connect_cb != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2286 |
15822 | 2287 connect_data = g_new0(PurpleProxyConnectData, 1); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2288 connect_data->fd = -1; |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2289 connect_data->socket_type = SOCK_STREAM; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2290 connect_data->handle = handle; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2291 connect_data->connect_cb = connect_cb; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2292 connect_data->data = data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2293 connect_data->host = g_strdup(host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2294 connect_data->port = port; |
15822 | 2295 connect_data->gpi = purple_proxy_get_setup(account); |
31479
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2296 connect_data->account = account; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2297 |
15822 | 2298 if ((purple_proxy_info_get_type(connect_data->gpi) != PURPLE_PROXY_NONE) && |
2299 (purple_proxy_info_get_host(connect_data->gpi) == NULL || | |
2300 purple_proxy_info_get_port(connect_data->gpi) <= 0)) { | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2301 |
15822 | 2302 purple_notify_error(NULL, NULL, _("Invalid proxy settings"), _("Either the host name or port number specified for your given proxy type is invalid.")); |
2303 purple_proxy_connect_data_destroy(connect_data); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2304 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2305 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2306 |
15822 | 2307 switch (purple_proxy_info_get_type(connect_data->gpi)) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2308 { |
15822 | 2309 case PURPLE_PROXY_NONE: |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2310 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2311 |
15822 | 2312 case PURPLE_PROXY_HTTP: |
2313 case PURPLE_PROXY_SOCKS4: | |
2314 case PURPLE_PROXY_SOCKS5: | |
31478
9a7c5d242521
Add a new proxy type of "Tor". This is really just a SOCKS5 proxy, but can be
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30413
diff
changeset
|
2315 case PURPLE_PROXY_TOR: |
15822 | 2316 case PURPLE_PROXY_USE_ENVVAR: |
2317 connecthost = purple_proxy_info_get_host(connect_data->gpi); | |
2318 connectport = purple_proxy_info_get_port(connect_data->gpi); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2319 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2320 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2321 default: |
24273
1263f302d05e
Add debug output when proxy configuration issues are seen. This will help to
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24119
diff
changeset
|
2322 purple_debug_error("proxy", "Invalid Proxy type (%d) specified.\n", |
1263f302d05e
Add debug output when proxy configuration issues are seen. This will help to
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24119
diff
changeset
|
2323 purple_proxy_info_get_type(connect_data->gpi)); |
15822 | 2324 purple_proxy_connect_data_destroy(connect_data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2325 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2326 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2327 |
31479
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2328 connect_data->query_data = purple_dnsquery_a_account(account, connecthost, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2329 connectport, connection_host_resolved, connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2330 if (connect_data->query_data == NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2331 { |
24273
1263f302d05e
Add debug output when proxy configuration issues are seen. This will help to
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24119
diff
changeset
|
2332 purple_debug_error("proxy", "dns query failed unexpectedly.\n"); |
15822 | 2333 purple_proxy_connect_data_destroy(connect_data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2334 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2335 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2336 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2337 handles = g_slist_prepend(handles, connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2338 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2339 return connect_data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2340 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2341 |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2342 PurpleProxyConnectData * |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2343 purple_proxy_connect_udp(void *handle, PurpleAccount *account, |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2344 const char *host, int port, |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2345 PurpleProxyConnectFunction connect_cb, gpointer data) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2346 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2347 const char *connecthost = host; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2348 int connectport = port; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2349 PurpleProxyConnectData *connect_data; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2350 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2351 g_return_val_if_fail(host != NULL, NULL); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2352 g_return_val_if_fail(port > 0, NULL); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2353 g_return_val_if_fail(connect_cb != NULL, NULL); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2354 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2355 connect_data = g_new0(PurpleProxyConnectData, 1); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2356 connect_data->fd = -1; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2357 connect_data->socket_type = SOCK_DGRAM; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2358 connect_data->handle = handle; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2359 connect_data->connect_cb = connect_cb; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2360 connect_data->data = data; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2361 connect_data->host = g_strdup(host); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2362 connect_data->port = port; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2363 connect_data->gpi = purple_proxy_get_setup(account); |
31479
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2364 connect_data->account = account; |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2365 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2366 if ((purple_proxy_info_get_type(connect_data->gpi) != PURPLE_PROXY_NONE) && |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2367 (purple_proxy_info_get_host(connect_data->gpi) == NULL || |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2368 purple_proxy_info_get_port(connect_data->gpi) <= 0)) { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2369 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2370 purple_notify_error(NULL, NULL, _("Invalid proxy settings"), _("Either the host name or port number specified for your given proxy type is invalid.")); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2371 purple_proxy_connect_data_destroy(connect_data); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2372 return NULL; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2373 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2374 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2375 switch (purple_proxy_info_get_type(connect_data->gpi)) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2376 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2377 case PURPLE_PROXY_NONE: |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2378 break; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2379 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2380 case PURPLE_PROXY_HTTP: |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2381 case PURPLE_PROXY_SOCKS4: |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2382 case PURPLE_PROXY_SOCKS5: |
31478
9a7c5d242521
Add a new proxy type of "Tor". This is really just a SOCKS5 proxy, but can be
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30413
diff
changeset
|
2383 case PURPLE_PROXY_TOR: |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2384 case PURPLE_PROXY_USE_ENVVAR: |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2385 purple_debug_info("proxy", "Ignoring Proxy type (%d) for UDP.\n", |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2386 purple_proxy_info_get_type(connect_data->gpi)); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2387 break; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2388 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2389 default: |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2390 purple_debug_error("proxy", "Invalid Proxy type (%d) specified.\n", |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2391 purple_proxy_info_get_type(connect_data->gpi)); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2392 purple_proxy_connect_data_destroy(connect_data); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2393 return NULL; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2394 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2395 |
31479
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2396 connect_data->query_data = purple_dnsquery_a_account(account, connecthost, |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2397 connectport, connection_host_resolved, connect_data); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2398 if (connect_data->query_data == NULL) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2399 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2400 purple_proxy_connect_data_destroy(connect_data); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2401 return NULL; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2402 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2403 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2404 handles = g_slist_prepend(handles, connect_data); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2405 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2406 return connect_data; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2407 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2408 |
15822 | 2409 PurpleProxyConnectData * |
2410 purple_proxy_connect_socks5(void *handle, PurpleProxyInfo *gpi, | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2411 const char *host, int port, |
15822 | 2412 PurpleProxyConnectFunction connect_cb, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2413 gpointer data) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2414 { |
32506
9f26efb70c67
xnyhps noticed that 'purple_proxy_connect_socks5' is passing the handle to the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31777
diff
changeset
|
2415 return purple_proxy_connect_socks5_account(handle, NULL, gpi, |
31479
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2416 host, port, connect_cb, data); |
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2417 } |
31532
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2418 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2419 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2420 /* This is called when we connect to the SOCKS5 proxy server (through any |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2421 * relevant account proxy) |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2422 */ |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2423 static void socks5_connected_to_proxy(gpointer data, gint source, |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2424 const gchar *error_message) { |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2425 /* This is the PurpleProxyConnectData for the overall SOCKS5 connection */ |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2426 PurpleProxyConnectData *connect_data = data; |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2427 |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2428 purple_debug_error("proxy", "Connect Data is %p\n", connect_data); |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2429 |
31532
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2430 /* Check that the overall SOCKS5 connection wasn't cancelled while we were |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2431 * connecting to it (we don't have a way of associating the process of |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2432 * connecting to the SOCKS5 server to the overall PurpleProxyConnectData) |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2433 */ |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2434 if (!PURPLE_PROXY_CONNECT_DATA_IS_VALID(connect_data)) { |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2435 purple_debug_error("proxy", "Data had gone out of scope :(\n"); |
31532
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2436 return; |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2437 } |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2438 |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2439 /* Break the link between the two PurpleProxyConnectDatas */ |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2440 connect_data->child = NULL; |
31532
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2441 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2442 if (error_message != NULL) { |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2443 purple_debug_error("proxy", "Unable to connect to SOCKS5 host.\n"); |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2444 connect_data->connect_cb(connect_data->data, source, error_message); |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2445 return; |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2446 } |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2447 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2448 purple_debug_info("proxy", "Initiating SOCKS5 negotiation.\n"); |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2449 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2450 purple_debug_info("proxy", |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2451 "Connecting to %s:%d via %s:%d using SOCKS5\n", |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2452 connect_data->host, connect_data->port, |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2453 purple_proxy_info_get_host(connect_data->gpi), |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2454 purple_proxy_info_get_port(connect_data->gpi)); |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2455 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2456 connect_data->fd = source; |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2457 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2458 s5_canwrite(connect_data, connect_data->fd, PURPLE_INPUT_WRITE); |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2459 } |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2460 |
31479
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2461 /* |
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2462 * Combine some of this code with purple_proxy_connect() |
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2463 */ |
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2464 PurpleProxyConnectData * |
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2465 purple_proxy_connect_socks5_account(void *handle, PurpleAccount *account, |
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2466 PurpleProxyInfo *gpi, |
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2467 const char *host, int port, |
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2468 PurpleProxyConnectFunction connect_cb, |
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2469 gpointer data) |
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2470 { |
15822 | 2471 PurpleProxyConnectData *connect_data; |
31532
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2472 PurpleProxyConnectData *account_proxy_conn_data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2473 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2474 g_return_val_if_fail(host != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2475 g_return_val_if_fail(port >= 0, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2476 g_return_val_if_fail(connect_cb != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2477 |
15822 | 2478 connect_data = g_new0(PurpleProxyConnectData, 1); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2479 connect_data->fd = -1; |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2480 connect_data->socket_type = SOCK_STREAM; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2481 connect_data->handle = handle; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2482 connect_data->connect_cb = connect_cb; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2483 connect_data->data = data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2484 connect_data->host = g_strdup(host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2485 connect_data->port = port; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2486 connect_data->gpi = gpi; |
31479
0eceb1304f53
Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31478
diff
changeset
|
2487 connect_data->account = account; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2488 |
31532
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2489 /* If there is an account proxy, use it to connect to the desired SOCKS5 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2490 * proxy. |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2491 */ |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2492 account_proxy_conn_data = purple_proxy_connect(connect_data->handle, |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2493 connect_data->account, |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2494 purple_proxy_info_get_host(connect_data->gpi), |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2495 purple_proxy_info_get_port(connect_data->gpi), |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2496 socks5_connected_to_proxy, connect_data); |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2497 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2498 if (account_proxy_conn_data == NULL) { |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2499 purple_debug_error("proxy", "Unable to initiate connection to account proxy.\n"); |
15822 | 2500 purple_proxy_connect_data_destroy(connect_data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2501 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2502 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2503 |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2504 connect_data->child = account_proxy_conn_data; |
31532
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2505 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2506 handles = g_slist_prepend(handles, connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2507 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2508 return connect_data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2509 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2510 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2511 void |
15822 | 2512 purple_proxy_connect_cancel(PurpleProxyConnectData *connect_data) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2513 { |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2514 g_return_if_fail(connect_data != NULL); |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2515 |
15822 | 2516 purple_proxy_connect_data_disconnect(connect_data, NULL); |
2517 purple_proxy_connect_data_destroy(connect_data); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2518 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2519 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2520 void |
15822 | 2521 purple_proxy_connect_cancel_with_handle(void *handle) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2522 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2523 GSList *l, *l_next; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2524 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2525 for (l = handles; l != NULL; l = l_next) { |
15822 | 2526 PurpleProxyConnectData *connect_data = l->data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2527 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2528 l_next = l->next; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2529 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2530 if (connect_data->handle == handle) |
15822 | 2531 purple_proxy_connect_cancel(connect_data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2532 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2533 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2534 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2535 static void |
15822 | 2536 proxy_pref_cb(const char *name, PurplePrefType type, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2537 gconstpointer value, gpointer data) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2538 { |
15822 | 2539 PurpleProxyInfo *info = purple_global_proxy_get_info(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2540 |
25894
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
24750
diff
changeset
|
2541 if (purple_strequal(name, "/purple/proxy/type")) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2542 int proxytype; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2543 const char *type = value; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2544 |
25894
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
24750
diff
changeset
|
2545 if (purple_strequal(type, "none")) |
15822 | 2546 proxytype = PURPLE_PROXY_NONE; |
25894
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
24750
diff
changeset
|
2547 else if (purple_strequal(type, "http")) |
15822 | 2548 proxytype = PURPLE_PROXY_HTTP; |
25894
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
24750
diff
changeset
|
2549 else if (purple_strequal(type, "socks4")) |
15822 | 2550 proxytype = PURPLE_PROXY_SOCKS4; |
25894
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
24750
diff
changeset
|
2551 else if (purple_strequal(type, "socks5")) |
15822 | 2552 proxytype = PURPLE_PROXY_SOCKS5; |
31478
9a7c5d242521
Add a new proxy type of "Tor". This is really just a SOCKS5 proxy, but can be
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30413
diff
changeset
|
2553 else if (purple_strequal(type, "tor")) |
9a7c5d242521
Add a new proxy type of "Tor". This is really just a SOCKS5 proxy, but can be
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30413
diff
changeset
|
2554 proxytype = PURPLE_PROXY_TOR; |
25894
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
24750
diff
changeset
|
2555 else if (purple_strequal(type, "envvar")) |
15822 | 2556 proxytype = PURPLE_PROXY_USE_ENVVAR; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2557 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2558 proxytype = -1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2559 |
15822 | 2560 purple_proxy_info_set_type(info, proxytype); |
25894
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
24750
diff
changeset
|
2561 } else if (purple_strequal(name, "/purple/proxy/host")) |
15822 | 2562 purple_proxy_info_set_host(info, value); |
25894
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
24750
diff
changeset
|
2563 else if (purple_strequal(name, "/purple/proxy/port")) |
15822 | 2564 purple_proxy_info_set_port(info, GPOINTER_TO_INT(value)); |
25894
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
24750
diff
changeset
|
2565 else if (purple_strequal(name, "/purple/proxy/username")) |
15822 | 2566 purple_proxy_info_set_username(info, value); |
25894
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
24750
diff
changeset
|
2567 else if (purple_strequal(name, "/purple/proxy/password")) |
15822 | 2568 purple_proxy_info_set_password(info, value); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2569 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2570 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2571 void * |
15822 | 2572 purple_proxy_get_handle() |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2573 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2574 static int handle; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2575 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2576 return &handle; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2577 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2578 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2579 void |
15822 | 2580 purple_proxy_init(void) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2581 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2582 void *handle; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2583 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2584 /* Initialize a default proxy info struct. */ |
15822 | 2585 global_proxy_info = purple_proxy_info_new(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2586 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2587 /* Proxy */ |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15976
diff
changeset
|
2588 purple_prefs_add_none("/purple/proxy"); |
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15976
diff
changeset
|
2589 purple_prefs_add_string("/purple/proxy/type", "none"); |
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15976
diff
changeset
|
2590 purple_prefs_add_string("/purple/proxy/host", ""); |
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15976
diff
changeset
|
2591 purple_prefs_add_int("/purple/proxy/port", 0); |
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15976
diff
changeset
|
2592 purple_prefs_add_string("/purple/proxy/username", ""); |
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15976
diff
changeset
|
2593 purple_prefs_add_string("/purple/proxy/password", ""); |
25480
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
2594 purple_prefs_add_bool("/purple/proxy/socks4_remotedns", FALSE); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2595 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2596 /* Setup callbacks for the preferences. */ |
15822 | 2597 handle = purple_proxy_get_handle(); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15976
diff
changeset
|
2598 purple_prefs_connect_callback(handle, "/purple/proxy/type", proxy_pref_cb, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2599 NULL); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15976
diff
changeset
|
2600 purple_prefs_connect_callback(handle, "/purple/proxy/host", proxy_pref_cb, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2601 NULL); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15976
diff
changeset
|
2602 purple_prefs_connect_callback(handle, "/purple/proxy/port", proxy_pref_cb, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2603 NULL); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15976
diff
changeset
|
2604 purple_prefs_connect_callback(handle, "/purple/proxy/username", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2605 proxy_pref_cb, NULL); |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
15976
diff
changeset
|
2606 purple_prefs_connect_callback(handle, "/purple/proxy/password", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2607 proxy_pref_cb, NULL); |
20039
1846fd2da2b4
Fix proxy settings to be loaded correctly when libpurple is initialized. This was broken because it relied on the prefs being loaded after proxy initialization so that the pref callbacks would be triggered and I changed the prefs loading to happen right at the beginning to fix other issues. Fixes #3092.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
19781
diff
changeset
|
2608 |
1846fd2da2b4
Fix proxy settings to be loaded correctly when libpurple is initialized. This was broken because it relied on the prefs being loaded after proxy initialization so that the pref callbacks would be triggered and I changed the prefs loading to happen right at the beginning to fix other issues. Fixes #3092.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
19781
diff
changeset
|
2609 /* Load the initial proxy settings */ |
20040
b34d0ba5e225
Apply a similar fix to the proxy prefs loading fix to the status scores.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
20039
diff
changeset
|
2610 purple_prefs_trigger_callback("/purple/proxy/type"); |
b34d0ba5e225
Apply a similar fix to the proxy prefs loading fix to the status scores.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
20039
diff
changeset
|
2611 purple_prefs_trigger_callback("/purple/proxy/host"); |
b34d0ba5e225
Apply a similar fix to the proxy prefs loading fix to the status scores.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
20039
diff
changeset
|
2612 purple_prefs_trigger_callback("/purple/proxy/port"); |
b34d0ba5e225
Apply a similar fix to the proxy prefs loading fix to the status scores.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
20039
diff
changeset
|
2613 purple_prefs_trigger_callback("/purple/proxy/username"); |
b34d0ba5e225
Apply a similar fix to the proxy prefs loading fix to the status scores.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
20039
diff
changeset
|
2614 purple_prefs_trigger_callback("/purple/proxy/password"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2615 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2616 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2617 void |
15822 | 2618 purple_proxy_uninit(void) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2619 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2620 while (handles != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2621 { |
15822 | 2622 purple_proxy_connect_data_disconnect(handles->data, NULL); |
2623 purple_proxy_connect_data_destroy(handles->data); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2624 } |
27900
32a707746454
Clean up various file-scoped globals at uninit.
Paul Aurich <paul@darkrain42.org>
parents:
27678
diff
changeset
|
2625 |
32a707746454
Clean up various file-scoped globals at uninit.
Paul Aurich <paul@darkrain42.org>
parents:
27678
diff
changeset
|
2626 purple_prefs_disconnect_by_handle(purple_proxy_get_handle()); |
32a707746454
Clean up various file-scoped globals at uninit.
Paul Aurich <paul@darkrain42.org>
parents:
27678
diff
changeset
|
2627 |
32a707746454
Clean up various file-scoped globals at uninit.
Paul Aurich <paul@darkrain42.org>
parents:
27678
diff
changeset
|
2628 purple_proxy_info_destroy(global_proxy_info); |
32a707746454
Clean up various file-scoped globals at uninit.
Paul Aurich <paul@darkrain42.org>
parents:
27678
diff
changeset
|
2629 global_proxy_info = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2630 } |