Class SunProxy

  • All Implemented Interfaces:
    UseProxy, Handler, SocketFactory

    public class SunProxy
    extends java.lang.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)
    • Constructor Summary

      Constructors 
      Constructor Description
      SunProxy()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean init​(Server server, java.lang.String prefix)
      Called when the Server is being initialized to install this object as the SocketFactory for the HttpRequest.
      java.net.Socket newSocket​(java.lang.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​(java.lang.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 Detail

      • SunProxy

        public SunProxy()
    • Method Detail

      • init

        public boolean init​(Server server,
                            java.lang.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​(java.lang.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 java.net.Socket newSocket​(java.lang.String host,
                                         int port)
                                  throws java.io.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:
        java.io.IOException - If there is some problem establishing the socket to the specified port on the named host.