You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by gg...@apache.org on 2019/02/06 21:12:33 UTC

[httpcomponents-core] branch HTTPCORE-570 created (now 495685c)

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a change to branch HTTPCORE-570
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git.


      at 495685c  [HTTPCORE-570]

This branch includes the following new commits:

     new 495685c  [HTTPCORE-570]

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[httpcomponents-core] 01/01: [HTTPCORE-570]

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch HTTPCORE-570
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git

commit 495685c41bb7ed10a38c12e841b5ab1ee8512c91
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Wed Feb 6 16:12:22 2019 -0500

    [HTTPCORE-570]
    
    Add getters to AsyncServerBootstrap and refactor create() impl into
    protected methods
---
 .../http/impl/bootstrap/AsyncServerBootstrap.java  | 169 ++++++++++++++++-----
 1 file changed, 134 insertions(+), 35 deletions(-)

diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServerBootstrap.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServerBootstrap.java
index ce74518..bf1e5a6 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServerBootstrap.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServerBootstrap.java
@@ -74,23 +74,23 @@ import org.apache.hc.core5.util.Timeout;
 public class AsyncServerBootstrap {
 
     private final List<HandlerEntry<Supplier<AsyncServerExchangeHandler>>> handlerList;
-    private final List<FilterEntry<AsyncFilterHandler>> filters;
+    private final List<FilterEntry<AsyncFilterHandler>> filterList;
     private String canonicalHostName;
     private UriPatternType uriPatternType;
     private IOReactorConfig ioReactorConfig;
     private H1Config h1Config;
     private CharCodingConfig charCodingConfig;
     private HttpProcessor httpProcessor;
-    private ConnectionReuseStrategy connStrategy;
+    private ConnectionReuseStrategy connectionReuseStrategy;
     private TlsStrategy tlsStrategy;
     private Timeout handshakeTimeout;
     private Decorator<IOSession> ioSessionDecorator;
-    private IOSessionListener sessionListener;
+    private IOSessionListener ioSessionListener;
     private Http1StreamListener streamListener;
 
     private AsyncServerBootstrap() {
         this.handlerList = new ArrayList<>();
-        this.filters = new ArrayList<>();
+        this.filterList = new ArrayList<>();
     }
 
     public static AsyncServerBootstrap bootstrap() {
@@ -141,7 +141,7 @@ public class AsyncServerBootstrap {
      * Assigns {@link org.apache.hc.core5.http.ConnectionReuseStrategy} instance.
      */
     public final AsyncServerBootstrap setConnectionReuseStrategy(final ConnectionReuseStrategy connStrategy) {
-        this.connStrategy = connStrategy;
+        this.connectionReuseStrategy = connStrategy;
         return this;
     }
 
@@ -173,7 +173,7 @@ public class AsyncServerBootstrap {
      * Assigns {@link IOSessionListener} instance.
      */
     public final AsyncServerBootstrap setIOSessionListener(final IOSessionListener sessionListener) {
-        this.sessionListener = sessionListener;
+        this.ioSessionListener = sessionListener;
         return this;
     }
 
@@ -276,7 +276,7 @@ public class AsyncServerBootstrap {
         Args.notBlank(existing, "Existing");
         Args.notBlank(name, "Name");
         Args.notNull(filterHandler, "Filter handler");
-        filters.add(new FilterEntry<>(FilterEntry.Postion.BEFORE, name, filterHandler, existing));
+        filterList.add(new FilterEntry<>(FilterEntry.Postion.BEFORE, name, filterHandler, existing));
         return this;
     }
 
@@ -287,7 +287,7 @@ public class AsyncServerBootstrap {
         Args.notBlank(existing, "Existing");
         Args.notBlank(name, "Name");
         Args.notNull(filterHandler, "Filter handler");
-        filters.add(new FilterEntry<>(FilterEntry.Postion.AFTER, name, filterHandler, existing));
+        filterList.add(new FilterEntry<>(FilterEntry.Postion.AFTER, name, filterHandler, existing));
         return this;
     }
 
@@ -297,7 +297,7 @@ public class AsyncServerBootstrap {
     public final AsyncServerBootstrap replaceFilter(final String existing, final AsyncFilterHandler filterHandler) {
         Args.notBlank(existing, "Existing");
         Args.notNull(filterHandler, "Filter handler");
-        filters.add(new FilterEntry<>(FilterEntry.Postion.REPLACE, existing, filterHandler, existing));
+        filterList.add(new FilterEntry<>(FilterEntry.Postion.REPLACE, existing, filterHandler, existing));
         return this;
     }
 
@@ -307,7 +307,7 @@ public class AsyncServerBootstrap {
     public final AsyncServerBootstrap addFilterFirst(final String name, final AsyncFilterHandler filterHandler) {
         Args.notNull(name, "Name");
         Args.notNull(filterHandler, "Filter handler");
-        filters.add(new FilterEntry<>(FilterEntry.Postion.FIRST, name, filterHandler, null));
+        filterList.add(new FilterEntry<>(FilterEntry.Postion.FIRST, name, filterHandler, null));
         return this;
     }
 
@@ -317,20 +317,50 @@ public class AsyncServerBootstrap {
     public final AsyncServerBootstrap addFilterLast(final String name, final AsyncFilterHandler filterHandler) {
         Args.notNull(name, "Name");
         Args.notNull(filterHandler, "Filter handler");
-        filters.add(new FilterEntry<>(FilterEntry.Postion.LAST, name, filterHandler, null));
+        filterList.add(new FilterEntry<>(FilterEntry.Postion.LAST, name, filterHandler, null));
         return this;
     }
 
     public HttpAsyncServer create() {
-        final RequestHandlerRegistry<Supplier<AsyncServerExchangeHandler>> registry = new RequestHandlerRegistry<>(
-                canonicalHostName != null ? canonicalHostName : InetAddressUtils.getCanonicalLocalHostName(),
-                uriPatternType);
-        for (final HandlerEntry<Supplier<AsyncServerExchangeHandler>> entry: handlerList) {
-            registry.register(entry.hostname, entry.uriPattern, entry.handler);
-        }
+        final RequestHandlerRegistry<Supplier<AsyncServerExchangeHandler>> registry = createRequestHandlerRegistry();
+        registerHandlers(registry);
+        final HandlerFactory<AsyncServerExchangeHandler> handlerFactory = createHandlerFactory(registry);
+        final ServerHttp1StreamDuplexerFactory streamHandlerFactory = createServerHttp1StreamDuplexerFactory(handlerFactory);
+        final IOEventHandlerFactory ioEventHandlerFactory = createIOEventHandlerFactory(streamHandlerFactory);
+        return createHttpAsyncServer(ioEventHandlerFactory);
+    }
+
+    protected HttpAsyncServer createHttpAsyncServer(final IOEventHandlerFactory ioEventHandlerFactory) {
+        return new HttpAsyncServer(ioEventHandlerFactory, ioReactorConfig, ioSessionDecorator, ioSessionListener);
+    }
+
+    protected ServerHttp1IOEventHandlerFactory createIOEventHandlerFactory(
+            final ServerHttp1StreamDuplexerFactory streamHandlerFactory) {
+        return new ServerHttp1IOEventHandlerFactory(
+                streamHandlerFactory,
+                tlsStrategy,
+                handshakeTimeout);
+    }
 
+    protected ServerHttp1StreamDuplexerFactory createServerHttp1StreamDuplexerFactory(
+            final HandlerFactory<AsyncServerExchangeHandler> handlerFactory) {
+        return new ServerHttp1StreamDuplexerFactory(
+                httpProcessor != null ? httpProcessor : HttpProcessors.server(),
+                handlerFactory,
+                h1Config != null ? h1Config : H1Config.DEFAULT,
+                charCodingConfig != null ? charCodingConfig : CharCodingConfig.DEFAULT,
+                connectionReuseStrategy != null ? connectionReuseStrategy : DefaultConnectionReuseStrategy.INSTANCE,
+                DefaultHttpRequestParserFactory.INSTANCE,
+                DefaultHttpResponseWriterFactory.INSTANCE,
+                DefaultContentLengthStrategy.INSTANCE,
+                DefaultContentLengthStrategy.INSTANCE,
+                streamListener);
+    }
+
+    protected HandlerFactory<AsyncServerExchangeHandler> createHandlerFactory(
+            final RequestHandlerRegistry<Supplier<AsyncServerExchangeHandler>> registry) {
         final HandlerFactory<AsyncServerExchangeHandler> handlerFactory;
-        if (!filters.isEmpty()) {
+        if (!filterList.isEmpty()) {
             final NamedElementChain<AsyncFilterHandler> filterChainDefinition = new NamedElementChain<>();
             filterChainDefinition.addLast(
                     new TerminalAsyncServerFilter(new DefaultAsyncResponseExchangeHandlerFactory(registry)),
@@ -339,7 +369,7 @@ public class AsyncServerBootstrap {
                     new AsyncServerExpectationFilter(),
                     StandardFilters.EXPECT_CONTINUE.name());
 
-            for (final FilterEntry<AsyncFilterHandler> entry: filters) {
+            for (final FilterEntry<AsyncFilterHandler> entry: filterList) {
                 switch (entry.postion) {
                     case AFTER:
                         filterChainDefinition.addAfter(entry.existing, entry.filterHandler, entry.name);
@@ -377,23 +407,92 @@ public class AsyncServerBootstrap {
 
             });
         }
+        return handlerFactory;
+    }
 
-        final ServerHttp1StreamDuplexerFactory streamHandlerFactory = new ServerHttp1StreamDuplexerFactory(
-                httpProcessor != null ? httpProcessor : HttpProcessors.server(),
-                handlerFactory,
-                h1Config != null ? h1Config : H1Config.DEFAULT,
-                charCodingConfig != null ? charCodingConfig : CharCodingConfig.DEFAULT,
-                connStrategy != null ? connStrategy : DefaultConnectionReuseStrategy.INSTANCE,
-                DefaultHttpRequestParserFactory.INSTANCE,
-                DefaultHttpResponseWriterFactory.INSTANCE,
-                DefaultContentLengthStrategy.INSTANCE,
-                DefaultContentLengthStrategy.INSTANCE,
-                streamListener);
-        final IOEventHandlerFactory ioEventHandlerFactory = new ServerHttp1IOEventHandlerFactory(
-                streamHandlerFactory,
-                tlsStrategy,
-                handshakeTimeout);
-        return new HttpAsyncServer(ioEventHandlerFactory, ioReactorConfig, ioSessionDecorator, sessionListener);
+    protected void registerHandlers(final RequestHandlerRegistry<Supplier<AsyncServerExchangeHandler>> registry) {
+        for (final HandlerEntry<Supplier<AsyncServerExchangeHandler>> entry: handlerList) {
+            registry.register(entry.hostname, entry.uriPattern, entry.handler);
+        }
+    }
+
+    protected RequestHandlerRegistry<Supplier<AsyncServerExchangeHandler>> createRequestHandlerRegistry() {
+        final RequestHandlerRegistry<Supplier<AsyncServerExchangeHandler>> registry = new RequestHandlerRegistry<>(
+                canonicalHostName != null ? canonicalHostName : InetAddressUtils.getCanonicalLocalHostName(),
+                uriPatternType);
+        return registry;
+    }
+
+    protected IOReactorConfig getIoReactorConfig() {
+        return ioReactorConfig;
+    }
+
+    protected void setIoReactorConfig(final IOReactorConfig ioReactorConfig) {
+        this.ioReactorConfig = ioReactorConfig;
+    }
+
+    protected Timeout getHandshakeTimeout() {
+        return handshakeTimeout;
+    }
+
+    protected void setHandshakeTimeout(final Timeout handshakeTimeout) {
+        this.handshakeTimeout = handshakeTimeout;
+    }
+
+    protected Decorator<IOSession> getIoSessionDecorator() {
+        return ioSessionDecorator;
+    }
+
+    protected void setIoSessionDecorator(final Decorator<IOSession> ioSessionDecorator) {
+        this.ioSessionDecorator = ioSessionDecorator;
+    }
+
+    protected IOSessionListener getIoSessionListener() {
+        return ioSessionListener;
+    }
+
+    protected void setIoSessionListener(final IOSessionListener ioSessionListener) {
+        this.ioSessionListener = ioSessionListener;
+    }
+
+    protected List<HandlerEntry<Supplier<AsyncServerExchangeHandler>>> getHandlerList() {
+        return handlerList;
+    }
+
+    protected List<FilterEntry<AsyncFilterHandler>> getFilterList() {
+        return filterList;
+    }
+
+    protected String getCanonicalHostName() {
+        return canonicalHostName;
+    }
+
+    protected UriPatternType getUriPatternType() {
+        return uriPatternType;
+    }
+
+    protected H1Config getH1Config() {
+        return h1Config;
+    }
+
+    protected CharCodingConfig getCharCodingConfig() {
+        return charCodingConfig;
+    }
+
+    protected HttpProcessor getHttpProcessor() {
+        return httpProcessor;
+    }
+
+    protected ConnectionReuseStrategy getConnectionReuseStrategy() {
+        return connectionReuseStrategy;
+    }
+
+    protected TlsStrategy getTlsStrategy() {
+        return tlsStrategy;
+    }
+
+    protected Http1StreamListener getStreamListener() {
+        return streamListener;
     }
 
 }