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, org.eclipse.jetty.util.component.AbstractLifeCycle.StopException
      • 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.slf4j.Logger LOG  
      • Fields inherited from class org.eclipse.jetty.server.handler.HandlerWrapper

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

        FAILED, 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 jettyRequest, 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

        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, addEventListener, addManaged, contains, dump, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans
      • Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

        getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, 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.Container

        getCachedBeans, getEventListeners
      • Methods inherited from interface org.eclipse.jetty.util.component.Dumpable

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

        addEventListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeEventListener, start, stop
    • Field Detail

      • LOG

        protected static final org.slf4j.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 jettyRequest,
                           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