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

<!-- ============================================================= -->
<!-- Configure a SPDY connector.                                   -->
<!-- This configuration must be used in conjunction with jetty.xml -->
<!-- and jetty-ssl.xml                                             -->
<!-- ============================================================= -->
<Configure id="Server" class="org.eclipse.jetty.server.Server">

  <!-- =========================================================== -->
  <!-- Enables NPN debugging on System.err                         -->
  <!-- ===========================================================
   <Set class="org.eclipse.jetty.npn.NextProtoNego" name="debug" type="boolean">true</Set>
  -->

  <!-- =========================================================== -->
  <!-- Create a push strategy which can be used by reference by    -->
  <!-- individual connection factories below.                      -->
  <!--                                                             -->
  <!-- Consult the javadoc of o.e.j.spdy.server.http.ReferrerPushStrategy -->
  <!-- for all configuration that may be set here.                 -->
  <!-- =========================================================== -->
  <New id="pushStrategy" class="org.eclipse.jetty.spdy.server.http.ReferrerPushStrategy">
    <!-- Uncomment to blacklist browsers for this push strategy. If one of the blacklisted Strings occurs in the
         user-agent header sent by the client, push will be disabled for this browser. This is case insensitive" -->
    <!--
    <Set name="UserAgentBlacklist">
        <Array type="String">
            <Item>.*(?i)firefox/14.*</Item>
            <Item>.*(?i)firefox/15.*</Item>
            <Item>.*(?i)firefox/16.*</Item>
        </Array>
    </Set>
    -->

    <!-- Uncomment to override default file extensions to push -->
    <!--
    <Set name="PushRegexps">
        <Array type="String">
           <Item>.*\.css</Item>
           <Item>.*\.js</Item>
           <Item>.*\.png</Item>
           <Item>.*\.jpg</Item>
           <Item>.*\.gif</Item>
       </Array>
    </Set>
    -->
    <Set name="referrerPushPeriod">5000</Set>
    <Set name="maxAssociatedResources">32</Set>
  </New>

  <!-- =========================================================== -->
  <!-- Add a SPDY/HTTPS Connector.                                 -->
  <!-- Configure an o.e.j.server.ServerConnector with connection   -->
  <!-- factories for TLS (aka SSL), NPN, SPDY and HTTP to provide  -->
  <!-- a connector that can accept HTTPS or SPDY connections.      -->
  <!--                                                             -->
  <!-- All accepted TLS connections are initially wired to a NPN   -->
  <!-- connection, which attempts to use a TLS extension to        -->
  <!-- negotiation the protocol.     If NPN is not supported by    -->
  <!-- the client, then the NPN connection is replaced by a HTTP   -->
  <!-- connection.  If a specific protocol version (eg spdy/3) is  -->
  <!-- negotiated by NPN, then the appropriate connection factory  -->
  <!-- is used to create a connection to replace the NPN connection-->
  <!--                                                             -->
  <!-- The final result is a SPDY or HTTP connection wired behind  -->
  <!-- a TLS (aka SSL) connection.                                 -->
  <!--                                                             -->
  <!-- Consult the javadoc of o.e.j.server.ServerConnector and the -->
  <!-- specific connection factory types for all configuration     -->
  <!-- that may be set here.                                       -->
  <!-- =========================================================== -->
  <Call id="spdyConnector" name="addConnector">
    <Arg>
      <New class="org.eclipse.jetty.server.ServerConnector">
        <Arg name="server"><Ref refid="Server" /></Arg>
        <Arg name="factories">
          <Array type="org.eclipse.jetty.server.ConnectionFactory">

            <!-- SSL Connection factory with NPN as next protocol -->
            <Item>
              <New class="org.eclipse.jetty.server.SslConnectionFactory">
                <Arg name="next">npn</Arg>
                <Arg name="sslContextFactory"><Ref refid="sslContextFactory" /></Arg>
              </New>
            </Item>

            <!-- NPN Connection factory with HTTP as default protocol -->
            <Item>
              <New class="org.eclipse.jetty.spdy.server.NPNServerConnectionFactory">
                <Arg name="protocols"><Array type="String">
                    <Item>spdy/3</Item>
                    <Item>spdy/2</Item>
                    <Item>http/1.1</Item>
                </Array></Arg>
                <Set name="defaultProtocol">http/1.1</Set>
              </New>
            </Item>

            <!-- SPDY/3 Connection factory -->
            <Item>
              <New class="org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnectionFactory">
                <Arg name="version" type="int">3</Arg>
                <Arg name="config"><Ref refid="sslHttpConfig" /></Arg>
                <Arg name="pushStrategy"><Ref refid="pushStrategy"/></Arg>
              </New>
            </Item>

            <!-- SPDY/2 Connection factory -->
            <Item>
              <New class="org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnectionFactory">
                <Arg name="version" type="int">2</Arg>
                <Arg name="config"><Ref refid="sslHttpConfig" /></Arg>
              </New>
            </Item>

            <!-- HTTP Connection factory -->
            <Item>
              <New class="org.eclipse.jetty.server.HttpConnectionFactory">
                <Arg name="config"><Ref refid="sslHttpConfig" /></Arg>
              </New>
            </Item>
          </Array>
        </Arg>

        <Set name="host"><Property name="jetty.host" /></Set>
        <Set name="port"><Property name="jetty.spdy.port" default="8443" /></Set>
        <Set name="idleTimeout">30000</Set>
      </New>
    </Arg>
  </Call>

</Configure>
