package nu.fw.jeti.plugins.filetransfer.socks5.jsocks; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.DataInputStream; import java.net.InetAddress; import java.net.UnknownHostException; /** Abstract class which describes SOCKS4/5 response/request. */ public abstract class ProxyMessage{ /** Host as an IP address */ public InetAddress ip=null; /** SOCKS version, or version of the response for SOCKS4*/ public int version; /** Port field of the request/response*/ public int port; /** Request/response code as an int*/ public int command; /** Host as string.*/ public String host=null; /** User field for SOCKS4 request messages*/ public String user=null; ProxyMessage(int command,InetAddress ip,int port){ this.command = command; this.ip = ip; this.port = port; } ProxyMessage(){ } /** Initialises Message from the stream. Reads server response from given stream. @param in Input stream to read response from. @throws SocksException If server response code is not SOCKS_SUCCESS(0), or if any error with protocol occurs. @throws IOException If any error happens with I/O. */ public abstract void read(InputStream in) throws SocksException, IOException; /** Initialises Message from the stream. Reads server response or client request from given stream. @param in Input stream to read response from. @param clinetMode If true read server response, else read client request. @throws SocksException If server response code is not SOCKS_SUCCESS(0) and reading in client mode, or if any error with protocol occurs. @throws IOException If any error happens with I/O. */ public abstract void read(InputStream in,boolean client_mode) throws SocksException, IOException; /** Writes the message to the stream. @param out Output stream to which message should be written. */ public abstract void write(OutputStream out)throws SocksException, IOException; /** Get the Address field of this message as InetAddress object. @return Host address or null, if one can't be determined. */ public InetAddress getInetAddress() throws UnknownHostException{ return ip; } /** Get string representaion of this message. @return string representation of this message. */ public String toString(){ return "Proxy Message:\n"+ "Version:"+ version+"\n"+ "Command:"+ command+"\n"+ "IP: "+ ip+"\n"+ "Port: "+ port+"\n"+ "User: "+ user+"\n" ; } //Package methods ////////////////// static final String bytes2IPV4(byte[] addr,int offset){ String hostName = ""+(addr[offset] & 0xFF); for(int i = offset+1;i