diff src/net/sourceforge/jsocks/server/ServerAuthenticatorNone.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 72de889ecfe7
line wrap: on
line diff
--- a/src/net/sourceforge/jsocks/server/ServerAuthenticatorNone.java	Fri Aug 01 10:25:44 2014 -0700
+++ b/src/net/sourceforge/jsocks/server/ServerAuthenticatorNone.java	Fri Aug 01 11:23:10 2014 -0700
@@ -1,169 +1,170 @@
-package net.sourceforge.jsocks.server;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PushbackInputStream;
-import java.net.Socket;
-
-import net.sourceforge.jsocks.ProxyMessage;
-import net.sourceforge.jsocks.UDPEncapsulation;
-
-/**
- An implementation of ServerAuthenticator, which does <b>not</b> do
- any authentication.
-<P>
-<FONT size="+3" color ="FF0000"> Warning!!</font><br> Should not be
-used on machines which are not behind the firewall.
-<p>
-It is only provided to make implementing other authentication schemes
-easier.<br>
-For Example: <tt><pre>
-   class MyAuth extends socks.server.ServerAuthenticator{
-    ...
-    public ServerAuthenticator startSession(java.net.Socket s){
-      if(!checkHost(s.getInetAddress()) return null;
-      return super.startSession(s);
-    }
-
-    boolean checkHost(java.net.Inetaddress addr){
-      boolean allow;
-      //Do it somehow
-      return allow;
-    }
-   }
-</pre></tt>
-*/
-public class ServerAuthenticatorNone implements ServerAuthenticator {
-
-    static final byte[] socks5response = {5, 0};
-
-    InputStream in;
-    OutputStream out;
-
-    /**
-     Creates new instance of the ServerAuthenticatorNone.
-    */
-    public ServerAuthenticatorNone() {
-        this.in = null;
-        this.out = null;
-    }
-    /**
-     Constructs new ServerAuthenticatorNone object suitable for returning
-     from the startSession function.
-     @param in Input stream to return from getInputStream method.
-     @param out Output stream to return from getOutputStream method.
-    */
-    public ServerAuthenticatorNone(InputStream in, OutputStream out) {
-        this.in = in;
-        this.out = out;
-    }
-    /**
-     Grants access to everyone.Removes authentication related bytes from
-     the stream, when a SOCKS5 connection is being made, selects an
-     authentication NONE.
-     */
-    public ServerAuthenticator startSession(Socket s)
-    throws IOException {
-        PushbackInputStream in =  new PushbackInputStream(s.getInputStream());
-        OutputStream out = s.getOutputStream();
-        int version = in.read();
-
-        if (version == 5) {
-            if (!selectSocks5Authentication(in, out, 0))
-                return null;
-        }
-        else if (version == 4) {
-            //Else it is the request message allready, version 4
-            in.unread(version);
-        }
-        else
-            return null;
-
-        return new ServerAuthenticatorNone(in, out);
-    }
-
-    /**
-      Get input stream.
-      @return Input stream speciefied in the constructor.
-    */
-    public InputStream getInputStream() {
-        return in;
-    }
-    /**
-      Get output stream.
-      @return Output stream speciefied in the constructor.
-    */
-    public OutputStream getOutputStream() {
-        return out;
-    }
-    /**
-      Allways returns null.
-      @return null
-    */
-    public UDPEncapsulation getUdpEncapsulation() {
-        return null;
-    }
-
-    /**
-     Allways returns true.
-    */
-    public boolean checkRequest(ProxyMessage msg) {
-        return true;
-    }
-
-    /**
-     Allways returns true.
-    */
-    public boolean checkRequest(java.net.DatagramPacket dp, boolean out) {
-        return true;
-    }
-
-    /**
-     Does nothing.
-     */
-    public void endSession() {
-    }
-
-    /**
-      Convinience routine for selecting SOCKSv5 authentication.
-      <p>
-      This method reads in authentication methods that client supports,
-      checks wether it supports given method. If it does, the notification
-      method is written back to client, that this method have been chosen
-      for authentication. If given method was not found, authentication
-      failure message is send to client ([5,FF]).
-      @param in Input stream, version byte should be removed from the stream
-                before calling this method.
-      @param out Output stream.
-      @param methodId Method which should be selected.
-      @return true if methodId was found, false otherwise.
-    */
-    static public boolean selectSocks5Authentication(InputStream in,
-            OutputStream out,
-            int methodId)
-    throws IOException {
-        int num_methods = in.read();
-
-        if (num_methods <= 0) return false;
-
-        byte method_ids[] = new byte[num_methods];
-        byte response[] = new byte[2];
-        boolean found = false;
-        response[0] = (byte) 5;    //SOCKS version
-        response[1] = (byte) 0xFF; //Not found, we are pessimistic
-        int bread = 0; //bytes read so far
-
-        while (bread < num_methods)
-            bread += in.read(method_ids, bread, num_methods - bread);
-
-        for (int i = 0; i < num_methods; ++i)
-            if (method_ids[i] == methodId) {
-                found = true;
-                response[1] = (byte) methodId;
-                break;
-            }
-
-        out.write(response);
-        return found;
-    }
-}
+package socks.server;
+import net.sourceforge.jsocks.ProxyMessage;
+import net.sourceforge.jsocks.UDPEncapsulation;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.DataInputStream;
+import java.io.OutputStream;
+import java.io.PushbackInputStream;
+import java.net.Socket;
+
+/**
+ An implementation of ServerAuthenticator, which does <b>not</b> do
+ any authentication.
+<P>
+<FONT size="+3" color ="FF0000"> Warning!!</font><br> Should not be
+used on machines which are not behind the firewall.
+<p>
+It is only provided to make implementing other authentication schemes
+easier.<br>
+For Example: <tt><pre>
+   class MyAuth extends socks.server.ServerAuthenticator{
+    ...
+    public ServerAuthenticator startSession(java.net.Socket s){
+      if(!checkHost(s.getInetAddress()) return null;
+      return super.startSession(s);
+    }
+
+    boolean checkHost(java.net.Inetaddress addr){
+      boolean allow;
+      //Do it somehow
+      return allow;
+    }
+   }
+</pre></tt>
+*/
+public class ServerAuthenticatorNone implements ServerAuthenticator{
+
+   static final byte[] socks5response = {5,0};
+
+   InputStream in;
+   OutputStream out;
+
+   /**
+    Creates new instance of the ServerAuthenticatorNone.
+   */
+   public ServerAuthenticatorNone(){
+     this.in = null;
+     this.out = null;
+   }
+   /**
+    Constructs new ServerAuthenticatorNone object suitable for returning
+    from the startSession function.
+    @param in Input stream to return from getInputStream method.
+    @param out Output stream to return from getOutputStream method.
+   */
+   public ServerAuthenticatorNone(InputStream in, OutputStream out){
+      this.in = in;
+      this.out = out;
+   }
+   /**
+    Grants access to everyone.Removes authentication related bytes from
+    the stream, when a SOCKS5 connection is being made, selects an
+    authentication NONE.
+    */
+   public ServerAuthenticator startSession(Socket s)
+                                  throws IOException{
+
+     PushbackInputStream in =  new PushbackInputStream(s.getInputStream());
+     OutputStream out = s.getOutputStream();
+
+     int version = in.read();
+     if(version == 5){
+       if(!selectSocks5Authentication(in,out,0))
+          return null;
+     }else if(version == 4){
+       //Else it is the request message allready, version 4
+       in.unread(version);
+     }else
+       return null;
+     
+
+     return new ServerAuthenticatorNone(in,out);
+   }
+
+   /**
+     Get input stream.
+     @return Input stream speciefied in the constructor.
+   */
+   public InputStream getInputStream(){
+      return in;
+   }
+   /**
+     Get output stream.
+     @return Output stream speciefied in the constructor.
+   */
+   public OutputStream getOutputStream(){
+      return out;
+   }
+   /**
+     Allways returns null.
+     @return null
+   */
+   public UDPEncapsulation getUdpEncapsulation(){
+      return null;
+   }
+
+   /**
+    Allways returns true.
+   */
+   public boolean checkRequest(ProxyMessage msg){
+     return true;
+   }
+
+   /**
+    Allways returns true.
+   */
+   public boolean checkRequest(java.net.DatagramPacket dp, boolean out){
+     return true;
+   }
+
+   /**
+    Does nothing.
+    */
+   public void endSession(){
+   }
+
+   /**
+     Convinience routine for selecting SOCKSv5 authentication.
+     <p>
+     This method reads in authentication methods that client supports,
+     checks wether it supports given method. If it does, the notification
+     method is written back to client, that this method have been chosen
+     for authentication. If given method was not found, authentication
+     failure message is send to client ([5,FF]).
+     @param in Input stream, version byte should be removed from the stream
+               before calling this method.
+     @param out Output stream.
+     @param methodId Method which should be selected.
+     @return true if methodId was found, false otherwise.
+   */
+   static public boolean selectSocks5Authentication(InputStream in, 
+                                                    OutputStream out,
+                                                    int methodId)
+                                                    throws IOException{
+                                                    
+      int num_methods = in.read();
+      if (num_methods <= 0) return false;
+      byte method_ids[] = new byte[num_methods];
+      byte response[] = new byte[2];
+      boolean found = false;
+
+      response[0] = (byte) 5;    //SOCKS version
+      response[1] = (byte) 0xFF; //Not found, we are pessimistic
+
+      int bread = 0; //bytes read so far
+      while(bread < num_methods)
+         bread += in.read(method_ids,bread,num_methods-bread);
+
+      for(int i=0;i<num_methods;++i)
+         if(method_ids[i] == methodId){
+           found = true;
+           response[1] = (byte) methodId;
+           break;
+         }
+
+      out.write(response);
+      return found;
+   }
+}