diff --git a/php.project/src/org/netbeans/modules/php/project/connections/common/RemoteUtils.java b/php.project/src/org/netbeans/modules/php/project/connections/common/RemoteUtils.java --- a/php.project/src/org/netbeans/modules/php/project/connections/common/RemoteUtils.java +++ b/php.project/src/org/netbeans/modules/php/project/connections/common/RemoteUtils.java @@ -64,6 +64,7 @@ private static final Logger LOGGER = Logger.getLogger(RemoteUtils.class.getName()); private static final URI URI_FOR_HTTP_PROXY = URI.create("http://oracle.com"); // NOI18N + private static final URI URI_FOR_SOCKS_PROXY = URI.create("socks://oracle.com"); // NOI18N private RemoteUtils() { @@ -184,21 +185,34 @@ } @CheckForNull - public static HttpProxyInfo getHttpProxy() { + public static ProxyInfo getHttpProxy() { String proxyHost = NetworkSettings.getProxyHost(URI_FOR_HTTP_PROXY); if (proxyHost == null) { // no proxy return null; } - return new HttpProxyInfo(proxyHost, + return new ProxyInfo(proxyHost, Integer.parseInt(NetworkSettings.getProxyPort(URI_FOR_HTTP_PROXY)), NetworkSettings.getAuthenticationUsername(URI_FOR_HTTP_PROXY), NetworkSettings.getKeyForAuthenticationPassword(URI_FOR_HTTP_PROXY)); } + @CheckForNull + public static ProxyInfo getSocksProxy() { + String proxyHost = NetworkSettings.getProxyHost(URI_FOR_SOCKS_PROXY); + if (proxyHost == null) { + // no proxy + return null; + } + return new ProxyInfo(proxyHost, + Integer.parseInt(NetworkSettings.getProxyPort(URI_FOR_SOCKS_PROXY)), + NetworkSettings.getAuthenticationUsername(URI_FOR_SOCKS_PROXY), + NetworkSettings.getKeyForAuthenticationPassword(URI_FOR_SOCKS_PROXY)); + } + //~ Inner classes - public static final class HttpProxyInfo { + public static final class ProxyInfo { private final String host; private final int port; @@ -206,7 +220,7 @@ private final String passwordKey; - public HttpProxyInfo(String host, int port, String username, String passwordKey) { + public ProxyInfo(String host, int port, String username, String passwordKey) { this.host = host; this.port = port; this.username = username; diff --git a/php.project/src/org/netbeans/modules/php/project/connections/ftp/FtpClient.java b/php.project/src/org/netbeans/modules/php/project/connections/ftp/FtpClient.java --- a/php.project/src/org/netbeans/modules/php/project/connections/ftp/FtpClient.java +++ b/php.project/src/org/netbeans/modules/php/project/connections/ftp/FtpClient.java @@ -68,7 +68,7 @@ import org.netbeans.modules.php.project.connections.RemoteException; import org.netbeans.modules.php.project.connections.common.PasswordPanel; import org.netbeans.modules.php.project.connections.common.RemoteUtils; -import org.netbeans.modules.php.project.connections.common.RemoteUtils.HttpProxyInfo; +import org.netbeans.modules.php.project.connections.common.RemoteUtils.ProxyInfo; import org.netbeans.modules.php.project.connections.ftp.FtpConfiguration.Encryption; import org.netbeans.modules.php.project.connections.spi.RemoteClient; import org.netbeans.modules.php.project.connections.spi.RemoteFile; @@ -136,7 +136,7 @@ FtpConfiguration.Security security = configuration.getSecurity(); if (!security.isPresent()) { LOGGER.log(Level.FINE, "No encryption used"); - HttpProxyInfo proxyInfo = RemoteUtils.getHttpProxy(); + ProxyInfo proxyInfo = RemoteUtils.getHttpProxy(); if (proxyInfo != null) { LOGGER.log(Level.FINE, "HTTP proxy will be used"); return new FTPHTTPClient(proxyInfo.getHost(), proxyInfo.getPort(), proxyInfo.getUsername(), proxyInfo.getPassword()); diff --git a/php.project/src/org/netbeans/modules/php/project/connections/sftp/SftpClient.java b/php.project/src/org/netbeans/modules/php/project/connections/sftp/SftpClient.java --- a/php.project/src/org/netbeans/modules/php/project/connections/sftp/SftpClient.java +++ b/php.project/src/org/netbeans/modules/php/project/connections/sftp/SftpClient.java @@ -46,6 +46,9 @@ import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.Proxy; +import com.jcraft.jsch.ProxyHTTP; +import com.jcraft.jsch.ProxySOCKS5; import com.jcraft.jsch.Session; import com.jcraft.jsch.SftpATTRS; import com.jcraft.jsch.SftpException; @@ -151,6 +154,8 @@ if (StringUtils.hasText(password)) { sftpSession.setPassword(password); } + // proxy + setProxy(); sftpSession.setUserInfo(new SftpUserInfo(configuration)); sftpSession.setTimeout(timeout); // keep-alive @@ -175,6 +180,33 @@ } + private void setProxy() { + Proxy proxy = null; + RemoteUtils.ProxyInfo proxyInfo = RemoteUtils.getHttpProxy(); + proxyInfo = RemoteUtils.getSocksProxy(); + if (proxyInfo != null) { + LOGGER.log(Level.FINE, "HTTP proxy will be used"); + ProxyHTTP httpProxy = new ProxyHTTP(proxyInfo.getHost(), proxyInfo.getPort()); + if (StringUtils.hasText(proxyInfo.getUsername())) { + httpProxy.setUserPasswd(proxyInfo.getUsername(), proxyInfo.getPassword()); + } + proxy = httpProxy; + } else { + proxyInfo = RemoteUtils.getSocksProxy(); + if (proxyInfo != null) { + LOGGER.log(Level.FINE, "SOCKS proxy will be used"); + ProxySOCKS5 socksProxy = new ProxySOCKS5(proxyInfo.getHost(), proxyInfo.getPort()); + if (StringUtils.hasText(proxyInfo.getUsername())) { + socksProxy.setUserPasswd(proxyInfo.getUsername(), proxyInfo.getPassword()); + } + proxy = socksProxy; + } + } + if (proxy != null) { + sftpSession.setProxy(proxy); + } + } + @Override public void connect() throws RemoteException { init();