| // |
| // ======================================================================== |
| // Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. |
| // ------------------------------------------------------------------------ |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // and Apache License v2.0 which accompanies this distribution. |
| // |
| // The Eclipse Public License is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // The Apache License v2.0 is available at |
| // http://www.opensource.org/licenses/apache2.0.php |
| // |
| // You may elect to redistribute this code under either of these licenses. |
| // ======================================================================== |
| // |
| |
| package org.eclipse.jetty.server; |
| |
| import java.io.IOException; |
| |
| import org.eclipse.jetty.io.Buffers; |
| import org.eclipse.jetty.io.EndPoint; |
| import org.eclipse.jetty.util.component.LifeCycle; |
| import org.eclipse.jetty.util.thread.ThreadPool; |
| |
| /** HTTP Connector. |
| * Implementations of this interface provide connectors for the HTTP protocol. |
| * A connector receives requests (normally from a socket) and calls the |
| * handle method of the Handler object. These operations are performed using |
| * threads from the ThreadPool set on the connector. |
| * |
| * When a connector is registered with an instance of Server, then the server |
| * will set itself as both the ThreadPool and the Handler. Note that a connector |
| * can be used without a Server if a thread pool and handler are directly provided. |
| * |
| * |
| * |
| */ |
| /** |
| * @author gregw |
| * |
| */ |
| public interface Connector extends LifeCycle |
| { |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return the name of the connector. Defaults to the HostName:port |
| */ |
| String getName(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * Opens the connector |
| * @throws IOException |
| */ |
| void open() throws IOException; |
| |
| /* ------------------------------------------------------------ */ |
| void close() throws IOException; |
| |
| /* ------------------------------------------------------------ */ |
| void setServer(Server server); |
| |
| /* ------------------------------------------------------------ */ |
| Server getServer(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Returns the request header buffer size in bytes. |
| */ |
| int getRequestHeaderSize(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * Set the size of the buffer to be used for request headers. |
| * @param size The size in bytes. |
| */ |
| void setRequestHeaderSize(int size); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Returns the response header buffer size in bytes. |
| */ |
| int getResponseHeaderSize(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * Set the size of the buffer to be used for request headers. |
| * @param size The size in bytes. |
| */ |
| void setResponseHeaderSize(int size); |
| |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return factory for request buffers |
| */ |
| Buffers getRequestBuffers(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return factory for response buffers |
| */ |
| Buffers getResponseBuffers(); |
| |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Returns the requestBufferSize. |
| */ |
| int getRequestBufferSize(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * Set the size of the content buffer for receiving requests. |
| * These buffers are only used for active connections that have |
| * requests with bodies that will not fit within the header buffer. |
| * @param requestBufferSize The requestBufferSize to set. |
| */ |
| void setRequestBufferSize(int requestBufferSize); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Returns the responseBufferSize. |
| */ |
| int getResponseBufferSize(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * Set the size of the content buffer for sending responses. |
| * These buffers are only used for active connections that are sending |
| * responses with bodies that will not fit within the header buffer. |
| * @param responseBufferSize The responseBufferSize to set. |
| */ |
| void setResponseBufferSize(int responseBufferSize); |
| |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return The port to use when redirecting a request if a data constraint of integral is |
| * required. See {@link org.eclipse.jetty.util.security.Constraint#getDataConstraint()} |
| */ |
| int getIntegralPort(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return The schema to use when redirecting a request if a data constraint of integral is |
| * required. See {@link org.eclipse.jetty.util.security.Constraint#getDataConstraint()} |
| */ |
| String getIntegralScheme(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @param request A request |
| * @return true if the request is integral. This normally means the https schema has been used. |
| */ |
| boolean isIntegral(Request request); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return The port to use when redirecting a request if a data constraint of confidential is |
| * required. See {@link org.eclipse.jetty.util.security.Constraint#getDataConstraint()} |
| */ |
| int getConfidentialPort(); |
| |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return The schema to use when redirecting a request if a data constraint of confidential is |
| * required. See {@link org.eclipse.jetty.util.security.Constraint#getDataConstraint()} |
| */ |
| String getConfidentialScheme(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @param request A request |
| * @return true if the request is confidential. This normally means the https schema has been used. |
| */ |
| boolean isConfidential(Request request); |
| |
| /* ------------------------------------------------------------ */ |
| /** Customize a request for an endpoint. |
| * Called on every request to allow customization of the request for |
| * the particular endpoint (eg security properties from a SSL connection). |
| * @param endpoint |
| * @param request |
| * @throws IOException |
| */ |
| void customize(EndPoint endpoint, Request request) throws IOException; |
| |
| /* ------------------------------------------------------------ */ |
| /** Persist an endpoint. |
| * Called after every request if the connection is to remain open. |
| * @param endpoint |
| * @throws IOException |
| */ |
| void persist(EndPoint endpoint) throws IOException; |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return The hostname representing the interface to which |
| * this connector will bind, or null for all interfaces. |
| */ |
| String getHost(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * Set the hostname of the interface to bind to. |
| * @param hostname The hostname representing the interface to which |
| * this connector will bind, or null for all interfaces. |
| */ |
| void setHost(String hostname); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @param port The port to listen of for connections or 0 if any available |
| * port may be used. |
| */ |
| void setPort(int port); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return The configured port for the connector or 0 if any available |
| * port may be used. |
| */ |
| int getPort(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return The actual port the connector is listening on or |
| * -1 if it has not been opened, or -2 if it has been closed. |
| */ |
| int getLocalPort(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Max Idle time for connections in milliseconds |
| */ |
| int getMaxIdleTime(); |
| |
| /** |
| * @param ms Max Idle time for connections in milliseconds |
| */ |
| void setMaxIdleTime(int ms); |
| |
| /* ------------------------------------------------------------ */ |
| int getLowResourceMaxIdleTime(); |
| void setLowResourceMaxIdleTime(int ms); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return the underlying socket, channel, buffer etc. for the connector. |
| */ |
| Object getConnection(); |
| |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return true if names resolution should be done. |
| */ |
| boolean getResolveNames(); |
| |
| |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Get the number of requests handled by this connector |
| * since last call of statsReset(). If setStatsOn(false) then this |
| * is undefined. |
| */ |
| public int getRequests(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Returns the connectionsDurationTotal. |
| */ |
| public long getConnectionsDurationTotal(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Number of connections accepted by the server since |
| * statsReset() called. Undefined if setStatsOn(false). |
| */ |
| public int getConnections() ; |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Number of connections currently open that were opened |
| * since statsReset() called. Undefined if setStatsOn(false). |
| */ |
| public int getConnectionsOpen() ; |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Maximum number of connections opened simultaneously |
| * since statsReset() called. Undefined if setStatsOn(false). |
| */ |
| public int getConnectionsOpenMax() ; |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Maximum duration in milliseconds of an open connection |
| * since statsReset() called. Undefined if setStatsOn(false). |
| */ |
| public long getConnectionsDurationMax(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Mean duration in milliseconds of open connections |
| * since statsReset() called. Undefined if setStatsOn(false). |
| */ |
| public double getConnectionsDurationMean() ; |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Standard deviation of duration in milliseconds of |
| * open connections since statsReset() called. Undefined if |
| * setStatsOn(false). |
| */ |
| public double getConnectionsDurationStdDev() ; |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Mean number of requests per connection |
| * since statsReset() called. Undefined if setStatsOn(false). |
| */ |
| public double getConnectionsRequestsMean() ; |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Standard Deviation of number of requests per connection |
| * since statsReset() called. Undefined if setStatsOn(false). |
| */ |
| public double getConnectionsRequestsStdDev() ; |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Maximum number of requests per connection |
| * since statsReset() called. Undefined if setStatsOn(false). |
| */ |
| public int getConnectionsRequestsMax(); |
| |
| /* ------------------------------------------------------------ */ |
| /** Reset statistics. |
| */ |
| public void statsReset(); |
| |
| /* ------------------------------------------------------------ */ |
| public void setStatsOn(boolean on); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return True if statistics collection is turned on. |
| */ |
| public boolean getStatsOn(); |
| |
| /* ------------------------------------------------------------ */ |
| /** |
| * @return Timestamp stats were started at. |
| */ |
| public long getStatsOnMs(); |
| |
| |
| /* ------------------------------------------------------------ */ |
| /** Check if low on resources. |
| * For most connectors, low resources is measured by calling |
| * {@link ThreadPool#isLowOnThreads()} on the connector threadpool |
| * or the server threadpool if there is no connector threadpool. |
| * <p> |
| * For blocking connectors, low resources is used to trigger |
| * usage of {@link #getLowResourceMaxIdleTime()} for the timeout |
| * of an idle connection. |
| * <p> |
| * for non-blocking connectors, the number of connections is |
| * used instead of this method, to select the timeout of an |
| * idle connection. |
| * <p> |
| * For all connectors, low resources is used to trigger the |
| * usage of {@link #getLowResourceMaxIdleTime()} for read and |
| * write operations. |
| * |
| * @return true if this connector is low on resources. |
| */ |
| public boolean isLowResources(); |
| } |