Class SunProxy

java.lang.Object
sunlabs.brazil.proxy.SunProxy
All Implemented Interfaces:
UseProxy, Handler, SocketFactory

public class SunProxy extends Object implements SocketFactory, UseProxy, Handler
Sun Specific implementation of a SocketFactory and proxy-decider that work together to decipher the specifics of the Sun Internet setup.

NOTE: The mechanism used by this class has been disabled; it is included here to illustrate how to write a custom proxy.

Version:
2.3
Author:
Stephen Uhler (stephen.uhler@sun.com), Colin Stevens (colin.stevens@sun.com)
  • Field Summary

    Fields inherited from interface sunlabs.brazil.util.SocketFactory

    defaultFactory
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    init(Server server, String prefix)
    Called when the Server is being initialized to install this object as the SocketFactory for the HttpRequest.
    newSocket(String host, int port)
    Creates a new Socket that talks to the specified port on the named host.
    boolean
    respond(Request request)
    Handler http requests - doesn't do anything yet
    boolean
    useProxy(String host, int port)
    Determines if the user should use an HTTP proxy when sending an HTTP request to the specified host and port.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • SunProxy

      public SunProxy()
  • Method Details

    • init

      public boolean init(Server server, String prefix)
      Called when the Server is being initialized to install this object as the SocketFactory for the HttpRequest.

      This procedure is very specific and specialized to the Brazil server. This functionality should probably be moved into a separate "Init" class that:

      • examines the configuration properties.
      • creates a new instace of the SunProxy class.
      • installs this object as the SocketFactory.
      That would disentangle this class from the Brazil server, since nothing else in this class is tied to the implementation.

      As it stands now, the first time this method is called, the side effect is to install itself as the SocketFactory. This method will also be called subsequently when instances of the ProxyHandler instantiate this object as a UseProxy decider, but in that case, no configuration properties need to be examined.

      Specified by:
      init in interface Handler
      Parameters:
      server - The http server that owns this object. This object uses Server.props to obtain run time configuration information.
      prefix - A prefix to prepend to all of the keys that this object uses to extract configuration information out of Server.props.
      Returns:
      true always, indicating success.
    • respond

      public boolean respond(Request request)
      Handler http requests - doesn't do anything yet
      Specified by:
      respond in interface Handler
      Parameters:
      request - The Request object that represents the HTTP request.
      Returns:
      true if the request was handled. A request was handled if a response was supplied to the client, typically by calling Request.sendResponse() or Request.sendError.
    • useProxy

      public boolean useProxy(String host, int port)
      Determines if the user should use an HTTP proxy when sending an HTTP request to the specified host and port.

      Whether or not to proxy may depend upon the HTTP proxy the caller is using. Currently, there is no way to capture and use this information.

      The decision is different than deciding if the host is local, because using the itelnet tunnelling trick we can reach some external hosts from within the firewall. This routine is therefore in cohoots with the itelnet behavior, and requires that the caller use this object as the SocketFactory if this method returns true.

      Observed behavior:

      • DNS is messed up, and can resolve the hostname of some machines that are not accessible. Simplifying assumption: all #.#.#.# must be proxied
      • pangaea.eng(.sun.com) is inside the firewall and accessible via a direct socket. Return false.
      • www.sgi.com and www.microsoft.com are outside the firewall but accessible via an itelnet socket. Return false.
      • www.sun.com and docs.sun.com are outside the firewall but not accessible via an itelnet socket. Return true.
      Specified by:
      useProxy in interface UseProxy
      Parameters:
      host - The host name.
      port - The port number.
      Returns:
      true if the user should send the HTTP request via an HTTP proxy, false if the user can send the HTTP request directly to the specified named host.
    • newSocket

      public Socket newSocket(String host, int port) throws IOException
      Description copied from interface: SocketFactory
      Creates a new Socket that talks to the specified port on the named host.

      The implementation may choose any way it wants to provide a socket-like object (essentially any mechanism that supports bidirectional communication). The returned Socket (or subclass of Socket) might not be based on TCP/IP, or it might involve running a TCP/IP stack over some other protocol, or it might actually redirect all connections via some other proxy machine, etc.

      Specified by:
      newSocket in interface SocketFactory
      Parameters:
      host - The host name.
      port - The port number.
      Returns:
      An object that provides socket-like communication.
      Throws:
      IOException - If there is some problem establishing the socket to the specified port on the named host.