<node>
  <!-- Fully Loaded Interface -->
  <interface name="org.project.Bar">
    <annotation name="org.gtk.GDBus.DocString" value="The org.project.Bar interface is very complicated."/>
    <annotation name="org.gtk.GDBus.DocString.Short" value="Brief interface doc string"/>

    <method name="HelloWorld">
      <annotation name="org.gtk.GDBus.DocString" value="Method &lt;emphasis&gt;documentation&lt;/emphasis&gt; blablablabla."/>
      <annotation name="ExistingAnnotation" value="blah"/>
      <annotation name="org.gtk.GDBus.ExistingInternalAnnotation" value="booh"/>
      <arg name="greeting" direction="in" type="s">
        <annotation name="org.gtk.GDBus.DocString" value="in param doc"/>
      </arg>
      <arg name="response" direction="out" type="s">
        <annotation name="org.gtk.GDBus.DocString" value="out param doc"/>
      </arg>
    </method>

    <method name="TestPrimitiveTypes">
      <arg direction="in"  type="y" name="val_byte" />
      <arg direction="in"  type="b" name="val_boolean" />
      <arg direction="in"  type="n" name="val_int16" />
      <arg direction="in"  type="q" name="val_uint16" />
      <arg direction="in"  type="i" name="val_int32" />
      <arg direction="in"  type="u" name="val_uint32" />
      <arg direction="in"  type="x" name="val_int64" />
      <arg direction="in"  type="t" name="val_uint64" />
      <arg direction="in"  type="d" name="val_double" />
      <arg direction="in"  type="s" name="val_string" />
      <arg direction="in"  type="o" name="val_objpath" />
      <arg direction="in"  type="g" name="val_signature" />
      <arg direction="in"  type="ay" name="val_bytestring" />
      <arg direction="out" type="y" name="ret_byte" />
      <arg direction="out" type="b" name="ret_boolean" />
      <arg direction="out" type="n" name="ret_int16" />
      <arg direction="out" type="q" name="ret_uint16" />
      <arg direction="out" type="i" name="ret_int32" />
      <arg direction="out" type="u" name="ret_uint32" />
      <arg direction="out" type="x" name="ret_int64" />
      <arg direction="out" type="t" name="ret_uint64" />
      <arg direction="out" type="d" name="ret_double" />
      <arg direction="out" type="s" name="ret_string" />
      <arg direction="out" type="o" name="ret_objpath" />
      <arg direction="out" type="g" name="ret_signature" />
      <arg direction="out" type="ay" name="ret_bytestring" />
    </method>

    <method name="TestNonPrimitiveTypes">
      <arg direction="in" type="a{ss}" name="dict_s_to_s" />
      <arg direction="in" type="a{s(ii)}" name="dict_s_to_pairs" />
      <arg direction="in" type="(iss)" name="a_struct" />
      <arg direction="in" type="as" name="array_of_strings" />
      <arg direction="in" type="ao" name="array_of_objpaths" />
      <arg direction="in" type="ag" name="array_of_signatures" />
      <arg direction="in" type="aay" name="array_of_bytestrings" />
      <arg direction="out" type="ay" name="result" />
    </method>

    <method name="RequestSignalEmission">
      <arg direction="in" type="i" name="which_one" />
    </method>

    <method name="RequestMultiPropertyMods"/>

    <method name="UnimplementedMethod"/>

    <method name="PropertyCancellation"/>

    <signal name="TestSignal">
      <annotation name="org.gtk.GDBus.DocString" value="Signal documentation."/>
      <arg type="i" name="val_int32">
        <annotation name="org.gtk.GDBus.DocString" value="Signal param docs"/>
      </arg>
      <arg type="as" name="array_of_strings" />
      <arg type="aay" name="array_of_bytestrings" />
      <arg type="a{s(ii)}" name="dict_s_to_pairs" />
    </signal>

    <signal name="AnotherSignal">
      <arg type="s" name="word" />
    </signal>

    <property name="y" type="y" access="readwrite">
      <annotation name="org.gtk.GDBus.DocString" value="&lt;para&gt;Property docs, yah...&lt;/para&gt;&lt;para&gt;Second paragraph.&lt;/para&gt;"/>
    </property>
    <property name="b" type="b" access="readwrite"/>
    <property name="n" type="n" access="readwrite"/>
    <property name="q" type="q" access="readwrite"/>
    <property name="i" type="i" access="readwrite"/>
    <property name="u" type="u" access="readwrite"/>
    <property name="x" type="x" access="readwrite"/>
    <property name="t" type="t" access="readwrite"/>
    <property name="d" type="d" access="readwrite"/>
    <property name="s" type="s" access="readwrite"/>
    <property name="o" type="o" access="readwrite"/>
    <property name="g" type="g" access="readwrite"/>
    <property name="ay" type="ay" access="readwrite"/>
    <property name="as" type="as" access="readwrite"/>
    <property name="aay" type="aay" access="readwrite"/>
    <property name="ao" type="ao" access="readwrite"/>
    <property name="ag" type="ag" access="readwrite"/>
    <property name="FinallyNormalName" type="s" access="readwrite"/>
    <property name="ReadonlyProperty" type="s" access="read"/>
    <property name="WriteonlyProperty" type="s" access="write"/>

    <!-- unset properties -->
    <property name="unset_i" type="i" access="readwrite"/>
    <property name="unset_d" type="d" access="readwrite"/>
    <property name="unset_s" type="s" access="readwrite"/>
    <property name="unset_o" type="o" access="readwrite"/>
    <property name="unset_g" type="g" access="readwrite"/>
    <property name="unset_ay" type="ay" access="readwrite"/>
    <property name="unset_as" type="as" access="readwrite"/>
    <property name="unset_ao" type="ao" access="readwrite"/>
    <property name="unset_ag" type="ag" access="readwrite"/>
    <property name="unset_struct" type="(idsogayasaoag)" access="readwrite"/>
  </interface> <!-- End org.project.Bar -->

  <!-- Namespaced -->
  <interface name="org.project.Bar.Frobnicator">
    <method name="RandomMethod"/>
  </interface>

  <!-- Empty -->
  <interface name="org.project.Baz">
  </interface>

  <!-- Outside D-Bus prefix -->
  <interface name="com.acme.Coyote">
    <method name="Run"/>
    <method name="Sleep"/>
    <method name="Attack"/>
    <signal name="Surprised"/>
    <property name="Mood" type="s" access="read"/>
  </interface>

  <!-- force various names -->
  <interface name="com.acme.Rocket">
    <!-- Forcing the typename via an annotation -->
    <annotation name="org.gtk.GDBus.C.Name" value="Rocket123"/>

    <!-- ditto method -->
    <method name="Ignite">
      <annotation name="org.gtk.GDBus.C.Name" value="ignite_xyz"/>
    </method>

    <!-- ditto signal -->
    <signal name="Exploded">
      <annotation name="org.gtk.GDBus.C.Name" value="exploded-xyz"/>
    </signal>

    <!-- ditto property -->
    <property name="Speed" type="d" access="read">
      <annotation name="org.gtk.GDBus.C.Name" value="speed-xyz"/>
    </property>

    <property name="Direction" type="(ddd)" access="read"/>

    <!-- Check there's no conflict with the GType iface_name_get_type() function -->
    <property name="Type" type="s" access="read"/>
  </interface>

  <!-- Test interface for forcing use of GVariant -->
  <interface name="org.project.Bat">

    <!-- Forcing GVariant for types that would be mapped -->
    <method name="ForceMethod">
      <arg name="force_in_i" type="i" direction="in">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
      <arg name="force_in_s" type="s" direction="in">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
      <arg name="force_in_ay" type="ay" direction="in">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
      <arg name="force_in_struct" type="(i)" direction="in">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
      <arg name="force_out_i" type="i" direction="out">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
      <arg name="force_out_s" type="s" direction="out">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
      <arg name="force_out_ay" type="ay" direction="out">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
      <arg name="force_out_struct" type="(i)" direction="out">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
    </method>

    <signal name="ForceSignal">
      <arg name="force_i" type="i">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
      <arg name="force_s" type="s">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
      <arg name="force_ay" type="ay">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
      <arg name="force_struct" type="(i)">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
    </signal>

    <property name="force_i" type="i" access="readwrite">
      <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
    </property>
    <property name="force_s" type="s" access="readwrite">
      <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
    </property>
    <property name="force_ay" type="ay" access="readwrite">
      <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
    </property>
    <property name="force_struct" type="(i)" access="readwrite">
      <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
    </property>

  </interface> <!-- End org.project.Bat -->

  <!-- Test interface for g-authorized-method -->
  <interface name="org.project.Authorize">
    <method name="CheckNotAuthorized"/>
    <method name="CheckAuthorized"/>
    <method name="CheckNotAuthorizedFromObject"/>
  </interface> <!-- End org.project.Authorize -->

  <!-- Test interfaces for handling methods in a thread -->
  <interface name="org.project.MethodThreads">
    <method name="GetSelf">
      <arg name="self_pointer" direction="out" type="s"/>
    </method>
  </interface> <!-- End org.project.MethodThreads -->

  <!--
    org.project.InlineDocs:
    @short_description: The short description

    Here is the <emphasis>longer</emphasis> description.

    With lots of stuff.
  -->
  <interface name="org.project.InlineDocs">

    <!--
      FooMethod:
      @greeting: The docs for greeting parameter.
      @response: The docs for response parameter.

      The docs for the actual method.

      Multi-paragraph.

      Test of inline links: The #org.project.Bar D-Bus interface,
      org.project.Bar.HelloWorld() method, the
      #org.project.Bar::TestSignal, the
      #org.project.InlineDocs:Property3 property.
    -->
    <method name="FooMethod">
      <arg name="greeting" direction="in" type="s"/>
      <arg name="response" direction="out" type="s"/>
    </method>

    <!-- Method2: foo -->
    <method name="Method2">
      <arg name="greeting" direction="in" type="s"/>
      <arg name="response" direction="out" type="s"/>
    </method>

    <!--
      BarSignal:
      @blah: The docs for blah parameter.
      @boo: The docs for boo parameter.

      The docs for the actual signal.
    -->
    <signal name="BarSignal">
      <!-- Non-Doc comment -->
      <arg name="blah" type="s"/>
      <arg name="boo" type="s"/>
    </signal>

    <!-- BazProperty: The docs for the property. -->
    <property name="BazProperty" type="s" access="read"/>

    <!-- Property2: Another property
         This should be a new paragraph.
    -->
    <property name="Property2" type="s" access="read"/>

    <!-- Property3:
         First line.
         This should NOT be a new paragraph.
    -->
    <property name="Property3" type="s" access="read"/>

    <!-- Property4:  
         First line. With trailing whitespace.  
         Second line (same paragraph).  
    -->
    <property name="Property4" type="s" access="read"/>

    <!-- Property5: Foo  
         First line (second paragraph). With trailing whitespace.  
         Second line (same paragraph).  
<programlisting>
1 program listing
 2 should include indented space
  3
   4
    5
</programlisting>
    -->
    <property name="Property5" type="s" access="read"/>


    <!--
      FancyProperty:
      Here's some fancy use of XML inside the comment.
      <variablelist>
        <varlistentry>
          <term><option>namespace</option></term>
          <listitem>
            <para>The namespace to use for generated code. In CamelCase format.</para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><option>output-prefix</option></term>
          <listitem>
            <para>
              A prefix to use for all generated files. Defaults to <filename>generated</filename>.
            </para>
          </listitem>
        </varlistentry>
      </variablelist>
    -->
    <property name="FancyProperty" type="s" access="read"/>
  </interface>

  <interface name="ChangingInterfaceV1">
    <method name="FooMethod"/>
    <method name="BarMethod"/>
    <method name="BazMethod"/>
    <signal name="FooSignal"/>
    <signal name="BarSignal"/>
    <signal name="BazSignal"/>
  </interface>

  <!-- ChangingInterfaceV2:
       @since: 2.0
  -->
  <interface name="ChangingInterfaceV2">
    <!--
      NewSignalIn2:
      @since: 2.0
    -->
    <signal name="NewSignalIn2"/>
    <!--
      NewMethodIn2:
      @since: 2.0
    -->
    <method name="NewMethodIn2"/>

    <!-- reverse order -->
    <signal name="BazSignal"/>
    <signal name="BarSignal"/>
    <signal name="FooSignal"/>
    <method name="BazMethod"/>
    <method name="BarMethod"/>
    <method name="FooMethod"/>
  </interface>

  <!-- ChangingInterfaceV10:
       @since: 10.0
  -->
  <interface name="ChangingInterfaceV10">
    <!--
      AddedSignalIn10:
      @since: 10.0
    -->
    <signal name="AddedSignalIn10"/>
    <method name="AddedMethodIn10">
      <annotation name="org.gtk.GDBus.Since" value="10.0"/>
    </method>

    <!--
      NewSignalIn2:
      @since: 2.0
    -->
    <signal name="NewSignalIn2"/>
    <!--
      NewMethodIn2:
      @since: 2.0
    -->
    <method name="NewMethodIn2"/>

    <!-- reverse order -->
    <signal name="BazSignal"/>
    <signal name="BarSignal"/>
    <signal name="FooSignal"/>
    <method name="BazMethod"/>
    <method name="BarMethod"/>
    <method name="FooMethod"/>
  </interface>

  <interface name="TestUglyCaseInterface">
    <annotation name="org.gtk.GDBus.C.Name" value="TesT_ugly_CASE_Interface"/>

    <method name="GetiSCSIServers">
      <annotation name="org.gtk.GDBus.C.Name" value="Get_iSCSI_Servers"/>
    </method>

    <signal name="serversUPDATEDNOW">
      <annotation name="org.gtk.GDBus.C.Name" value="Servers_UPDATED_NOW"/>
    </signal>

    <property name="UGLYNAME" type="i" access="readwrite">
      <annotation name="org.gtk.GDBus.C.Name" value="UGLY_NAME"/>
    </property>
  </interface>

  <!--
    OldieInterface:
    @short_description: A an example of an deprecated interface

    This is an example of a deprecated interface.
    -->
  <interface name="OldieInterface">
    <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>

    <method name="Foo">
      <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
    </method>

    <signal name="Bar">
      <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
    </signal>

    <property name="Bat" type="i" access="readwrite">
      <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
    </property>
  </interface>

  <!-- ensure we don't choke on unknown/unexpected XML tags or unknown/unexpected attribyutes (#650874) -->
  <interface name="UnknownXmlTags" unexpected="boo">
    <someUnknownTag>
      <anotherTagWeIgnore>yadaydaydaydayda</anotherTagWeIgnore>
    </someUnknownTag>
    <method name="CanSetTimezone" also_unexpected="1">
      <annotation name="org.freedesktop.DBus.GLib.Async" value="" also_unexpected="1">
        <unknownTag/>
      </annotation>
      <arg name="value" direction="out" type="i" also_unexpected="1">
        <unknownTag/>
      </arg>
      <unknownTag/>
    </method>
    <signal name="SomeSignal" also_unexpected="1">
      <unknownTag/>
    </signal>
    <property name="SomeProperty" type="s" access="readwrite" also_unexpected="1">
      <unknownTag/>
    </property>
  </interface>
  <unknownTag/>

  <interface name="FDPassing">
    <method name="HelloFD">
      <annotation name="org.gtk.GDBus.C.UnixFD" value="1"/>
      <arg name="greeting" direction="in" type="s"/>
      <arg name="response" direction="out" type="s"/>
    </method>
  </interface>

</node>
