protected org.glassfish.grizzly.http.HttpServerFilter createHttpServerCodecFilter(
      final Http http,
      final boolean isChunkedEnabled,
      final int headerBufferLengthBytes,
      final String defaultResponseType,
      final KeepAlive keepAlive,
      final DelayedExecutor delayedExecutor,
      final int maxRequestHeaders,
      final int maxResponseHeaders) {
    final org.glassfish.grizzly.http.HttpServerFilter httpCodecFilter =
        new org.glassfish.grizzly.http.HttpServerFilter(
            isChunkedEnabled,
            headerBufferLengthBytes,
            defaultResponseType,
            keepAlive,
            delayedExecutor,
            maxRequestHeaders,
            maxResponseHeaders);

    if (http != null) { // could be null for HTTP redirect
      httpCodecFilter.setMaxPayloadRemainderToSkip(
          Integer.parseInt(http.getMaxSwallowingInputBytes()));
    }

    return httpCodecFilter;
  }
  @SuppressWarnings({"deprecation"})
  protected void configureHttpProtocol(
      final ServiceLocator habitat,
      final NetworkListener networkListener,
      final Http http,
      final FilterChainBuilder filterChainBuilder,
      boolean secure) {
    transactionTimeoutMillis = Long.parseLong(http.getRequestTimeoutSeconds()) * 1000;
    filterChainBuilder.add(
        new IdleTimeoutFilter(
            obtainDelayedExecutor(), Integer.parseInt(http.getTimeoutSeconds()), TimeUnit.SECONDS));
    final org.glassfish.grizzly.http.HttpServerFilter httpServerFilter =
        createHttpServerCodecFilter(http);
    final Set<ContentEncoding> contentEncodings = configureContentEncodings(http);
    for (ContentEncoding contentEncoding : contentEncodings) {
      httpServerFilter.addContentEncoding(contentEncoding);
    }
    //        httpServerFilter.getMonitoringConfig().addProbes(
    //                serverConfig.getMonitoringConfig().getHttpConfig().getProbes());
    filterChainBuilder.add(httpServerFilter);
    final FileCache fileCache = configureHttpFileCache(http.getFileCache());
    fileCache.initialize(obtainDelayedExecutor());
    final FileCacheFilter fileCacheFilter = new FileCacheFilter(fileCache);
    //        fileCache.getMonitoringConfig().addProbes(
    //                serverConfig.getMonitoringConfig().getFileCacheConfig().getProbes());
    filterChainBuilder.add(fileCacheFilter);
    final HttpServerFilter webServerFilter =
        new HttpServerFilter(getHttpServerFilterConfiguration(http), obtainDelayedExecutor());

    final HttpHandler httpHandler = getHttpHandler();
    httpHandler.setAllowEncodedSlash(GrizzlyConfig.toBoolean(http.getEncodedSlashEnabled()));
    webServerFilter.setHttpHandler(httpHandler);
    //        webServerFilter.getMonitoringConfig().addProbes(
    //                serverConfig.getMonitoringConfig().getWebServerConfig().getProbes());
    filterChainBuilder.add(webServerFilter);

    configureSpdySupport(habitat, networkListener, http.getSpdy(), filterChainBuilder, secure);

    // TODO: evaluate comet/websocket support over SPDY.
    configureCometSupport(habitat, networkListener, http, filterChainBuilder);

    configureWebSocketSupport(habitat, networkListener, http, filterChainBuilder);

    configureAjpSupport(habitat, networkListener, http, filterChainBuilder);
  }
Example #3
0
  private void configureListener(final NetworkListener listener) {
    FilterChain chain = listener.getFilterChain();
    if (chain == null) {
      final FilterChainBuilder builder = FilterChainBuilder.newInstance();
      builder.add(new TransportFilter());
      if (listener.isSecure()) {
        SSLEngineConfigurator sslConfig = listener.getSslEngineConfig();
        if (sslConfig == null) {
          sslConfig =
              new SSLEngineConfigurator(SSLContextConfigurator.DEFAULT_CONFIG, false, false, false);
          listener.setSSLEngineConfig(sslConfig);
        }
        final SSLBaseFilter filter = new SSLBaseFilter(sslConfig);
        builder.add(filter);
      }
      final int maxHeaderSize =
          listener.getMaxHttpHeaderSize() == -1
              ? org.glassfish.grizzly.http.HttpServerFilter.DEFAULT_MAX_HTTP_PACKET_HEADER_SIZE
              : listener.getMaxHttpHeaderSize();

      // Passing null value for the delayed executor, because IdleTimeoutFilter should
      // handle idle connections for us
      final org.glassfish.grizzly.http.HttpServerFilter httpServerCodecFilter =
          new org.glassfish.grizzly.http.HttpServerFilter(
              listener.isChunkingEnabled(),
              maxHeaderSize,
              null,
              listener.getKeepAliveConfig(),
              null,
              listener.getMaxRequestHeaders(),
              listener.getMaxResponseHeaders());
      final Set<ContentEncoding> contentEncodings = configureCompressionEncodings(listener);
      for (ContentEncoding contentEncoding : contentEncodings) {
        httpServerCodecFilter.addContentEncoding(contentEncoding);
      }

      httpServerCodecFilter
          .getMonitoringConfig()
          .addProbes(serverConfig.getMonitoringConfig().getHttpConfig().getProbes());
      builder.add(httpServerCodecFilter);

      builder.add(
          new IdleTimeoutFilter(
              delayedExecutor,
              listener.getKeepAliveConfig().getIdleTimeoutInSeconds(),
              TimeUnit.SECONDS));

      final Transport transport = listener.getTransport();
      final FileCache fileCache = listener.getFileCache();
      fileCache.initialize(delayedExecutor);
      final FileCacheFilter fileCacheFilter = new FileCacheFilter(fileCache);
      fileCache
          .getMonitoringConfig()
          .addProbes(serverConfig.getMonitoringConfig().getFileCacheConfig().getProbes());
      builder.add(fileCacheFilter);

      final ServerFilterConfiguration config = new ServerFilterConfiguration(serverConfig);

      if (listener.isSendFileExplicitlyConfigured()) {
        config.setSendFileEnabled(listener.isSendFileEnabled());
        fileCache.setFileSendEnabled(listener.isSendFileEnabled());
      }

      if (listener.getBackendConfig() != null) {
        config.setBackendConfiguration(listener.getBackendConfig());
      }

      if (listener.getDefaultErrorPageGenerator() != null) {
        config.setDefaultErrorPageGenerator(listener.getDefaultErrorPageGenerator());
      }

      config.setTraceEnabled(config.isTraceEnabled() || listener.isTraceEnabled());

      config.setMaxFormPostSize(listener.getMaxFormPostSize());
      config.setMaxBufferedPostSize(listener.getMaxBufferedPostSize());

      final HttpServerFilter httpServerFilter = new HttpServerFilter(config, delayedExecutor);
      httpServerFilter.setHttpHandler(httpHandlerChain);

      httpServerFilter
          .getMonitoringConfig()
          .addProbes(serverConfig.getMonitoringConfig().getWebServerConfig().getProbes());

      builder.add(httpServerFilter);
      chain = builder.build();

      final AddOn[] addons = listener.getAddOnSet().getArray();
      if (addons != null) {
        for (AddOn addon : addons) {
          addon.setup(listener, chain);
        }
      }

      listener.setFilterChain(chain);
      final int transactionTimeout = listener.getTransactionTimeout();
      if (transactionTimeout >= 0) {
        ThreadPoolConfig threadPoolConfig = transport.getWorkerThreadPoolConfig();

        if (threadPoolConfig != null) {
          threadPoolConfig.setTransactionTimeout(
              delayedExecutor, transactionTimeout, TimeUnit.SECONDS);
        }
      }
    }
    configureMonitoring(listener);
  }