<?xml version="1.0" encoding="UTF-8"?>
<!--

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

-->
<service id="proxy-service" class="flex.messaging.services.HTTPProxyService">

    <!-- Example proxy-config.xml -->

    <!-- These are adapter properties and apply to adapters of all destinations -->
    <properties>
        <connection-manager>
            <cookie-policy>rfc2109</cookie-policy>
            <max-total-connections>100</max-total-connections>
            <default-max-connections-per-host>2</default-max-connections-per-host>
            <connection-timeout>0</connection-timeout>
            <socket-timeout></socket-timeout>
            <stale-checking-enabled></stale-checking-enabled>
            <send-buffer-size></send-buffer-size>
            <receive-buffer-size></receive-buffer-size>
            <tcp-no-delay>true</tcp-no-delay>
            <linger>-1</linger>
            <max-per-host>
                <host>...</host>
                <port>80</port>
                <protocol>http</protocol>
                <protocol-factory class="...">
                    <properties>...</properties>
                </protocol-factory>
                <max-connections>2</max-connections>
                <proxy>
                    <host>...</host>
                    <port>80</port>
                </proxy>
                <local-address>...</local-address>
                <virtual-host>...</virtual-host>
            </max-per-host>
        </connection-manager>
        
        <cookie-limit>200</cookie-limit>
        <!-- Allow self-signed certificates; should not be used in production -->
        <allow-lax-ssl>true</allow-lax-ssl>
        <content-chunked>false</content-chunked>
        
        <external-proxy>
            <server>10.10.10.10</server>
            <port>3128</port>
            <nt-domain>mycompany</nt-domain>
            <username>flex</username>
            <password>flex</password>
        </external-proxy>
    </properties>

    <!-- Server-side code that directly contacts a destination object or service -->
    <adapters>
        <!--
           id: a unique id specifying the adapter
           class: the BlazeDS class which implements the adapter
             possible values: flex.messaging.services.http.HTTPProxyAdapter, flex.messaging.services.http.SOAPProxyAdapter
           default: an optional attribute identifying the adapter to use when none is specified for the service
        -->
        <adapter-definition id="http-proxy" class="flex.messaging.services.http.HTTPProxyAdapter" default="true"/>
        <adapter-definition id="soap-proxy" class="flex.messaging.services.http.SOAPProxyAdapter"/>

        <!--
           Adapters may be broken in to their own file
           To collect multiple adapter-definitions in a single file, wrap them in an <adapters> tag
        -->
        <adapter-include file-path="my-adapter.xml"/>
        <!-- This will include all *.xml files in the directory 'my-adapters'. -->
        <adapter-include directory-path="my-adapters"/>
    </adapters>

    <default-channels>
        <!--
           Set the ref id of the default channels to use as transport for this service.
           The channel is defined elsewhere using the channel-definition tag.
        -->
        <channel ref="my-http"/>
        <channel ref="my-amf"/>
    </default-channels>

    <!-- Multiple destinations may be specified either in this file or they could be broken 
         into their own file. 
    -->

    <!-- An example of a destination defined in another file -->         
    <destination-include file-path="my-http-destination-config.xml" />

    <!-- An example of destinations defined in a directory of XML files 
         The directory is relative to the location of this file. 
         This will include any *.xml files contained in 'http-destinations' in the current config directory.
    -->
    <destination-include directory-path="http-destinations" />

    <!-- Example default http destination -->
    <destination id="DefaultHTTP">
        <properties>
            <dynamic-url>http://{server.name}:*/{context.root}/*</dynamic-url>
        </properties>
    </destination>

    <!-- Example http proxy adapter destination -->
    <destination id="myHTTPService">
        <properties>
            <!-- The endpoint available to the http proxy service -->
            <url>http://www.mycompany.com/services/myservlet</url>

            <!-- Wild card endpoints available to the http proxy services -->
            <dynamic-url>http://www.mycompany.com/services/*</dynamic-url>
        </properties>
    </destination>

    <!-- Example soap proxy adapter destination -->
    <destination id="echoSoapService">
        <properties>
            <!-- The location of the wsdl defined for soap proxy services -->
            <wsdl>http://{server.name}:{server.port}/myapp/echo?wsdl</wsdl>

            <!-- The soap endpoints available for access defined for soap proxy services -->
            <soap>http://{server.name}:*/myapp/echo</soap>
        </properties>

        <!-- A specific adapter ref for the destination may be defined -->
        <adapter ref="soap-proxy"/>
    </destination>
</service>
