1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $RCSfile$ 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Revision$ 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Date$ 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * you may not use this file except in compliance with the License. 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * You may obtain a copy of the License at 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * http://www.apache.org/licenses/LICENSE-2.0 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Unless required by applicable law or agreed to in writing, software 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * distributed under the License is distributed on an "AS IS" BASIS, 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * See the License for the specific language governing permissions and 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * limitations under the License. 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.jivesoftware.smack.proxy; 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport javax.net.SocketFactory; 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Class which stores proxy information such as proxy type, host, port, 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * authentication etc. 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Atul Aggarwal 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class ProxyInfo 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen{ 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static enum ProxyType 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen NONE, 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen HTTP, 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SOCKS4, 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SOCKS5 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String proxyAddress; 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private int proxyPort; 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String proxyUsername; 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String proxyPassword; 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private ProxyType proxyType; 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public ProxyInfo( ProxyType pType, String pHost, int pPort, String pUser, 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen String pPass) 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.proxyType = pType; 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.proxyAddress = pHost; 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.proxyPort = pPort; 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.proxyUsername = pUser; 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.proxyPassword = pPass; 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static ProxyInfo forHttpProxy(String pHost, int pPort, String pUser, 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen String pPass) 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return new ProxyInfo(ProxyType.HTTP, pHost, pPort, pUser, pPass); 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static ProxyInfo forSocks4Proxy(String pHost, int pPort, String pUser, 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen String pPass) 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return new ProxyInfo(ProxyType.SOCKS4, pHost, pPort, pUser, pPass); 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static ProxyInfo forSocks5Proxy(String pHost, int pPort, String pUser, 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen String pPass) 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return new ProxyInfo(ProxyType.SOCKS5, pHost, pPort, pUser, pPass); 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static ProxyInfo forNoProxy() 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return new ProxyInfo(ProxyType.NONE, null, 0, null, null); 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static ProxyInfo forDefaultProxy() 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return new ProxyInfo(ProxyType.NONE, null, 0, null, null); 81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public ProxyType getProxyType() 84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return proxyType; 86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getProxyAddress() 89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return proxyAddress; 91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public int getProxyPort() 94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return proxyPort; 96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getProxyUsername() 99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return proxyUsername; 101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getProxyPassword() 104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return proxyPassword; 106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public SocketFactory getSocketFactory() 109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if(proxyType == ProxyType.NONE) 111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return new DirectSocketFactory(); 113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen else if(proxyType == ProxyType.HTTP) 115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return new HTTPProxySocketFactory(this); 117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen else if(proxyType == ProxyType.SOCKS4) 119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return new Socks4ProxySocketFactory(this); 121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen else if(proxyType == ProxyType.SOCKS5) 123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return new Socks5ProxySocketFactory(this); 125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen else 127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return null; 129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 132