diff options
author | Danny van Heumen <danny@dannyvanheumen.nl> | 2015-01-03 20:24:18 +0100 |
---|---|---|
committer | Danny van Heumen <danny@dannyvanheumen.nl> | 2015-04-03 21:37:01 +0200 |
commit | 71d61592c32789006d31c297ddf35d95c973924c (patch) | |
tree | 6dae53a1fe8194405e1f0c1f82aecd615ce700ca /src/net/java/sip/communicator/impl/protocol | |
parent | 820eda0f39422b3832b266871a5f9d665f7b4b50 (diff) | |
download | jitsi-71d61592c32789006d31c297ddf35d95c973924c.zip jitsi-71d61592c32789006d31c297ddf35d95c973924c.tar.gz jitsi-71d61592c32789006d31c297ddf35d95c973924c.tar.bz2 |
Use proxy settings from Global Proxy configuration.
Diffstat (limited to 'src/net/java/sip/communicator/impl/protocol')
-rw-r--r-- | src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java | 20 | ||||
-rw-r--r-- | src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderServiceIrcImpl.java | 71 |
2 files changed, 87 insertions, 4 deletions
diff --git a/src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java b/src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java index 47cc740..6ffea08 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java @@ -15,6 +15,7 @@ import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.resources.*; import net.java.sip.communicator.util.*; +import org.jitsi.service.configuration.*; import org.jitsi.service.resources.*; import org.osgi.framework.*; @@ -66,6 +67,11 @@ public class IrcActivator private static UIService uiService; /** + * Configuration Service instance. + */ + private static ConfigurationService configService; + + /** * Called when this bundle is started. In here we'll export the * IRC ProtocolProviderFactory implementation so that it could be * possible to register accounts with it in SIP Communicator. @@ -198,4 +204,18 @@ public class IrcActivator } return certificateService; } + + /** + * Return the configuration service impl. + * + * @return the Configuration service + */ + public static ConfigurationService getConfigurationService() + { + if(configService == null) + { + configService = ServiceUtils.getService(bundleContext, ConfigurationService.class); + } + return configService; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderServiceIrcImpl.java b/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderServiceIrcImpl.java index 7e3e931..cc2261c 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderServiceIrcImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderServiceIrcImpl.java @@ -12,6 +12,8 @@ import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.event.*; import net.java.sip.communicator.util.*; +import org.jitsi.service.configuration.*; + /** * An IRC implementation of the ProtocolProviderService. * @@ -309,10 +311,10 @@ public class ProtocolProviderServiceIrcImpl config.setVersion3Allowed(true); config.setContactPresenceTaskEnabled(contactPresenceTask); config.setChannelPresenceTaskEnabled(channelPresenceTask); - // TODO make proxy-configuration configurable in GUI - config.setProxy(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress( - "localhost", 8080))); - config.setResolveByProxy(true); + config.setProxy(loadProxy()); + config.setResolveByProxy(loadDNSThroughProxySetting()); + // FIXME fix 'replacement' plugins which now (probably) don't use global + // proxy configuration when contacting URLs on the internet try { @@ -332,6 +334,67 @@ public class ProtocolProviderServiceIrcImpl } /** + * Get proxy instance based on Jitsi's global proxy configuration. + * + * @return returns configured proxy instance + */ + private Proxy loadProxy() throws OperationFailedException + { + final ConfigurationService configSvc = + IrcActivator.getConfigurationService(); + if (configSvc == null) + { + return null; + } + final String globalProxyType = + configSvc.getString(ProxyInfo.CONNECTION_PROXY_TYPE_PROPERTY_NAME); + if (globalProxyType == null + || (!globalProxyType.equals(ProxyInfo.ProxyType.SOCKS4.name()) + &&!globalProxyType.equals(ProxyInfo.ProxyType.SOCKS5.name()))) + { + // Only SOCKS proxy is supported. The appropriate proxy type is not + // configured, so we're done. + return null; + } + final String globalProxyAddress = + configSvc + .getString(ProxyInfo.CONNECTION_PROXY_ADDRESS_PROPERTY_NAME); + final String globalProxyPortStr = + configSvc.getString(ProxyInfo.CONNECTION_PROXY_PORT_PROPERTY_NAME); + final int globalProxyPort; + try + { + globalProxyPort = Integer.parseInt(globalProxyPortStr); + } + catch (NumberFormatException e) + { + throw new OperationFailedException("invalid proxy port", + OperationFailedException.INVALID_ACCOUNT_PROPERTIES, e); + } + return new Proxy(Proxy.Type.SOCKS, new InetSocketAddress( + globalProxyAddress, globalProxyPort)); + } + + /** + * Method for loading the current value for option to resolve DNS host names + * through SOCKS5 proxy. + * + * @return returns <tt>true</tt> to enable resolving through proxy, or + * <tt>false</tt> for local DNS resolving + */ + private boolean loadDNSThroughProxySetting() + { + final ConfigurationService configSvc = + IrcActivator.getConfigurationService(); + if (configSvc == null) + { + return false; + } + // FIXME implement support for option to enable SOCKS5 DNS resolving + return true; + } + + /** * Makes the service implementation close all open sockets and release * any resources that it might have taken and prepare for * shutdown/garbage collection. |