<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xsd:element name="unimrcpserver">
    <xsd:annotation>
      <xsd:documentation>UniMRCP server document</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="properties" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>Generic properties</xsd:documentation>
          </xsd:annotation>
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="ip" minOccurs="0">
                <xsd:complexType>
                  <xsd:attribute name="type" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="ext-ip" minOccurs="0">
                <xsd:complexType>
                  <xsd:attribute name="type" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="components" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>Common components</xsd:documentation>
          </xsd:annotation>
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="resource-factory" minOccurs="0">
                <xsd:annotation>
                  <xsd:documentation>Factory of MRCP resources</xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:sequence maxOccurs="unbounded">
                    <xsd:element name="resource">
                      <xsd:complexType>
                        <xsd:attribute name="id" type="xsd:string" use="required" />
                        <xsd:attribute name="enable" type="xsd:boolean" use="optional" />
                      </xsd:complexType>
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="sip-uas" minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                  <xsd:documentation>SIP signaling agent</xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="sip-ip" type="xsd:string" minOccurs="0" />
                    <xsd:element name="sip-ext-ip" type="xsd:string" minOccurs="0" />
                    <xsd:element name="sip-port" type="xsd:short" />
                    <xsd:element name="sip-transport" type="xsd:string" />
                    <xsd:element name="force-destination" type="xsd:boolean" default="false" minOccurs="0" />
                    <xsd:element name="ua-name" type="xsd:string" minOccurs="0" />
                    <xsd:element name="sdp-origin" type="xsd:string" minOccurs="0" />
                    <xsd:element name="sip-t1" type="xsd:long" minOccurs="0" />
                    <xsd:element name="sip-t2" type="xsd:long" minOccurs="0" />
                    <xsd:element name="sip-t4" type="xsd:long" minOccurs="0" />
                    <xsd:element name="sip-t1x64" type="xsd:long" minOccurs="0" />
                    <xsd:element name="sip-message-output" type="xsd:boolean" />
                    <xsd:element name="sip-message-dump" type="xsd:string" />
                  </xsd:sequence>
                  <xsd:attribute name="id" type="xsd:string" use="required" />
                  <xsd:attribute name="type" type="xsd:string" use="required" />
                  <xsd:attribute name="enable" type="xsd:boolean" use="optional" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="rtsp-uas" minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                  <xsd:documentation>RTSP signaling agent</xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="rtsp-ip" type="xsd:string" minOccurs="0" />
                    <xsd:element name="rtsp-ext-ip" type="xsd:string" minOccurs="0" />
                    <xsd:element name="rtsp-port" type="xsd:string" />
                    <xsd:element name="resource-map">
                      <xsd:complexType>
                        <xsd:sequence>
                          <xsd:element name="param" maxOccurs="unbounded">
                            <xsd:complexType>
                              <xsd:attribute name="name" type="xsd:string" use="required" />
                              <xsd:attribute name="value" type="xsd:string" use="required" />
                            </xsd:complexType>
                          </xsd:element>
                        </xsd:sequence>
                      </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="max-connection-count" type="xsd:short" minOccurs="0" />
                    <xsd:element name="sdp-origin" type="xsd:string" minOccurs="0" />
                  </xsd:sequence>
                  <xsd:attribute name="id" type="xsd:string" use="required" />
                  <xsd:attribute name="type" type="xsd:string" use="required" />
                  <xsd:attribute name="enable" type="xsd:boolean" use="optional" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="mrcpv2-uas" minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                  <xsd:documentation>MRCPv2 connection agent</xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="mrcp-ip" type="xsd:string" minOccurs="0" />
                    <xsd:element name="mrcp-port" type="xsd:string" />
                    <xsd:element name="max-connection-count" type="xsd:short" minOccurs="0" />
                    <xsd:element name="force-new-connection" type="xsd:boolean" minOccurs="0" />
                    <xsd:element name="rx-buffer-size" type="xsd:long" minOccurs="0" />
                    <xsd:element name="tx-buffer-size" type="xsd:long" minOccurs="0" />
                  </xsd:sequence>
                  <xsd:attribute name="id" type="xsd:string" use="required" />
                  <xsd:attribute name="enable" type="xsd:boolean" use="optional" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="media-engine" minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                  <xsd:documentation>Media processing engine</xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="realtime-rate" type="xsd:short" minOccurs="0" />
                  </xsd:sequence>
                  <xsd:attribute name="id" type="xsd:string" use="required" />
                  <xsd:attribute name="enable" type="xsd:boolean" use="optional" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="rtp-factory" minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                  <xsd:documentation>Factory of RTP terminations</xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="rtp-ip" type="xsd:string" minOccurs="0" />
                    <xsd:element name="rtp-ext-ip" type="xsd:string" minOccurs="0" />
                    <xsd:element name="rtp-port-min" type="xsd:short" />
                    <xsd:element name="rtp-port-max" type="xsd:short" />
                  </xsd:sequence>
                  <xsd:attribute name="id" type="xsd:string" use="required" />
                  <xsd:attribute name="enable" type="xsd:boolean" use="optional" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="plugin-factory" minOccurs="0">
                <xsd:annotation>
                  <xsd:documentation>Factory of plugins (MRCP engines)</xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:sequence maxOccurs="unbounded">
                    <xsd:element name="engine">
                      <xsd:complexType>
                        <xsd:sequence>
                          <xsd:element name="max-channel-count" minOccurs="0" />
                          <xsd:element name="param" minOccurs="0" maxOccurs="unbounded">
                            <xsd:complexType>
                              <xsd:attribute name="name" type="xsd:string" use="required" />
                              <xsd:attribute name="value" type="xsd:string" use="required" />
                            </xsd:complexType>
                          </xsd:element>
                        </xsd:sequence>
                        <xsd:attribute name="id" type="xsd:string" use="required" />
                        <xsd:attribute name="name" type="xsd:string" use="required" />
                        <xsd:attribute name="enable" type="xsd:boolean" use="optional" />
                      </xsd:complexType>
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="settings" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>Settings</xsd:documentation>
          </xsd:annotation>
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="rtp-settings" minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                  <xsd:documentation>RTP settings</xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="jitter-buffer" minOccurs="0">
                      <xsd:complexType>
                        <xsd:sequence>
                          <xsd:element name="adaptive" type="xsd:byte" />
                          <xsd:element name="playout-delay" type="xsd:long" />
                          <xsd:element name="max-playout-delay" type="xsd:long" />
                          <xsd:element name="time-skew-detection" type="xsd:byte" />
                        </xsd:sequence>
                      </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="ptime" type="xsd:long" minOccurs="0" />
                    <xsd:element name="codecs">
                      <xsd:complexType>
                        <xsd:simpleContent>
                          <xsd:extension base="xsd:string">
                            <xsd:attribute name="own-preference" type="xsd:boolean" use="optional" />
                          </xsd:extension>
                        </xsd:simpleContent>
                      </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="rtcp" minOccurs="0">
                      <xsd:complexType>
                        <xsd:sequence>
                          <xsd:element name="rtcp-bye" type="xsd:int" />
                          <xsd:element name="tx-interval" type="xsd:long" />
                          <xsd:element name="rx-resolution" type="xsd:long" />
                        </xsd:sequence>
                        <xsd:attribute name="enable" type="xsd:boolean" use="optional" />
                      </xsd:complexType>
                    </xsd:element>
                  </xsd:sequence>
                  <xsd:attribute name="id" type="xsd:string" use="required" />
                  <xsd:attribute name="enable" type="xsd:boolean" use="optional" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="profiles" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>Profiles</xsd:documentation>
          </xsd:annotation>
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="mrcpv2-profile" minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                  <xsd:documentation>MRCPv2 profile</xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="sip-uas" type="xsd:string" />
                    <xsd:element name="mrcpv2-uas" type="xsd:string" />
                    <xsd:element name="media-engine" type="xsd:string" />
                    <xsd:element name="rtp-factory" type="xsd:string" />
                    <xsd:element name="rtp-settings" type="xsd:string" />
                  </xsd:sequence>
                  <xsd:attribute name="id" type="xsd:string" use="required" />
                  <xsd:attribute name="enable" type="xsd:boolean" use="optional" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="mrcpv1-profile" minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                  <xsd:documentation>MRCPv1 profile</xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="rtsp-uas" type="xsd:string" />
                    <xsd:element name="media-engine" type="xsd:string" />
                    <xsd:element name="rtp-factory" type="xsd:string" />
                    <xsd:element name="rtp-settings" type="xsd:string" />
                  </xsd:sequence>
                  <xsd:attribute name="id" type="xsd:string" use="required" />
                  <xsd:attribute name="enable" type="xsd:boolean" use="optional" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="misc" minOccurs="0">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="sofiasip-logger" type="xsd:string" />
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
      <xsd:attribute name="version" type="xsd:string" use="required" />
      <xsd:attribute name="subfolder" type="xsd:string" use="optional" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>