<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">

<!-- =============================================================== -->
<!-- This is the configuration for a standalone i2psnark and         -->
<!-- jetty instance connecting to a router in another jvm.           -->
<!-- Run it with the launch-i2psnark script.                         -->
<!-- i2psnark will be accessed at http://127.0.0.1:8002/             -->
<!-- =============================================================== -->

<!-- =============================================================== -->
<!-- Configure the Jetty Server                                      -->
<!-- =============================================================== -->
<Configure id="Server" class="org.eclipse.jetty.server.Server">

  <!-- =============================================================== -->
  <!-- Configure the Request Listeners                                 -->
  <!-- =============================================================== -->

  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <!-- Add and configure a HTTP listener to port 8002                  -->
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <Call name="addConnector">
    <Arg>
        <New class="org.eclipse.jetty.server.ServerConnector">
          <Arg><Ref id="Server" /></Arg>
          <Arg type="int">1</Arg>     <!-- number of acceptors -->
          <Arg type="int">0</Arg>     <!-- default number of selectors -->
          <Arg>
            <Array type="org.eclipse.jetty.server.ConnectionFactory">    <!-- varargs so we need an array -->
              <Item>
                <New class="org.eclipse.jetty.server.HttpConnectionFactory">
                  <Arg>
                    <New class="org.eclipse.jetty.server.HttpConfiguration" />
                  </Arg>
                </New>
              </Item>
            </Array>
          </Arg>
          <Set name="host">127.0.0.1</Set>
          <Set name="port">8002</Set>
          <Set name="idleTimeout">600000</Set>
        </New>
    </Arg>
  </Call>

  <!-- =============================================================== -->
  <!-- Configure the Contexts                                          -->
  <!-- =============================================================== -->

    <!-- =========================================================== -->
    <!-- Set handler Collection Structure                            --> 
    <!-- =========================================================== -->
    <Set name="handler">
      <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
        <Set name="handlers">
         <Array type="org.eclipse.jetty.server.Handler">
           <Item>
             <New id="HostChecker" class="org.klomp.snark.standalone.HostCheckHandler"/>
           </Item>
           <Item>
             <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
           </Item>
           <Item>
             <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
           </Item>
         </Array>
        </Set>
      </New>
    </Set>

    <!-- =============================================================== -->
    <!-- Create the deployment manager                                   -->
    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    <!-- The deplyment manager handles the lifecycle of deploying web    -->
    <!-- applications. Apps are provided by instances of the             -->
    <!-- AppProvider interface.  Typically these are provided by         -->
    <!-- one or more of:                                                 -->
    <!--   jetty-webapps.xml       - monitors webapps for wars and dirs  -->
    <!--   jetty-contexts.xml      - monitors contexts for context xml   -->
    <!--   jetty-templates.xml     - monitors contexts and templates     -->
    <!-- =============================================================== -->
    <Call name="addBean">
      <Arg>
        <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
          <Set name="contexts">
            <Ref id="Contexts" />
          </Set>
          <Call name="setContextAttribute">
            <Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg>
            <Arg>.*/.*jsp-api-[^/]*\.jar$|.*/.*jsp-[^/]*\.jar$|.*/.*taglibs[^/]*\.jar$</Arg>
          </Call>
        </New>
      </Arg>
    </Call>

    <!-- =========================================================== -->
    <!-- Configure the context deployer                              -->
    <!-- A context deployer will deploy contexts described in        -->
    <!-- configuration files discovered in a directory.              -->
    <!-- The configuration directory can be scanned for hot          -->
    <!-- deployments at the configured scanInterval.                 -->
    <!--                                                             -->
    <!-- This deployer is configured to deploy contexts configured   -->
    <!-- in the $JETTY_HOME/contexts directory                       -->
    <!--                                                             -->
    <!-- =========================================================== -->
    <Ref id="DeploymentManager">
      <Call name="addAppProvider">
        <Arg>
          <New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
            <Set name="monitoredDirName">./contexts</Set>
            <Set name="scanInterval">0</Set>
          </New>
        </Arg>
      </Call>
    </Ref>

    <!-- =========================================================== -->
    <!-- Configure the webapp deployer.                              -->
    <!-- A webapp  deployer will deploy standard webapps discovered  -->
    <!-- in a directory at startup, without the need for additional  -->
    <!-- configuration files.    It does not support hot deploy or   -->
    <!-- non standard contexts (see ContextDeployer above).          -->
    <!--                                                             -->
    <!-- This deployer is configured to deploy webapps from the      -->
    <!-- $JETTY_HOME/webapps directory                               -->
    <!--                                                             -->
    <!-- Normally only one type of deployer need be used.            -->
    <!--                                                             -->
    <!-- =========================================================== -->
    <Ref id="DeploymentManager">
      <Call id="webappprovider" name="addAppProvider">
        <Arg>
          <New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
            <Set name="monitoredDirName">./webapps</Set>
	    <Set name="parentLoaderPriority">false</Set>
	    <Set name="extractWars">false</Set>
            <Set name="scanInterval">0</Set>
          </New>
        </Arg>
      </Call>
    </Ref>

    <!-- ===================== -->
    <!-- DefaultHandler config -->
    <!-- http://stackoverflow.com/questions/4202275/how-to-prevent-jetty-from-showing-context-related-information -->
    <!-- ===================== -->
    <Ref id="DefaultHandler">
      <Set name="showContexts">false</Set>
    </Ref>

</Configure>
