diff src/net/sourceforge/jsocks/ProxyMessage.java @ 0:0ce5cc452d02

initial version
author Carl Byington <carl@five-ten-sg.com>
date Thu, 22 May 2014 10:41:19 -0700
parents
children 205ee2873330
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/sourceforge/jsocks/ProxyMessage.java	Thu May 22 10:41:19 2014 -0700
@@ -0,0 +1,111 @@
+package net.sourceforge.jsocks;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+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 < offset + 4; ++i)
+            hostName += "." + (addr[i] & 0xFF);
+
+        return hostName;
+    }
+
+    static final String bytes2IPV6(byte[] addr, int offset) {
+        //Have no idea how they look like!
+        return null;
+    }
+
+}