Class ConnectHandler

    • Field Detail

      • LOG

        protected static final Logger LOG
    • Constructor Detail

      • ConnectHandler

        public ConnectHandler()
      • ConnectHandler

        public ConnectHandler​(Handler handler)
    • Method Detail

      • getExecutor

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

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

        public Scheduler getScheduler()
      • setScheduler

        public void setScheduler​(Scheduler scheduler)
      • setByteBufferPool

        public void setByteBufferPool​(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
        Description copied from class: ContainerLifeCycle
        Starts the managed lifecycle beans in the order they were added.
        Overrides:
        doStart in class AbstractHandler
        Throws:
        java.lang.Exception
      • handle

        public void handle​(java.lang.String target,
                           Request baseRequest,
                           javax.servlet.http.HttpServletRequest request,
                           javax.servlet.http.HttpServletResponse response)
                    throws javax.servlet.ServletException,
                           java.io.IOException
        Description copied from interface: Handler
        Handle a request.
        Specified by:
        handle in interface Handler
        Overrides:
        handle in class HandlerWrapper
        Parameters:
        target - The target of the request - either a URI or a name.
        baseRequest - The original unwrapped request object.
        request - The request either as the Request object or a wrapper of that request. The HttpConnection.getCurrentConnection().getHttpChannel().getRequest() method can be used access the Request object if required.
        response - The response as the Response object or a wrapper of that request. The HttpConnection.getCurrentConnection().getHttpChannel().getResponse() method can be used access the Response object if required.
        Throws:
        javax.servlet.ServletException - if unable to handle the request or response due to underlying servlet issue
        java.io.IOException - if unable to handle the request or response processing
      • handleConnect

        protected void handleConnect​(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,
                                       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
      • prepareContext

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

        protected int read​(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​(EndPoint endPoint,
                             java.nio.ByteBuffer buffer,
                             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