Mercurial > pidgin
annotate libpurple/proxy.c @ 32819:2c6510167895 default tip
propagate from branch 'im.pidgin.pidgin.2.x.y' (head 3315c5dfbd0ad16511bdcf865e5b07c02d07df24)
to branch 'im.pidgin.pidgin' (head cbd1eda6bcbf0565ae7766396bb8f6f419cb6a9a)
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Sat, 02 Jun 2012 02:30:49 +0000 |
parents | 6fa0e854cfc6 fa666e7f747e |
children |
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 |
32015
ba74745ff179
Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32013
diff
changeset
|
44 struct _PurpleProxyInfo |
ba74745ff179
Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32013
diff
changeset
|
45 { |
ba74745ff179
Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32013
diff
changeset
|
46 PurpleProxyType type; /**< The proxy type. */ |
ba74745ff179
Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32013
diff
changeset
|
47 |
ba74745ff179
Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32013
diff
changeset
|
48 char *host; /**< The host. */ |
ba74745ff179
Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32013
diff
changeset
|
49 int port; /**< The port number. */ |
ba74745ff179
Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32013
diff
changeset
|
50 char *username; /**< The username. */ |
ba74745ff179
Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32013
diff
changeset
|
51 char *password; /**< The password. */ |
ba74745ff179
Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32013
diff
changeset
|
52 }; |
ba74745ff179
Hide PurpleProxyInfo struct.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32013
diff
changeset
|
53 |
15822 | 54 struct _PurpleProxyConnectData { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
55 void *handle; |
15822 | 56 PurpleProxyConnectFunction connect_cb; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
57 gpointer data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
58 gchar *host; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
59 int port; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
60 int fd; |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
61 int socket_type; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
62 guint inpa; |
15822 | 63 PurpleProxyInfo *gpi; |
64 PurpleDnsQueryData *query_data; | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
65 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
66 /** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
67 * 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
|
68 * 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
|
69 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
70 GSList *hosts; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
71 |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
72 PurpleProxyConnectData *child; |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
73 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
74 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
75 * 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
|
76 * connection through a proxy. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
77 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
78 guchar *write_buffer; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
79 gsize write_buf_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
80 gsize written_len; |
15822 | 81 PurpleInputFunction read_cb; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
82 guchar *read_buffer; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
83 gsize read_buf_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
84 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
|
85 PurpleAccount *account; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
86 }; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
87 |
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
|
88 static const char * const socks5errors[] = { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
89 "succeeded\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
90 "general SOCKS server failure\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
91 "connection not allowed by ruleset\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
92 "Network unreachable\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
93 "Host unreachable\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
94 "Connection refused\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
95 "TTL expired\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
96 "Command not supported\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
97 "Address type not supported\n" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
98 }; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
99 |
15822 | 100 static PurpleProxyInfo *global_proxy_info = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
101 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
102 static GSList *handles = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
103 |
15822 | 104 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
|
105 |
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
|
106 /* |
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
|
107 * 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
|
108 * 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
|
109 */ |
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
|
110 #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
|
111 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
112 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
113 * Proxy structure API |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
114 **************************************************************************/ |
15822 | 115 PurpleProxyInfo * |
116 purple_proxy_info_new(void) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
117 { |
15822 | 118 return g_new0(PurpleProxyInfo, 1); |
15373
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 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
121 void |
15822 | 122 purple_proxy_info_destroy(PurpleProxyInfo *info) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
123 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
124 g_return_if_fail(info != NULL); |
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_free(info->host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
127 g_free(info->username); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
128 g_free(info->password); |
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 g_free(info); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
131 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
132 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
133 void |
15822 | 134 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
|
135 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
136 g_return_if_fail(info != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
137 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
138 info->type = type; |
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 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
141 void |
15822 | 142 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
|
143 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
144 g_return_if_fail(info != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
145 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
146 g_free(info->host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
147 info->host = g_strdup(host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
148 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
149 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
150 void |
15822 | 151 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
|
152 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
153 g_return_if_fail(info != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
154 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
155 info->port = port; |
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 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
158 void |
15822 | 159 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
|
160 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
161 g_return_if_fail(info != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
162 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
163 g_free(info->username); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
164 info->username = g_strdup(username); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
165 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
166 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
167 void |
15822 | 168 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
|
169 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
170 g_return_if_fail(info != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
171 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
172 g_free(info->password); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
173 info->password = g_strdup(password); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
174 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
175 |
15822 | 176 PurpleProxyType |
177 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
|
178 { |
15822 | 179 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
|
180 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
181 return info->type; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
182 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
183 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
184 const char * |
15822 | 185 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
|
186 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
187 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
|
188 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
189 return info->host; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
190 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
191 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
192 int |
15822 | 193 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
|
194 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
195 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
|
196 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
197 return info->port; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
198 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
199 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
200 const char * |
15822 | 201 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
|
202 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
203 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
|
204 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
205 return info->username; |
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 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
208 const char * |
15822 | 209 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
|
210 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
211 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
|
212 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
213 return info->password; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
214 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
215 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
216 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
217 * Global Proxy API |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
218 **************************************************************************/ |
15822 | 219 PurpleProxyInfo * |
220 purple_global_proxy_get_info(void) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
221 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
222 return global_proxy_info; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
223 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
224 |
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
|
225 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
|
226 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
|
227 { |
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
|
228 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
|
229 |
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
|
230 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
|
231 |
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
|
232 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
|
233 } |
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
|
234 |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
235 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
236 /* index in gproxycmds below, keep them in sync */ |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
237 #define GNOME_PROXY_MODE 0 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
238 #define GNOME_PROXY_USE_SAME_PROXY 1 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
239 #define GNOME_PROXY_SOCKS_HOST 2 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
240 #define GNOME_PROXY_SOCKS_PORT 3 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
241 #define GNOME_PROXY_HTTP_HOST 4 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
242 #define GNOME_PROXY_HTTP_PORT 5 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
243 #define GNOME_PROXY_HTTP_USER 6 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
244 #define GNOME_PROXY_HTTP_PASS 7 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
245 #define GNOME2_CMDS 0 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
246 #define GNOME3_CMDS 1 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
247 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
248 /* detect proxy settings for gnome2/gnome3 */ |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
249 static const char* gproxycmds[][2] = { |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
250 { "gconftool-2 -g /system/proxy/mode" , "gsettings get org.gnome.system.proxy mode" }, |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
251 { "gconftool-2 -g /system/http_proxy/use_same_proxy", "gsettings get org.gnome.system.proxy use-same-proxy" }, |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
252 { "gconftool-2 -g /system/proxy/socks_host", "gsettings get org.gnome.system.proxy.socks host" }, |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
253 { "gconftool-2 -g /system/proxy/socks_port", "gsettings get org.gnome.system.proxy.socks port" }, |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
254 { "gconftool-2 -g /system/http_proxy/host", "gsettings get org.gnome.system.proxy.http host" }, |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
255 { "gconftool-2 -g /system/http_proxy/port", "gsettings get org.gnome.system.proxy.http port"}, |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
256 { "gconftool-2 -g /system/http_proxy/authentication_user", "gsettings get org.gnome.system.proxy.http authentication-user" }, |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
257 { "gconftool-2 -g /system/http_proxy/authentication_password", "gsettings get org.gnome.system.proxy.http authentication-password" }, |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
258 }; |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
259 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
260 /** |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
261 * This is a utility function used to retrieve proxy parameter values from |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
262 * GNOME 2/3 environment. |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
263 * |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
264 * @param parameter One of the GNOME_PROXY_x constants defined above |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
265 * @param gnome_version GNOME2_CMDS or GNOME3_CMDS |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
266 * |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
267 * @return The value of requested proxy parameter |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
268 */ |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
269 static char * |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
270 purple_gnome_proxy_get_parameter(guint8 parameter, guint8 gnome_version) |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
271 { |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
272 gchar *param, *err; |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
273 size_t param_len; |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
274 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
275 if (parameter > GNOME_PROXY_HTTP_PASS) |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
276 return NULL; |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
277 if (gnome_version > GNOME3_CMDS) |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
278 return NULL; |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
279 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
280 if (!g_spawn_command_line_sync(gproxycmds[parameter][gnome_version], |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
281 ¶m, &err, NULL, NULL)) |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
282 return NULL; |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
283 g_free(err); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
284 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
285 g_strstrip(param); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
286 if (param[0] == '\'' || param[0] == '\"') { |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
287 param_len = strlen(param); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
288 memmove(param, param + 1, param_len); /* copy last \0 too */ |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
289 --param_len; |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
290 if (param_len > 0 && (param[param_len - 1] == '\'' || param[param_len - 1] == '\"')) |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
291 param[param_len - 1] = '\0'; |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
292 g_strstrip(param); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
293 } |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
294 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
295 return param; |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
296 } |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
297 |
15822 | 298 static PurpleProxyInfo * |
299 purple_gnome_proxy_get_info(void) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
300 { |
15822 | 301 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
|
302 gboolean use_same_proxy = FALSE; |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
303 gchar *tmp; |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
304 guint8 gnome_version = GNOME3_CMDS; |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
305 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
306 tmp = g_find_program_in_path("gsettings"); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
307 if (tmp == NULL) { |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
308 tmp = g_find_program_in_path("gconftool-2"); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
309 gnome_version = GNOME2_CMDS; |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
310 } |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
311 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
|
312 return purple_global_proxy_get_info(); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
313 |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
314 g_free(tmp); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
315 |
22420
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
316 /* Check whether to use a proxy. */ |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
317 tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_MODE, gnome_version); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
318 if (!tmp) |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
319 return purple_global_proxy_get_info(); |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
320 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
321 if (purple_strequal(tmp, "none")) { |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
322 info.type = PURPLE_PROXY_NONE; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
323 g_free(tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
324 return &info; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
325 } |
22420
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
326 |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
327 if (!purple_strequal(tmp, "manual")) { |
22420
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
328 /* 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
|
329 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
|
330 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
|
331 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
332 |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
333 g_free(tmp); |
22420
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
334 |
22422
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
335 /* 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
|
336 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
|
337 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
|
338 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
|
339 } |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
340 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
|
341 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
|
342 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
|
343 } |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
344 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
|
345 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
|
346 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
|
347 } |
04b807c8b98d
Bring back the lines that free info.whatever on subsequent calls to
Mark Doliner <mark@kingant.net>
parents:
22421
diff
changeset
|
348 |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
349 tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_USE_SAME_PROXY, gnome_version); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
350 if (!tmp) |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
351 return purple_global_proxy_get_info(); |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
352 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
353 if (purple_strequal(tmp, "true")) |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
354 use_same_proxy = TRUE; |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
355 |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
356 g_free(tmp); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
357 |
24118
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
358 if (!use_same_proxy) { |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
359 info.host = purple_gnome_proxy_get_parameter(GNOME_PROXY_SOCKS_HOST, gnome_version); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
360 if (!info.host) |
24118
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
361 return purple_global_proxy_get_info(); |
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
362 } |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
363 |
24118
0bd896cd1b90
Fix a double free. Fixes #7047
Stu Tomlinson <stu@nosnilmot.com>
parents:
24107
diff
changeset
|
364 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
|
365 info.type = PURPLE_PROXY_SOCKS5; |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
366 tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_SOCKS_PORT, gnome_version); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
367 if (!tmp) { |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
368 g_free(info.host); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
369 info.host = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
370 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
|
371 } |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
372 info.port = atoi(tmp); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
373 g_free(tmp); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
374 } else { |
22420
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
375 g_free(info.host); |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
376 info.host = purple_gnome_proxy_get_parameter(GNOME_PROXY_HTTP_HOST, gnome_version); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
377 if (!info.host) |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
378 return purple_global_proxy_get_info(); |
24119
d4239c588fcf
Some minor cleanup; removal of unnecessary frees and setting stuff to NULL
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24118
diff
changeset
|
379 |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
380 /* 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
|
381 info.type = PURPLE_PROXY_HTTP; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
382 |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
383 if (*info.host == '\0') |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
384 { |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
385 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
|
386 "'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
|
387 "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
|
388 g_free(info.host); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
389 info.host = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
390 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
|
391 } |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
392 |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
393 info.username = purple_gnome_proxy_get_parameter(GNOME_PROXY_HTTP_USER, gnome_version); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
394 if (!info.username) |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
395 { |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
396 g_free(info.host); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
397 info.host = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
398 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
|
399 } |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
400 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
401 info.password = purple_gnome_proxy_get_parameter(GNOME_PROXY_HTTP_PASS, gnome_version); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
402 if (!info.password) |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
403 { |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
404 g_free(info.host); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
405 info.host = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
406 g_free(info.username); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
407 info.username = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
408 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
|
409 } |
32817
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
410 |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
411 tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_HTTP_PORT, gnome_version); |
6fa0e854cfc6
Add support for reading GNOME3 proxy settings.
mihai.serban@gmail.com
parents:
32796
diff
changeset
|
412 if (!tmp) |
23960
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
413 { |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
414 g_free(info.host); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
415 info.host = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
416 g_free(info.username); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
417 info.username = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
418 g_free(info.password); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
419 info.password = NULL; |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
420 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
|
421 } |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
422 info.port = atoi(tmp); |
64585aab233a
Use SOCKS proxy if specified when running in GNOME
Stu Tomlinson <stu@nosnilmot.com>
parents:
23389
diff
changeset
|
423 g_free(tmp); |
22420
316c8565f562
Improve our error handling of Gnome proxy settings.
Mark Doliner <mark@kingant.net>
parents:
22419
diff
changeset
|
424 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
425 |
22419
31fb78b1184c
Short circuit and return out of the function early if gconftool-2
Mark Doliner <mark@kingant.net>
parents:
22417
diff
changeset
|
426 return &info; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
427 } |
23970
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
428 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
429 #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
|
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 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
|
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 /* 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
|
434 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
|
435 _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
|
436 { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
437 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
|
438 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
|
439 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
440 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
|
441 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
|
442 *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
|
443 |
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
444 d++; |
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
445 if (*d) |
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
446 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
|
447 |
9e60e300541a
Fix an invalid memory deref with Windows proxy settings when there's no ":port"
mklencke@gmx.net
parents:
29042
diff
changeset
|
448 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
|
449 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
|
450 } |
23970
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
451 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
452 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
|
453 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
|
454 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
455 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
456 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
|
457 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
|
458 { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
459 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
|
460 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
|
461 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
|
462 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
463 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
|
464 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
465 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
|
466 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
|
467 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
|
468 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
|
469 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
|
470 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
|
471 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
472 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
473 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
|
474 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
|
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 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
|
477 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
|
478 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
|
479 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
|
480 } |
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 /* 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
|
483 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
|
484 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
|
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 /* 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
|
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 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
|
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 } 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
|
491 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
|
492 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
|
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 /* 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
|
495 /* 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
|
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 /* 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
|
498 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
|
499 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
|
500 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
501 /* 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
|
502 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
|
503 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
504 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
|
505 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
|
506 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
|
507 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
|
508 *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
|
509 /* 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
|
510 } else |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
511 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
|
512 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
513 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
|
514 _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
|
515 /* 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
|
516 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
|
517 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
|
518 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
519 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
|
520 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
|
521 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
|
522 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
523 } 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
|
524 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
525 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
|
526 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
|
527 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
|
528 *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
|
529 /* 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
|
530 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
531 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
|
532 _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
|
533 /* 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
|
534 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
|
535 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
|
536 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
537 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
|
538 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
|
539 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
|
540 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
541 } else { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
542 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
543 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
|
544 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
545 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
|
546 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
547 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
548 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
549 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
550 /* 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
|
551 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
552 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
|
553 } else { |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
554 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
|
555 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
|
556 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
557 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
558 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
|
559 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
|
560 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
|
561 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
|
562 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
|
563 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
|
564 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
565 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
|
566 } |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
567 #endif |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
568 |
54eb782d4721
Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23960
diff
changeset
|
569 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
570 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
571 * Proxy API |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
572 **************************************************************************/ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
573 |
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 * Whoever calls this needs to have called |
15822 | 576 * purple_proxy_connect_data_disconnect() beforehand. |
15373
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 static void |
15822 | 579 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
|
580 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
581 handles = g_slist_remove(handles, connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
582 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
583 if (connect_data->query_data != NULL) |
15822 | 584 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
|
585 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
586 while (connect_data->hosts != 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 /* Discard the length... */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
589 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
|
590 /* Free the address... */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
591 g_free(connect_data->hosts->data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
592 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
|
593 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
594 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
595 g_free(connect_data->host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
596 g_free(connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
597 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
598 |
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 * 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
|
601 * 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
|
602 * to another IP address. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
603 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
604 * 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
|
605 * 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
|
606 * 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
|
607 * 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
|
608 * 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
|
609 * then destroy the connect_data. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
610 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
611 * @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
|
612 * failed. This will be passed to the callback function |
15822 | 613 * 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
|
614 * connection was successful then pass in null. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
615 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
616 static void |
15822 | 617 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
|
618 { |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
619 if (connect_data->child != NULL) |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
620 { |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
621 purple_proxy_connect_cancel(connect_data->child); |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
622 connect_data->child = NULL; |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
623 } |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
624 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
625 if (connect_data->inpa > 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
626 { |
15822 | 627 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
628 connect_data->inpa = 0; |
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 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
631 if (connect_data->fd >= 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
632 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
633 close(connect_data->fd); |
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 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
636 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
637 g_free(connect_data->write_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
638 connect_data->write_buffer = NULL; |
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 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
641 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
642 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
643 if (error_message != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
644 { |
27231
627d23bfdb05
Increase the logging level of some debugging messages that seemed to be a
mauro.brasil@tqi.com.br
parents:
27032
diff
changeset
|
645 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
|
646 error_message); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
647 if (connect_data->hosts != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
648 try_connect(connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
649 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
650 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
651 /* 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
|
652 connect_data->connect_cb(connect_data->data, -1, error_message); |
15822 | 653 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
|
654 } |
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 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
657 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
658 /** |
15822 | 659 * 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
|
660 * 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
|
661 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
662 static void |
15822 | 663 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
|
664 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
665 va_list args; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
666 gchar *tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
667 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
668 va_start(args, format); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
669 tmp = g_strdup_vprintf(format, args); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
670 va_end(args); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
671 |
15822 | 672 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
|
673 g_free(tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
674 } |
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 static void |
15822 | 677 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
|
678 { |
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
|
679 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
|
680 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
|
681 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
682 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
|
683 |
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 * 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
|
686 * 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
|
687 * we destroy the connect_data. |
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 connect_data->fd = -1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
690 |
15822 | 691 purple_proxy_connect_data_disconnect(connect_data, NULL); |
692 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
|
693 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
694 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
695 static void |
15822 | 696 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
|
697 { |
15822 | 698 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
699 int error = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
700 int ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
701 |
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
|
702 /* 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
|
703 * 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
|
704 */ |
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
|
705 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
|
706 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
|
707 |
24749
333f03472486
This string appears before the connection attempt, so it shouldn't be
Kevin Stange <kevin@simguy.net>
parents:
24119
diff
changeset
|
708 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
|
709 connect_data->host, connect_data->port); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
710 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
711 /* |
15822 | 712 * 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
|
713 * 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
|
714 * 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
|
715 * 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
|
716 * and anything else is a real error. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
717 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
718 * (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
|
719 * 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
|
720 * able to do something.) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
721 */ |
15822 | 722 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
|
723 |
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
|
724 if (ret == 0 && error == EINPROGRESS) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
725 /* 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
|
726 /* 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
|
727 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
|
728 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
|
729 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
730 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
731 if (ret != 0 || error != 0) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
732 if (ret != 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
733 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
|
734 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
|
735 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
|
736 |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
737 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
|
738 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
739 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
740 |
15822 | 741 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
|
742 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
743 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
744 static gboolean |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
745 clean_connect(gpointer data) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
746 { |
15822 | 747 purple_proxy_connect_data_connected(data); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
748 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
749 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
750 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
751 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
752 static void |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
753 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
|
754 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
755 int flags; |
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 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
|
758 connect_data->host, connect_data->port); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
759 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
760 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
|
761 if (connect_data->fd < 0) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
762 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
763 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
|
764 _("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
|
765 return; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
766 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
767 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
768 flags = fcntl(connect_data->fd, F_GETFL); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
769 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
|
770 #ifndef _WIN32 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
771 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
|
772 #endif |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
773 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
774 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
|
775 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
776 if ((errno == EINPROGRESS) || (errno == EINTR)) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
777 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
778 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
|
779 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
|
780 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
|
781 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
782 else |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
783 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
784 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
|
785 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
786 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
787 else |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
788 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
789 /* |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
790 * The connection happened IMMEDIATELY... strange, but whatever. |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
791 */ |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
792 int error = ETIMEDOUT; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
793 int ret; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
794 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
795 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
|
796 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
797 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
|
798 if ((ret != 0) || (error != 0)) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
799 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
800 if (ret != 0) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
801 error = errno; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
802 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
|
803 return; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
804 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
805 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
806 /* |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
807 * 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
|
808 * 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
|
809 */ |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
810 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
|
811 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
812 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
813 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
814 static void |
15822 | 815 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
|
816 { |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
817 int flags; |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
818 |
15822 | 819 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
|
820 connect_data->host, connect_data->port); |
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 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
|
823 if (connect_data->fd < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
824 { |
15822 | 825 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
|
826 _("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
|
827 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
828 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
829 |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
830 flags = fcntl(connect_data->fd, F_GETFL); |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
831 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
|
832 #ifndef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
833 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
|
834 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
835 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
836 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
|
837 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
838 if ((errno == EINPROGRESS) || (errno == EINTR)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
839 { |
15822 | 840 purple_debug_info("proxy", "Connection in progress\n"); |
841 connect_data->inpa = purple_input_add(connect_data->fd, | |
842 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
|
843 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
844 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
845 { |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
846 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
|
847 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
848 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
849 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
850 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
851 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
852 * The connection happened IMMEDIATELY... strange, but whatever. |
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 int error = ETIMEDOUT; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
855 int ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
856 |
15822 | 857 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
|
858 |
15822 | 859 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
|
860 if ((ret != 0) || (error != 0)) |
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 if (ret != 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
863 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
|
864 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
|
865 return; |
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 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
868 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
869 * 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
|
870 * 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
|
871 */ |
15822 | 872 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
|
873 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
874 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
875 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
876 /** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
877 * 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
|
878 * 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
|
879 * 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
|
880 * response and call a specified function. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
881 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
882 static void |
15822 | 883 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
|
884 { |
15822 | 885 PurpleProxyConnectData *connect_data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
886 const guchar *request; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
887 gsize request_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
888 int ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
889 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
890 connect_data = data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
891 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
|
892 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
|
893 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
894 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
|
895 if (ret <= 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
896 { |
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! */ |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
902 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
|
903 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
904 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
905 if (ret < request_len) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
906 connect_data->written_len += ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
907 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
908 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
909 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
910 /* 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
|
911 g_free(connect_data->write_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
912 connect_data->write_buffer = NULL; |
15822 | 913 purple_input_remove(connect_data->inpa); |
914 connect_data->inpa = purple_input_add(connect_data->fd, | |
915 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
|
916 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
917 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
918 #define HTTP_GOODSTRING "HTTP/1.0 200" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
919 #define HTTP_GOODSTRING2 "HTTP/1.1 200" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
920 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
921 /** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
922 * 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
|
923 * response to the CONNECT request. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
924 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
925 static void |
15822 | 926 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
|
927 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
928 int len, headers_len, status = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
929 gboolean error; |
15822 | 930 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
|
931 char *p; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
932 gsize max_read; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
933 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
934 if (connect_data->read_buffer == NULL) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
935 connect_data->read_buf_len = 8192; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
936 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
|
937 connect_data->read_len = 0; |
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 |
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 = (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
|
941 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
|
942 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
943 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
|
944 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
945 if (len == 0) { |
15822 | 946 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
|
947 _("Server closed the connection")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
948 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
949 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
950 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
951 if (len < 0) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
952 if (errno == EAGAIN) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
953 /* No worries */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
954 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
955 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
956 /* Error! */ |
15822 | 957 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
|
958 _("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
|
959 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
960 } |
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 connect_data->read_len += len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
963 p[len] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
964 |
17431
79ecaab86f91
Eliminate some type punning warnings in proxy.c. This was inspired by a
Richard Laager <rlaager@wiktel.com>
parents:
17372
diff
changeset
|
965 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
|
966 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
|
967 if (p != NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
968 *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
|
969 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
|
970 } else if(len == max_read) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
971 headers_len = len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
972 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
973 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
974 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
975 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
|
976 if (!error) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
977 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
|
978 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
|
979 major = strtol(p, &p, 10); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
980 error = (major == 0) || (*p != '.'); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
981 if(!error) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
982 int minor; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
983 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
|
984 minor = strtol(p, &p, 10); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
985 error = (*p != ' '); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
986 if(!error) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
987 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
|
988 status = strtol(p, &p, 10); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
989 error = (*p != ' '); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
990 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
991 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
992 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
993 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
994 /* 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
|
995 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
|
996 if (p != NULL) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
997 gchar *tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
998 int len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
999 char tmpc; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1000 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
|
1001 tmp = strchr(p, '\r'); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1002 if(tmp) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1003 *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
|
1004 len = atoi(p); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1005 if(tmp) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1006 *tmp = '\r'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1007 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1008 /* Compensate for what has already been read */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1009 len -= connect_data->read_len - headers_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1010 /* 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
|
1011 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
|
1012 while (len--) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1013 /* 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
|
1014 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
|
1015 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1016 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1017 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1018 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1019 if (error) { |
15822 | 1020 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
|
1021 _("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
|
1022 connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1023 return; |
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 else if (status != 200) { |
15822 | 1026 purple_debug_error("proxy", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1027 "Proxy server replied with:\n%s\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1028 connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1029 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1030 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
|
1031 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
|
1032 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
|
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 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
|
1035 "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
|
1036 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
|
1037 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
|
1038 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
|
1039 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
|
1040 gchar *response; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1041 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
|
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 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
|
1044 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
|
1045 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
|
1046 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
|
1047 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
|
1048 } |
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
|
1049 |
20359
36da9249f3a9
applied changes from e33c17e58da161b8cffaf13e9d79e9bb4b9ce4ce
Luke Schierer <lschiere@pidgin.im>
parents:
20347
diff
changeset
|
1050 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
|
1051 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
|
1052 if (username == NULL) { |
15822 | 1053 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
|
1054 _("HTTP proxy connection error %d"), status); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1055 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1056 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1057 *username = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1058 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1059 /* 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
|
1060 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
|
1061 /* 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
|
1062 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
|
1063 guint8 *nonce; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1064 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1065 header_end++; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1066 username++; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1067 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
|
1068 *tmp = '\0'; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1069 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
|
1070 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
|
1071 (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
|
1072 hostname, |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1073 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
|
1074 username--; |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1075 } 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
|
1076 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
|
1077 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1078 *username = '\\'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1079 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1080 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
|
1081 "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
|
1082 "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
|
1083 "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
|
1084 "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
|
1085 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
|
1086 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
|
1087 response); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1088 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1089 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
|
1090 |
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
|
1091 } 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
|
1092 gchar *t1, *t2; |
24526
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1093 const char *username, *password; |
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1094 |
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1095 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
|
1096 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
|
1097 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1098 t1 = g_strdup_printf("%s:%s", |
24526
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1099 username ? username : "", |
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1100 password ? password : ""); |
f3103f786c86
Prevent a NULL printf crash.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24453
diff
changeset
|
1101 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
|
1102 g_free(t1); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1103 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1104 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
|
1105 "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
|
1106 "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
|
1107 "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
|
1108 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
|
1109 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
|
1110 t2); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1111 |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1112 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
|
1113 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1114 } else { |
15822 | 1115 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
|
1116 _("HTTP proxy connection error %d"), status); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1117 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1118 } |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1119 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1120 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
|
1121 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
|
1122 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
|
1123 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1124 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
|
1125 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
|
1126 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
|
1127 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1128 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
|
1129 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1130 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
|
1131 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
|
1132 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1133 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
|
1134 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1135 return; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1136 } |
23992
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1137 |
4a1bbe955690
Add support for sending authorization for Basic proxy authentication when the
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23970
diff
changeset
|
1138 if (status == 403) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1139 /* Forbidden */ |
15822 | 1140 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
|
1141 _("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
|
1142 connect_data->port); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1143 } else { |
15822 | 1144 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
|
1145 _("HTTP proxy connection error %d"), status); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1146 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1147 } else { |
15822 | 1148 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1149 connect_data->inpa = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1150 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1151 connect_data->read_buffer = NULL; |
15822 | 1152 purple_debug_info("proxy", "HTTP proxy connection established\n"); |
1153 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
|
1154 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1155 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1156 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1157 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1158 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
|
1159 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
|
1160 GString *request; |
28738
9750ec16f325
disapproval of revision '04b807937c8e058bcddca1fe81be8cf681345ae8'
Mark Doliner <mark@kingant.net>
parents:
28737
diff
changeset
|
1161 int ret; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1162 |
15822 | 1163 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
|
1164 connect_data->host, connect_data->port); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1165 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1166 request = g_string_sized_new(4096); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1167 g_string_append_printf(request, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1168 "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
|
1169 connect_data->host, connect_data->port, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1170 connect_data->host, connect_data->port); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1171 |
28745
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1172 if (purple_proxy_info_get_username(connect_data->gpi) != NULL) |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1173 { |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1174 char *t1, *t2, *ntlm_type1; |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1175 char hostname[256]; |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1176 |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1177 ret = gethostname(hostname, sizeof(hostname)); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1178 hostname[sizeof(hostname) - 1] = '\0'; |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1179 if (ret < 0 || hostname[0] == '\0') { |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1180 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
|
1181 g_strlcpy(hostname, "localhost", sizeof(hostname)); |
28745
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1182 } |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1183 |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1184 t1 = g_strdup_printf("%s:%s", |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1185 purple_proxy_info_get_username(connect_data->gpi), |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1186 purple_proxy_info_get_password(connect_data->gpi) ? |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1187 purple_proxy_info_get_password(connect_data->gpi) : ""); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1188 t2 = purple_base64_encode((const guchar *)t1, strlen(t1)); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1189 g_free(t1); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1190 |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1191 ntlm_type1 = purple_ntlm_gen_type1(hostname, ""); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1192 |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1193 g_string_append_printf(request, |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1194 "Proxy-Authorization: Basic %s\r\n" |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1195 "Proxy-Authorization: NTLM %s\r\n" |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1196 "Proxy-Connection: Keep-Alive\r\n", |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1197 t2, ntlm_type1); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1198 g_free(ntlm_type1); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1199 g_free(t2); |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1200 } |
c01d4a1c7ee5
disapproval of revision '32e63a51dbb65b8b63d134bde098d40167574148'
Paul Aurich <paul@darkrain42.org>
parents:
28671
diff
changeset
|
1201 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1202 g_string_append(request, "\r\n"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1203 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1204 connect_data->write_buf_len = request->len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1205 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
|
1206 connect_data->written_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1207 connect_data->read_cb = http_canread; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1208 |
15822 | 1209 connect_data->inpa = purple_input_add(connect_data->fd, |
1210 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
|
1211 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
|
1212 } |
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
|
1213 |
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
|
1214 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
|
1215 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
|
1216 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
|
1217 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
|
1218 |
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
|
1219 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
|
1220 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
|
1221 |
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_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
|
1223 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
|
1224 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
|
1225 } |
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 |
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 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
|
1228 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
|
1229 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
|
1230 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
|
1231 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
|
1232 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
|
1233 } |
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
|
1234 |
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
|
1235 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
|
1236 /* |
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
|
1237 * 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
|
1238 * 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
|
1239 * 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
|
1240 * 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
|
1241 * 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
|
1242 * 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
|
1243 */ |
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
|
1244 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
|
1245 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
|
1246 } 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
|
1247 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
|
1248 } |
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
|
1249 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1250 } |
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 static void |
15822 | 1253 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
|
1254 { |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1255 int flags; |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1256 |
15822 | 1257 purple_debug_info("proxy", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1258 "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
|
1259 connect_data->host, connect_data->port, |
15822 | 1260 (purple_proxy_info_get_host(connect_data->gpi) ? purple_proxy_info_get_host(connect_data->gpi) : "(null)"), |
1261 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
|
1262 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1263 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
|
1264 if (connect_data->fd < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1265 { |
15822 | 1266 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
|
1267 _("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
|
1268 return; |
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 |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1271 flags = fcntl(connect_data->fd, F_GETFL); |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1272 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
|
1273 #ifndef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1274 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
|
1275 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1276 |
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
|
1277 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
|
1278 if (errno == EINPROGRESS || errno == EINTR) { |
15822 | 1279 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
|
1280 |
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
|
1281 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
|
1282 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
|
1283 } 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
|
1284 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
|
1285 } else { |
15822 | 1286 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
|
1287 |
15822 | 1288 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
|
1289 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1290 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1291 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1292 static void |
15822 | 1293 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
|
1294 { |
15822 | 1295 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1296 guchar *buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1297 int len, max_read; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1298 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1299 /* 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
|
1300 * 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
|
1301 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1302 if (connect_data->read_buffer == NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1303 connect_data->read_buf_len = 12; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1304 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
|
1305 connect_data->read_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1306 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1307 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1308 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
|
1309 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
|
1310 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1311 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
|
1312 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1313 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
|
1314 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1315 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
|
1316 if (connect_data->read_buffer[1] == 90) { |
15822 | 1317 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
|
1318 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1319 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1320 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1321 |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
1322 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
|
1323 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1324 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1325 static void |
25478
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1326 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
|
1327 { |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1328 PurpleProxyConnectData *connect_data = data; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1329 unsigned char packet[9]; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1330 struct sockaddr *addr; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1331 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1332 connect_data->query_data = NULL; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1333 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1334 if (error_message != NULL) { |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1335 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
|
1336 return; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1337 } |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1338 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1339 if (hosts == NULL) { |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1340 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
|
1341 _("Error resolving %s"), connect_data->host); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1342 return; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1343 } |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1344 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1345 /* Discard the length... */ |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1346 hosts = g_slist_delete_link(hosts, hosts); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1347 addr = hosts->data; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1348 hosts = g_slist_delete_link(hosts, hosts); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1349 |
25480
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1350 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
|
1351 packet[1] = 0x01; |
25478
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1352 packet[2] = connect_data->port >> 8; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1353 packet[3] = connect_data->port & 0xff; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1354 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
|
1355 packet[8] = 0x00; |
25478
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1356 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1357 g_free(addr); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1358 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1359 /* 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
|
1360 while (hosts != NULL) { |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1361 /* Discard the length... */ |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1362 hosts = g_slist_delete_link(hosts, hosts); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1363 /* Free the address... */ |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1364 g_free(hosts->data); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1365 hosts = g_slist_delete_link(hosts, hosts); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1366 } |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1367 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1368 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
|
1369 connect_data->write_buf_len = sizeof(packet); |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1370 connect_data->written_len = 0; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1371 connect_data->read_cb = s4_canread; |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1372 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1373 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
|
1374 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1375 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
|
1376 } |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1377 |
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1378 static void |
15822 | 1379 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
|
1380 { |
15822 | 1381 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1382 int error = ETIMEDOUT; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1383 int ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1384 |
15822 | 1385 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
|
1386 |
25478
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1387 if (connect_data->inpa > 0) { |
15822 | 1388 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1389 connect_data->inpa = 0; |
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 |
15822 | 1392 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
|
1393 if ((ret != 0) || (error != 0)) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1394 if (ret != 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1395 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
|
1396 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
|
1397 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1398 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1399 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1400 /* |
25480
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1401 * 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
|
1402 * 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
|
1403 * 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
|
1404 * 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
|
1405 */ |
25480
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1406 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
|
1407 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
|
1408 int len; |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1409 |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1410 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
|
1411 |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1412 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
|
1413 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
|
1414 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
|
1415 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
|
1416 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
|
1417 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
|
1418 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
|
1419 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
|
1420 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
|
1421 |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1422 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
|
1423 |
25480
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1424 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
|
1425 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
|
1426 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
|
1427 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
|
1428 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
|
1429 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
|
1430 |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1431 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
|
1432 |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1433 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
|
1434 } else { |
32013
f22bc8b5b9dc
Replace purple_dnsquery_a_account with purple_dnsquery_a.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31777
diff
changeset
|
1435 connect_data->query_data = purple_dnsquery_a( |
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
|
1436 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
|
1437 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
|
1438 |
e859785b49d8
Implement support for resolving DNS via the SOCKS4 proxy in use.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25479
diff
changeset
|
1439 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
|
1440 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
|
1441 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
|
1442 } |
25478
de01d4aa4571
Use asynchronous DNS lookups for SOCKS4.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24750
diff
changeset
|
1443 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1444 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1445 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1446 static void |
15822 | 1447 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
|
1448 { |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1449 int flags; |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1450 |
15822 | 1451 purple_debug_info("proxy", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1452 "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
|
1453 connect_data->host, connect_data->port, |
15822 | 1454 purple_proxy_info_get_host(connect_data->gpi), |
1455 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
|
1456 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1457 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
|
1458 if (connect_data->fd < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1459 { |
15822 | 1460 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
|
1461 _("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
|
1462 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1463 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1464 |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1465 flags = fcntl(connect_data->fd, F_GETFL); |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
1466 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
|
1467 #ifndef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1468 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
|
1469 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1470 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1471 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
|
1472 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1473 if ((errno == EINPROGRESS) || (errno == EINTR)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1474 { |
15822 | 1475 purple_debug_info("proxy", "Connection in progress.\n"); |
1476 connect_data->inpa = purple_input_add(connect_data->fd, | |
1477 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
|
1478 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1479 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1480 { |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
1481 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
|
1482 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1483 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1484 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1485 { |
15822 | 1486 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
|
1487 |
15822 | 1488 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
|
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 |
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
|
1492 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
|
1493 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
|
1494 { |
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
|
1495 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
|
1496 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
|
1497 /* 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
|
1498 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
|
1499 " 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
|
1500 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
|
1501 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
|
1502 } |
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
|
1503 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
|
1504 } |
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
|
1505 |
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
|
1506 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
|
1507 } |
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
|
1508 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1509 static void |
15822 | 1510 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
|
1511 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1512 guchar *dest, *buf; |
15822 | 1513 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1514 int len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1515 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1516 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
|
1517 connect_data->read_buf_len = 5; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1518 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
|
1519 connect_data->read_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1520 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1521 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1522 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
|
1523 buf = connect_data->read_buffer; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1524 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1525 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
|
1526 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1527 if (len == 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1528 { |
15822 | 1529 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
|
1530 _("Server closed the connection")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1531 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1532 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1533 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1534 if (len < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1535 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1536 if (errno == EAGAIN) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1537 /* No worries */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1538 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1539 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1540 /* Error! */ |
15822 | 1541 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
|
1542 _("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
|
1543 return; |
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 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1546 connect_data->read_len += len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1547 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1548 if(connect_data->read_len < 4) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1549 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1550 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1551 if ((buf[0] != 0x05) || (buf[1] != 0x00)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1552 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
|
1553 purple_debug_error("socks5 proxy", "%s", socks5errors[buf[1]]); |
15822 | 1554 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
|
1555 socks5errors[buf[1]]); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1556 } else { |
15822 | 1557 purple_debug_error("socks5 proxy", "Bad data.\n"); |
1558 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
|
1559 _("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
|
1560 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1561 return; |
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 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1564 /* Skip past BND.ADDR */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1565 switch(buf[3]) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1566 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
|
1567 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
|
1568 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1569 buf += 4 + 4; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1570 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1571 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
|
1572 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
|
1573 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
|
1574 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
|
1575 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
|
1576 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
|
1577 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
|
1578 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
|
1579 buf += buf[0] + 1; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1580 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1581 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
|
1582 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
|
1583 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1584 buf += 4 + 16; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1585 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
|
1586 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
|
1587 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
|
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 _("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
|
1590 return; |
15373
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 |
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
|
1593 /* 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
|
1594 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
|
1595 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1596 |
15822 | 1597 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
|
1598 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1599 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1600 static void |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1601 s5_sendconnect(gpointer data, int source) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1602 { |
15822 | 1603 PurpleProxyConnectData *connect_data = data; |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
1604 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
|
1605 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
|
1606 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
|
1607 connect_data->written_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1608 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1609 connect_data->write_buffer[0] = 0x05; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1610 connect_data->write_buffer[1] = 0x01; /* CONNECT */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1611 connect_data->write_buffer[2] = 0x00; /* reserved */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1612 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
|
1613 connect_data->write_buffer[4] = hlen; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1614 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
|
1615 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
|
1616 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
|
1617 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1618 connect_data->read_cb = s5_canread_again; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1619 |
15822 | 1620 connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data); |
1621 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
|
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 |
15822 | 1625 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
|
1626 { |
15822 | 1627 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1628 int len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1629 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1630 if (connect_data->read_buffer == NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1631 connect_data->read_buf_len = 2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1632 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
|
1633 connect_data->read_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1634 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1635 |
15822 | 1636 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
|
1637 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1638 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
|
1639 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
|
1640 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1641 if (len == 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1642 { |
15822 | 1643 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
|
1644 _("Server closed the connection")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1645 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1646 } |
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 if (len < 0) |
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 if (errno == EAGAIN) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1651 /* No worries */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1652 return; |
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 /* Error! */ |
15822 | 1655 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
|
1656 _("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
|
1657 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1658 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1659 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1660 connect_data->read_len += len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1661 if (connect_data->read_len < 2) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1662 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1663 |
15822 | 1664 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1665 connect_data->inpa = 0; |
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 if ((connect_data->read_buffer[0] != 0x01) || (connect_data->read_buffer[1] != 0x00)) { |
15822 | 1668 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
|
1669 _("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
|
1670 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1671 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1672 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1673 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1674 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1675 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1676 s5_sendconnect(connect_data, connect_data->fd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1677 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1678 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1679 static void |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1680 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
|
1681 { |
15822 | 1682 PurpleCipher *cipher; |
1683 PurpleCipherContext *ctx; | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1684 int i; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1685 unsigned char Kxoripad[65]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1686 unsigned char Kxoropad[65]; |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
1687 size_t pwlen; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1688 |
15822 | 1689 cipher = purple_ciphers_find_cipher("md5"); |
1690 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
|
1691 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1692 memset(Kxoripad,0,sizeof(Kxoripad)); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1693 memset(Kxoropad,0,sizeof(Kxoropad)); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1694 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1695 pwlen=strlen(passwd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1696 if (pwlen>64) { |
15822 | 1697 purple_cipher_context_append(ctx, (const guchar *)passwd, strlen(passwd)); |
1698 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
|
1699 pwlen=16; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1700 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1701 memcpy(Kxoripad, passwd, pwlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1702 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1703 memcpy(Kxoropad,Kxoripad,pwlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1704 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1705 for (i=0;i<64;i++) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1706 Kxoripad[i]^=0x36; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1707 Kxoropad[i]^=0x5c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1708 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1709 |
15822 | 1710 purple_cipher_context_reset(ctx, NULL); |
1711 purple_cipher_context_append(ctx, Kxoripad, 64); | |
1712 purple_cipher_context_append(ctx, challenge, challen); | |
1713 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
|
1714 |
15822 | 1715 purple_cipher_context_reset(ctx, NULL); |
1716 purple_cipher_context_append(ctx, Kxoropad, 64); | |
1717 purple_cipher_context_append(ctx, Kxoripad, 16); | |
1718 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
|
1719 |
15822 | 1720 purple_cipher_context_destroy(ctx); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1721 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1722 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1723 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
|
1724 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
|
1725 |
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
|
1726 /* |
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
|
1727 * 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
|
1728 * -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
|
1729 */ |
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
|
1730 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
|
1731 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
|
1732 { |
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
|
1733 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
|
1734 int len, navas, currentav; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1735 |
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
|
1736 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
|
1737 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1738 if (*cmdbuf != 0x01) { |
15822 | 1739 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
|
1740 _("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
|
1741 return -1; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1742 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1743 cmdbuf++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1744 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1745 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
|
1746 |
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
|
1747 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
|
1748 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1749 cmdbuf++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1750 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1751 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
|
1752 |
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
|
1753 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
|
1754 /* 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
|
1755 * 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
|
1756 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
|
1757 /* 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
|
1758 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
|
1759 /* 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
|
1760 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
|
1761 /* 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
|
1762 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
|
1763 |
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
|
1764 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
|
1765 |
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
|
1766 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
|
1767 } |
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
|
1768 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1769 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
|
1770 |
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
|
1771 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
|
1772 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
|
1773 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
|
1774 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
|
1775 } |
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
|
1776 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1777 switch (cmdbuf[0]) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1778 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
|
1779 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
|
1780 /* Did auth work? */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1781 if (buf[0] == 0x00) { |
15822 | 1782 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1783 connect_data->inpa = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1784 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1785 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1786 /* Success */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1787 s5_sendconnect(connect_data, connect_data->fd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1788 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1789 /* Failure */ |
15822 | 1790 purple_debug_warning("proxy", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1791 "socks5 CHAP authentication " |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1792 "failed. Disconnecting..."); |
15822 | 1793 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
|
1794 _("Authentication failed")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
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 -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
|
1797 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
|
1798 /* 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
|
1799 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
|
1800 break; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1801 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
|
1802 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
|
1803 /* Server wants our credentials */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1804 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1805 connect_data->write_buf_len = 16 + 4; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1806 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
|
1807 connect_data->written_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1808 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1809 hmacmd5_chap(buf, cmdbuf[1], |
15822 | 1810 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
|
1811 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
|
1812 /* TODO: What about USER-IDENTITY? */ |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1813 connect_data->write_buffer[0] = 0x01; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1814 connect_data->write_buffer[1] = 0x01; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1815 connect_data->write_buffer[2] = 0x04; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1816 connect_data->write_buffer[3] = 0x10; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1817 |
15822 | 1818 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1819 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1820 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1821 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1822 connect_data->read_cb = s5_readchap; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1823 |
15822 | 1824 connect_data->inpa = purple_input_add(connect_data->fd, |
1825 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
|
1826 |
15822 | 1827 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
|
1828 return -1; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1829 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
|
1830 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
|
1831 /* Server wants to select an algorithm */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1832 if (buf[0] != 0x85) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1833 /* Only currently support HMAC-MD5 */ |
15822 | 1834 purple_debug_warning("proxy", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1835 "Server tried to select an " |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1836 "algorithm that we did not advertise " |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1837 "as supporting. This is a violation " |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1838 "of the socks5 CHAP specification. " |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1839 "Disconnecting..."); |
15822 | 1840 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
|
1841 _("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
|
1842 return -1; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1843 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1844 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
|
1845 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
|
1846 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
|
1847 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1848 cmdbuf = buf + cmdbuf[1]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1849 } |
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
|
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 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
|
1852 } |
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 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
|
1855 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
|
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 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
|
1858 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
|
1859 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
|
1860 |
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 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
|
1862 |
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 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
|
1864 /* 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
|
1865 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
|
1866 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
|
1867 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
|
1868 } |
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
|
1869 |
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
|
1870 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
|
1871 /*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
|
1872 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
|
1873 } |
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 |
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
|
1875 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
|
1876 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
|
1877 |
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
|
1878 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
|
1879 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
|
1880 _("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
|
1881 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
|
1882 } |
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
|
1883 |
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
|
1884 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
|
1885 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
|
1886 /* 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
|
1887 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
|
1888 |
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
|
1889 /* 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
|
1890 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
|
1891 _("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
|
1892 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
|
1893 } |
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
|
1894 |
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
|
1895 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
|
1896 |
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
|
1897 /* 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
|
1898 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
|
1899 |
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
|
1900 /* 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
|
1901 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
|
1902 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
|
1903 |
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
|
1904 msg_ret = s5_parse_chap_msg(connect_data); |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
1905 |
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
|
1906 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
|
1907 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
|
1908 |
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
|
1909 /* 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
|
1910 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
|
1911 |
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
|
1912 /* 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
|
1913 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
|
1914 /* 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
|
1915 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
|
1916 |
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
|
1917 /* 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
|
1918 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
|
1919 } |
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
|
1920 |
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
|
1921 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
|
1922 } |
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
|
1923 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1924 /* 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
|
1925 * 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
|
1926 * 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
|
1927 |
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
|
1928 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
|
1929 |
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
|
1930 /* 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
|
1931 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
|
1932 connect_data->read_buffer = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1933 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1934 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1935 static void |
15822 | 1936 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
|
1937 { |
15822 | 1938 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1939 int len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1940 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1941 if (connect_data->read_buffer == NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1942 connect_data->read_buf_len = 2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1943 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
|
1944 connect_data->read_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1945 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1946 |
15822 | 1947 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
|
1948 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1949 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
|
1950 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
|
1951 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1952 if (len == 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1953 { |
15822 | 1954 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
|
1955 _("Server closed the connection")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1956 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1957 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1958 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1959 if (len < 0) |
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 if (errno == EAGAIN) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1962 /* No worries */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1963 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1964 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1965 /* Error! */ |
15822 | 1966 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
|
1967 _("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
|
1968 return; |
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 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1971 connect_data->read_len += len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1972 if (connect_data->read_len < 2) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1973 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1974 |
15822 | 1975 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1976 connect_data->inpa = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1977 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1978 if ((connect_data->read_buffer[0] != 0x05) || (connect_data->read_buffer[1] == 0xff)) { |
15822 | 1979 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
|
1980 _("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
|
1981 return; |
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 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1984 if (connect_data->read_buffer[1] == 0x02) { |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
1985 size_t i, j; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1986 const char *u, *p; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1987 |
15822 | 1988 u = purple_proxy_info_get_username(connect_data->gpi); |
1989 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
|
1990 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1991 i = (u == NULL) ? 0 : strlen(u); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1992 j = (p == NULL) ? 0 : strlen(p); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1993 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1994 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
|
1995 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
|
1996 connect_data->written_len = 0; |
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 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
|
1999 connect_data->write_buffer[1] = i; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2000 if (u != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2001 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
|
2002 connect_data->write_buffer[2 + i] = j; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2003 if (p != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2004 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
|
2005 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2006 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2007 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2008 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2009 connect_data->read_cb = s5_readauth; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2010 |
15822 | 2011 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
|
2012 proxy_do_write, connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2013 |
15822 | 2014 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
|
2015 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2016 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2017 } else if (connect_data->read_buffer[1] == 0x03) { |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
2018 size_t userlen; |
15822 | 2019 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
|
2020 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2021 connect_data->write_buf_len = 7 + userlen; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2022 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
|
2023 connect_data->written_len = 0; |
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 connect_data->write_buffer[0] = 0x01; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2026 connect_data->write_buffer[1] = 0x02; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2027 connect_data->write_buffer[2] = 0x11; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2028 connect_data->write_buffer[3] = 0x01; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2029 connect_data->write_buffer[4] = 0x85; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2030 connect_data->write_buffer[5] = 0x02; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2031 connect_data->write_buffer[6] = userlen; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2032 memcpy(connect_data->write_buffer + 7, |
15822 | 2033 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
|
2034 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2035 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2036 connect_data->read_buffer = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2037 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2038 connect_data->read_cb = s5_readchap; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2039 |
15822 | 2040 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
|
2041 proxy_do_write, connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2042 |
15822 | 2043 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
|
2044 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2045 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2046 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2047 g_free(connect_data->read_buffer); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2048 connect_data->read_buffer = NULL; |
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 s5_sendconnect(connect_data, connect_data->fd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2051 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2052 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2053 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2054 static void |
15822 | 2055 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
|
2056 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2057 unsigned char buf[5]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2058 int i; |
15822 | 2059 PurpleProxyConnectData *connect_data = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2060 int error = ETIMEDOUT; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2061 int ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2062 |
15822 | 2063 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
|
2064 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2065 if (connect_data->inpa > 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2066 { |
15822 | 2067 purple_input_remove(connect_data->inpa); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2068 connect_data->inpa = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2069 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2070 |
15822 | 2071 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
|
2072 if ((ret != 0) || (error != 0)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2073 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2074 if (ret != 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2075 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
|
2076 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
|
2077 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2078 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2079 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2080 buf[0] = 0x05; /* SOCKS version 5 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2081 |
15822 | 2082 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
|
2083 buf[1] = 0x03; /* three methods */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2084 buf[2] = 0x00; /* no authentication */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2085 buf[3] = 0x03; /* CHAP authentication */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2086 buf[4] = 0x02; /* username/password authentication */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2087 i = 5; |
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 buf[1] = 0x01; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2091 buf[2] = 0x00; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2092 i = 3; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2093 } |
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 connect_data->write_buf_len = i; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2096 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
|
2097 memcpy(connect_data->write_buffer, buf, i); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2098 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2099 connect_data->read_cb = s5_canread; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2100 |
15822 | 2101 connect_data->inpa = purple_input_add(connect_data->fd, PURPLE_INPUT_WRITE, proxy_do_write, connect_data); |
2102 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
|
2103 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2104 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2105 static void |
15822 | 2106 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
|
2107 { |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
2108 int flags; |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
2109 |
15822 | 2110 purple_debug_info("proxy", |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2111 "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
|
2112 connect_data->host, connect_data->port, |
15822 | 2113 purple_proxy_info_get_host(connect_data->gpi), |
2114 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
|
2115 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2116 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
|
2117 if (connect_data->fd < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2118 { |
15822 | 2119 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
|
2120 _("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
|
2121 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2122 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2123 |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
2124 flags = fcntl(connect_data->fd, F_GETFL); |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20074
diff
changeset
|
2125 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
|
2126 #ifndef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2127 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
|
2128 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2129 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2130 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
|
2131 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2132 if ((errno == EINPROGRESS) || (errno == EINTR)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2133 { |
15822 | 2134 purple_debug_info("socks5 proxy", "Connection in progress\n"); |
2135 connect_data->inpa = purple_input_add(connect_data->fd, | |
2136 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
|
2137 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2138 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2139 { |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21015
diff
changeset
|
2140 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
|
2141 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2142 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2143 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2144 { |
15822 | 2145 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
|
2146 |
15822 | 2147 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
|
2148 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2149 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2150 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2151 /** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2152 * This function attempts to connect to the next IP address in the list |
32013
f22bc8b5b9dc
Replace purple_dnsquery_a_account with purple_dnsquery_a.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31777
diff
changeset
|
2153 * of IP addresses returned to us by purple_dnsquery_a() and attempts |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2154 * 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
|
2155 * 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
|
2156 * is another IP address to try). |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2157 */ |
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
|
2158 #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
|
2159 #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
|
2160 #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
|
2161 |
15822 | 2162 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
|
2163 { |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
2164 socklen_t addrlen; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2165 struct sockaddr *addr; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2166 char ipaddr[INET6_ADDRSTRLEN]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2167 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2168 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
|
2169 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
|
2170 addr = connect_data->hosts->data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2171 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
|
2172 #ifdef HAVE_INET_NTOP |
29042
0257b8fe21d6
proxy: Fix printing IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
28747
diff
changeset
|
2173 if (addr->sa_family == AF_INET) |
0257b8fe21d6
proxy: Fix printing IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
28747
diff
changeset
|
2174 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
|
2175 ipaddr, sizeof(ipaddr)); |
0257b8fe21d6
proxy: Fix printing IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
28747
diff
changeset
|
2176 else if (addr->sa_family == AF_INET6) |
0257b8fe21d6
proxy: Fix printing IPv6 addresses
Paul Aurich <paul@darkrain42.org>
parents:
28747
diff
changeset
|
2177 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
|
2178 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
|
2179 #else |
25479
8fa011906ac3
A few type fixes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
25478
diff
changeset
|
2180 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
|
2181 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
|
2182 #endif |
15822 | 2183 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
|
2184 |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2185 if (connect_data->socket_type == SOCK_DGRAM) { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2186 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
|
2187 g_free(addr); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2188 return; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2189 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2190 |
15822 | 2191 switch (purple_proxy_info_get_type(connect_data->gpi)) { |
2192 case PURPLE_PROXY_NONE: | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2193 proxy_connect_none(connect_data, addr, addrlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2194 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2195 |
15822 | 2196 case PURPLE_PROXY_HTTP: |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2197 proxy_connect_http(connect_data, addr, addrlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2198 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2199 |
15822 | 2200 case PURPLE_PROXY_SOCKS4: |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2201 proxy_connect_socks4(connect_data, addr, addrlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2202 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2203 |
15822 | 2204 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
|
2205 case PURPLE_PROXY_TOR: |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2206 proxy_connect_socks5(connect_data, addr, addrlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2207 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2208 |
15822 | 2209 case PURPLE_PROXY_USE_ENVVAR: |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2210 proxy_connect_http(connect_data, addr, addrlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2211 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2212 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2213 default: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2214 break; |
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 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2217 g_free(addr); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2218 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2219 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2220 static void |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2221 connection_host_resolved(GSList *hosts, gpointer data, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2222 const char *error_message) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2223 { |
15822 | 2224 PurpleProxyConnectData *connect_data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2225 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2226 connect_data = data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2227 connect_data->query_data = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2228 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2229 if (error_message != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2230 { |
15822 | 2231 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
|
2232 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2233 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2234 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2235 if (hosts == NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2236 { |
27381
f541583e31bd
More uniformity among disconnect error messages
Mark Doliner <mark@kingant.net>
parents:
27375
diff
changeset
|
2237 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
|
2238 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2239 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2240 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2241 connect_data->hosts = hosts; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2242 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2243 try_connect(connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2244 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2245 |
15822 | 2246 PurpleProxyInfo * |
2247 purple_proxy_get_setup(PurpleAccount *account) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2248 { |
15822 | 2249 PurpleProxyInfo *gpi = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2250 const gchar *tmp; |
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 /* This is used as a fallback so we don't overwrite the selected proxy type */ |
15822 | 2253 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
|
2254 if (!tmp_none_proxy_info) { |
15822 | 2255 tmp_none_proxy_info = purple_proxy_info_new(); |
2256 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
|
2257 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2258 |
15822 | 2259 if (account && purple_account_get_proxy_info(account) != NULL) { |
2260 gpi = purple_account_get_proxy_info(account); | |
2261 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
|
2262 gpi = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2263 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2264 if (gpi == NULL) { |
15822 | 2265 if (purple_running_gnome()) |
2266 gpi = purple_gnome_proxy_get_info(); | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2267 else |
15822 | 2268 gpi = purple_global_proxy_get_info(); |
15373
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 |
15822 | 2271 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
|
2272 if ((tmp = g_getenv("HTTP_PROXY")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2273 (tmp = g_getenv("http_proxy")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2274 (tmp = g_getenv("HTTPPROXY")) != NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2275 char *proxyhost, *proxyuser, *proxypasswd; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2276 int proxyport; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2277 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2278 /* http_proxy-format: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2279 * 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
|
2280 */ |
15822 | 2281 if(purple_url_parse(tmp, &proxyhost, &proxyport, NULL, &proxyuser, &proxypasswd)) { |
2282 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
|
2283 g_free(proxyhost); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2284 |
15822 | 2285 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
|
2286 g_free(proxyuser); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2287 |
15822 | 2288 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
|
2289 g_free(proxypasswd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2290 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2291 /* only for backward compatibility */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2292 if (proxyport == 80 && |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2293 ((tmp = g_getenv("HTTP_PROXY_PORT")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2294 (tmp = g_getenv("http_proxy_port")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2295 (tmp = g_getenv("HTTPPROXYPORT")) != NULL)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2296 proxyport = atoi(tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2297 |
15822 | 2298 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
|
2299 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2300 /* 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
|
2301 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
|
2302 (tmp = g_getenv("http_proxy_user")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2303 (tmp = g_getenv("HTTPPROXYUSER")) != NULL) |
15822 | 2304 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
|
2305 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2306 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
|
2307 (tmp = g_getenv("http_proxy_pass")) != NULL || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2308 (tmp = g_getenv("HTTPPROXYPASS")) != NULL) |
15822 | 2309 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
|
2310 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2311 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2312 } 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
|
2313 #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
|
2314 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
|
2315 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
|
2316 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
|
2317 #endif |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2318 /* no proxy environment variable found, don't use a proxy */ |
15822 | 2319 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
|
2320 gpi = tmp_none_proxy_info; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2321 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2322 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2323 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2324 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2325 return gpi; |
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 |
15822 | 2328 PurpleProxyConnectData * |
2329 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
|
2330 const char *host, int port, |
15822 | 2331 PurpleProxyConnectFunction connect_cb, gpointer data) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2332 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2333 const char *connecthost = host; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2334 int connectport = port; |
15822 | 2335 PurpleProxyConnectData *connect_data; |
15373
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 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
|
2338 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
|
2339 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
|
2340 |
15822 | 2341 connect_data = g_new0(PurpleProxyConnectData, 1); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2342 connect_data->fd = -1; |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2343 connect_data->socket_type = SOCK_STREAM; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2344 connect_data->handle = handle; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2345 connect_data->connect_cb = connect_cb; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2346 connect_data->data = data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2347 connect_data->host = g_strdup(host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2348 connect_data->port = port; |
15822 | 2349 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
|
2350 connect_data->account = account; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2351 |
15822 | 2352 if ((purple_proxy_info_get_type(connect_data->gpi) != PURPLE_PROXY_NONE) && |
2353 (purple_proxy_info_get_host(connect_data->gpi) == NULL || | |
2354 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
|
2355 |
15822 | 2356 purple_notify_error(NULL, NULL, _("Invalid proxy settings"), _("Either the host name or port number specified for your given proxy type is invalid.")); |
2357 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
|
2358 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2359 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2360 |
15822 | 2361 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
|
2362 { |
15822 | 2363 case PURPLE_PROXY_NONE: |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2364 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2365 |
15822 | 2366 case PURPLE_PROXY_HTTP: |
2367 case PURPLE_PROXY_SOCKS4: | |
2368 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
|
2369 case PURPLE_PROXY_TOR: |
15822 | 2370 case PURPLE_PROXY_USE_ENVVAR: |
2371 connecthost = purple_proxy_info_get_host(connect_data->gpi); | |
2372 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
|
2373 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2374 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2375 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
|
2376 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
|
2377 purple_proxy_info_get_type(connect_data->gpi)); |
15822 | 2378 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
|
2379 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2380 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2381 |
32013
f22bc8b5b9dc
Replace purple_dnsquery_a_account with purple_dnsquery_a.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31777
diff
changeset
|
2382 connect_data->query_data = purple_dnsquery_a(account, connecthost, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2383 connectport, connection_host_resolved, connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2384 if (connect_data->query_data == NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2385 { |
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
|
2386 purple_debug_error("proxy", "dns query failed unexpectedly.\n"); |
15822 | 2387 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
|
2388 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2389 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2390 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2391 handles = g_slist_prepend(handles, connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2392 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2393 return connect_data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2394 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2395 |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2396 PurpleProxyConnectData * |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2397 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
|
2398 const char *host, int port, |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2399 PurpleProxyConnectFunction connect_cb, gpointer data) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2400 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2401 const char *connecthost = host; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2402 int connectport = port; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2403 PurpleProxyConnectData *connect_data; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2404 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2405 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
|
2406 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
|
2407 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
|
2408 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2409 connect_data = g_new0(PurpleProxyConnectData, 1); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2410 connect_data->fd = -1; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2411 connect_data->socket_type = SOCK_DGRAM; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2412 connect_data->handle = handle; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2413 connect_data->connect_cb = connect_cb; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2414 connect_data->data = data; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2415 connect_data->host = g_strdup(host); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2416 connect_data->port = port; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2417 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
|
2418 connect_data->account = account; |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2419 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2420 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
|
2421 (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
|
2422 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
|
2423 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2424 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
|
2425 purple_proxy_connect_data_destroy(connect_data); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2426 return NULL; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2427 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2428 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2429 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
|
2430 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2431 case PURPLE_PROXY_NONE: |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2432 break; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2433 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2434 case PURPLE_PROXY_HTTP: |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2435 case PURPLE_PROXY_SOCKS4: |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2436 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
|
2437 case PURPLE_PROXY_TOR: |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2438 case PURPLE_PROXY_USE_ENVVAR: |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2439 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
|
2440 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
|
2441 break; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2442 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2443 default: |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2444 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
|
2445 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
|
2446 purple_proxy_connect_data_destroy(connect_data); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2447 return NULL; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2448 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2449 |
32013
f22bc8b5b9dc
Replace purple_dnsquery_a_account with purple_dnsquery_a.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31777
diff
changeset
|
2450 connect_data->query_data = purple_dnsquery_a(account, connecthost, |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2451 connectport, connection_host_resolved, connect_data); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2452 if (connect_data->query_data == NULL) |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2453 { |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2454 purple_proxy_connect_data_destroy(connect_data); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2455 return NULL; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2456 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2457 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2458 handles = g_slist_prepend(handles, connect_data); |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2459 |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2460 return connect_data; |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2461 } |
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2462 |
31532
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2463 /* 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
|
2464 * relevant account proxy) |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2465 */ |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2466 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
|
2467 const gchar *error_message) { |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2468 /* 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
|
2469 PurpleProxyConnectData *connect_data = data; |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2470 |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2471 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
|
2472 |
31532
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2473 /* 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
|
2474 * 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
|
2475 * 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
|
2476 */ |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2477 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
|
2478 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
|
2479 return; |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2480 } |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2481 |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2482 /* Break the link between the two PurpleProxyConnectDatas */ |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2483 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
|
2484 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2485 if (error_message != NULL) { |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2486 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
|
2487 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
|
2488 return; |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2489 } |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2490 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2491 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
|
2492 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2493 purple_debug_info("proxy", |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2494 "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
|
2495 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
|
2496 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
|
2497 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
|
2498 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2499 connect_data->fd = source; |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2500 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2501 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
|
2502 } |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2503 |
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
|
2504 /* |
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
|
2505 * 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
|
2506 */ |
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
|
2507 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
|
2508 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
|
2509 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
|
2510 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
|
2511 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
|
2512 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
|
2513 { |
15822 | 2514 PurpleProxyConnectData *connect_data; |
31532
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2515 PurpleProxyConnectData *account_proxy_conn_data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2516 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2517 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
|
2518 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
|
2519 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
|
2520 |
15822 | 2521 connect_data = g_new0(PurpleProxyConnectData, 1); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2522 connect_data->fd = -1; |
27032
4c3b1bb3ba91
Add purple_proxy_connect_udp. Closes #6589.
Hu Yong <ccpaging@gmail.com>
parents:
25947
diff
changeset
|
2523 connect_data->socket_type = SOCK_STREAM; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2524 connect_data->handle = handle; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2525 connect_data->connect_cb = connect_cb; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2526 connect_data->data = data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2527 connect_data->host = g_strdup(host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2528 connect_data->port = port; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2529 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
|
2530 connect_data->account = account; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2531 |
31532
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2532 /* 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
|
2533 * proxy. |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2534 */ |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2535 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
|
2536 connect_data->account, |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2537 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
|
2538 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
|
2539 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
|
2540 |
b9f58c31afc7
proxy: Use account proxy when making standalone SOCKS5 connections.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31479
diff
changeset
|
2541 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
|
2542 purple_debug_error("proxy", "Unable to initiate connection to account proxy.\n"); |
15822 | 2543 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
|
2544 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2545 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2546 |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2547 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
|
2548 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2549 handles = g_slist_prepend(handles, connect_data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2550 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2551 return connect_data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2552 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2553 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2554 void |
15822 | 2555 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
|
2556 { |
32796
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2557 g_return_if_fail(connect_data != NULL); |
5ae7e1f36b43
Fix a possible XMPP remote crash
Mark Doliner <mark@kingant.net>
parents:
32506
diff
changeset
|
2558 |
15822 | 2559 purple_proxy_connect_data_disconnect(connect_data, NULL); |
2560 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
|
2561 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2562 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2563 void |
15822 | 2564 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
|
2565 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2566 GSList *l, *l_next; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2567 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2568 for (l = handles; l != NULL; l = l_next) { |
15822 | 2569 PurpleProxyConnectData *connect_data = l->data; |
15373
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 l_next = l->next; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2572 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2573 if (connect_data->handle == handle) |
15822 | 2574 purple_proxy_connect_cancel(connect_data); |
15373
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 } |
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 static void |
15822 | 2579 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
|
2580 gconstpointer value, gpointer data) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2581 { |
15822 | 2582 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
|
2583 |
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
|
2584 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
|
2585 int proxytype; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2586 const char *type = value; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2587 |
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
|
2588 if (purple_strequal(type, "none")) |
15822 | 2589 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
|
2590 else if (purple_strequal(type, "http")) |
15822 | 2591 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
|
2592 else if (purple_strequal(type, "socks4")) |
15822 | 2593 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
|
2594 else if (purple_strequal(type, "socks5")) |
15822 | 2595 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
|
2596 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
|
2597 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
|
2598 else if (purple_strequal(type, "envvar")) |
15822 | 2599 proxytype = PURPLE_PROXY_USE_ENVVAR; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2600 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2601 proxytype = -1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2602 |
15822 | 2603 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
|
2604 } else if (purple_strequal(name, "/purple/proxy/host")) |
15822 | 2605 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
|
2606 else if (purple_strequal(name, "/purple/proxy/port")) |
15822 | 2607 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
|
2608 else if (purple_strequal(name, "/purple/proxy/username")) |
15822 | 2609 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
|
2610 else if (purple_strequal(name, "/purple/proxy/password")) |
15822 | 2611 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
|
2612 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2613 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2614 void * |
15822 | 2615 purple_proxy_get_handle() |
15373
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 static int handle; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2618 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2619 return &handle; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2620 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2621 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2622 void |
15822 | 2623 purple_proxy_init(void) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2624 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2625 void *handle; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2626 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2627 /* Initialize a default proxy info struct. */ |
15822 | 2628 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
|
2629 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2630 /* 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
|
2631 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
|
2632 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
|
2633 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
|
2634 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
|
2635 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
|
2636 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
|
2637 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
|
2638 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2639 /* Setup callbacks for the preferences. */ |
15822 | 2640 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
|
2641 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
|
2642 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
|
2643 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
|
2644 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
|
2645 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
|
2646 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
|
2647 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
|
2648 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
|
2649 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
|
2650 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
|
2651 |
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
|
2652 /* 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
|
2653 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
|
2654 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
|
2655 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
|
2656 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
|
2657 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
|
2658 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2659 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2660 void |
15822 | 2661 purple_proxy_uninit(void) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2662 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2663 while (handles != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2664 { |
15822 | 2665 purple_proxy_connect_data_disconnect(handles->data, NULL); |
2666 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
|
2667 } |
27900
32a707746454
Clean up various file-scoped globals at uninit.
Paul Aurich <paul@darkrain42.org>
parents:
27678
diff
changeset
|
2668 |
32a707746454
Clean up various file-scoped globals at uninit.
Paul Aurich <paul@darkrain42.org>
parents:
27678
diff
changeset
|
2669 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
|
2670 |
32a707746454
Clean up various file-scoped globals at uninit.
Paul Aurich <paul@darkrain42.org>
parents:
27678
diff
changeset
|
2671 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
|
2672 global_proxy_info = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2673 } |