author | vtewari |
Thu, 22 Nov 2018 13:25:44 +0530 | |
changeset 52651 | 526b2490c616 |
parent 47216 | 71c04702a3d5 |
child 52725 | c470f977ade8 |
permissions | -rw-r--r-- |
2 | 1 |
/* |
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
2 |
* Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. |
2 | 3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 |
* |
|
5 |
* This code is free software; you can redistribute it and/or modify it |
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
|
5506 | 7 |
* published by the Free Software Foundation. Oracle designates this |
2 | 8 |
* particular file as subject to the "Classpath" exception as provided |
5506 | 9 |
* by Oracle in the LICENSE file that accompanied this code. |
2 | 10 |
* |
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
|
15 |
* accompanied this code). |
|
16 |
* |
|
17 |
* You should have received a copy of the GNU General Public License version |
|
18 |
* 2 along with this work; if not, write to the Free Software Foundation, |
|
19 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
20 |
* |
|
5506 | 21 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
22 |
* or visit www.oracle.com if you need additional information or have any |
|
23 |
* questions. |
|
2 | 24 |
*/ |
25 |
||
26 |
#include <windows.h> |
|
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
27 |
#include <Winhttp.h> |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
28 |
|
2 | 29 |
#include "jni.h" |
30 |
#include "jni_util.h" |
|
31 |
#include "jvm.h" |
|
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
32 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
33 |
#include "proxy_util.h" |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
34 |
|
2 | 35 |
#include "sun_net_spi_DefaultProxySelector.h" |
36 |
||
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
37 |
/* |
2 | 38 |
* These functions are used by the sun.net.spi.DefaultProxySelector class |
39 |
* to access some platform specific settings. |
|
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
40 |
* On Windows use WinHTTP functions to get the system settings. |
2 | 41 |
*/ |
42 |
||
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
43 |
/* Keep one static session for all requests. */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
44 |
static HINTERNET session = NULL; |
2 | 45 |
|
46 |
/* |
|
47 |
* Class: sun_net_spi_DefaultProxySelector |
|
48 |
* Method: init |
|
49 |
* Signature: ()Z |
|
50 |
*/ |
|
51 |
JNIEXPORT jboolean JNICALL |
|
52 |
Java_sun_net_spi_DefaultProxySelector_init(JNIEnv *env, jclass clazz) { |
|
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
53 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
54 |
/* |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
55 |
* Get one WinHTTP session handle to initialize the WinHTTP internal data |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
56 |
* structures. Keep and use only this one for the whole life time. |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
57 |
*/ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
58 |
session = WinHttpOpen(L"Only used internal", /* we need no real agent string here */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
59 |
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
60 |
WINHTTP_NO_PROXY_NAME, |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
61 |
WINHTTP_NO_PROXY_BYPASS, |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
62 |
0); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
63 |
if (session == NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
64 |
return JNI_FALSE; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
65 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
66 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
67 |
if (!initJavaClass(env)) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
68 |
return JNI_FALSE; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
69 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
70 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
71 |
return JNI_TRUE; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
72 |
} |
2 | 73 |
|
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
74 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
75 |
#define MAX_STR_LEN 1024 |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
76 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
77 |
/* A linked list element for a proxy */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
78 |
typedef struct list_item { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
79 |
wchar_t *host; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
80 |
int port; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
81 |
struct list_item *next; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
82 |
} list_item; |
2 | 83 |
|
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
84 |
/* Free the linked list */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
85 |
static void freeList(list_item *head) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
86 |
list_item *next = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
87 |
list_item *current = head; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
88 |
while (current != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
89 |
next = current->next; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
90 |
free(current->host); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
91 |
free(current); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
92 |
current = next; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
93 |
} |
2 | 94 |
} |
95 |
||
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
96 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
97 |
/* |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
98 |
* Creates a linked list of list_item elements that has to be freed later on. |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
99 |
* Returns the size of the array as int. |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
100 |
*/ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
101 |
static int createProxyList(LPWSTR win_proxy, const WCHAR *pproto, list_item **head) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
102 |
static const wchar_t separators[] = L"\t\r\n ;"; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
103 |
list_item *current = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
104 |
int nr_elems = 0; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
105 |
wchar_t *context = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
106 |
wchar_t *current_proxy = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
107 |
BOOL error = FALSE; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
108 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
109 |
/* |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
110 |
* The proxy server list contains one or more of the following strings |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
111 |
* separated by semicolons or whitespace: |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
112 |
* ([<scheme>=][<scheme>"://"]<server>[":"<port>]) |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
113 |
*/ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
114 |
current_proxy = wcstok_s(win_proxy, separators, &context); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
115 |
while (current_proxy != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
116 |
LPWSTR pport; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
117 |
LPWSTR phost; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
118 |
int portVal = 0; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
119 |
wchar_t *next_proxy = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
120 |
list_item *proxy = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
121 |
wchar_t* pos = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
122 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
123 |
/* Filter based on the scheme, if there is one */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
124 |
pos = wcschr(current_proxy, L'='); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
125 |
if (pos) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
126 |
*pos = L'\0'; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
127 |
if (wcscmp(current_proxy, pproto) != 0) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
128 |
current_proxy = wcstok_s(NULL, separators, &context); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
129 |
continue; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
130 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
131 |
current_proxy = pos + 1; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
132 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
133 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
134 |
/* Let's check for a scheme and ignore it. */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
135 |
if ((phost = wcsstr(current_proxy, L"://")) != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
136 |
phost += 3; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
137 |
} else { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
138 |
phost = current_proxy; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
139 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
140 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
141 |
/* Get the port */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
142 |
pport = wcschr(phost, L':'); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
143 |
if (pport != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
144 |
*pport = 0; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
145 |
pport++; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
146 |
swscanf(pport, L"%d", &portVal); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
147 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
148 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
149 |
proxy = (list_item *)malloc(sizeof(list_item)); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
150 |
if (proxy != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
151 |
proxy->next = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
152 |
proxy->port = portVal; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
153 |
proxy->host = _wcsdup(phost); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
154 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
155 |
if (proxy->host != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
156 |
if (*head == NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
157 |
*head = proxy; /* first elem */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
158 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
159 |
if (current != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
160 |
current->next = proxy; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
161 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
162 |
current = proxy; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
163 |
nr_elems++; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
164 |
} else { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
165 |
free(proxy); /* cleanup */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
166 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
167 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
168 |
/* goto next proxy if available... */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
169 |
current_proxy = wcstok_s(NULL, separators, &context); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
170 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
171 |
return nr_elems; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
172 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
173 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
174 |
|
2 | 175 |
|
176 |
/* |
|
177 |
* Class: sun_net_spi_DefaultProxySelector |
|
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
178 |
* Method: getSystemProxies |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
179 |
* Signature: ([Ljava/lang/String;Ljava/lang/String;)[Ljava/net/Proxy; |
2 | 180 |
*/ |
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
181 |
JNIEXPORT jobjectArray JNICALL |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
182 |
Java_sun_net_spi_DefaultProxySelector_getSystemProxies(JNIEnv *env, |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
183 |
jobject this, |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
184 |
jstring proto, |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
185 |
jstring host) |
2 | 186 |
{ |
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
187 |
jobjectArray proxy_array = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
188 |
jobject type_proxy = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
189 |
LPCWSTR lpProto; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
190 |
LPCWSTR lpHost; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
191 |
list_item *head = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
192 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
193 |
BOOL use_auto_proxy = FALSE; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
194 |
WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_proxy_config; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
195 |
WINHTTP_AUTOPROXY_OPTIONS auto_proxy_options; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
196 |
WINHTTP_PROXY_INFO proxy_info; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
197 |
LPWSTR win_proxy = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
198 |
LPWSTR win_bypass_proxy = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
199 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
200 |
memset(&ie_proxy_config, 0, sizeof(WINHTTP_CURRENT_USER_IE_PROXY_CONFIG)); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
201 |
memset(&auto_proxy_options, 0, sizeof(WINHTTP_AUTOPROXY_OPTIONS)); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
202 |
memset(&proxy_info, 0, sizeof(WINHTTP_PROXY_INFO)); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
203 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
204 |
lpHost = (*env)->GetStringChars(env, host, NULL); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
205 |
if (lpHost == NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
206 |
if (!(*env)->ExceptionCheck(env)) |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
207 |
JNU_ThrowOutOfMemoryError(env, NULL); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
208 |
return NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
209 |
} |
2 | 210 |
|
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
211 |
lpProto = (*env)->GetStringChars(env, proto, NULL); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
212 |
if (lpProto == NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
213 |
(*env)->ReleaseStringChars(env, host, lpHost); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
214 |
if (!(*env)->ExceptionCheck(env)) |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
215 |
JNU_ThrowOutOfMemoryError(env, NULL); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
216 |
return NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
217 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
218 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
219 |
if (WinHttpGetIEProxyConfigForCurrentUser(&ie_proxy_config) == FALSE) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
220 |
/* cleanup and exit */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
221 |
(*env)->ReleaseStringChars(env, host, lpHost); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
222 |
(*env)->ReleaseStringChars(env, proto, lpProto); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
223 |
return NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
224 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
225 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
226 |
if (ie_proxy_config.fAutoDetect) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
227 |
/* Windows uses WPAD */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
228 |
auto_proxy_options.dwAutoDetectFlags = WINHTTP_AUTO_DETECT_TYPE_DHCP | |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
229 |
WINHTTP_AUTO_DETECT_TYPE_DNS_A; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
230 |
auto_proxy_options.dwFlags = WINHTTP_AUTOPROXY_AUTO_DETECT; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
231 |
auto_proxy_options.fAutoLogonIfChallenged = TRUE; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
232 |
use_auto_proxy = TRUE; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
233 |
} else if (ie_proxy_config.lpszAutoConfigUrl != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
234 |
/* Windows uses PAC file */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
235 |
auto_proxy_options.lpszAutoConfigUrl = ie_proxy_config.lpszAutoConfigUrl; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
236 |
auto_proxy_options.dwFlags = WINHTTP_AUTOPROXY_CONFIG_URL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
237 |
use_auto_proxy = TRUE; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
238 |
} else if (ie_proxy_config.lpszProxy != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
239 |
/* Windows uses manually entered proxy. */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
240 |
use_auto_proxy = FALSE; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
241 |
win_bypass_proxy = ie_proxy_config.lpszProxyBypass; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
242 |
win_proxy = ie_proxy_config.lpszProxy; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
243 |
} |
2 | 244 |
|
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
245 |
if (use_auto_proxy) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
246 |
WCHAR url[MAX_STR_LEN]; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
247 |
/* Create url for WinHttpGetProxyForUrl */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
248 |
_snwprintf(url, sizeof(url) - 1, L"%s://%s", lpProto, lpHost); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
249 |
/* Get proxy for URL from Windows */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
250 |
use_auto_proxy = WinHttpGetProxyForUrl(session, &url[0], &auto_proxy_options, &proxy_info); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
251 |
if (use_auto_proxy) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
252 |
win_proxy = proxy_info.lpszProxy; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
253 |
win_bypass_proxy = proxy_info.lpszProxyBypass; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
254 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
255 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
256 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
257 |
/* Check the bypass entry. */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
258 |
if (NULL != win_bypass_proxy) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
259 |
/* |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
260 |
* From MSDN: |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
261 |
* The proxy bypass list contains one or more server names separated by |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
262 |
* semicolons or whitespace. The proxy bypass list can also contain the |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
263 |
* string "<local>" to indicate that all local intranet sites are |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
264 |
* bypassed. Local intranet sites are considered to be all servers that |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
265 |
* do not contain a period in their name. |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
266 |
*/ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
267 |
wchar_t *context = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
268 |
LPWSTR s = wcstok_s(win_bypass_proxy, L"; ", &context); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
269 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
270 |
while (s != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
271 |
size_t maxlen = wcslen(s); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
272 |
if (wcsncmp(s, lpHost, maxlen) == 0) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
273 |
/* |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
274 |
* The URL host name matches with one of the prefixes, use a |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
275 |
* direct connection. |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
276 |
*/ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
277 |
goto noproxy; |
2 | 278 |
} |
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
279 |
if (wcsncmp(s, L"<local>", maxlen) == 0) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
280 |
/* |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
281 |
* All local intranet sites are bypassed - Microsoft consider all |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
282 |
* servers that do not contain a period in their name to be local. |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
283 |
*/ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
284 |
if (wcschr(lpHost, '.') == NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
285 |
goto noproxy; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
286 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
287 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
288 |
s = wcstok_s(NULL, L"; ", &context); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
289 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
290 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
291 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
292 |
if (win_proxy != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
293 |
wchar_t *context = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
294 |
int defport = 0; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
295 |
int nr_elems = 0; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
296 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
297 |
/* Set the default port value & proxy type from protocol. */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
298 |
if ((wcscmp(lpProto, L"http") == 0) || |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
299 |
(wcscmp(lpProto, L"ftp") == 0) || |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
300 |
(wcscmp(lpProto, L"gopher") == 0)) |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
301 |
defport = 80; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
302 |
if (wcscmp(lpProto, L"https") == 0) |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
303 |
defport = 443; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
304 |
if (wcscmp(lpProto, L"socks") == 0) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
305 |
defport = 1080; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
306 |
type_proxy = (*env)->GetStaticObjectField(env, ptype_class, ptype_socksID); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
307 |
} else { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
308 |
type_proxy = (*env)->GetStaticObjectField(env, ptype_class, ptype_httpID); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
309 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
310 |
if (type_proxy == NULL || (*env)->ExceptionCheck(env)) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
311 |
goto noproxy; |
2 | 312 |
} |
313 |
||
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
314 |
nr_elems = createProxyList(win_proxy, lpProto, &head); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
315 |
if (nr_elems != 0 && head != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
316 |
int index = 0; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
317 |
proxy_array = (*env)->NewObjectArray(env, nr_elems, proxy_class, NULL); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
318 |
if (proxy_array == NULL || (*env)->ExceptionCheck(env)) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
319 |
goto noproxy; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
320 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
321 |
while (head != NULL && index < nr_elems) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
322 |
jstring jhost; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
323 |
jobject isa; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
324 |
jobject proxy; |
2 | 325 |
|
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
326 |
if (head->host != NULL && proxy_array != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
327 |
/* Let's create the appropriate Proxy object then. */ |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
328 |
if (head->port == 0) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
329 |
head->port = defport; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
330 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
331 |
jhost = (*env)->NewString(env, head->host, (jsize)wcslen(head->host)); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
332 |
if (jhost == NULL || (*env)->ExceptionCheck(env)) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
333 |
proxy_array = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
334 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
335 |
isa = (*env)->CallStaticObjectMethod(env, isaddr_class, |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
336 |
isaddr_createUnresolvedID, jhost, |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
337 |
head->port); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
338 |
if (isa == NULL || (*env)->ExceptionCheck(env)) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
339 |
proxy_array = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
340 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
341 |
proxy = (*env)->NewObject(env, proxy_class, proxy_ctrID, type_proxy, isa); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
342 |
if (proxy == NULL || (*env)->ExceptionCheck(env)) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
343 |
proxy_array = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
344 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
345 |
(*env)->SetObjectArrayElement(env, proxy_array, index, proxy); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
346 |
if ((*env)->ExceptionCheck(env)) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
347 |
proxy_array = NULL; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
348 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
349 |
index++; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
350 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
351 |
head = head->next; |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
352 |
} |
2 | 353 |
} |
354 |
} |
|
355 |
||
356 |
noproxy: |
|
43501
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
357 |
if (head != NULL) { |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
358 |
freeList(head); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
359 |
} |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
360 |
if (proxy_info.lpszProxy != NULL) |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
361 |
GlobalFree(proxy_info.lpszProxy); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
362 |
if (proxy_info.lpszProxyBypass != NULL) |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
363 |
GlobalFree(proxy_info.lpszProxyBypass); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
364 |
if (ie_proxy_config.lpszAutoConfigUrl != NULL) |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
365 |
GlobalFree(ie_proxy_config.lpszAutoConfigUrl); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
366 |
if (ie_proxy_config.lpszProxy != NULL) |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
367 |
GlobalFree(ie_proxy_config.lpszProxy); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
368 |
if (ie_proxy_config.lpszProxyBypass != NULL) |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
369 |
GlobalFree(ie_proxy_config.lpszProxyBypass); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
370 |
if (lpHost != NULL) |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
371 |
(*env)->ReleaseStringChars(env, host, lpHost); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
372 |
if (lpProto != NULL) |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
373 |
(*env)->ReleaseStringChars(env, proto, lpProto); |
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
374 |
|
243c346dc905
8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
clanger
parents:
25859
diff
changeset
|
375 |
return proxy_array; |
2 | 376 |
} |