<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<!-- =============================================================== -->
<!-- Configure the Jetty Server                                      -->
<!--                                                                 -->
<!-- Documentation of this file format can be found at:              -->
<!-- http://www.eclipse.org/jetty/documentation/9.2.6.v20141205/embedding-jetty.html#d0e19067 -->
<!-- 
	***NOTE:  With Jetty 9 it is now essential that this configuration
	   has a DTD declaration (see above) ***                         -->
<!-- =============================================================== -->

<Configure id="Server" class="org.eclipse.jetty.server.Server">
  <!-- =========================================================== -->
  <!-- Server Thread Pool                                          -->
  <!-- =========================================================== -->
  	<!-- uncomment to change type of threadpool
	<Arg name="threadpool"><New id="threadpool" class="org.eclipse.jetty.util.thread.QueuedThreadPool"/></Arg>
	-->
	<Get name="ThreadPool">
		<Set name="minThreads" type="int"><Property name="threads.min" default="4"/></Set>
		<Set name="maxThreads" type="int"><Property name="threads.max" default="20"/></Set>
		<Set name="idleTimeout" type="int"><Property name="threads.timeout" default="60000"/></Set>
		<Set name="detailedDump">false</Set>
		<Set name="name">JettyBEF</Set>
	</Get>
	
	<!-- =========================================================== -->
    <!-- Http Configuration.                                         -->
    <!-- This is a common configuration instance used by all         -->
    <!-- connectors that can carry HTTP semantics (HTTP, HTTPS, SPDY)-->
    <!-- It configures the non wire protocol aspects of the HTTP     -->
    <!-- semantic.                                                   -->
    <!--                                                             -->
    <!-- This configuration is only defined here and is used by      -->
    <!-- reference below                                             -->
    <!--                                                             -->
    <!-- Consult the javadoc of o.e.j.server.HttpConfiguration       -->
    <!-- for all configuration that may be set here.                 -->
    <!-- =========================================================== -->
    <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
      <Set name="secureScheme">https</Set>
      <Set name="securePort"><Property name="netkernel.http.backend.secure.port" default="1061" /></Set>
      <Set name="outputBufferSize"><Property name="jetty.output.buffer.size" default="32768" /></Set>
      <Set name="outputAggregationSize"><Property name="jetty.output.aggregation.size" default="8192" /></Set>
      <Set name="requestHeaderSize"><Property name="jetty.request.header.size" default="8192" /></Set>
      <Set name="responseHeaderSize"><Property name="jetty.response.header.size" default="8192" /></Set>
      <Set name="sendServerVersion"><Property name="jetty.send.server.version" default="true" /></Set>
      <Set name="sendDateHeader"><Property name="jetty.send.date.header" default="true" /></Set>
      <Set name="headerCacheSize">512</Set>
      <Set name="delayDispatchUntilContent"><Property name="jetty.delayDispatchUntilContent" default="false"/></Set>
    </New>

  <!-- =========================================================== -->
  <!-- Set connectors                                              -->
  <!-- =========================================================== -->
  <!--NEW JETTY-->
  <Call name="addConnector">
    <Arg>
      <New class="org.eclipse.jetty.server.ServerConnector">
      	<Arg name="server"><Ref refid="Server" /></Arg>
        <Arg name="acceptors" type="int"><Property name="http.acceptors" default="-1"/></Arg>
        <Arg name="selectors" type="int"><Property name="http.selectors" default="-1"/></Arg>
        <Arg name="factories">
          <Array type="org.eclipse.jetty.server.ConnectionFactory">
            <Item>
              <New class="org.eclipse.jetty.server.HttpConnectionFactory">
                <Arg name="config"><Ref refid="httpConfig" /></Arg>
              </New>
            </Item>
          </Array>
        </Arg>
        <Set name="name">Frontend Fulcrum: <SystemProperty name="netkernel.http.frontend.port" default="8080" /></Set>
        <Set name="host"><SystemProperty name="netkernel.http.frontend.host" default="0.0.0.0" /></Set>
        <Set name="port"><SystemProperty name="netkernel.http.frontend.port" default="8080" /></Set>
        <Set name="idleTimeout"><Property name="http.timeout" default="30000"/></Set>
        <Set name="soLingerTime"><Property name="http.soLingerTime" default="-1"/></Set>
        <Set name="acceptorPriorityDelta"><Property name="http.acceptorPriorityDelta" default="0"/></Set>
        <Set name="selectorPriorityDelta"><Property name="http.selectorPriorityDelta" default="0"/></Set>
        <Set name="acceptQueueSize"><Property name="http.acceptQueueSize" default="0"/></Set>
        <!-- Enable Connector Statistics -->
	      <Call name="addBean">
	        <Arg>
	            <New id="ConnectorStatistics" class="org.eclipse.jetty.server.ConnectorStatistics"/>
	        </Arg>
	      </Call>
      </New>
    </Arg>
  </Call>
  
  <!--TLS Configuration - UNCOMMENT THE FOLLOWING THREE STATEMENT BLOCKS TO ENABLE TLS-->
  <!-- =========================================================== -->
  <!-- Create a TLS specific HttpConfiguration based on the        -->
  <!-- common HttpConfiguration defined above                      -->
  <!-- Add a SecureRequestCustomizer to extract certificate and    -->
  <!-- session information                                         -->
  <!-- =========================================================== -->
  <!-- UNCOMMENT TO ENABLE TLS
  <New id="sslHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
    <Arg><Ref refid="httpConfig"/></Arg>
    <Call name="addCustomizer">
      <Arg><New class="org.eclipse.jetty.server.SecureRequestCustomizer"/></Arg>
    </Call>
  </New>
  -->
  
  <!-- ============================================================= -->
  <!-- Create a TLS (SSL) Context Factory                            -->
  <!-- ============================================================= -->
  <!-- UNCOMMENT TO ENABLE TLS
  <New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
    <Set name="KeyStorePath"><Property name="jetty.base" default="." />/<Property name="jetty.keystore" default="/home/pjr/workspace/keystore"/></Set>
    <Set name="KeyStorePassword"><Property name="jetty.keystore.password" default="test123"/></Set>
    <Set name="KeyManagerPassword"><Property name="jetty.keymanager.password" default="test123"/></Set>
    <Set name="TrustStorePath"><Property name="jetty.base" default="." />/<Property name="jetty.truststore" default="/home/pjr/workspace/keystore"/></Set>
    <Set name="TrustStorePassword"><Property name="jetty.truststore.password" default="test123"/></Set>
    <Set name="EndpointIdentificationAlgorithm"></Set>
    <Set name="NeedClientAuth"><Property name="jetty.ssl.needClientAuth" default="false"/></Set>
    <Set name="WantClientAuth"><Property name="jetty.ssl.wantClientAuth" default="false"/></Set>
    <Set name="ExcludeCipherSuites">
     <Array type="String">
      <Item>SSL_RSA_WITH_DES_CBC_SHA</Item>
      <Item>SSL_DHE_RSA_WITH_DES_CBC_SHA</Item>
      <Item>SSL_DHE_DSS_WITH_DES_CBC_SHA</Item>
      <Item>SSL_RSA_EXPORT_WITH_RC4_40_MD5</Item>
      <Item>SSL_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>
      <Item>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>
      <Item>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</Item>
     </Array>
    </Set>
  </New>
  -->
  
  <!-- =========================================================== -->
  <!-- Add a SSL Connector with protocol factories                 -->
  <!-- =========================================================== -->
  <!-- UNCOMMENT TO ENABLE TLS
  <Call  name="addConnector">
    <Arg>
      <New id="sslConnector" class="org.eclipse.jetty.server.ServerConnector">
        <Arg name="server"><Ref refid="Server" /></Arg>
        <Arg name="acceptors" type="int"><Property name="ssl.acceptors" default="-1"/></Arg>
        <Arg name="selectors" type="int"><Property name="ssl.selectors" default="-1"/></Arg>
        <Arg name="factories">
          <Array type="org.eclipse.jetty.server.ConnectionFactory">
          	<Item>
	          	<New class="org.eclipse.jetty.server.SslConnectionFactory">
		        	<Arg name="next">http/1.1</Arg>
		        	<Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg>
		      	</New>
          	</Item>
          	<Item>
          		<New class="org.eclipse.jetty.server.HttpConnectionFactory">
			        <Arg name="config"><Ref refid="sslHttpConfig" /></Arg>
			    </New>
          	</Item>
          </Array>
        </Arg>
        <Set name="host"><SystemProperty name="netkernel.http.frontend.host" default="0.0.0.0" /></Set>
        <Set name="port"><Property name="netkernel.http.frontend.secure.port" default="8443" /></Set>
        <Set name="idleTimeout"><Property name="ssl.timeout" default="30000"/></Set>
        <Set name="soLingerTime"><Property name="ssl.soLingerTime" default="-1"/></Set>
        <Set name="acceptorPriorityDelta"><Property name="ssl.acceptorPriorityDelta" default="0"/></Set>
        <Set name="selectorPriorityDelta"><Property name="ssl.selectorPriorityDelta" default="0"/></Set>
        <Set name="acceptQueueSize"><Property name="ssl.acceptQueueSize" default="0"/></Set>
      </New>
    </Arg>
  </Call>
  -->
  
  <Call name="setHandler">
		<Arg>
			<New id="NetKernelHandler" class="org.eclipse.jetty.server.handler.HandlerList">
				<!--Uncomment for NCSA Logging
				<Call name="addHandler">
					<Arg>
						<New id="Logger" class="org.eclipse.jetty.server.handler.RequestLogHandler">
							 <Set name="requestLog">
								 <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
								      <Set name="filename">./log/FEFNetKernelHTTP_yyyy_mm_dd.log</Set>
									  <Set name="filenameDateFormat">yyyy_MM_dd</Set>
									  <Set name="retainDays">90</Set>
									  <Set name="append">true</Set>
									  <Set name="extended">true</Set>
									  <Set name="logCookies">false</Set>
									  <Set name="LogTimeZone">GMT</Set>
									</New>
							 </Set>
						 </New>
					</Arg>
				</Call>
				-->
				<Call name="addHandler">
					<Arg>
						<New id="NetKernelWebSocketHandler" class="org.netkernel.http.transport.NetKernelWebSocketHandler">
							<!--<Set name="maxIdleTime">300000</Set>-->	
						</New>
					</Arg>
				</Call>
				<Call name="addHandler">
					<Arg>
						<New id="NetKernelHandler" class="org.netkernel.http.transport.NetKernelHandler">
						</New>
					</Arg>
				</Call>
			</New>
		</Arg>
	</Call>
		
  <!-- =========================================================== -->
  <!-- extra options                                               -->
  <!-- =========================================================== -->
  <Set name="stopAtShutdown">false</Set>
</Configure>