aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/impl/protocol/irc
diff options
context:
space:
mode:
authorDanny van Heumen <danny@dannyvanheumen.nl>2015-01-03 20:24:18 +0100
committerDanny van Heumen <danny@dannyvanheumen.nl>2015-04-03 21:37:01 +0200
commit71d61592c32789006d31c297ddf35d95c973924c (patch)
tree6dae53a1fe8194405e1f0c1f82aecd615ce700ca /src/net/java/sip/communicator/impl/protocol/irc
parent820eda0f39422b3832b266871a5f9d665f7b4b50 (diff)
downloadjitsi-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/irc')
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/IrcActivator.java20
-rw-r--r--src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderServiceIrcImpl.java71
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.