Class ConnectHandler

  • All Implemented Interfaces:
    org.eclipse.jetty.server.Handler, org.eclipse.jetty.server.HandlerContainer, org.eclipse.jetty.util.component.Container, org.eclipse.jetty.util.component.Destroyable, org.eclipse.jetty.util.component.Dumpable, org.eclipse.jetty.util.component.LifeCycle

    public class ConnectHandler
    extends org.eclipse.jetty.server.handler.HandlerWrapper

    Implementation of a Handler that supports HTTP CONNECT.

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      protected static class  ConnectHandler.ConnectContext  
      protected class  ConnectHandler.ConnectManager  
      class  ConnectHandler.DownstreamConnection  
      class  ConnectHandler.UpstreamConnection  
      • Nested classes/interfaces inherited from class org.eclipse.jetty.server.handler.AbstractHandler

        org.eclipse.jetty.server.handler.AbstractHandler.ErrorDispatchHandler
      • Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

        org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener
      • Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container

        org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.Listener
      • Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle

        org.eclipse.jetty.util.component.LifeCycle.Listener
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected static org.eclipse.jetty.util.log.Logger LOG  
      • Fields inherited from class org.eclipse.jetty.server.handler.HandlerWrapper

        _handler
      • Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

        FAILED, RUNNING, STARTED, STARTING, STOPPED, STOPPING
      • Fields inherited from interface org.eclipse.jetty.util.component.Dumpable

        KEY
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void connectToServer​(javax.servlet.http.HttpServletRequest request, java.lang.String host, int port, org.eclipse.jetty.util.Promise<java.nio.channels.SocketChannel> promise)  
      protected void doStart()  
      java.util.Set<java.lang.String> getBlackListHosts()  
      int getBufferSize()  
      org.eclipse.jetty.io.ByteBufferPool getByteBufferPool()  
      long getConnectTimeout()  
      java.util.concurrent.Executor getExecutor()  
      long getIdleTimeout()  
      org.eclipse.jetty.util.thread.Scheduler getScheduler()  
      java.util.Set<java.lang.String> getWhiteListHosts()  
      void handle​(java.lang.String target, org.eclipse.jetty.server.Request baseRequest, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)  
      protected boolean handleAuthentication​(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String address)
      Handles the authentication before setting up the tunnel to the remote server.
      protected void handleConnect​(org.eclipse.jetty.server.Request baseRequest, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String serverAddress)
      Handles a CONNECT request.
      protected java.net.InetSocketAddress newConnectAddress​(java.lang.String host, int port)
      Creates the server address to connect to.
      protected ConnectHandler.DownstreamConnection newDownstreamConnection​(org.eclipse.jetty.io.EndPoint endPoint, java.util.concurrent.ConcurrentMap<java.lang.String,​java.lang.Object> context)  
      protected org.eclipse.jetty.io.SelectorManager newSelectorManager()  
      protected ConnectHandler.UpstreamConnection newUpstreamConnection​(org.eclipse.jetty.io.EndPoint endPoint, ConnectHandler.ConnectContext connectContext)  
      protected void onConnectFailure​(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.AsyncContext asyncContext, java.lang.Throwable failure)  
      protected void onConnectSuccess​(ConnectHandler.ConnectContext connectContext, ConnectHandler.UpstreamConnection upstreamConnection)  
      protected void prepareContext​(javax.servlet.http.HttpServletRequest request, java.util.concurrent.ConcurrentMap<java.lang.String,​java.lang.Object> context)  
      protected int read​(org.eclipse.jetty.io.EndPoint endPoint, java.nio.ByteBuffer buffer, java.util.concurrent.ConcurrentMap<java.lang.String,​java.lang.Object> context)
      Reads (with non-blocking semantic) into the given buffer from the given endPoint.
      void setBufferSize​(int bufferSize)  
      void setByteBufferPool​(org.eclipse.jetty.io.ByteBufferPool bufferPool)  
      void setConnectTimeout​(long connectTimeout)  
      void setExecutor​(java.util.concurrent.Executor executor)  
      void setIdleTimeout​(long idleTimeout)  
      void setScheduler​(org.eclipse.jetty.util.thread.Scheduler scheduler)  
      boolean validateDestination​(java.lang.String host, int port)
      Checks the given host and port against whitelist and blacklist.
      protected void write​(org.eclipse.jetty.io.EndPoint endPoint, java.nio.ByteBuffer buffer, org.eclipse.jetty.util.Callback callback, java.util.concurrent.ConcurrentMap<java.lang.String,​java.lang.Object> context)
      Writes (with non-blocking semantic) the given buffer of data onto the given endPoint.
      • Methods inherited from class org.eclipse.jetty.server.handler.HandlerWrapper

        destroy, expandChildren, getHandler, getHandlers, insertHandler, setHandler
      • Methods inherited from class org.eclipse.jetty.server.handler.AbstractHandlerContainer

        doShutdown, expandHandler, findContainerOf, getChildHandlerByClass, getChildHandlers, getChildHandlersByClass, setServer
      • Methods inherited from class org.eclipse.jetty.server.handler.AbstractHandler

        doError, doStop, getServer
      • Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle

        addBean, addBean, addBean, addEventListener, addManaged, contains, dump, dump, dump, dump, dump, dumpBeans, dumpObject, dumpObjects, dumpStdErr, dumpThis, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, setStopTimeout, start, stop, unmanage, updateBean, updateBean, updateBeans
      • Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

        addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface org.eclipse.jetty.util.component.Dumpable

        dumpSelf
      • Methods inherited from interface org.eclipse.jetty.util.component.LifeCycle

        addLifeCycleListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop
    • Field Detail

      • LOG

        protected static final org.eclipse.jetty.util.log.Logger LOG
    • Constructor Detail

      • ConnectHandler

        public ConnectHandler()
      • ConnectHandler

        public ConnectHandler​(org.eclipse.jetty.server.Handler handler)
    • Method Detail

      • getExecutor

        public java.util.concurrent.Executor getExecutor()
      • setExecutor

        public void setExecutor​(java.util.concurrent.Executor executor)
      • getScheduler

        public org.eclipse.jetty.util.thread.Scheduler getScheduler()
      • setScheduler

        public void setScheduler​(org.eclipse.jetty.util.thread.Scheduler scheduler)
      • getByteBufferPool

        public org.eclipse.jetty.io.ByteBufferPool getByteBufferPool()
      • setByteBufferPool

        public void setByteBufferPool​(org.eclipse.jetty.io.ByteBufferPool bufferPool)
      • getConnectTimeout

        public long getConnectTimeout()
        Returns:
        the timeout, in milliseconds, to connect to the remote server
      • setConnectTimeout

        public void setConnectTimeout​(long connectTimeout)
        Parameters:
        connectTimeout - the timeout, in milliseconds, to connect to the remote server
      • getIdleTimeout

        public long getIdleTimeout()
        Returns:
        the idle timeout, in milliseconds
      • setIdleTimeout

        public void setIdleTimeout​(long idleTimeout)
        Parameters:
        idleTimeout - the idle timeout, in milliseconds
      • getBufferSize

        public int getBufferSize()
      • setBufferSize

        public void setBufferSize​(int bufferSize)
      • doStart

        protected void doStart()
                        throws java.lang.Exception
        Overrides:
        doStart in class org.eclipse.jetty.server.handler.AbstractHandler
        Throws:
        java.lang.Exception
      • newSelectorManager

        protected org.eclipse.jetty.io.SelectorManager newSelectorManager()
      • handle

        public void handle​(java.lang.String target,
                           org.eclipse.jetty.server.Request baseRequest,
                           javax.servlet.http.HttpServletRequest request,
                           javax.servlet.http.HttpServletResponse response)
                    throws javax.servlet.ServletException,
                           java.io.IOException
        Specified by:
        handle in interface org.eclipse.jetty.server.Handler
        Overrides:
        handle in class org.eclipse.jetty.server.handler.HandlerWrapper
        Throws:
        javax.servlet.ServletException
        java.io.IOException
      • handleConnect

        protected void handleConnect​(org.eclipse.jetty.server.Request baseRequest,
                                     javax.servlet.http.HttpServletRequest request,
                                     javax.servlet.http.HttpServletResponse response,
                                     java.lang.String serverAddress)

        Handles a CONNECT request.

        CONNECT requests may have authentication headers such as Proxy-Authorization that authenticate the client with the proxy.

        Parameters:
        baseRequest - Jetty-specific http request
        request - the http request
        response - the http response
        serverAddress - the remote server address in the form host:port
      • connectToServer

        protected void connectToServer​(javax.servlet.http.HttpServletRequest request,
                                       java.lang.String host,
                                       int port,
                                       org.eclipse.jetty.util.Promise<java.nio.channels.SocketChannel> promise)
      • newConnectAddress

        protected java.net.InetSocketAddress newConnectAddress​(java.lang.String host,
                                                               int port)
        Creates the server address to connect to.
        Parameters:
        host - The host from the CONNECT request
        port - The port from the CONNECT request
        Returns:
        The InetSocketAddress to connect to.
      • onConnectFailure

        protected void onConnectFailure​(javax.servlet.http.HttpServletRequest request,
                                        javax.servlet.http.HttpServletResponse response,
                                        javax.servlet.AsyncContext asyncContext,
                                        java.lang.Throwable failure)
      • handleAuthentication

        protected boolean handleAuthentication​(javax.servlet.http.HttpServletRequest request,
                                               javax.servlet.http.HttpServletResponse response,
                                               java.lang.String address)

        Handles the authentication before setting up the tunnel to the remote server.

        The default implementation returns true.

        Parameters:
        request - the HTTP request
        response - the HTTP response
        address - the address of the remote server in the form host:port.
        Returns:
        true to allow to connect to the remote host, false otherwise
      • newDownstreamConnection

        protected ConnectHandler.DownstreamConnection newDownstreamConnection​(org.eclipse.jetty.io.EndPoint endPoint,
                                                                              java.util.concurrent.ConcurrentMap<java.lang.String,​java.lang.Object> context)
      • prepareContext

        protected void prepareContext​(javax.servlet.http.HttpServletRequest request,
                                      java.util.concurrent.ConcurrentMap<java.lang.String,​java.lang.Object> context)
      • read

        protected int read​(org.eclipse.jetty.io.EndPoint endPoint,
                           java.nio.ByteBuffer buffer,
                           java.util.concurrent.ConcurrentMap<java.lang.String,​java.lang.Object> context)
                    throws java.io.IOException

        Reads (with non-blocking semantic) into the given buffer from the given endPoint.

        Parameters:
        endPoint - the endPoint to read from
        buffer - the buffer to read data into
        context - the context information related to the connection
        Returns:
        the number of bytes read (possibly 0 since the read is non-blocking) or -1 if the channel has been closed remotely
        Throws:
        java.io.IOException - if the endPoint cannot be read
      • write

        protected void write​(org.eclipse.jetty.io.EndPoint endPoint,
                             java.nio.ByteBuffer buffer,
                             org.eclipse.jetty.util.Callback callback,
                             java.util.concurrent.ConcurrentMap<java.lang.String,​java.lang.Object> context)

        Writes (with non-blocking semantic) the given buffer of data onto the given endPoint.

        Parameters:
        endPoint - the endPoint to write to
        buffer - the buffer to write
        callback - the completion callback to invoke
        context - the context information related to the connection
      • getWhiteListHosts

        public java.util.Set<java.lang.String> getWhiteListHosts()
      • getBlackListHosts

        public java.util.Set<java.lang.String> getBlackListHosts()
      • validateDestination

        public boolean validateDestination​(java.lang.String host,
                                           int port)
        Checks the given host and port against whitelist and blacklist.
        Parameters:
        host - the host to check
        port - the port to check
        Returns:
        true if it is allowed to connect to the given host and port