<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- The ssg (aka UneasyRooster) web application DD -->
<web-app
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
    <display-name>Layer7 Secure Span Gateway</display-name>

    <!--  Spring configuration file
          used by the org.springframework.web.context.ContextLoaderListener
    -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:com/l7tech/server/transport/http/resources/webApplicationContext.xml
        </param-value>
    </context-param>

    <includeAdminOnlyContent/>

    <filter>
        <filter-name>diagnostic-context</filter-name>
        <filter-class>com.l7tech.server.log.HybridDiagnosticContextServletFilter</filter-class>
    </filter>

    <!--
    Map all requests that would otherwise be 404s to the SOAP servlet, for
    transparency purposes
    -->
    <filter>
        <filter-name>namespace</filter-name>
        <filter-class>com.l7tech.server.transport.http.HttpNamespaceFilter</filter-class>
        <init-param>
            <param-name>passthroughPrefixes</param-name>
            <param-value>/ssg</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>input-timeout</filter-name>
        <filter-class>com.l7tech.server.transport.http.InputTimeoutFilter</filter-class>
        <init-param> <!-- how long to wait on a read -->
            <param-name>blocked-read-timeout</param-name>
            <param-value>30000</param-value>
        </init-param>
        <init-param> <!-- milliseconds before slow read check comes into effect -->
            <param-name>slow-read-timeout</param-name>
            <param-value>30000</param-value>
        </init-param> 
        <init-param><!-- in bytes per second -->
            <param-name>slow-read-throughput</param-name>
            <param-value>1024</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>clusterRemotingFilter</filter-name>
        <filter-class>com.l7tech.gateway.common.spring.remoting.http.SecureHttpFilter</filter-class>
        <init-param>
            <param-name>endpoint-names</param-name>
            <param-value>NODE_COMMUNICATION</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>wsdlFilter</filter-name>
        <filter-class>com.l7tech.server.WsdlFilter</filter-class>
        <init-param>
            <param-name>passthroughPrefixes</param-name>
            <param-value>/ssg/</param-value>
        </init-param>
        <init-param>
            <param-name>wsdl-forward-uri</param-name>
            <param-value>/ssg/wsdl?uri={0}</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>connectionIdFilter</filter-name>
        <filter-class>com.l7tech.server.transport.http.ConnectionIdFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>diagnostic-context</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>input-timeout</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>connectionIdFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>wsdlFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>namespace</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>clusterRemotingFilter</filter-name>
        <url-pattern>/ssg/cluster/*</url-pattern>
    </filter-mapping>

    <!--
         Spring context loader listener that loads the spring beans.
         This version ensures that the parent context is the Gateway's global ApplicationContext.
     -->
    <listener>
        <listener-class>com.l7tech.server.transport.http.SsgContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>error</servlet-name>
        <servlet-class>com.l7tech.server.ErrorServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>ping</servlet-name>
        <servlet-class>com.l7tech.server.PingServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>health</servlet-name>
        <servlet-class>com.l7tech.server.HealthServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>SnmpQueryServlet</servlet-name>
        <servlet-class>com.l7tech.server.SnmpQueryServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>PolicyServlet</servlet-name>
        <servlet-class>com.l7tech.server.policy.PolicyServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>CSRServlet</servlet-name>
        <servlet-class>com.l7tech.server.identity.cert.CSRHandler</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>SoapMessageProcessingServlet</servlet-name>
        <servlet-class>com.l7tech.server.SoapMessageProcessingServlet</servlet-class>

        <init-param>
            <param-name>PolicyServletUri</param-name>
            <param-value>/ssg/policy/disco?serviceoid=</param-value>
        </init-param>
    </servlet>

    <servlet>
        <servlet-name>WsdlProxy</servlet-name>
        <servlet-class>com.l7tech.server.WsdlProxyServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>TokenService</servlet-name>
        <servlet-class>com.l7tech.server.TokenServiceServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>PasswdService</servlet-name>
        <servlet-class>com.l7tech.server.PasswdServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>cluster</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:com/l7tech/server/resources/cluster-servlet.xml</param-value>
        </init-param>
    </servlet>

    <servlet>
        <servlet-name>PM2Servlet</servlet-name>
        <servlet-class>com.l7tech.server.pm2.PM2Servlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>cluster</servlet-name>
        <url-pattern>/ssg/cluster/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>error</servlet-name>
        <url-pattern>/ssg/error</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>error</servlet-name>
        <url-pattern>/ssg</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>SoapMessageProcessingServlet</servlet-name>
        <url-pattern>/ssg/servlet/soap</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>SoapMessageProcessingServlet</servlet-name>
        <url-pattern>/ssg/soap</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>ping</servlet-name>
        <url-pattern>/ssg/ping</url-pattern>
    </servlet-mapping>

    <!--
        NOTE: Make sure ping servlet has a mapping for every url-pattern defined in com.l7tech.server.PingServlet.
    -->
    <servlet-mapping>
        <servlet-name>ping</servlet-name>
        <url-pattern>/ssg/ping/systemInfo</url-pattern>
    </servlet-mapping>

    <!--
    NOTE: Make sure health servlet has a mapping for every url-pattern defined in com.l7tech.server.HealthServlet.
    -->
    <servlet-mapping>
        <servlet-name>health</servlet-name>
        <url-pattern>/ssg/health</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>health</servlet-name>
        <url-pattern>/ssg/health/healthz</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>health</servlet-name>
        <url-pattern>/ssg/health/heap</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>health</servlet-name>
        <url-pattern>/ssg/health/listenPorts</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>SnmpQueryServlet</servlet-name>
        <url-pattern>/ssg/management/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>PolicyServlet</servlet-name>
        <!--
        NB: Update the PolicyServletUri <init-param> in the SoapMessageProcessingServlet
        above when you change this <url-pattern>!
        -->
        <url-pattern>/ssg/policy/disco/*</url-pattern>
    </servlet-mapping>

    <!-- A PolicyServlet bound to disco.modulator for server cert disco and pre-3.2 SSB policy disco. -->
    <servlet-mapping>
        <servlet-name>PolicyServlet</servlet-name>
        <url-pattern>/ssg/policy/disco.modulator/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>CSRServlet</servlet-name>
        <url-pattern>/ssg/csr/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>WsdlProxy</servlet-name>
        <url-pattern>/ssg/wsdl</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>WsdlProxy</servlet-name>
        <url-pattern>/ssg/wsdl/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>PasswdService</servlet-name>
        <url-pattern>/ssg/passwd</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>WsdlProxy</servlet-name>
        <url-pattern>/ssg/wsil</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>TokenService</servlet-name>
        <url-pattern>/ssg/token</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>PM2Servlet</servlet-name>
        <url-pattern>/ssg/pm2/api/*</url-pattern>
    </servlet-mapping>
    
    <mime-mapping>
        <extension>js</extension>
        <mime-type>text/javascript</mime-type>
    </mime-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <error-page>
        <error-code>400</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>401</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>402</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>403</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>404</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>405</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>406</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>407</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>408</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>409</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>410</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>411</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>412</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>413</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>414</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>415</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>416</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>417</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>422</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>423</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>501</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>502</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>503</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>504</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>505</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <error-code>507</error-code>
        <location>/ssg/error</location>
    </error-page>
    <error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/ssg/error</location>
    </error-page>

    <env-entry>
        <description>List of concrete ServiceResolver implementations</description>
        <env-entry-name>ServiceResolvers</env-entry-name>
        <env-entry-value>
            com.l7tech.server.service.resolution.SoapActionResolver
            com.l7tech.server.service.resolution.UrnResolver
            com.l7tech.server.service.resolution.UriResolver
        </env-entry-value>
        <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>

</web-app>
