mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Valery Kharseko
yesterday 9af5bd326500773d89ce30311af5e3cac2a9b3f5
opendj-server-legacy/src/main/java/org/opends/server/protocols/http/HTTPConnectionHandler.java
@@ -30,7 +30,6 @@
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -133,8 +132,8 @@
  /** Indicates whether this connection handler is enabled. */
  private boolean enabled;
  /** The set of listeners for this connection handler. */
  private final List<HostPort> listeners = new LinkedList<>();
  /** The addresses and the port the HTTP server listens on, or starts with next. */
  private volatile List<HostPort> listeners = Collections.emptyList();
  /** The HTTP server embedded in OpenDJ. */
  private HttpServer httpServer;
@@ -448,11 +447,7 @@
      friendlyName = config.name();
    }
    int listenPort = config.getListenPort();
    for (InetAddress a : config.getListenAddress())
    {
      listeners.add(new HostPort(a.getHostAddress(), listenPort));
    }
    listeners = toListeners(config);
    handlerName = getHandlerName(config);
@@ -770,7 +765,17 @@
    this.httpServer = createHttpServer();
    this.httpServer.getServerConfiguration().addHttpHandler(newGrizzlyHttpHandler(new RootHttpApplication()));
    logger.trace("Starting HTTP server...");
    this.httpServer.start();
    try
    {
      this.httpServer.start();
    }
    catch (IOException | RuntimeException e)
    {
      // HttpServer.start() stops at the first listener that cannot bind and leaves the listeners started before it
      // bound: release their addresses, since the caller only forgets about the server.
      this.httpServer.shutdownNow();
      throw e;
    }
    logger.trace("HTTP server started");
    logger.info(NOTE_CONNHANDLER_STARTED_LISTENING, handlerName);
  }
@@ -790,13 +795,41 @@
      setHttpStatsProbe(server);
    }
    // Configure the network listener
    final NetworkListener listener = new NetworkListener(
        "OpenDJ-HTTP", NetworkListener.DEFAULT_NETWORK_HOST, initConfig.getListenPort());
    server.addListener(listener);
    // Configure one network listener per listen address, and report them: a configuration change can replace
    // initConfig after the initialization. HttpServer keys its listeners by name, and each listener owns its
    // transport, so neither can be shared.
    listeners = toListeners(initConfig);
    final int numRequestHandlers = getNumRequestHandlers(currentConfig.getNumRequestHandlers(), friendlyName);
    for (InetAddress address : initConfig.getListenAddress())
    {
      final String host = address.getHostAddress();
      final NetworkListener listener = new NetworkListener("OpenDJ-HTTP " + host, host, initConfig.getListenPort());
      server.addListener(listener);
      configureTransport(listener.getTransport(), numRequestHandlers);
    // Configure the network transport
    final TCPNIOTransport transport = listener.getTransport();
      // Configure SSL
      if (sslEngineConfigurator != null)
      {
        listener.setSecure(true);
        listener.setSSLEngineConfig(sslEngineConfigurator);
      }
    }
    return server;
  }
  private static List<HostPort> toListeners(HTTPConnectionHandlerCfg config)
  {
    final List<HostPort> hostPorts = new ArrayList<>();
    for (InetAddress address : config.getListenAddress())
    {
      hostPorts.add(new HostPort(address.getHostAddress(), config.getListenPort()));
    }
    return Collections.unmodifiableList(hostPorts);
  }
  private void configureTransport(TCPNIOTransport transport, int numRequestHandlers)
  {
    transport.setReuseAddress(currentConfig.isAllowTCPReuseAddress());
    transport.setKeepAlive(currentConfig.isUseTCPKeepAlive());
    transport.setTcpNoDelay(currentConfig.isUseTCPNoDelay());
@@ -807,18 +840,8 @@
    transport.setWriteBufferSize(bufferSize);
    transport.setIOStrategy(SameThreadIOStrategy.getInstance());
    final int numRequestHandlers = getNumRequestHandlers(currentConfig.getNumRequestHandlers(), friendlyName);
    transport.setSelectorRunnersCount(numRequestHandlers);
    transport.setServerConnectionBackLog(currentConfig.getAcceptBacklog());
    // Configure SSL
    if (sslEngineConfigurator != null)
    {
      listener.setSecure(true);
      listener.setSSLEngineConfig(sslEngineConfigurator);
    }
    return server;
  }
  private void setHttpStatsProbe(HttpServer server)