package net.sourceforge.jsocks.socks;
import java.net.*;
import java.io.*;
/**
Proxy which describes SOCKS4 proxy.
*/
public class Socks4Proxy extends Proxy implements Cloneable{
//Data members
String user;
//Public Constructors
//====================
/**
Creates the SOCKS4 proxy
@param p Proxy to use to connect to this proxy, allows proxy chaining.
@param proxyHost Address of the proxy server.
@param proxyPort Port of the proxy server
@param user User name to use for identification purposes.
@throws UnknownHostException If proxyHost can't be resolved.
*/
public Socks4Proxy(Proxy p,String proxyHost,int proxyPort,String user)
throws UnknownHostException{
super(p,proxyHost,proxyPort);
this.user = new String(user);
version = 4;
}
/**
Creates the SOCKS4 proxy
@param proxyHost Address of the proxy server.
@param proxyPort Port of the proxy server
@param user User name to use for identification purposes.
@throws UnknownHostException If proxyHost can't be resolved.
*/
public Socks4Proxy(String proxyHost,int proxyPort,String user)
throws UnknownHostException{
this(null,proxyHost,proxyPort,user);
}
/**
Creates the SOCKS4 proxy
@param p Proxy to use to connect to this proxy, allows proxy chaining.
@param proxyIP Address of the proxy server.
@param proxyPort Port of the proxy server
@param user User name to use for identification purposes.
*/
public Socks4Proxy(Proxy p,InetAddress proxyIP,int proxyPort,String user){
super(p,proxyIP,proxyPort);
this.user = new String(user);
version = 4;
}
/**
Creates the SOCKS4 proxy
@param proxyIP Address of the proxy server.
@param proxyPort Port of the proxy server
@param user User name to use for identification purposes.
*/
public Socks4Proxy(InetAddress proxyIP,int proxyPort,String user){
this(null,proxyIP,proxyPort,user);
}
//Public instance methods
//========================
/**
* Creates a clone of this proxy. Changes made to the clone should not
* affect this object.
*/
public Object clone(){
Socks4Proxy newProxy = new Socks4Proxy(proxyIP,proxyPort,user);
newProxy.directHosts = (InetRange)directHosts.clone();
newProxy.chainProxy = chainProxy;
return newProxy;
}
//Public Static(Class) Methods
//==============================
//Protected Methods
//=================
protected Proxy copy(){
Socks4Proxy copy = new Socks4Proxy(proxyIP,proxyPort,user);
copy.directHosts = this.directHosts;
copy.chainProxy = chainProxy;
return copy;
}
protected ProxyMessage formMessage(int cmd,InetAddress ip,int port){
switch(cmd){
case SOCKS_CMD_CONNECT:
cmd = Socks4Message.REQUEST_CONNECT;
break;
case SOCKS_CMD_BIND:
cmd = Socks4Message.REQUEST_BIND;
break;
default:
return null;
}
return new Socks4Message(cmd,ip,port,user);
}
protected ProxyMessage formMessage(int cmd,String host,int port)
throws UnknownHostException{
return formMessage(cmd,InetAddress.getByName(host),port);
}
protected ProxyMessage formMessage(InputStream in)
throws SocksException,
IOException{
return new Socks4Message(in,true);
}
}