Class ConnectHandler

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

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

    Implementation of a Handler that supports HTTP CONNECT.

    • Field Detail

      • LOG

        protected static final Logger LOG
    • Constructor Detail

      • ConnectHandler

        public ConnectHandler()
      • ConnectHandler

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

      • getExecutor

        public Executor getExecutor()
      • setExecutor

        public void setExecutor​(Executor executor)
      • getScheduler

        public Scheduler getScheduler()
      • setScheduler

        public void setScheduler​(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 Exception
        Overrides:
        doStart in class org.eclipse.jetty.server.handler.AbstractHandler
        Throws:
        Exception
      • newSelectorManager

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

        public void handle​(String target,
                           org.eclipse.jetty.server.Request baseRequest,
                           javax.servlet.http.HttpServletRequest request,
                           javax.servlet.http.HttpServletResponse response)
                    throws javax.servlet.ServletException,
                           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
        IOException
      • handleConnect

        protected void handleConnect​(org.eclipse.jetty.server.Request baseRequest,
                                     javax.servlet.http.HttpServletRequest request,
                                     javax.servlet.http.HttpServletResponse response,
                                     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,
                                       String host,
                                       int port,
                                       Promise<SocketChannel> promise)
      • newConnectAddress

        protected InetSocketAddress newConnectAddress​(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,
                                        Throwable failure)
      • handleAuthentication

        protected boolean handleAuthentication​(javax.servlet.http.HttpServletRequest request,
                                               javax.servlet.http.HttpServletResponse response,
                                               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
      • prepareContext

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

        protected int read​(org.eclipse.jetty.io.EndPoint endPoint,
                           ByteBuffer buffer,
                           ConcurrentMap<String,​Object> context)
                    throws 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:
        IOException - if the endPoint cannot be read
      • write

        protected void write​(org.eclipse.jetty.io.EndPoint endPoint,
                             ByteBuffer buffer,
                             Callback callback,
                             ConcurrentMap<String,​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 Set<String> getWhiteListHosts()
      • getBlackListHosts

        public Set<String> getBlackListHosts()
      • validateDestination

        public boolean validateDestination​(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