Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 91958 Details for
Bug 180921
[Proxy] Use system values for proxy settings
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Linux implementation + API changes
180921_20080307.patch (text/plain), 37.71 KB, created by
Francis Upton IV
on 2008-03-08 03:07:32 EST
(
hide
)
Description:
Linux implementation + API changes
Filename:
MIME Type:
Creator:
Francis Upton IV
Created:
2008-03-08 03:07:32 EST
Size:
37.71 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.core.tests.net >Index: src/org/eclipse/core/tests/net/NetTest.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.core.tests.net/src/org/eclipse/core/tests/net/NetTest.java,v >retrieving revision 1.3 >diff -u -r1.3 NetTest.java >--- src/org/eclipse/core/tests/net/NetTest.java 11 Apr 2007 13:25:49 -0000 1.3 >+++ src/org/eclipse/core/tests/net/NetTest.java 8 Mar 2008 07:58:27 -0000 >@@ -1,26 +1,27 @@ > /******************************************************************************* >- * Copyright (c) 2007 IBM Corporation and others. >- * All rights reserved. This program and the accompanying materials >- * are made available under the terms of the Eclipse Public License v1.0 >- * which accompanies this distribution, and is available at >- * http://www.eclipse.org/legal/epl-v10.html >- * >- * Contributors: >- * IBM Corporation - initial API and implementation >- *******************************************************************************/ >+ * Copyright (c) 2007 IBM Corporation and others. All rights reserved. This >+ * program and the accompanying materials are made available under the terms of >+ * the Eclipse Public License v1.0 which accompanies this distribution, and is >+ * available at http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: IBM Corporation - initial API and implementation >+ ******************************************************************************/ > package org.eclipse.core.tests.net; > >+import java.net.URI; > import java.util.*; > > import junit.framework.*; > > import org.eclipse.core.internal.net.ProxyType; >+import org.eclipse.core.internal.net.UnixProxyProvider; >+import org.eclipse.core.net.proxy.AbstractProxyProvider; > import org.eclipse.core.net.proxy.IProxyData; > import org.eclipse.core.net.proxy.IProxyService; > import org.eclipse.core.runtime.CoreException; > > public class NetTest extends TestCase { >- >+ > private boolean isSetEnabled; > private Map dataCache = new HashMap(); > >@@ -31,7 +32,7 @@ > public NetTest(String name) { > super(name); > } >- >+ > public static Test suite() { > return new TestSuite(NetTest.class); > } >@@ -43,7 +44,7 @@ > dataCache.clear(); > ProxyType.socksSystemPropertySetting = ProxyType.ALWAYS_SET; > } >- >+ > protected void tearDown() throws Exception { > super.tearDown(); > setProxiesEnabled(false); >@@ -54,22 +55,24 @@ > } > getProxyManager().setProxyData(data); > } >- >+ > private IProxyService getProxyManager() { > return Activator.getDefault().getProxyService(); > } > > private void assertProxyDataEqual(IProxyData expectedData) { >- IProxyData data = getProxyManager().getProxyData(expectedData.getType()); >+ IProxyData data = getProxyManager() >+ .getProxyData(expectedData.getType()); > assertEquals(expectedData.getType(), data.getType()); > assertEquals(expectedData.getHost(), data.getHost()); > assertEquals(expectedData.getPort(), data.getPort()); > assertEquals(expectedData.getUserId(), data.getUserId()); > assertEquals(expectedData.getPassword(), data.getPassword()); >- assertEquals(expectedData.isRequiresAuthentication(), data.isRequiresAuthentication()); >+ assertEquals(expectedData.isRequiresAuthentication(), data >+ .isRequiresAuthentication()); > assertSystemPropertiesMatch(data); > } >- >+ > public void assertSystemPropertiesMatch(IProxyData proxyData) { > if (proxyData.getType().equals(IProxyData.HTTP_PROXY_TYPE)) { > assertHttpSystemProperties(proxyData, "http"); >@@ -80,25 +83,32 @@ > } > } > >- private void assertHttpSystemProperties(IProxyData proxyData, String keyPrefix) { >+ private void assertHttpSystemProperties(IProxyData proxyData, >+ String keyPrefix) { > Properties sysProps = System.getProperties(); >- >+ > if (this.getProxyManager().isProxiesEnabled()) { > boolean isSet = Boolean.getBoolean(keyPrefix + ".proxySet"); > assertEquals(proxyData.getHost() != null, isSet); //$NON-NLS-1$ >- assertEquals(proxyData.getHost(), sysProps.get(keyPrefix + ".proxyHost")); //$NON-NLS-1$ >- String portString = (String)sysProps.get(keyPrefix + ".proxyPort"); //$NON-NLS-1$ >+ assertEquals(proxyData.getHost(), sysProps.get(keyPrefix >+ + ".proxyHost")); //$NON-NLS-1$ >+ String portString = (String) sysProps.get(keyPrefix + ".proxyPort"); //$NON-NLS-1$ > int port = -1; > if (portString != null) > port = Integer.parseInt(portString); > assertEquals(proxyData.getPort(), port); > if (isSet) >- assertEquals(ProxyType.convertHostsToPropertyString(this.getProxyManager().getNonProxiedHosts()), sysProps.get(keyPrefix + ".nonProxyHosts")); //$NON-NLS-1$ >- else >+ assertEquals(ProxyType.convertHostsToPropertyString(this >+ .getProxyManager().getNonProxiedHosts()), sysProps >+ .get(keyPrefix + ".nonProxyHosts")); //$NON-NLS-1$ >+ else > assertNull(sysProps.get(keyPrefix + ".nonProxyHosts")); >- assertEquals(proxyData.getUserId(), sysProps.get(keyPrefix + ".proxyUser")); //$NON-NLS-1$ >- assertEquals(proxyData.getUserId(), sysProps.get(keyPrefix + ".proxyUserName")); //$NON-NLS-1$ >- assertEquals(proxyData.getPassword(), sysProps.get(keyPrefix + ".proxyPassword")); //$NON-NLS-1$ >+ assertEquals(proxyData.getUserId(), sysProps.get(keyPrefix >+ + ".proxyUser")); //$NON-NLS-1$ >+ assertEquals(proxyData.getUserId(), sysProps.get(keyPrefix >+ + ".proxyUserName")); //$NON-NLS-1$ >+ assertEquals(proxyData.getPassword(), sysProps.get(keyPrefix >+ + ".proxyPassword")); //$NON-NLS-1$ > } else { > assertNull(sysProps.get(keyPrefix + ".proxySet")); > assertNull(sysProps.get(keyPrefix + ".proxyHost")); >@@ -114,7 +124,7 @@ > Properties sysProps = System.getProperties(); > if (this.getProxyManager().isProxiesEnabled()) { > assertEquals(proxyData.getHost(), sysProps.get("socksProxyHost")); //$NON-NLS-1$ >- String portString = (String)sysProps.get("socksProxyPort"); //$NON-NLS-1$ >+ String portString = (String) sysProps.get("socksProxyPort"); //$NON-NLS-1$ > int port = -1; > if (portString != null) > port = Integer.parseInt(portString); >@@ -124,16 +134,16 @@ > assertNull(sysProps.get("socksProxyPort")); > } > } >- >+ > private IProxyData getProxyData(String type) { >- IProxyData data = (IProxyData)dataCache.get(type); >+ IProxyData data = (IProxyData) dataCache.get(type); > if (data == null) { > data = this.getProxyManager().getProxyData(type); > assertProxyDataEqual(data); > } > return data; > } >- >+ > private void setProxyData(IProxyData data) throws CoreException { > if (isSetEnabled) { > this.getProxyManager().setProxyData(new IProxyData[] { data }); >@@ -142,12 +152,12 @@ > dataCache.put(data.getType(), data); > } > } >- >+ > private void disableProxy(IProxyData proxyData) throws CoreException { > proxyData.disable(); > setProxyData(proxyData); > } >- >+ > private void changeProxyData(IProxyData oldData, IProxyData data) > throws CoreException { > // Make sure that setting the host doesn't change the persisted settings >@@ -156,7 +166,7 @@ > // Now set it in the manager and assert that it is set > setProxyData(data); > } >- >+ > private void setHost(String type) throws CoreException { > String host = "www.eclipse.org"; > setHost(type, host); >@@ -168,39 +178,41 @@ > data.setHost(host); > changeProxyData(oldData, data); > } >- >+ > private void setPort(String type, int port) throws CoreException { > IProxyData data = getProxyData(type); > IProxyData oldData = getProxyData(type); > data.setPort(port); > changeProxyData(oldData, data); > } >- >- private void setUser(String type, String user, String password) throws CoreException { >+ >+ private void setUser(String type, String user, String password) >+ throws CoreException { > IProxyData data = getProxyData(type); > IProxyData oldData = getProxyData(type); > data.setUserid(user); > data.setPassword(password); > changeProxyData(oldData, data); > } >- >+ > private void setDataTest(String type) throws CoreException { > setHost(type, "www.eclipse.org"); > setPort(type, 1024); > setUser(type, "me", "passw0rd"); > } >- >+ > private void setProxiesEnabled(boolean enabled) { > this.getProxyManager().setProxiesEnabled(enabled); > assertEquals(enabled, this.getProxyManager().isProxiesEnabled()); > } >- >+ > private void delaySettingData() { > isSetEnabled = false; > } >- >+ > private void performSettingData() throws CoreException { >- IProxyData[] data = (IProxyData[]) dataCache.values().toArray(new IProxyData[dataCache.size()]); >+ IProxyData[] data = (IProxyData[]) dataCache.values().toArray( >+ new IProxyData[dataCache.size()]); > this.getProxyManager().setProxyData(data); > for (int i = 0; i < data.length; i++) { > IProxyData proxyData = data[i]; >@@ -209,7 +221,7 @@ > isSetEnabled = true; > dataCache.clear(); > } >- >+ > public void testIndividualSetAndClear() throws CoreException { > setDataTest(IProxyData.HTTP_PROXY_TYPE); > setDataTest(IProxyData.HTTPS_PROXY_TYPE); >@@ -220,14 +232,14 @@ > disableProxy(proxyData); > } > } >- >+ > public void testAllSetAndClear() throws CoreException { > delaySettingData(); > setDataTest(IProxyData.HTTP_PROXY_TYPE); > setDataTest(IProxyData.HTTPS_PROXY_TYPE); > setDataTest(IProxyData.SOCKS_PROXY_TYPE); > performSettingData(); >- >+ > delaySettingData(); > IProxyData[] data = this.getProxyManager().getProxyData(); > for (int i = 0; i < data.length; i++) { >@@ -250,52 +262,153 @@ > setProxiesEnabled(false); > assertProxyDataEqual(data); > } >- >+ > public void testSimpleHost() throws CoreException { > setDataTest(IProxyData.HTTP_PROXY_TYPE); > setDataTest(IProxyData.HTTPS_PROXY_TYPE); > setDataTest(IProxyData.SOCKS_PROXY_TYPE); >- >- IProxyData[] allData = this.getProxyManager().getProxyDataForHost("www.randomhot.com"); >+ >+ IProxyData[] allData = this.getProxyManager().getProxyDataForHost( >+ "www.randomhot.com"); > assertEquals(3, allData.length); >- >- IProxyData data = this.getProxyManager().getProxyDataForHost("www.randomhot.com", IProxyData.HTTP_PROXY_TYPE); >+ >+ IProxyData data = this.getProxyManager().getProxyDataForHost( >+ "www.randomhot.com", IProxyData.HTTP_PROXY_TYPE); > assertNotNull(data); >- >+ > allData = this.getProxyManager().getProxyDataForHost("localhost"); > assertEquals(0, allData.length); >- >- data = this.getProxyManager().getProxyDataForHost("localhost", IProxyData.HTTP_PROXY_TYPE); >+ >+ data = this.getProxyManager().getProxyDataForHost("localhost", >+ IProxyData.HTTP_PROXY_TYPE); > assertNull(data); > } >- >+ > public void testHostPattern() throws CoreException { > setDataTest(IProxyData.HTTP_PROXY_TYPE); > setDataTest(IProxyData.HTTPS_PROXY_TYPE); > setDataTest(IProxyData.SOCKS_PROXY_TYPE); >- >+ > String[] oldHosts = this.getProxyManager().getNonProxiedHosts(); >- this.getProxyManager().setNonProxiedHosts(new String[] { "*ignore.com" }); >- >- IProxyData[] allData = this.getProxyManager().getProxyDataForHost("www.randomhot.com"); >+ this.getProxyManager().setNonProxiedHosts( >+ new String[] { "*ignore.com" }); >+ >+ IProxyData[] allData = this.getProxyManager().getProxyDataForHost( >+ "www.randomhot.com"); > assertEquals(3, allData.length); >- >- IProxyData data = this.getProxyManager().getProxyDataForHost("www.randomhot.com", IProxyData.HTTP_PROXY_TYPE); >+ >+ IProxyData data = this.getProxyManager().getProxyDataForHost( >+ "www.randomhot.com", IProxyData.HTTP_PROXY_TYPE); > assertNotNull(data); >- >+ > allData = this.getProxyManager().getProxyDataForHost("www.ignore.com"); > assertEquals(0, allData.length); >- >- data = this.getProxyManager().getProxyDataForHost("www.ignore.com", IProxyData.HTTP_PROXY_TYPE); >+ >+ data = this.getProxyManager().getProxyDataForHost("www.ignore.com", >+ IProxyData.HTTP_PROXY_TYPE); > assertNull(data); >- >+ > allData = this.getProxyManager().getProxyDataForHost("ignore.com"); > assertEquals(0, allData.length); >- >- data = this.getProxyManager().getProxyDataForHost("ignore.com", IProxyData.HTTP_PROXY_TYPE); >+ >+ data = this.getProxyManager().getProxyDataForHost("ignore.com", >+ IProxyData.HTTP_PROXY_TYPE); > assertNull(data); >- >+ > this.getProxyManager().setNonProxiedHosts(oldHosts); > } > >+ // This test case has to be manually setup and run because it depends on >+ // whether the proxy is set in the native environment. It is here as >+ // a convenience to test the native support. >+ public void testNativeLinux() throws Exception { >+ >+ // Leave this test off for the automatic test runs so we don't >+ // get confused by the settings that happen to be on the test machine >+ if (true) >+ return; >+ >+ AbstractProxyProvider pp = new UnixProxyProvider(); >+ >+ IProxyData[] pd; >+ >+ // Test the following cases >+ // 1) No proxy set anywhere >+ // 2) http_proxy environment variable (use proxyIsSet) >+ // 3) gconf-edit proxy (use proxyIsSet and proxyAuthIsSet) >+ // 4) KDE proxy (use proxyIsSet and proxyAuthIsSet) >+ >+ // Toggle this if you have the proxy set up in the native environment >+ boolean proxyIsSet = true; >+ >+ // Toggle this if you have the proxy authentication information setup >+ boolean proxyAuthIsSet = true; >+ >+ String proxyHost = null; >+ String proxyUser = null; >+ String proxyPassword = null; >+ boolean proxyReqAuth = false; >+ int proxyPort = 0; >+ >+ if (proxyIsSet) { >+ proxyHost = "berlioz"; >+ proxyPort = 3128; >+ if (proxyAuthIsSet) { >+ proxyUser = "user"; >+ proxyPassword = "password"; >+ proxyReqAuth = true; >+ } >+ } >+ >+ // Test HTTP >+ pd = pp.select(new URI("http://bbc.com")); >+ if (proxyIsSet) { >+ assertEquals(1, pd.length); >+ assertEquals(proxyHost, pd[0].getHost()); >+ assertEquals(proxyPort, pd[0].getPort()); >+ if (proxyAuthIsSet) { >+ assertEquals(proxyUser, pd[0].getUserId()); >+ assertEquals(proxyPassword, pd[0].getPassword()); >+ assertEquals(proxyReqAuth, pd[0].isRequiresAuthentication()); >+ } >+ >+ } else { >+ assertEquals(0, pd.length); >+ } >+ >+ // Test HTTPS >+ pd = pp.select(new URI("https://bbc.com")); >+ if (proxyIsSet) { >+ assertEquals(1, pd.length); >+ assertEquals("https_" + proxyHost, pd[0].getHost()); >+ assertEquals(1 + proxyPort, pd[0].getPort()); >+ } else { >+ assertEquals(0, pd.length); >+ } >+ >+ // Test SOCKS >+ pd = pp.select(new URI("SOCKS://bbc.com")); >+ if (proxyIsSet) { >+ assertEquals(1, pd.length); >+ assertEquals("socks_" + proxyHost, pd[0].getHost()); >+ assertEquals(2 + proxyPort, pd[0].getPort()); >+ } else { >+ assertEquals(0, pd.length); >+ } >+ >+ // Test FTP >+ pd = pp.select(new URI("FTP://bbc.com")); >+ if (proxyIsSet) { >+ assertEquals(1, pd.length); >+ assertEquals("ftp_" + proxyHost, pd[0].getHost()); >+ assertEquals(3 + proxyPort, pd[0].getPort()); >+ } else { >+ assertEquals(0, pd.length); >+ } >+ >+ // Assume that localhost is a non-proxy host >+ pd = pp.select(new URI("http://localhost")); >+ assertEquals(0, pd.length); >+ } >+ > } >#P org.eclipse.core.net >Index: src/org/eclipse/core/internal/net/ProxyData.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.core.net/src/org/eclipse/core/internal/net/ProxyData.java,v >retrieving revision 1.2 >diff -u -r1.2 ProxyData.java >--- src/org/eclipse/core/internal/net/ProxyData.java 9 Apr 2007 19:21:02 -0000 1.2 >+++ src/org/eclipse/core/internal/net/ProxyData.java 8 Mar 2008 07:58:28 -0000 >@@ -21,7 +21,8 @@ > private String password; > private boolean requiresAuthentication; > >- public ProxyData(String type, String host, int port, boolean requiresAuthentication) { >+ public ProxyData(String type, String host, int port, >+ boolean requiresAuthentication) { > this.type = type; > this.host = host; > this.port = port; >@@ -71,6 +72,10 @@ > requiresAuthentication = userid != null; > } > >+ public void setRequiresAuthentication(boolean req) { >+ requiresAuthentication = req; >+ } >+ > public boolean isRequiresAuthentication() { > return requiresAuthentication; > } >@@ -83,4 +88,19 @@ > requiresAuthentication = false; > } > >+ public String toString() { >+ StringBuffer stringBuffer = new StringBuffer(); >+ stringBuffer.append("host: "); //$NON-NLS-1$ >+ stringBuffer.append(host); >+ stringBuffer.append(" port: "); //$NON-NLS-1$ >+ stringBuffer.append(port); >+ stringBuffer.append(" user: "); //$NON-NLS-1$ >+ stringBuffer.append(user); >+ stringBuffer.append(" password: "); //$NON-NLS-1$ >+ stringBuffer.append(password); >+ stringBuffer.append(" reqAuth: "); //$NON-NLS-1$ >+ stringBuffer.append(requiresAuthentication); >+ return stringBuffer.toString(); >+ } >+ > } >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.core.net/plugin.xml,v >retrieving revision 1.2 >diff -u -r1.2 plugin.xml >--- plugin.xml 12 Apr 2007 20:55:53 -0000 1.2 >+++ plugin.xml 8 Mar 2008 07:58:28 -0000 >@@ -2,6 +2,7 @@ > <?eclipse version="3.2"?> > <plugin> > <extension-point id="authenticator" name="Authenticator" schema="schema/authenticator.exsd"/> >+ <extension-point id="proxyProviders" name="Proxy providers" schema="schema/proxyProviders.exsd"/> > <extension > point="org.eclipse.core.runtime.preferences"> > <initializer >Index: src/org/eclipse/core/internal/net/WindowsProxyProvider.java >=================================================================== >RCS file: src/org/eclipse/core/internal/net/WindowsProxyProvider.java >diff -N src/org/eclipse/core/internal/net/WindowsProxyProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/core/internal/net/WindowsProxyProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,15 @@ >+package org.eclipse.core.internal.net; >+ >+import java.net.URI; >+ >+import org.eclipse.core.net.proxy.AbstractProxyProvider; >+import org.eclipse.core.net.proxy.IProxyData; >+ >+public class WindowsProxyProvider extends AbstractProxyProvider { >+ >+ protected IProxyData[] getProxyData(URI uri) { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+} >Index: natives/unix/README.txt >=================================================================== >RCS file: natives/unix/README.txt >diff -N natives/unix/README.txt >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ natives/unix/README.txt 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,12 @@ >+The source for getting the native proxy info is in the top level unix directory. If >+there are more specific compile options, makefiles, etc, then they should be moved >+to subdirectories, like in org.eclipse.core.filesystem. >+ >+The Debug directory actually has the make file; this is the makefile as generated by the CDT. >+ >+To build this, go into Debug and type "make", the library will be built in that same >+directory. Then you will need to copy the library to the correct org.eclipse.core.net.* >+fragment. >+ >+There is no automatic build process for building the native code, instead the binary >+shared libraries are checked in for each fragment, just like in org.eclipse.code.filesystem. >Index: schema/proxyProviders.exsd >=================================================================== >RCS file: schema/proxyProviders.exsd >diff -N schema/proxyProviders.exsd >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ schema/proxyProviders.exsd 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,104 @@ >+<?xml version='1.0' encoding='UTF-8'?> >+<!-- Schema file written by PDE --> >+<schema targetNamespace="org.eclipse.core.net" xmlns="http://www.w3.org/2001/XMLSchema"> >+<annotation> >+ <appinfo> >+ <meta.schema plugin="org.eclipse.core.net" id="proxyProviders" name="Proxy providers"/> >+ </appinfo> >+ <documentation> >+ [Enter description of this extension point.] >+ </documentation> >+ </annotation> >+ >+ <element name="extension"> >+ <complexType> >+ <sequence> >+ <element ref="refreshProvider"/> >+ </sequence> >+ <attribute name="point" type="string" use="required"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="id" type="string"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="name" type="string"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ <appinfo> >+ <meta.attribute translatable="true"/> >+ </appinfo> >+ </annotation> >+ </attribute> >+ </complexType> >+ </element> >+ >+ <element name="refreshProvider"> >+ <complexType> >+ <attribute name="name" type="string" use="required"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="class" type="string" use="required"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ <appinfo> >+ <meta.attribute kind="java" basedOn=":org.eclipse.core.net.proxy.IProxyProvider"/> >+ </appinfo> >+ </annotation> >+ </attribute> >+ </complexType> >+ </element> >+ >+ <annotation> >+ <appinfo> >+ <meta.section type="since"/> >+ </appinfo> >+ <documentation> >+ [Enter the first release in which this extension point appears.] >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appinfo> >+ <meta.section type="examples"/> >+ </appinfo> >+ <documentation> >+ [Enter extension point usage example here.] >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appinfo> >+ <meta.section type="apiinfo"/> >+ </appinfo> >+ <documentation> >+ [Enter API information here.] >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appinfo> >+ <meta.section type="implementation"/> >+ </appinfo> >+ <documentation> >+ [Enter information about supplied implementation of this extension point.] >+ </documentation> >+ </annotation> >+ >+ >+</schema> >Index: src/org/eclipse/core/net/proxy/AbstractProxyProvider.java >=================================================================== >RCS file: src/org/eclipse/core/net/proxy/AbstractProxyProvider.java >diff -N src/org/eclipse/core/net/proxy/AbstractProxyProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/core/net/proxy/AbstractProxyProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,68 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 Oakland Software Incorporated and others >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Oakland Software Incorporated - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.core.net.proxy; >+ >+import java.net.URI; >+ >+/** >+ * Returns eligible proxies based on the hosts configuration. >+ * >+ * Subclasses implement the native code required to get the proxy information. >+ * >+ * This intentionally has semantics similar to the Java ProxySelector class. The >+ * idea is that when we drop support for Java versions earlier than 1.5 we can >+ * easily re-implement this using the native Java support and remove the native >+ * code associated with this implementation. >+ * >+ * This is not intended to be subclassed by clients. This is not intended to be >+ * instantiated by clients. >+ * >+ * @since 3.4 >+ * >+ */ >+public abstract class AbstractProxyProvider { >+ >+ /** >+ * Return the IProxyData(s) that can be used with the given URI. >+ * >+ * This considers the native proxy settings on the host. It includes the >+ * consideration of hosts for which no proxying is desired. >+ * >+ * @param uri >+ * the URI to for with the proxy is generated >+ * @return an array of IProxyData which are the applicable proxies for the >+ * specified URI >+ * >+ * @since 3.4 >+ */ >+ public IProxyData[] select(URI uri) { >+ String[] nonProxyHosts = getNonProxiedHosts(); >+ String host = uri.getHost(); >+ >+ if (nonProxyHosts != null) { >+ for (int npIndex = 0; npIndex < nonProxyHosts.length; npIndex++) { >+ if (host.equals(nonProxyHosts[npIndex])) { >+ return new IProxyData[0]; >+ } >+ } >+ } >+ >+ return getProxyData(uri); >+ } >+ >+ protected abstract IProxyData[] getProxyData(URI uri); >+ >+ protected String[] getNonProxiedHosts() { >+ // Default implementation, subclasses may override >+ return new String[] {}; >+ } >+ >+} >Index: natives/unix/Debug/subdir.mk >=================================================================== >RCS file: natives/unix/Debug/subdir.mk >diff -N natives/unix/Debug/subdir.mk >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ natives/unix/Debug/subdir.mk 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,24 @@ >+################################################################################ >+# Automatically-generated file. Do not edit! >+################################################################################ >+ >+# Add inputs and outputs from these tool invocations to the build variables >+C_SRCS += \ >+../getsystemproxy.c >+ >+OBJS += \ >+./getsystemproxy.o >+ >+C_DEPS += \ >+./getsystemproxy.d >+ >+ >+# Each subdirectory must supply rules for building sources it contributes >+%.o: ../%.c >+ @echo 'Building file: $<' >+ @echo 'Invoking: GCC C Compiler' >+ gcc -I/usr/include/gconf/2 -I/usr/include/orbit-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include/ -O0 -fPIC -g3 -Wall -c -fmessage-length=0 -m32 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" >+ @echo 'Finished building: $<' >+ @echo ' ' >+ >+ >Index: src/org/eclipse/core/internal/net/UnixProxyProvider.java >=================================================================== >RCS file: src/org/eclipse/core/internal/net/UnixProxyProvider.java >diff -N src/org/eclipse/core/internal/net/UnixProxyProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/core/internal/net/UnixProxyProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,81 @@ >+package org.eclipse.core.internal.net; >+ >+import java.net.URI; >+import java.net.URISyntaxException; >+ >+import org.eclipse.core.net.proxy.AbstractProxyProvider; >+import org.eclipse.core.net.proxy.IProxyData; >+ >+public class UnixProxyProvider extends AbstractProxyProvider { >+ >+ static { >+ System.loadLibrary("proxysupport"); //$NON-NLS-1$ >+ } >+ >+ public UnixProxyProvider() { >+ // Default constructor >+ } >+ >+ public IProxyData[] getProxyData(URI uri) { >+ String protocol = uri.getScheme(); >+ >+ ProxyData pd = getSystemProxyInfo(protocol); >+ >+ if (pd != null) { >+ IProxyData[] pds = new IProxyData[1]; >+ pds[0] = pd; >+ return pds; >+ } >+ >+ return new IProxyData[0]; >+ } >+ >+ protected String[] getNonProxiedHosts() { >+ String[] npHosts = getGConfNonProxyHosts(); >+ if (npHosts != null && npHosts.length > 0) >+ return npHosts; >+ return getKdeNonProxyHosts(); >+ } >+ >+ // Returns null if something wrong or there is no proxy for the protocol >+ protected ProxyData getSystemProxyInfo(String protocol) { >+ ProxyData pd; >+ >+ // First try the environment variable which is a URL >+ String sysHttp = System.getenv(protocol.toLowerCase() + "_proxy"); //$NON-NLS-1$ >+ if (sysHttp != null) { >+ URI uri = null; >+ try { >+ uri = new URI(sysHttp); >+ } catch (URISyntaxException e) { >+ return null; >+ } >+ >+ pd = new ProxyData(protocol); >+ pd.setHost(uri.getHost()); >+ pd.setPort(uri.getPort()); >+ return pd; >+ } >+ >+ // Then ask Gnome >+ pd = getGConfProxyInfo(protocol); >+ if (pd != null) >+ return pd; >+ >+ // Then ask KDE >+ pd = getKdeProxyInfo(protocol); >+ if (pd != null) >+ return pd; >+ >+ return null; >+ } >+ >+ protected static native ProxyData getGConfProxyInfo(String protocol); >+ >+ protected static native String[] getGConfNonProxyHosts(); >+ >+ protected static native ProxyData getKdeProxyInfo(String protocol); >+ >+ protected static native String[] getKdeNonProxyHosts(); >+ >+} >Index: natives/unix/Debug/objects.mk >=================================================================== >RCS file: natives/unix/Debug/objects.mk >diff -N natives/unix/Debug/objects.mk >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ natives/unix/Debug/objects.mk 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,7 @@ >+################################################################################ >+# Automatically-generated file. Do not edit! >+################################################################################ >+ >+USER_OBJS := >+ >+LIBS := -lgconf-2 -lORBit-2 -lgthread-2.0 -lrt -lgobject-2.0 -lglib-2.0 >Index: natives/unix/Debug/sources.mk >=================================================================== >RCS file: natives/unix/Debug/sources.mk >diff -N natives/unix/Debug/sources.mk >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ natives/unix/Debug/sources.mk 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,17 @@ >+################################################################################ >+# Automatically-generated file. Do not edit! >+################################################################################ >+ >+O_SRCS := >+C_SRCS := >+S_SRCS := >+OBJ_SRCS := >+ASM_SRCS := >+OBJS := >+C_DEPS := >+LIBRARIES := >+ >+# Every subdirectory with source files must be described here >+SUBDIRS := \ >+. \ >+ >Index: natives/unix/Debug/makefile >=================================================================== >RCS file: natives/unix/Debug/makefile >diff -N natives/unix/Debug/makefile >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ natives/unix/Debug/makefile 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,43 @@ >+################################################################################ >+# Automatically-generated file. Do not edit! >+################################################################################ >+ >+-include ../makefile.init >+ >+RM := rm -rf >+ >+# All of the sources participating in the build are defined here >+-include sources.mk >+-include subdir.mk >+-include objects.mk >+ >+ifneq ($(MAKECMDGOALS),clean) >+ifneq ($(strip $(C_DEPS)),) >+-include $(C_DEPS) >+endif >+endif >+ >+-include ../makefile.defs >+ >+# Add inputs and outputs from these tool invocations to the build variables >+ >+# All Target >+all: libproxysupport.so >+ >+# Tool invocations >+libproxysupport.so: $(OBJS) $(USER_OBJS) >+ @echo 'Building target: $@' >+ @echo 'Invoking: GCC C Linker' >+ gcc -m32 -shared -o"libproxysupport.so" $(OBJS) $(USER_OBJS) $(LIBS) >+ @echo 'Finished building target: $@' >+ @echo ' ' >+ >+# Other Targets >+clean: >+ -$(RM) $(OBJS)$(C_DEPS)$(LIBRARIES) libproxysupport.so >+ -@echo ' ' >+ >+.PHONY: all clean dependents >+.SECONDARY: >+ >+-include ../makefile.targets >Index: natives/unix/getsystemproxy.c >=================================================================== >RCS file: natives/unix/getsystemproxy.c >diff -N natives/unix/getsystemproxy.c >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ natives/unix/getsystemproxy.c 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,237 @@ >+/* >+ * Copyright 2008 Oakland Software Incorporated and others >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Oakland Software Incorporated - initial API and implementation >+ */ >+ >+#include <jni.h> >+ >+#include <glib.h> >+#include <glib/gslist.h> >+#include <gconf/gconf-value.h> >+#include <gconf/gconf-client.h> >+ >+#ifdef __linux__ >+#include <string.h> >+#else >+#include <strings.h> >+#endif >+ >+static GConfClient *client= NULL; >+ >+static jclass proxyInfoClass; >+static jclass stringClass; >+static jmethodID proxyInfoConstructor; >+static jmethodID toString; >+ >+static jmethodID hostMethod; >+static jmethodID portMethod; >+static jmethodID requiresAuthenticationMethod; >+static jmethodID userMethod; >+static jmethodID passwordMethod; >+ >+#define CHECK_NULL(X) { if ((X) == NULL) fprintf (stderr,"JNI error at line %d\n", __LINE__); } >+ >+static void gconfInit(JNIEnv *env) { >+ client = gconf_client_get_default(); >+ jclass cls= NULL; >+ CHECK_NULL(cls = (*env)->FindClass(env, "org/eclipse/core/internal/net/ProxyData")); >+ proxyInfoClass = (*env)->NewGlobalRef(env, cls); >+ >+ CHECK_NULL(cls = (*env)->FindClass(env, "java/lang/String")); >+ stringClass = (*env)->NewGlobalRef(env, cls); >+ >+ CHECK_NULL(proxyInfoConstructor = (*env)->GetMethodID(env, proxyInfoClass, "<init>", "(Ljava/lang/String;)V")); >+ >+ CHECK_NULL(toString = (*env)->GetMethodID(env, proxyInfoClass, "toString", "()Ljava/lang/String;")); >+ >+ CHECK_NULL(hostMethod = (*env)->GetMethodID(env, proxyInfoClass, "setHost", >+ "(Ljava/lang/String;)V")); >+ CHECK_NULL(portMethod = (*env)->GetMethodID(env, proxyInfoClass, "setPort", >+ "(I)V")); >+ CHECK_NULL(requiresAuthenticationMethod= (*env)->GetMethodID(env, proxyInfoClass, "setRequiresAuthentication", >+ "(Z)V")); >+ CHECK_NULL(userMethod = (*env)->GetMethodID(env, proxyInfoClass, "setUserid", >+ "(Ljava/lang/String;)V")); >+ CHECK_NULL(passwordMethod = (*env)->GetMethodID(env, proxyInfoClass, "setPassword", >+ "(Ljava/lang/String;)V")); >+} >+ >+/* >+ * Class: org_eclipse_core_internal_net_UnixProxyProvider >+ * Method: getGConfProxyInfo >+ * Signature: ([Ljava/lang/String); >+ */ >+JNIEXPORT jobject JNICALL Java_org_eclipse_core_internal_net_UnixProxyProvider_getGConfProxyInfo( >+ JNIEnv *env, jclass clazz, jstring protocol) { >+ >+ jboolean isCopy; >+ const char *cprotocol; >+ >+ jobject proxyInfo= NULL; >+ >+ if (client == NULL) { >+ gconfInit(env); >+ } >+ >+ CHECK_NULL(proxyInfo = (*env)->NewObject(env, proxyInfoClass, proxyInfoConstructor, protocol)); >+ >+ cprotocol = (*env)->GetStringUTFChars(env, protocol, &isCopy); >+ if (cprotocol == NULL) >+ return NULL; >+ >+ //printf("cprotocol: %s\n", cprotocol); >+ >+ if (strcasecmp(cprotocol, "http") == 0) { >+ gboolean useProxy = gconf_client_get_bool(client, >+ "/system/http_proxy/use_http_proxy", NULL); >+ if (!useProxy) { >+ proxyInfo = NULL; >+ goto exit; >+ } >+ >+ gchar *host = gconf_client_get_string(client, >+ "/system/http_proxy/host", NULL); >+ jobject jhost = (*env)->NewStringUTF(env, host); >+ (*env)->CallVoidMethod(env, proxyInfo, hostMethod, jhost); >+ >+ gint port = gconf_client_get_int(client, "/system/http_proxy/port", >+ NULL); >+ (*env)->CallVoidMethod(env, proxyInfo, portMethod, port); >+ >+ gboolean reqAuth = gconf_client_get_bool(client, >+ "/system/http_proxy/use_authentication", NULL); >+ (*env)->CallVoidMethod(env, proxyInfo, >+ requiresAuthenticationMethod, reqAuth); >+ if (reqAuth) { >+ >+ gchar *user = gconf_client_get_string(client, >+ "/system/http_proxy/authentication_user", NULL); >+ jobject juser = (*env)->NewStringUTF(env, user); >+ (*env)->CallVoidMethod(env, proxyInfo, userMethod, juser); >+ >+ gchar *password = gconf_client_get_string(client, >+ "/system/http_proxy/authentication_password", NULL); >+ jobject jpassword = (*env)->NewStringUTF(env, password); >+ (*env)->CallVoidMethod(env, proxyInfo, passwordMethod, >+ jpassword); >+ } >+ goto exit; >+ } >+ >+ // Everything else applies only if the system proxy mode is manual >+ gchar *mode = gconf_client_get_string(client, "/system/proxy/mode", NULL); >+ if (strcasecmp(mode, "manual") != 0) { >+ proxyInfo = NULL; >+ goto exit; >+ } >+ >+ char selector[100]; >+ >+ if (strcasecmp(cprotocol, "https") == 0) { >+ strcpy(selector, "/system/proxy/secure_"); >+ } else if (strcasecmp(cprotocol, "socks") == 0) { >+ strcpy(selector, "/system/proxy/socks_"); >+ } else if (strcasecmp(cprotocol, "ftp") == 0) { >+ strcpy(selector, "/system/proxy/ftp_"); >+ } else { >+ proxyInfo = NULL; >+ goto exit; >+ } >+ >+ char useSelector[100]; >+ strcpy(useSelector, selector); >+ >+ gchar *host = gconf_client_get_string(client, strcat(useSelector, "host"), >+ NULL); >+ jobject jhost = (*env)->NewStringUTF(env, host); >+ (*env)->CallVoidMethod(env, proxyInfo, hostMethod, jhost); >+ >+ strcpy(useSelector, selector); >+ gint port = gconf_client_get_int(client, strcat(useSelector, "port"), NULL); >+ (*env)->CallVoidMethod(env, proxyInfo, portMethod, port); >+ >+ exit: if (isCopy == JNI_TRUE) >+ (*env)->ReleaseStringUTFChars(env, protocol, cprotocol); >+ return proxyInfo; >+} >+ >+typedef struct { >+ jobjectArray npHostArray; >+ JNIEnv *env; >+ int index; >+} ListProcContext; >+ >+// user_data is the ListProcContext >+void listProc(gpointer data, gpointer user_data) { >+ ListProcContext *lpc = user_data; >+ jobject jnpHost = (*lpc->env)->NewStringUTF(lpc->env, (char *)data); >+ (*lpc->env)->SetObjectArrayElement(lpc->env, lpc->npHostArray, >+ lpc->index++, jnpHost); >+} >+ >+/* >+ * Class: org_eclipse_core_internal_net_UnixProxyProvider >+ * Method: getGConfNonProxyHosts >+ * Signature: ()[Ljava/lang/String; >+ */ >+JNIEXPORT jobjectArray JNICALL Java_org_eclipse_core_internal_net_UnixProxyProvider_getGConfNonProxyHosts( >+ JNIEnv *env, jclass clazz) { >+ >+ if (client == NULL) { >+ gconfInit(env); >+ } >+ >+ GSList *npHosts; >+ int size; >+ >+ npHosts = gconf_client_get_list(client, "/system/http_proxy/ignore_hosts", >+ GCONF_VALUE_STRING, NULL); >+ size = g_slist_length(npHosts); >+ >+ // TODO - I'm not sure this is really valid, it's from the JVM implementation >+ // of ProxySelector >+ if (size == 0) { >+ npHosts = gconf_client_get_list(client, "/system/proxy/no_proxy_for", >+ GCONF_VALUE_STRING, NULL); >+ } >+ size = g_slist_length(npHosts); >+ >+ jobjectArray ret = (*env)->NewObjectArray(env, size, stringClass, NULL); >+ >+ ListProcContext lpc; >+ lpc.env = env; >+ lpc.npHostArray = ret; >+ lpc.index = 0; >+ >+ g_slist_foreach(npHosts, listProc, &lpc); >+ return ret; >+} >+ >+/* >+ * Class: org_eclipse_core_internal_net_UnixProxyProvider >+ * Method: getKdeProxyInfo >+ * Signature: ([Ljava/lang/String); >+ */ >+JNIEXPORT jobject JNICALL Java_org_eclipse_core_internal_net_UnixProxyProvider_getKdeProxyInfo( >+ JNIEnv *env, jclass clazz, jstring protocol) { >+ //printf("getKdeProxyInfo - not implemented\n"); >+ return NULL; >+} >+ >+/* >+ * Class: org_eclipse_core_internal_net_UnixProxyProvider >+ * Method: getKdeNonProxyHosts >+ * Signature: ()Ljava/lang/String; >+ */ >+JNIEXPORT jobject JNICALL Java_org_eclipse_core_internal_net_UnixProxyProvider_getKdeNonProxyHosts( >+ JNIEnv *env, jclass clazz) { >+ //printf("getKdeNonProxyHosts - not implemented\n"); >+ return NULL; >+} >+
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 180921
:
88543
|
90245
|
90246
|
91640
|
91641
|
91739
|
91958
|
91959
|
92027
|
92028
|
92325
|
92545
|
93183
|
93367
|
94535
|
94536
|
94712
|
94713
|
95020
|
95021
|
95030
|
95187
|
95337
|
95343
|
96393