1 /*******************************************************************************
2 * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * See LICENSE for the full license text, also available.
7 *******************************************************************************/
8 package org
.spearce
.egit
.ui
;
10 import java
.io
.IOException
;
11 import java
.net
.InetAddress
;
12 import java
.net
.InetSocketAddress
;
13 import java
.net
.Proxy
;
14 import java
.net
.ProxySelector
;
15 import java
.net
.SocketAddress
;
17 import java
.net
.UnknownHostException
;
18 import java
.util
.ArrayList
;
19 import java
.util
.List
;
21 import org
.eclipse
.core
.net
.proxy
.IProxyData
;
22 import org
.eclipse
.core
.net
.proxy
.IProxyService
;
24 class EclipseProxySelector
extends ProxySelector
{
25 private final IProxyService service
;
27 EclipseProxySelector(final IProxyService s
) {
32 public List
<Proxy
> select(final URI uri
) {
33 final ArrayList
<Proxy
> r
= new ArrayList
<Proxy
>();
34 final String host
= uri
.getHost();
36 String type
= IProxyData
.SOCKS_PROXY_TYPE
;
37 if ("http".equals(uri
.getScheme()))
38 type
= IProxyData
.HTTP_PROXY_TYPE
;
39 else if ("ftp".equals(uri
.getScheme()))
40 type
= IProxyData
.HTTP_PROXY_TYPE
;
41 else if ("https".equals(uri
.getScheme()))
42 type
= IProxyData
.HTTPS_PROXY_TYPE
;
44 final IProxyData data
= service
.getProxyDataForHost(host
, type
);
46 if (IProxyData
.HTTP_PROXY_TYPE
.equals(data
.getType()))
47 addProxy(r
, Proxy
.Type
.HTTP
, data
);
48 else if (IProxyData
.HTTPS_PROXY_TYPE
.equals(data
.getType()))
49 addProxy(r
, Proxy
.Type
.HTTP
, data
);
50 else if (IProxyData
.SOCKS_PROXY_TYPE
.equals(data
.getType()))
51 addProxy(r
, Proxy
.Type
.SOCKS
, data
);
54 r
.add(Proxy
.NO_PROXY
);
58 private void addProxy(final ArrayList
<Proxy
> r
, final Proxy
.Type type
,
61 r
.add(new Proxy(type
, new InetSocketAddress(InetAddress
.getByName(d
62 .getHost()), d
.getPort())));
63 } catch (UnknownHostException uhe
) {
69 public void connectFailed(URI uri
, SocketAddress sa
, IOException ioe
) {
70 // Don't tell Eclipse.