Lines 16-22
Link Here
|
16 |
import java.util.ArrayList; |
16 |
import java.util.ArrayList; |
17 |
import java.util.Arrays; |
17 |
import java.util.Arrays; |
18 |
import java.util.List; |
18 |
import java.util.List; |
|
|
19 |
import java.util.Map; |
19 |
import java.util.Properties; |
20 |
import java.util.Properties; |
|
|
21 |
import java.util.TreeMap; |
20 |
|
22 |
|
21 |
import org.eclipse.core.net.proxy.IProxyChangeEvent; |
23 |
import org.eclipse.core.net.proxy.IProxyChangeEvent; |
22 |
import org.eclipse.core.net.proxy.IProxyChangeListener; |
24 |
import org.eclipse.core.net.proxy.IProxyChangeListener; |
Lines 42-51
Link Here
|
42 |
static final String PREF_NON_PROXIED_HOSTS = "nonProxiedHosts"; //$NON-NLS-1$ |
44 |
static final String PREF_NON_PROXIED_HOSTS = "nonProxiedHosts"; //$NON-NLS-1$ |
43 |
static final String PREF_ENABLED = "proxiesEnabled"; //$NON-NLS-1$ |
45 |
static final String PREF_ENABLED = "proxiesEnabled"; //$NON-NLS-1$ |
44 |
static final String PREF_OS = "systemProxiesEnabled"; //$NON-NLS-1$ |
46 |
static final String PREF_OS = "systemProxiesEnabled"; //$NON-NLS-1$ |
|
|
47 |
static final String PREF_CUSTOM_PROVIDER = "customProxyProvider"; //$NON-NLS-1$ |
45 |
|
48 |
|
46 |
private static IProxyService proxyManager; |
49 |
private static IProxyService proxyManager; |
47 |
|
50 |
|
48 |
private AbstractProxyProvider nativeProxyProvider; |
51 |
private Map providers; |
49 |
|
52 |
|
50 |
private PreferenceManager preferenceManager; |
53 |
private PreferenceManager preferenceManager; |
51 |
|
54 |
|
Lines 58-73
Link Here
|
58 |
}; |
61 |
}; |
59 |
|
62 |
|
60 |
private ProxyManager() { |
63 |
private ProxyManager() { |
61 |
try { |
64 |
providers = new TreeMap(); |
62 |
nativeProxyProvider = (AbstractProxyProvider) Class.forName( |
|
|
63 |
"org.eclipse.core.net.ProxyProvider").newInstance(); //$NON-NLS-1$ |
64 |
} catch (ClassNotFoundException e) { |
65 |
// no class found |
66 |
} catch (Exception e) { |
67 |
Activator.logInfo("Problems occured during the proxy provider initialization.", e); //$NON-NLS-1$ |
68 |
} |
69 |
preferenceManager = Activator.getInstance().getPreferenceManager(); |
65 |
preferenceManager = Activator.getInstance().getPreferenceManager(); |
70 |
} |
66 |
} |
|
|
67 |
|
68 |
private void initializeProxyProviders() { |
69 |
IExtension[] extensions = RegistryFactory.getRegistry().getExtensionPoint(Activator.ID, Activator.PT_PROXYPROVIDER).getExtensions(); |
70 |
if (extensions.length == 0) { |
71 |
return; |
72 |
} |
73 |
for (int i = 0; i < extensions.length; i++) { |
74 |
IConfigurationElement[] configs = extensions[i].getConfigurationElements(); |
75 |
for (int j = 0; j < configs.length; j++) { |
76 |
try { |
77 |
Object object = configs[j].createExecutableExtension("class"); //$NON-NLS-1$ |
78 |
if (object instanceof AbstractProxyProvider) { |
79 |
AbstractProxyProvider provider = (AbstractProxyProvider) object; |
80 |
if (!providers.containsKey(provider.getName())) { |
81 |
providers.put(provider.getName(), provider); |
82 |
} |
83 |
} |
84 |
} catch (CoreException e) { |
85 |
Activator.logError("Cannot initialize proxy provider", e); //$NON-NLS-1$ |
86 |
} |
87 |
} |
88 |
} |
89 |
} |
90 |
|
91 |
AbstractProxyProvider getProviderByName(String name) { |
92 |
AbstractProxyProvider provider = (AbstractProxyProvider) providers.get(name); |
93 |
if (provider == null) { |
94 |
throw new IllegalArgumentException("Provider not supported"); //$NON-NLS-1$ |
95 |
} |
96 |
return provider; |
97 |
} |
98 |
|
99 |
String getCustomProxyProvider() { |
100 |
String provider = preferenceManager.getString(PreferenceManager.ROOT, PREF_CUSTOM_PROVIDER); |
101 |
if (provider != null && providers.containsKey(provider)) { |
102 |
return provider; |
103 |
} |
104 |
if (hasSystemProxies()) { |
105 |
return "Native"; //$NON-NLS-1$ |
106 |
} |
107 |
return null; |
108 |
} |
71 |
|
109 |
|
72 |
/** |
110 |
/** |
73 |
* Return the proxy manager. |
111 |
* Return the proxy manager. |
Lines 123-136
Link Here
|
123 |
System.arraycopy(nonProxiedHosts, 0, result, 0, nonProxiedHosts.length ); |
161 |
System.arraycopy(nonProxiedHosts, 0, result, 0, nonProxiedHosts.length ); |
124 |
return result; |
162 |
return result; |
125 |
} |
163 |
} |
126 |
|
164 |
|
127 |
public String[] getNativeNonProxiedHosts() { |
|
|
128 |
if (hasSystemProxies()) { |
129 |
return nativeProxyProvider.getNonProxiedHosts(); |
130 |
} |
131 |
return new String[0]; |
132 |
} |
133 |
|
134 |
/* (non-Javadoc) |
165 |
/* (non-Javadoc) |
135 |
* @see org.eclipse.core.net.IProxyManager#setNonProxiedHosts(java.lang.String[]) |
166 |
* @see org.eclipse.core.net.IProxyManager#setNonProxiedHosts(java.lang.String[]) |
136 |
*/ |
167 |
*/ |
Lines 168-198
Link Here
|
168 |
ProxyType type = proxies[i]; |
199 |
ProxyType type = proxies[i]; |
169 |
result[i] = type.getProxyData(ProxyType.VERIFY_EQUAL); |
200 |
result[i] = type.getProxyData(ProxyType.VERIFY_EQUAL); |
170 |
} |
201 |
} |
171 |
return resolveType(result); |
202 |
return result; |
172 |
} |
|
|
173 |
|
174 |
public IProxyData[] getNativeProxyData() { |
175 |
if (hasSystemProxies()) { |
176 |
return resolveType(nativeProxyProvider.getProxyData()); |
177 |
} |
178 |
return new IProxyData[0]; |
179 |
} |
203 |
} |
180 |
|
204 |
|
181 |
public void setProxyData(IProxyData[] proxies) { |
205 |
public void setProxyData(IProxyData[] proxies) { |
182 |
checkMigrated(); |
206 |
checkMigrated(); |
183 |
doSetProxyData(proxies); |
|
|
184 |
} |
185 |
|
186 |
private void doSetProxyData(IProxyData[] proxyDatas) { |
187 |
IProxyData[] oldData = getProxyData(); |
207 |
IProxyData[] oldData = getProxyData(); |
188 |
String[] hosts = getNonProxiedHosts(); |
208 |
String[] hosts = getNonProxiedHosts(); |
189 |
IProxyData[] changedProxies = internalSetProxyData(proxyDatas); |
209 |
IProxyData[] changedProxies = internalSetProxyData(proxies); |
190 |
if (changedProxies.length > 0) { |
210 |
if (changedProxies.length > 0) { |
191 |
IProxyChangeEvent event = new ProxyChangeEvent(IProxyChangeEvent.PROXY_SERVICE_ENABLEMENT_CHANGE, hosts, hosts, oldData, changedProxies); |
211 |
IProxyChangeEvent event = new ProxyChangeEvent(IProxyChangeEvent.PROXY_SERVICE_ENABLEMENT_CHANGE, hosts, hosts, oldData, changedProxies); |
192 |
fireChange(event); |
212 |
fireChange(event); |
193 |
} |
213 |
} |
194 |
} |
214 |
} |
195 |
|
215 |
|
196 |
private IProxyData[] internalSetProxyData(IProxyData[] proxyDatas) { |
216 |
private IProxyData[] internalSetProxyData(IProxyData[] proxyDatas) { |
197 |
List result = new ArrayList(); |
217 |
List result = new ArrayList(); |
198 |
for (int i = 0; i < proxyDatas.length; i++) { |
218 |
for (int i = 0; i < proxyDatas.length; i++) { |
Lines 266-271
Link Here
|
266 |
} |
286 |
} |
267 |
|
287 |
|
268 |
public void initialize() { |
288 |
public void initialize() { |
|
|
289 |
initializeProxyProviders(); |
269 |
checkMigrated(); |
290 |
checkMigrated(); |
270 |
preferenceManager.addPreferenceChangeListener(PreferenceManager.ROOT, this); |
291 |
preferenceManager.addPreferenceChangeListener(PreferenceManager.ROOT, this); |
271 |
// Now initialize each proxy type |
292 |
// Now initialize each proxy type |
Lines 278-284
Link Here
|
278 |
|
299 |
|
279 |
public IProxyData getProxyData(String type) { |
300 |
public IProxyData getProxyData(String type) { |
280 |
checkMigrated(); |
301 |
checkMigrated(); |
281 |
return resolveType(internalGetProxyData(type, ProxyType.VERIFY_EQUAL)); |
302 |
return internalGetProxyData(type, ProxyType.VERIFY_EQUAL); |
282 |
} |
303 |
} |
283 |
|
304 |
|
284 |
private IProxyData internalGetProxyData(String type, int verifySystemProperties) { |
305 |
private IProxyData internalGetProxyData(String type, int verifySystemProperties) { |
Lines 293-320
Link Here
|
293 |
|
314 |
|
294 |
public IProxyData[] getProxyDataForHost(String host) { |
315 |
public IProxyData[] getProxyDataForHost(String host) { |
295 |
checkMigrated(); |
316 |
checkMigrated(); |
296 |
if (!internalIsProxiesEnabled()) { |
|
|
297 |
return new IProxyData[0]; |
298 |
} |
299 |
URI uri = tryGetURI(host); |
317 |
URI uri = tryGetURI(host); |
300 |
if (uri == null) { |
318 |
return select(uri); |
301 |
return new IProxyData[0]; |
|
|
302 |
} |
303 |
if (hasSystemProxies() && isSystemProxiesEnabled()) { |
304 |
return resolveType(nativeProxyProvider.select(uri)); |
305 |
} |
306 |
|
307 |
if (isHostFiltered(uri)) |
308 |
return new IProxyData[0]; |
309 |
IProxyData[] data = getProxyData(); |
310 |
List result = new ArrayList(); |
311 |
for (int i = 0; i < data.length; i++) { |
312 |
IProxyData proxyData = data[i]; |
313 |
if (proxyData.getHost() != null) |
314 |
result.add(proxyData); |
315 |
} |
316 |
IProxyData ret[] = (IProxyData[]) result.toArray(new IProxyData[result.size()]); |
317 |
return resolveType(ret); |
318 |
} |
319 |
} |
319 |
|
320 |
|
320 |
public static URI tryGetURI(String host) { |
321 |
public static URI tryGetURI(String host) { |
Lines 329-374
Link Here
|
329 |
} |
330 |
} |
330 |
} |
331 |
} |
331 |
|
332 |
|
332 |
private boolean isHostFiltered(URI uri) { |
|
|
333 |
String[] filters = getNonProxiedHosts(); |
334 |
for (int i = 0; i < filters.length; i++) { |
335 |
String filter = filters[i]; |
336 |
if (matchesFilter(uri.getHost(), filter)) |
337 |
return true; |
338 |
} |
339 |
return false; |
340 |
} |
341 |
|
342 |
private boolean matchesFilter(String host, String filter) { |
343 |
StringMatcher matcher = new StringMatcher(filter, true, false); |
344 |
return matcher.match(host); |
345 |
} |
346 |
|
347 |
/* (non-Javadoc) |
333 |
/* (non-Javadoc) |
348 |
* @see org.eclipse.net.core.IProxyManager#getProxyDataForHost(java.lang.String, java.lang.String) |
334 |
* @see org.eclipse.net.core.IProxyManager#getProxyDataForHost(java.lang.String, java.lang.String) |
349 |
*/ |
335 |
*/ |
350 |
public IProxyData getProxyDataForHost(String host, String type) { |
336 |
public IProxyData getProxyDataForHost(String host, String type) { |
351 |
checkMigrated(); |
337 |
checkMigrated(); |
352 |
if (!internalIsProxiesEnabled()) { |
338 |
try { |
|
|
339 |
URI uri = new URI(type, "//" + host, null); //$NON-NLS-1$ |
340 |
IProxyData[] proxyDatas = select(uri); |
341 |
return proxyDatas.length > 0 ? proxyDatas[0] : null; |
342 |
} catch (URISyntaxException e) { |
353 |
return null; |
343 |
return null; |
354 |
} |
344 |
} |
355 |
if (hasSystemProxies() && isSystemProxiesEnabled()) |
|
|
356 |
try { |
357 |
URI uri = new URI(type, "//" + host, null); //$NON-NLS-1$ |
358 |
IProxyData[] proxyDatas = nativeProxyProvider.select(uri); |
359 |
return proxyDatas.length > 0 ? resolveType(proxyDatas[0]) : null; |
360 |
} catch (URISyntaxException e) { |
361 |
return null; |
362 |
} |
363 |
|
364 |
IProxyData[] data = getProxyDataForHost(host); |
365 |
for (int i = 0; i < data.length; i++) { |
366 |
IProxyData proxyData = data[i]; |
367 |
if (proxyData.getType().equalsIgnoreCase(type) |
368 |
&& proxyData.getHost() != null) |
369 |
return resolveType(proxyData); |
370 |
} |
371 |
return null; |
372 |
} |
345 |
} |
373 |
|
346 |
|
374 |
private void registerAuthenticator() { |
347 |
private void registerAuthenticator() { |
Lines 411-417
Link Here
|
411 |
} |
384 |
} |
412 |
|
385 |
|
413 |
public void preferenceChange(PreferenceChangeEvent event) { |
386 |
public void preferenceChange(PreferenceChangeEvent event) { |
414 |
if (event.getKey().equals(PREF_ENABLED) || event.getKey().equals(PREF_OS)) { |
387 |
if (event.getKey().equals(PREF_ENABLED) || event.getKey().equals(PREF_OS) || event.getKey().equals(PREF_CUSTOM_PROVIDER)) { |
415 |
checkMigrated(); |
388 |
checkMigrated(); |
416 |
internalSetEnabled(preferenceManager.getBoolean(PreferenceManager.ROOT, PREF_ENABLED), |
389 |
internalSetEnabled(preferenceManager.getBoolean(PreferenceManager.ROOT, PREF_ENABLED), |
417 |
preferenceManager.getBoolean(PreferenceManager.ROOT, PREF_OS)); |
390 |
preferenceManager.getBoolean(PreferenceManager.ROOT, PREF_OS)); |
Lines 419-425
Link Here
|
419 |
} |
392 |
} |
420 |
|
393 |
|
421 |
public boolean hasSystemProxies() { |
394 |
public boolean hasSystemProxies() { |
422 |
return nativeProxyProvider != null; |
395 |
return providers.containsKey("Native") ? true : false; //$NON-NLS-1$ |
423 |
} |
396 |
} |
424 |
|
397 |
|
425 |
public boolean isSystemProxiesEnabled() { |
398 |
public boolean isSystemProxiesEnabled() { |
Lines 438-473
Link Here
|
438 |
} |
411 |
} |
439 |
|
412 |
|
440 |
public IProxyData[] select(URI uri) { |
413 |
public IProxyData[] select(URI uri) { |
441 |
IProxyData data = getProxyDataForHost(uri.getHost(), uri.getScheme()); |
414 |
if (uri == null) { |
442 |
if (data != null) { |
415 |
throw new IllegalArgumentException("Illegal argument value: " + uri); //$NON-NLS-1$ |
443 |
return resolveType(new IProxyData[] { data }); |
|
|
444 |
} |
416 |
} |
445 |
return new IProxyData[0]; |
417 |
if ("file".equals(uri.getScheme())) { //$NON-NLS-1$ |
446 |
} |
418 |
return new IProxyData[0]; |
447 |
|
|
|
448 |
public IProxyData resolveType(IProxyData data) { |
449 |
if (data == null) { |
450 |
return null; |
451 |
} |
419 |
} |
452 |
ProxyData d = (ProxyData) data; |
420 |
if (uri.getHost() == null) { |
453 |
if (d.getType().equalsIgnoreCase(IProxyData.HTTP_PROXY_TYPE)) { |
421 |
uri = tryGetURI(uri.toString()); |
454 |
d.setType(IProxyData.HTTP_PROXY_TYPE); |
|
|
455 |
} else if (d.getType().equalsIgnoreCase(IProxyData.HTTPS_PROXY_TYPE)) { |
456 |
d.setType(IProxyData.HTTPS_PROXY_TYPE); |
457 |
} else if (d.getType().equalsIgnoreCase(IProxyData.SOCKS_PROXY_TYPE)) { |
458 |
d.setType(IProxyData.SOCKS_PROXY_TYPE); |
459 |
} |
422 |
} |
460 |
return d; |
423 |
return internalIsProxiesEnabled() ? getProviderByName(getProxyProvider()).select(uri) : new IProxyData[0]; |
461 |
} |
424 |
} |
462 |
|
425 |
|
463 |
public IProxyData[] resolveType(IProxyData[] data) { |
426 |
public void setProxyProvider(String name) { |
464 |
if (data == null) { |
427 |
preferenceManager.putString(PreferenceManager.ROOT, PREF_CUSTOM_PROVIDER, getProviderByName(name).getName()); |
465 |
return null; |
428 |
} |
466 |
} |
429 |
|
467 |
for (int i = 0; i < data.length; i++) { |
430 |
public String getProxyProvider() { |
468 |
resolveType(data[i]); |
431 |
return ProxySelector.getDefaultProvider(); |
469 |
} |
432 |
} |
470 |
return data; |
433 |
|
|
|
434 |
public String[] getAvailableProxyProviders() { |
435 |
return (String[]) providers.keySet().toArray(new String[0]); |
471 |
} |
436 |
} |
472 |
|
437 |
|
473 |
} |
438 |
} |