diff src/net/sourceforge/jsocks/Socks4Message.java @ 349:205ee2873330

update jsocks to 2011-03-19
author Carl Byington <carl@five-ten-sg.com>
date Fri, 01 Aug 2014 11:23:10 -0700
parents 0ce5cc452d02
children 2bc6805cbc91
line wrap: on
line diff
--- a/src/net/sourceforge/jsocks/Socks4Message.java	Fri Aug 01 10:25:44 2014 -0700
+++ b/src/net/sourceforge/jsocks/Socks4Message.java	Fri Aug 01 11:23:10 2014 -0700
@@ -1,182 +1,157 @@
-package net.sourceforge.jsocks;
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
-/**
-  SOCKS4 Reply/Request message.
-*/
-
-public class Socks4Message extends ProxyMessage {
-
-    private byte[] msgBytes;
-    private int msgLength;
-
-    /**
-     * Server failed reply, cmd command for failed request
-     */
-    public Socks4Message(int cmd) {
-        super(cmd, null, 0);
-        this.user    = null;
-        msgLength = 2;
-        msgBytes = new byte[2];
-        msgBytes[0] = (byte) 0;
-        msgBytes[1] = (byte) command;
-    }
-
-    /**
-     *  Server successfull reply
-     */
-    public Socks4Message(int cmd, InetAddress ip, int port) {
-        this(0, cmd, ip, port, null);
-    }
-
-    /**
-     *  Client request
-     */
-    public Socks4Message(int cmd, InetAddress ip, int port, String user) {
-        this(SOCKS_VERSION, cmd, ip, port, user);
-    }
-
-    /**
-     * Most general constructor
-     */
-    public Socks4Message(int version, int cmd,
-                         InetAddress ip, int port, String user) {
-        super(cmd, ip, port);
-        this.user    = user;
-        this.version = version;
-        msgLength = user == null ? 8 : 9 + user.length();
-        msgBytes = new byte[msgLength];
-        msgBytes[0] = (byte) version;
-        msgBytes[1] = (byte) command;
-        msgBytes[2] = (byte)(port >> 8);
-        msgBytes[3] = (byte) port;
-        byte[] addr;
-
-        if (ip != null)
-            addr = ip.getAddress();
-        else {
-            addr = new byte[4];
-            addr[0] = addr[1] = addr[2] = addr[3] = 0;
-        }
-
-        System.arraycopy(addr, 0, msgBytes, 4, 4);
-
-        if (user != null) {
-            byte[] buf = user.getBytes();
-            System.arraycopy(buf, 0, msgBytes, 8, buf.length);
-            msgBytes[msgBytes.length - 1 ] = 0;
-        }
-    }
-
-    /**
-     *Initialise from the stream
-     *If clientMode is true attempts to read a server response
-     *otherwise reads a client request
-     *see read for more detail
-     */
-    public Socks4Message(InputStream in, boolean clientMode) throws IOException {
-        msgBytes = null;
-        read(in, clientMode);
-    }
-
-    @Override
-    public void read(InputStream in) throws IOException {
-        read(in, true);
-    }
-
-    @Override
-    public void read(InputStream in, boolean clientMode) throws IOException {
-        boolean mode4a = false;
-        DataInputStream d_in = new DataInputStream(in);
-        version = d_in.readUnsignedByte();
-        command = d_in.readUnsignedByte();
-
-        if (clientMode && command != REPLY_OK) {
-            String errMsg;
-
-            if (command > REPLY_OK && command < REPLY_BAD_IDENTD)
-                errMsg = replyMessage[command - REPLY_OK];
-            else
-                errMsg = "Unknown Reply Code";
-
-            throw new SocksException(command, errMsg);
-        }
-
-        port = d_in.readUnsignedShort();
-        byte[] addr = new byte[4];
-        d_in.readFully(addr);
-
-        if (addr[0] == 0 && addr[1] == 0 && addr[2] == 0 && addr[3] != 0)
-            mode4a = true;
-        else {
-            ip = bytes2IP(addr);
-            host = ip.getHostName();
-        }
-
-        if (!clientMode) {
-            StringBuilder sb = new StringBuilder();
-            int b;
-
-            while ((b = in.read()) != 0)
-                sb.append((char) b);
-
-            user = sb.toString();
-
-            if (mode4a) {
-                sb.setLength(0);
-
-                while ((b = in.read()) != 0)
-                    sb.append((char) b);
-
-                host = sb.toString();
-            }
-        }
-    }
-    @Override
-    public void write(OutputStream out) throws IOException {
-        if (msgBytes == null) {
-            Socks4Message msg = new Socks4Message(version, command, ip, port, user);
-            msgBytes = msg.msgBytes;
-            msgLength = msg.msgLength;
-        }
-
-        out.write(msgBytes);
-    }
-
-    //Class methods
-    static InetAddress bytes2IP(byte[] addr) {
-        String s = bytes2IPV4(addr, 0);
-
-        try {
-            return InetAddress.getByName(s);
-        }
-        catch (UnknownHostException uh_ex) {
-            return null;
-        }
-    }
-
-    //Constants
-
-    static final String[] replyMessage = {
-        "Request Granted",
-        "Request Rejected or Failed",
-        "Failed request, can't connect to Identd",
-        "Failed request, bad user name"
-    };
-
-    static final int SOCKS_VERSION = 4;
-
-    public final static int REQUEST_CONNECT      = 1;
-    public final static int REQUEST_BIND         = 2;
-
-    public final static int REPLY_OK             = 90;
-    public final static int REPLY_REJECTED       = 91;
-    public final static int REPLY_NO_CONNECT     = 92;
-    public final static int REPLY_BAD_IDENTD     = 93;
-
-}
+package net.sourceforge.jsocks;
+import java.io.*;
+import java.net.*;
+
+/** 
+  SOCKS4 Reply/Request message.
+*/
+
+class Socks4Message extends ProxyMessage{
+
+   private byte[] msgBytes;
+   private int msgLength;
+
+   /**
+    * Server failed reply, cmd command for failed request
+    */
+   public Socks4Message(int cmd){
+      super(cmd,null,0);
+      this.user    = null;
+
+      msgLength = 2;
+      msgBytes = new byte[2];
+
+      msgBytes[0] = (byte) 0;
+      msgBytes[1] = (byte) command;
+   }
+
+   /** 
+    *  Server successfull reply
+    */
+   public Socks4Message(int cmd,InetAddress ip,int port){
+      this(0,cmd,ip,port,null);
+   }
+
+   /** 
+    *  Client request
+    */
+   public Socks4Message(int cmd,InetAddress ip,int port,String user){
+      this(SOCKS_VERSION,cmd,ip,port,user);
+   }
+
+   /**
+    * Most general constructor
+    */
+   public Socks4Message(int version, int cmd,
+                        InetAddress ip,int port,String user){
+      super(cmd,ip,port);
+      this.user    = user;
+      this.version = version;
+
+      msgLength = user == null?8:9+user.length();
+      msgBytes = new byte[msgLength];
+
+      msgBytes[0] = (byte) version;
+      msgBytes[1] = (byte) command;
+      msgBytes[2] = (byte) (port >> 8);
+      msgBytes[3] = (byte) port;
+
+      byte[] addr;
+
+      if(ip != null)
+        addr = ip.getAddress();
+      else{
+        addr = new byte[4];
+        addr[0]=addr[1]=addr[2]=addr[3]=0;
+      }
+      System.arraycopy(addr,0,msgBytes,4,4);
+
+      if(user != null){
+         byte[] buf = user.getBytes();
+         System.arraycopy(buf,0,msgBytes,8,buf.length);
+         msgBytes[msgBytes.length -1 ] = 0;
+      }
+   }
+
+   /**
+    *Initialise from the stream
+    *If clientMode is true attempts to read a server response
+    *otherwise reads a client request
+    *see read for more detail
+    */
+   public Socks4Message(InputStream in, boolean clientMode) throws IOException{
+      msgBytes = null;
+      read(in,clientMode);
+   }
+
+   public void read(InputStream in) throws IOException{
+        read(in,true);
+   }
+
+   public void read(InputStream in, boolean clientMode) throws IOException{
+       DataInputStream d_in = new DataInputStream(in);
+       version= d_in.readUnsignedByte();
+       command = d_in.readUnsignedByte();
+       if(clientMode && command != REPLY_OK){
+          String errMsg;
+          if(command >REPLY_OK && command < REPLY_BAD_IDENTD)
+             errMsg = replyMessage[command-REPLY_OK];
+          else
+             errMsg = "Unknown Reply Code";
+          throw new SocksException(command,errMsg);
+       }
+       port = d_in.readUnsignedShort();
+       byte[] addr = new byte[4];
+       d_in.readFully(addr);
+       ip=bytes2IP(addr);
+       host = ip.getHostName();
+       if(!clientMode){
+          int b = in.read();
+          //Hope there are no idiots with user name bigger than this
+          byte[] userBytes = new byte[256];
+          int i = 0;
+          for(i =0;i<userBytes.length && b>0;++i){
+             userBytes[i] = (byte) b;
+             b = in.read();
+          }
+          user = new String(userBytes,0,i);
+       }
+   }
+   public void write(OutputStream out) throws IOException{
+      if(msgBytes == null){
+         Socks4Message msg = new Socks4Message(version,command,ip,port,user);
+         msgBytes = msg.msgBytes;
+         msgLength = msg.msgLength;
+      }
+      out.write(msgBytes);
+   }
+
+   //Class methods
+   static InetAddress bytes2IP(byte[] addr){
+      String s = bytes2IPV4(addr,0);
+      try{
+         return InetAddress.getByName(s);
+      }catch(UnknownHostException uh_ex){
+        return null;
+      }
+   }
+
+   //Constants
+
+   static final String[] replyMessage ={
+          "Request Granted",
+          "Request Rejected or Failed",
+          "Failed request, can't connect to Identd",
+          "Failed request, bad user name"};
+
+   static final int SOCKS_VERSION = 4;
+
+   public final static int REQUEST_CONNECT		= 1;
+   public final static int REQUEST_BIND   		= 2;
+
+   public final static int REPLY_OK 			= 90;
+   public final static int REPLY_REJECTED		= 91;
+   public final static int REPLY_NO_CONNECT		= 92;
+   public final static int REPLY_BAD_IDENTD		= 93;
+
+}