<?xml version="1.0"?>
<!-- This file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations.  -->
<repository version="1.2"
            xmlns="http://www.gtk.org/introspection/core/1.0"
            xmlns:c="http://www.gtk.org/introspection/c/1.0"
            xmlns:doc="http://www.gtk.org/introspection/doc/1.0"
            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
  <include name="GObject" version="2.0"/>
  <include name="GSSDP" version="1.6"/>
  <include name="Gio" version="2.0"/>
  <include name="Soup" version="3.0"/>
  <include name="libxml2" version="2.0"/>
  <package name="gupnp-1.6"/>
  <c:include name="libgupnp/gupnp.h"/>
  <doc:format name="unknown"/>
  <namespace name="GUPnP"
             version="1.6"
             shared-library="libgupnp-1.6.so.0"
             c:identifier-prefixes="GUPnP"
             c:symbol-prefixes="gupnp">
    <interface name="Acl"
               c:symbol-prefix="acl"
               c:type="GUPnPAcl"
               version="0.20.11"
               glib:type-name="GUPnPAcl"
               glib:get-type="gupnp_acl_get_type"
               glib:type-struct="AclInterface">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-acl.c"
           line="17">Access control provider for [class@GUPnP.Context]

GUPnPAcl provides either synchronous or asynchronous functions to check
whether a peer should be able to access a resource that is hosted by GUPnP or not.</doc>
      <source-position filename="libgupnp/gupnp-acl.h" line="64"/>
      <virtual-method name="can_sync" invoker="can_sync" version="0.20.11">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-acl.c"
             line="147">Check whether [method@GUPnP.Acl.is_allowed_async] is supported.</doc>
        <source-position filename="libgupnp/gupnp-acl.h" line="53"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="149">A #GUPnPAcl
@returns %TRUE, if gupnp_acl_is_allowed_async() is supported, %FALSE
otherwise.</doc>
            <type name="Acl" c:type="GUPnPAcl*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="is_allowed"
                      invoker="is_allowed"
                      version="0.20.11"
                      glib:async-func="is_allowed_async">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-acl.c"
             line="35">Check whether an IP address is allowed to access this resource.</doc>
        <source-position filename="libgupnp/gupnp-acl.h" line="32"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="37">an instance of #GUPnPAcl</doc>
            <type name="Acl" c:type="GUPnPAcl*"/>
          </instance-parameter>
          <parameter name="device"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="38">The [class@GUPnP.Device] associated with @path or %NULL if
unknown.</doc>
            <type name="Device" c:type="GUPnPDevice*"/>
          </parameter>
          <parameter name="service"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="40">The [class@GUPnP.Service] associated with @path or %NULL if
unknown.</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="42">The path being served.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="address" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="43">IP address of the peer.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="agent"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="44">The User-Agent header of the peer or %NULL if unknown.
@returns %TRUE if the peer is allowed, %FALSE otherwise</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="is_allowed_async"
                      invoker="is_allowed_async"
                      version="0.20.11"
                      glib:finish-func="is_allowed_finish"
                      glib:sync-func="is_allowed">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-acl.c"
             line="69">Check asynchronously whether an IP address is allowed to access
this resource.

This function is optional. [method@GUPnP.Acl.can_sync] should return %TRUE
if the implementing class supports it. If it is supported, GUPnP will
prefer to use this function over [method@GUPnP.Acl.is_allowed].

Implement this function if the process of verifying the access right
is expected to take some time, for example when using D-Bus etc.

Use [method@GUPnP.Acl.is_allowed_finish] to retrieve the result.</doc>
        <source-position filename="libgupnp/gupnp-acl.h" line="39"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="71">a #GUPnPAcl</doc>
            <type name="Acl" c:type="GUPnPAcl*"/>
          </instance-parameter>
          <parameter name="device"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="72">The [class@GUPnP.Device] associated with @path or %NULL if
unknown.</doc>
            <type name="Device" c:type="GUPnPDevice*"/>
          </parameter>
          <parameter name="service"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="74">The [class@GUPnP.Service] associated with @path or %NULL if
unknown.</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="76">The path being served.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="address" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="77">IP address of the peer</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="agent"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="78">The User-Agent header of the peer or %NULL if not
unknown.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="80">A cancellable which can be used to cancel the
operation.</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="7">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="82">Callback to call after the function is done.</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     closure="7">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="83">Some user data.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="is_allowed_finish"
                      invoker="is_allowed_finish"
                      version="0.20.11"
                      throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-acl.c"
             line="123">Get the result of [method@GUPnP.Acl.is_allowed_async].</doc>
        <source-position filename="libgupnp/gupnp-acl.h" line="49"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="125">An instance of #GUPnPAcl</doc>
            <type name="Acl" c:type="GUPnPAcl*"/>
          </instance-parameter>
          <parameter name="res" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="126">[iface@Gio.AsyncResult] obtained from the callback passed to [method@GUPnP.Acl.is_allowed_async]</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="can_sync"
              c:identifier="gupnp_acl_can_sync"
              version="0.20.11">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-acl.c"
             line="147">Check whether [method@GUPnP.Acl.is_allowed_async] is supported.</doc>
        <source-position filename="libgupnp/gupnp-acl.h" line="91"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="149">A #GUPnPAcl
@returns %TRUE, if gupnp_acl_is_allowed_async() is supported, %FALSE
otherwise.</doc>
            <type name="Acl" c:type="GUPnPAcl*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_allowed"
              c:identifier="gupnp_acl_is_allowed"
              version="0.20.11"
              glib:async-func="is_allowed_async">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-acl.c"
             line="35">Check whether an IP address is allowed to access this resource.</doc>
        <source-position filename="libgupnp/gupnp-acl.h" line="67"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="37">an instance of #GUPnPAcl</doc>
            <type name="Acl" c:type="GUPnPAcl*"/>
          </instance-parameter>
          <parameter name="device"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="38">The [class@GUPnP.Device] associated with @path or %NULL if
unknown.</doc>
            <type name="Device" c:type="GUPnPDevice*"/>
          </parameter>
          <parameter name="service"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="40">The [class@GUPnP.Service] associated with @path or %NULL if
unknown.</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="42">The path being served.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="address" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="43">IP address of the peer.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="agent"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="44">The User-Agent header of the peer or %NULL if unknown.
@returns %TRUE if the peer is allowed, %FALSE otherwise</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_allowed_async"
              c:identifier="gupnp_acl_is_allowed_async"
              version="0.20.11"
              glib:finish-func="is_allowed_finish"
              glib:sync-func="is_allowed">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-acl.c"
             line="69">Check asynchronously whether an IP address is allowed to access
this resource.

This function is optional. [method@GUPnP.Acl.can_sync] should return %TRUE
if the implementing class supports it. If it is supported, GUPnP will
prefer to use this function over [method@GUPnP.Acl.is_allowed].

Implement this function if the process of verifying the access right
is expected to take some time, for example when using D-Bus etc.

Use [method@GUPnP.Acl.is_allowed_finish] to retrieve the result.</doc>
        <source-position filename="libgupnp/gupnp-acl.h" line="75"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="71">a #GUPnPAcl</doc>
            <type name="Acl" c:type="GUPnPAcl*"/>
          </instance-parameter>
          <parameter name="device"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="72">The [class@GUPnP.Device] associated with @path or %NULL if
unknown.</doc>
            <type name="Device" c:type="GUPnPDevice*"/>
          </parameter>
          <parameter name="service"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="74">The [class@GUPnP.Service] associated with @path or %NULL if
unknown.</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="76">The path being served.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="address" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="77">IP address of the peer</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="agent"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="78">The User-Agent header of the peer or %NULL if not
unknown.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="80">A cancellable which can be used to cancel the
operation.</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="7">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="82">Callback to call after the function is done.</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="83">Some user data.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_allowed_finish"
              c:identifier="gupnp_acl_is_allowed_finish"
              version="0.20.11"
              throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-acl.c"
             line="123">Get the result of [method@GUPnP.Acl.is_allowed_async].</doc>
        <source-position filename="libgupnp/gupnp-acl.h" line="86"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="125">An instance of #GUPnPAcl</doc>
            <type name="Acl" c:type="GUPnPAcl*"/>
          </instance-parameter>
          <parameter name="res" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-acl.c"
                 line="126">[iface@Gio.AsyncResult] obtained from the callback passed to [method@GUPnP.Acl.is_allowed_async]</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
    </interface>
    <record name="AclInterface"
            c:type="GUPnPAclInterface"
            glib:is-gtype-struct-for="Acl">
      <source-position filename="libgupnp/gupnp-acl.h" line="64"/>
      <field name="parent">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="is_allowed">
        <callback name="is_allowed">
          <source-position filename="libgupnp/gupnp-acl.h" line="32"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="self" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="37">an instance of #GUPnPAcl</doc>
              <type name="Acl" c:type="GUPnPAcl*"/>
            </parameter>
            <parameter name="device"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="38">The [class@GUPnP.Device] associated with @path or %NULL if
unknown.</doc>
              <type name="Device" c:type="GUPnPDevice*"/>
            </parameter>
            <parameter name="service"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="40">The [class@GUPnP.Service] associated with @path or %NULL if
unknown.</doc>
              <type name="Service" c:type="GUPnPService*"/>
            </parameter>
            <parameter name="path" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="42">The path being served.</doc>
              <type name="utf8" c:type="const char*"/>
            </parameter>
            <parameter name="address" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="43">IP address of the peer.</doc>
              <type name="utf8" c:type="const char*"/>
            </parameter>
            <parameter name="agent"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="44">The User-Agent header of the peer or %NULL if unknown.
@returns %TRUE if the peer is allowed, %FALSE otherwise</doc>
              <type name="utf8" c:type="const char*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="is_allowed_async">
        <callback name="is_allowed_async">
          <source-position filename="libgupnp/gupnp-acl.h" line="39"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="self" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="71">a #GUPnPAcl</doc>
              <type name="Acl" c:type="GUPnPAcl*"/>
            </parameter>
            <parameter name="device"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="72">The [class@GUPnP.Device] associated with @path or %NULL if
unknown.</doc>
              <type name="Device" c:type="GUPnPDevice*"/>
            </parameter>
            <parameter name="service"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="74">The [class@GUPnP.Service] associated with @path or %NULL if
unknown.</doc>
              <type name="Service" c:type="GUPnPService*"/>
            </parameter>
            <parameter name="path" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="76">The path being served.</doc>
              <type name="utf8" c:type="const char*"/>
            </parameter>
            <parameter name="address" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="77">IP address of the peer</doc>
              <type name="utf8" c:type="const char*"/>
            </parameter>
            <parameter name="agent"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="78">The User-Agent header of the peer or %NULL if not
unknown.</doc>
              <type name="utf8" c:type="const char*"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="80">A cancellable which can be used to cancel the
operation.</doc>
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
            <parameter name="callback"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1"
                       scope="async"
                       closure="8">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="82">Callback to call after the function is done.</doc>
              <type name="Gio.AsyncReadyCallback"
                    c:type="GAsyncReadyCallback"/>
            </parameter>
            <parameter name="user_data"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1"
                       closure="8">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="83">Some user data.</doc>
              <type name="gpointer" c:type="gpointer"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="is_allowed_finish">
        <callback name="is_allowed_finish" throws="1">
          <source-position filename="libgupnp/gupnp-acl.h" line="49"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="self" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="125">An instance of #GUPnPAcl</doc>
              <type name="Acl" c:type="GUPnPAcl*"/>
            </parameter>
            <parameter name="res" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="126">[iface@Gio.AsyncResult] obtained from the callback passed to [method@GUPnP.Acl.is_allowed_async]</doc>
              <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="can_sync">
        <callback name="can_sync">
          <source-position filename="libgupnp/gupnp-acl.h" line="53"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="self" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-acl.c"
                   line="149">A #GUPnPAcl
@returns %TRUE, if gupnp_acl_is_allowed_async() is supported, %FALSE
otherwise.</doc>
              <type name="Acl" c:type="GUPnPAcl*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <glib:boxed glib:name="BinBase64"
                c:symbol-prefix="bin_base64"
                glib:type-name="GUPnPBinBase64"
                glib:get-type="gupnp_bin_base64_get_type">
    </glib:boxed>
    <glib:boxed glib:name="BinHex"
                c:symbol-prefix="bin_hex"
                glib:type-name="GUPnPBinHex"
                glib:get-type="gupnp_bin_hex_get_type">
    </glib:boxed>
    <class name="Context"
           c:symbol-prefix="context"
           c:type="GUPnPContext"
           parent="GSSDP.Client"
           glib:type-name="GUPnPContext"
           glib:get-type="gupnp_context_get_type"
           glib:type-struct="ContextClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-context.c"
           line="13">Context object wrapping shared networking bits.

#GUPnPContext wraps the networking bits that are used by the various
GUPnP classes. It automatically starts a web server on demand.

For debugging, it is possible to see the messages being sent and received by
setting the environment variable `GUPNP_DEBUG`.</doc>
      <source-position filename="libgupnp/gupnp-context.h" line="42"/>
      <implements name="Gio.Initable"/>
      <constructor name="new"
                   c:identifier="gupnp_context_new"
                   deprecated="1"
                   deprecated-version="1.6."
                   throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="596">Create a new #GUPnPContext with the specified @iface and
@port.</doc>
        <doc-deprecated xml:space="preserve">Use [ctor@GUPnP.Context.new_for_address] instead</doc-deprecated>
        <source-position filename="libgupnp/gupnp-context.h" line="46"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context.c"
               line="608">A new #GUPnPContext object, or %NULL on an error</doc>
          <type name="Context" c:type="GUPnPContext*"/>
        </return-value>
        <parameters>
          <parameter name="iface"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="598">The network interface to use, or %NULL to
auto-detect.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="port" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="600">Port to run on, or 0 if you don't care what port is used.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_for_address"
                   c:identifier="gupnp_context_new_for_address"
                   version="1.6.0"
                   throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="662">Creates a GUPnP context with address @addr. If none is specified, GUPnP
will chose the address it deems most suitable.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="49"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context.c"
               line="677">A new #GSSDPClient object or %NULL on error.</doc>
          <type name="Context" c:type="GUPnPContext*"/>
        </return-value>
        <parameters>
          <parameter name="addr"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="664">an IP address or %NULL for auto-detection. If you do not
care about the address, but want to specify an address family, use
[ctor@Glib.InetAddress.new_any] with the appropriate family instead.</doc>
            <type name="Gio.InetAddress" c:type="GInetAddress*"/>
          </parameter>
          <parameter name="port" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="667">The network port to use for M-SEARCH requests or 0 for
random.</doc>
            <type name="guint16" c:type="guint16"/>
          </parameter>
          <parameter name="uda_version" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="669">The UDA version this client will adhere to</doc>
            <type name="GSSDP.UDAVersion" c:type="GSSDPUDAVersion"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_full"
                   c:identifier="gupnp_context_new_full"
                   version="1.6.0"
                   throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="623">Creates a GUPnP context with address @addr on network interface @iface. If
neither is specified, GUPnP will chose the address it deems most suitable.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="55"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context.c"
               line="639">A new #GSSDPClient object or %NULL on error.</doc>
          <type name="Context" c:type="GUPnPContext*"/>
        </return-value>
        <parameters>
          <parameter name="iface"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="625">the name of a network interface</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="addr"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="626">an IP address or %NULL for auto-detection. If you do not
care about the address, but want to specify an address family, use
[ctor@Glib.InetAddress.new_any] with the appropriate family instead.</doc>
            <type name="Gio.InetAddress" c:type="GInetAddress*"/>
          </parameter>
          <parameter name="port" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="629">The network port to use for M-SEARCH requests or 0 for
random.</doc>
            <type name="guint16" c:type="guint16"/>
          </parameter>
          <parameter name="uda_version" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="631">The UDA version this client will adhere to</doc>
            <type name="GSSDP.UDAVersion" c:type="GSSDPUDAVersion"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="add_server_handler"
              c:identifier="gupnp_context_add_server_handler"
              version="0.20.11">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="1575">Add a #SoupServerCallback to the #GUPnPContext&lt;!-- --&gt;'s #SoupServer.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="107"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1577">a #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
          <parameter name="use_acl" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1578">%TRUE, if the path should query the GUPnPContext::acl before
serving the resource, %FALSE otherwise.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1580">the toplevel path for the handler.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="notified"
                     closure="3"
                     destroy="4">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1581">callback to invoke for requests under @path</doc>
            <type name="Soup.ServerCallback" c:type="SoupServerCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1582">the user_data passed to @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="destroy"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1583">A #GDestroyNotify for @user_data or %NULL if none.</doc>
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_acl"
              c:identifier="gupnp_context_get_acl"
              glib:get-property="acl"
              version="0.20.11">
        <attribute name="org.gtk.Method.get_property" value="acl"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="1405">Access the #GUPnPAcl associated with this client. If there isn't any,
retturns %NULL. The returned ACL must not be freed.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="100"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context.c"
               line="1412">The access control list associated with this context or %NULL
if no acl is set.</doc>
          <type name="Acl" c:type="GUPnPAcl*"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1407">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_default_language"
              c:identifier="gupnp_context_get_default_language"
              glib:get-property="default-language"
              version="0.18.0">
        <attribute name="org.gtk.Method.get_property"
                   value="default-language"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="804">Get the default Content-Language header for this context.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="82"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context.c"
               line="810">The default content of the Content-Language
header.</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="806">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_port" c:identifier="gupnp_context_get_port">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="688">Get the port that the SOAP server is running on.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="62"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context.c"
               line="694">The port the SOAP server is running on.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="690">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_server"
              c:identifier="gupnp_context_get_server"
              glib:get-property="server">
        <attribute name="org.gtk.Method.get_property" value="server"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="511">Get the #SoupServer HTTP server that GUPnP is using.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="65"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context.c"
               line="517">The #SoupServer used by GUPnP. Do not unref this when finished.</doc>
          <type name="Soup.Server" c:type="SoupServer*"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="513">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_session"
              c:identifier="gupnp_context_get_session"
              glib:get-property="session"
              version="0.12.3">
        <attribute name="org.gtk.Method.get_property" value="session"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="473">Get the #SoupSession object that GUPnP is using.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="68"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context.c"
               line="479">The #SoupSession used by GUPnP. Do not unref
this when finished.</doc>
          <type name="Soup.Session" c:type="SoupSession*"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="475">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_subscription_timeout"
              c:identifier="gupnp_context_get_subscription_timeout"
              glib:get-property="subscription-timeout">
        <attribute name="org.gtk.Method.get_property"
                   value="subscription-timeout"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="730">Get the event subscription timeout (in seconds), or 0 meaning there is no
timeout.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="75"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context.c"
               line="737">The event subscription timeout in seconds.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="732">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="host_path" c:identifier="gupnp_context_host_path">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="1271">Start hosting @local_path at @server_path. Files with the path
@local_path.LOCALE (if they exist) will be served up when LOCALE is
specified in the request's Accept-Language header.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="85"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1273">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
          <parameter name="local_path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1274">Path to the local file or folder to be hosted</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="server_path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1275">Web server path where @local_path should be hosted</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="host_path_for_agent"
              c:identifier="gupnp_context_host_path_for_agent"
              version="0.14.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="1322">Use this method to serve different local path to specific user-agent(s). The
path @server_path must already be hosted by @context.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="90"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context.c"
               line="1332">%TRUE on success, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1324">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
          <parameter name="local_path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1325">Path to the local file or folder to be hosted</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="server_path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1326">Web server path already being hosted</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="user_agent" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1327">The user-agent as a #GRegex.</doc>
            <type name="GLib.Regex" c:type="GRegex*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_server_handler"
              c:identifier="gupnp_context_remove_server_handler"
              version="0.20.11">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="1635">Remove a #SoupServerCallback from the #GUPnPContext&lt;!-- --&gt;'s #SoupServer.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="115"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1637">a #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1638">the toplevel path for the handler.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="rewrite_uri"
              c:identifier="gupnp_context_rewrite_uri"
              version="1.2.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="1655">Utility function to re-write an uri to the IPv6 link-local form which has
the zone index appended to the IP address.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="119"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context.c"
               line="1663">A re-written version of the @uri if the context is on a link-local
IPv6 address, a copy of the @uri otherwise or %NULL if @uri was invalid</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1657">a #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
          <parameter name="uri" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1658">an uri to rewrite if necessary</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_acl"
              c:identifier="gupnp_context_set_acl"
              glib:set-property="acl"
              version="0.20.11">
        <attribute name="org.gtk.Method.set_property" value="acl"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="1428">Attach or remove the assoicated access control list to this context. If
@acl is %NULL, the current access control list will be removed.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="103"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1430">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
          <parameter name="acl"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1431">The new access control list or %NULL to remove the
current list.</doc>
            <type name="Acl" c:type="GUPnPAcl*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_default_language"
              c:identifier="gupnp_context_set_default_language"
              glib:set-property="default-language"
              version="0.18.0">
        <attribute name="org.gtk.Method.set_property"
                   value="default-language"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="764">Set the default language for the Content-Language header to @language.

If the client sends an Accept-Language header the UPnP HTTP server
is required to send a Content-Language header in return. If there are
no files hosted in languages which match the requested ones the
Content-Language header is set to this value. The default value is "en".</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="78"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="766">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
          <parameter name="language" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="767">A language tag as defined in RFC 2616 3.10</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_subscription_timeout"
              c:identifier="gupnp_context_set_subscription_timeout">
        <attribute name="org.gtk.Method.set_property"
                   value="subscription-timeout"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="707">Sets the event subscription timeout to @timeout. Use 0 if you don't
want subscriptions to time out. Note that any client side subscriptions
will automatically be renewed.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="71"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="709">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
          <parameter name="timeout" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="710">Event subscription timeout in seconds</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="unhost_path" c:identifier="gupnp_context_unhost_path">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="1369">Stop hosting the file or folder at @server_path.</doc>
        <source-position filename="libgupnp/gupnp-context.h" line="96"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1371">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </instance-parameter>
          <parameter name="server_path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context.c"
                 line="1372">Web server path where the file or folder is hosted</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <property name="acl"
                version="0.20.11"
                writable="1"
                construct="1"
                transfer-ownership="none"
                setter="set_acl"
                getter="get_acl">
        <attribute name="org.gtk.Property.get" value="gupnp_context_get_acl"/>
        <attribute name="org.gtk.Property.set" value="gupnp_context_set_acl"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="454">An access control list.</doc>
        <type name="Acl"/>
      </property>
      <property name="default-language"
                version="0.18.0"
                writable="1"
                construct="1"
                transfer-ownership="none"
                setter="set_default_language"
                getter="get_default_language"
                default-value="en">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_context_get_default_language"/>
        <attribute name="org.gtk.Property.set"
                   value="gupnp_context_set_default_language"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="432">The content of the Content-Language header id the client
sends Accept-Language and no language-specific pages to serve
exist. The property defaults to 'en'.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="server" transfer-ownership="none" getter="get_server">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_context_get_server"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="377">The #SoupServer HTTP server used by GUPnP.</doc>
        <type name="Soup.Server"/>
      </property>
      <property name="session" transfer-ownership="none" getter="get_session">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_context_get_session"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="394">The #SoupSession object used by GUPnP.</doc>
        <type name="Soup.Session"/>
      </property>
      <property name="subscription-timeout"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_subscription_timeout"
                default-value="1800">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_context_get_subscription_timeout"/>
        <attribute name="org.gtk.Property.set"
                   value="gupnp_context_set_subscription_timeout"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context.c"
             line="411">The preferred subscription timeout: the number of seconds after
which subscriptions are renewed. Set to '0' if subscriptions
are never to time out.</doc>
        <type name="guint" c:type="guint"/>
      </property>
      <field name="parent_instance">
        <type name="GSSDP.Client" c:type="GSSDPClient"/>
      </field>
    </class>
    <record name="ContextClass"
            c:type="GUPnPContextClass"
            glib:is-gtype-struct-for="Context">
      <source-position filename="libgupnp/gupnp-context.h" line="42"/>
      <field name="parent_class">
        <type name="GSSDP.ClientClass" c:type="GSSDPClientClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <source-position filename="libgupnp/gupnp-context.h" line="35"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved2" introspectable="0">
        <callback name="_gupnp_reserved2">
          <source-position filename="libgupnp/gupnp-context.h" line="39"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved3" introspectable="0">
        <callback name="_gupnp_reserved3">
          <source-position filename="libgupnp/gupnp-context.h" line="40"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved4" introspectable="0">
        <callback name="_gupnp_reserved4">
          <source-position filename="libgupnp/gupnp-context.h" line="41"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <class name="ContextFilter"
           c:symbol-prefix="context_filter"
           c:type="GUPnPContextFilter"
           version="1.4.0"
           parent="GObject.Object"
           glib:type-name="GUPnPContextFilter"
           glib:get-type="gupnp_context_filter_get_type"
           glib:type-struct="ContextFilterClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-context-filter.c"
           line="21">Network context filter, used by [class@GUPnP.ContextManager]

#GUPnPContextFilter handles network filtering. It provides API to manage a
list of entries that will be used to positive filter networks. The #GUPnPContextFilter
could be enabled or not. If it's enabled but the entries list is empty, it
behaves as if being disabled.

The GUPnPContextFilter is used with the [class@GUPnP.ContextManager]
to narrow down the contexts that are notified by it.

Contexts can be filtered by the following criteria:

 - Their IP addresses
 - The network device they will live on
 - The name of the network the context would join

To add or modify a context filter, you need to retrieve the current context filter
from the context manger using [method@GUPnP.ContextManager.get_context_filter].

By default, a context filter is empty and disabled.

For example, to only react to contexts that are appearing on eth0 or when being in the WiFi network with
the SSID "HomeNetwork", and on IPv6 localhost, you should do:


```c
GUPnPContextFilter* filter;

filter = gupnp_context_manager_get_context_filter (manager);
const char *filter_entries[] = {
    "eth0",
    "HomeNetwork",
    "::1",
    NULL
};
gupnp_context_filter_add_entryv (filter, filter_entries);
gupnp_context_filter_set_enabled (filter, TRUE);
```</doc>
      <source-position filename="libgupnp/gupnp-context-filter.h" line="28"/>
      <method name="add_entry"
              c:identifier="gupnp_context_filter_add_entry"
              version="1.4.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-filter.c"
             line="297">Add @entry in the list of valid criteria used by @context_filter to
filter networks.
if @entry already exists, it won't be added a second time.</doc>
        <source-position filename="libgupnp/gupnp-context-filter.h" line="41"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context-filter.c"
               line="306">%TRUE if @entry is added, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="context_filter" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="299">A #GUPnPContextFilter</doc>
            <type name="ContextFilter" c:type="GUPnPContextFilter*"/>
          </instance-parameter>
          <parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="300">A value used to filter network</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_entryv"
              c:identifier="gupnp_context_filter_add_entryv"
              version="1.4.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-filter.c"
             line="330">Add a list of entries to a #GUPnPContextFilter. This is a helper function to
directly add a %NULL-terminated array of string usually acquired from
command line arguments.</doc>
        <source-position filename="libgupnp/gupnp-context-filter.h" line="44"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="context_filter" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="332">A #GUPnPContextFilter</doc>
            <type name="ContextFilter" c:type="GUPnPContextFilter*"/>
          </instance-parameter>
          <parameter name="entries" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="333">A %NULL-terminated list of strings</doc>
            <array c:type="gchar**">
              <type name="utf8" c:type="gchar*"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="check_context"
              c:identifier="gupnp_context_filter_check_context"
              version="1.4.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-filter.c"
             line="440">It will check if the @context is allowed or not. The @context_filter will
check all its entries against #GUPnPContext interface, host IP and network
fields information. This function doesn't take into account the
@context_filter status (enabled or not).</doc>
        <source-position filename="libgupnp/gupnp-context-filter.h" line="58"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context-filter.c"
               line="450">%TRUE if @context is matching the @context_filter criteria,
%FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="context_filter" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="442">A #GUPnPContextFilter</doc>
            <type name="ContextFilter" c:type="GUPnPContextFilter*"/>
          </instance-parameter>
          <parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="443">A #GUPnPContext to test.</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </parameter>
        </parameters>
      </method>
      <method name="clear"
              c:identifier="gupnp_context_filter_clear"
              version="1.4.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-filter.c"
             line="417">Remove all entries from #GList that compose the context filter.
The list is now empty. Even if #GUPnPContextFilter is enabled, it will have
the same behavior as if it was disabled.</doc>
        <source-position filename="libgupnp/gupnp-context-filter.h" line="55"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="context_filter" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="419">A #GUPnPContextFilter</doc>
            <type name="ContextFilter" c:type="GUPnPContextFilter*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_enabled"
              c:identifier="gupnp_context_filter_get_enabled"
              glib:get-property="enabled"
              version="1.4.0">
        <attribute name="org.gtk.Method.get_property" value="enabled"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-filter.c"
             line="253">Return the status of the #GUPnPContextFilter</doc>
        <source-position filename="libgupnp/gupnp-context-filter.h" line="35"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context-filter.c"
               line="259">%TRUE if @context_filter is enabled, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="context_filter" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="255">A #GUPnPContextFilter</doc>
            <type name="ContextFilter" c:type="GUPnPContextFilter*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_entries"
              c:identifier="gupnp_context_filter_get_entries"
              glib:get-property="entries"
              version="1.4.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-filter.c"
             line="394">Get the #GList of entries that compose the context filter. Do not free</doc>
        <source-position filename="libgupnp/gupnp-context-filter.h" line="52"/>
        <return-value transfer-ownership="container" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context-filter.c"
               line="400">a #GList of entries
used to filter networks, interfaces,... or %NULL.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="context_filter" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="396">A #GUPnPContextFilter</doc>
            <type name="ContextFilter" c:type="GUPnPContextFilter*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_empty"
              c:identifier="gupnp_context_filter_is_empty"
              version="1.4.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-filter.c"
             line="275">Return the state of the entries list of #GUPnPContextFilter</doc>
        <source-position filename="libgupnp/gupnp-context-filter.h" line="38"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context-filter.c"
               line="281">%TRUE if @context_filter is empty, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="context_filter" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="277">A #GUPnPContextFilter</doc>
            <type name="ContextFilter" c:type="GUPnPContextFilter*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="remove_entry"
              c:identifier="gupnp_context_filter_remove_entry"
              version="1.4.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-filter.c"
             line="362">Remove @entry in the list of valid criteria used by @context_filter to
filter networks.</doc>
        <source-position filename="libgupnp/gupnp-context-filter.h" line="48"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context-filter.c"
               line="370">%TRUE if @entry is removed, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="context_filter" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="364">A #GUPnPContextFilter</doc>
            <type name="ContextFilter" c:type="GUPnPContextFilter*"/>
          </instance-parameter>
          <parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="365">A value to remove from the filter list.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_enabled"
              c:identifier="gupnp_context_filter_set_enabled"
              glib:set-property="enabled"
              version="1.4.0">
        <attribute name="org.gtk.Method.set_property" value="enabled"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-filter.c"
             line="229">Enable or disable the #GUPnPContextFilter to perform the network filtering.</doc>
        <source-position filename="libgupnp/gupnp-context-filter.h" line="31"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="context_filter" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="231">A #GUPnPContextFilter</doc>
            <type name="ContextFilter" c:type="GUPnPContextFilter*"/>
          </instance-parameter>
          <parameter name="enable" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-filter.c"
                 line="232">%TRUE to enable @context_filter, %FALSE otherwise</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <property name="enabled"
                version="1.4.0"
                writable="1"
                construct="1"
                transfer-ownership="none"
                setter="set_enabled"
                getter="get_enabled"
                default-value="FALSE">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_context_filter_get_enabled"/>
        <attribute name="org.gtk.Property.set"
                   value="gupnp_context_filter_set_enabled"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-filter.c"
             line="176">Whether this context filter is active or not.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="entries"
                version="1.4.0"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_entries">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_context_filter_get_entries"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-filter.c"
             line="194">A list of items to filter for.</doc>
        <type name="GLib.List" c:type="gpointer">
          <type name="utf8"/>
        </type>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="ContextFilterClass"
            c:type="GUPnPContextFilterClass"
            glib:is-gtype-struct-for="ContextFilter">
      <source-position filename="libgupnp/gupnp-context-filter.h" line="28"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <class name="ContextManager"
           c:symbol-prefix="context_manager"
           c:type="GUPnPContextManager"
           version="0.14.0"
           parent="GObject.Object"
           abstract="1"
           glib:type-name="GUPnPContextManager"
           glib:get-type="gupnp_context_manager_get_type"
           glib:type-struct="ContextManagerClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-context-manager.c"
           line="63">A manager for [class@GUPnP.Context] instances.

This utility class that takes care of dynamic creation and destruction of
#GUPnPContext objects for all available network interfaces as they go up
(connect) and down (disconnect), respectively.

The final implementation depends either on the underlying operating system
or can configured during compile time.

It also provides a simple filtering facility if required. See [method@GUPnP.ContextManager.get_context_filter] and
[class@GUPnP.ContextFilter] for details.</doc>
      <source-position filename="libgupnp/gupnp-context-manager.h" line="39"/>
      <function name="create"
                c:identifier="gupnp_context_manager_create"
                version="0.18.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="622">Factory-method to create a new #GUPnPContextManager. The final type of the
#GUPnPContextManager depends on the compile-time selection or - in case of
NetworkManager - on its availability during run-time. If it is not available,
the implementation falls back to the basic Unix context manager instead.

Equivalent to calling #gupnp_context_manager_create_full (%GSSDP_UDA_VERSION_1_0, %G_SOCKET_FAMILY_IPV4, port);</doc>
        <source-position filename="libgupnp/gupnp-context-manager.h"
                         line="42"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context-manager.c"
               line="633">A new #GUPnPContextManager object.</doc>
          <type name="ContextManager" c:type="GUPnPContextManager*"/>
        </return-value>
        <parameters>
          <parameter name="port" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="624">Port to create contexts for, or 0 if you don't care what port is used.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </function>
      <function name="create_full"
                c:identifier="gupnp_context_manager_create_full"
                version="1.2.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="645">Factory-method to create a new #GUPnPContextManager. The final type of the
#GUPnPContextManager depends on the compile-time selection or - in case of
NetworkManager - on its availability during run-time. If it is not available,
the implementation falls back to the basic Unix context manager instead.</doc>
        <source-position filename="libgupnp/gupnp-context-manager.h"
                         line="45"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context-manager.c"
               line="657">A new #GUPnPContextManager object.</doc>
          <type name="ContextManager" c:type="GUPnPContextManager*"/>
        </return-value>
        <parameters>
          <parameter name="uda_version" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="647">#GSSDPUDAVersion the created contexts should implement
(UDA 1.0 or 1.1). For %GSSDP_UDA_VERSION_UNSPECIFIED for default.</doc>
            <type name="GSSDP.UDAVersion" c:type="GSSDPUDAVersion"/>
          </parameter>
          <parameter name="family" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="649">#GSocketFamily to create the context for</doc>
            <type name="Gio.SocketFamily" c:type="GSocketFamily"/>
          </parameter>
          <parameter name="port" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="650">Port to create contexts for, or 0 if you don't care what port is used.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </function>
      <method name="get_context_filter"
              c:identifier="gupnp_context_manager_get_context_filter"
              glib:get-property="context-filter"
              version="1.4.0">
        <attribute name="org.gtk.Method.get_property" value="context-filter"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="875">Get the #GUPnPContextFilter associated with @manager.</doc>
        <source-position filename="libgupnp/gupnp-context-manager.h"
                         line="67"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context-manager.c"
               line="881">The #GUPnPContextFilter associated with this
context manager.</doc>
          <type name="ContextFilter" c:type="GUPnPContextFilter*"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="877">A #GUPnPContextManager</doc>
            <type name="ContextManager" c:type="GUPnPContextManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_port"
              c:identifier="gupnp_context_manager_get_port"
              glib:get-property="port"
              version="0.20.0">
        <attribute name="org.gtk.Method.get_property" value="port"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="854">Get the network port associated with this context manager.</doc>
        <source-position filename="libgupnp/gupnp-context-manager.h"
                         line="64"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context-manager.c"
               line="859">The network port associated with this context manager.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="856">A #GUPnPContextManager</doc>
            <type name="ContextManager" c:type="GUPnPContextManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_socket_family"
              c:identifier="gupnp_context_manager_get_socket_family"
              version="1.2.0">
        <attribute name="org.gtk.Method.get_property" value="family"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="898">Get the #GSocketFamily the contexts are created for. Can be
%G_SOCKET_FAMILY_IPV6, %G_SOCKET_FAMILY_IPV4 or %G_SOCKET_FAMILY_INVALID for
both</doc>
        <source-position filename="libgupnp/gupnp-context-manager.h"
                         line="70"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context-manager.c"
               line="906">The socket family</doc>
          <type name="Gio.SocketFamily" c:type="GSocketFamily"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="900">A #GUPnPContextManager</doc>
            <type name="ContextManager" c:type="GUPnPContextManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_uda_version"
              c:identifier="gupnp_context_manager_get_uda_version"
              glib:get-property="uda-version"
              version="1.2.0">
        <attribute name="org.gtk.Method.get_property" value="uda-version"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="922">Get the UDA protocol version the contexts are implementing</doc>
        <source-position filename="libgupnp/gupnp-context-manager.h"
                         line="73"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-context-manager.c"
               line="928">The UDA protocol version</doc>
          <type name="GSSDP.UDAVersion" c:type="GSSDPUDAVersion"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="924">A #GUPnPContextManager</doc>
            <type name="ContextManager" c:type="GUPnPContextManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="manage_control_point"
              c:identifier="gupnp_context_manager_manage_control_point"
              version="0.14.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="750">By calling this function, you are asking @manager to keep a reference to
@control_point until its associated #GUPnPContext is no longer available.
You usually want to call this function from your
[signal@GUPnP.ContextManager::context-available] handler after you create a
#GUPnPControlPoint object for the newly available context.
You usually then give up your own reference to the control point so it will be
automatically destroyed if its context is no longer available.

This function is mainly useful when implementing an UPnP client.

```c
void on_context_available (GUPnPContextManager *manager, GUPnPContext *context, gpointer user_data)
{
    GUPnPControlPoint *cp = gupnp_control_point_new (context, "urn:schemas-upnp-org:device:MediaRenderer:1");
    gupnp_context_manager_manage_control_point (manager, cp);
    // Subscribe to control point's signals etc.
    g_object_unref (cp);
}
```</doc>
        <source-position filename="libgupnp/gupnp-context-manager.h"
                         line="54"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="752">A #GUPnPContextManager</doc>
            <type name="ContextManager" c:type="GUPnPContextManager*"/>
          </instance-parameter>
          <parameter name="control_point" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="753">The #GUPnPControlPoint to be taken care of</doc>
            <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="manage_root_device"
              c:identifier="gupnp_context_manager_manage_root_device"
              version="0.14.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="801">By calling this function, you are asking @manager to keep a reference to
@root_device when its associated #GUPnPContext is no longer available. You
usually want to call this function from
[signal@GUPnP.ContextManager::context-available] handler after you create a
#GUPnPRootDevice object for the newly available context.

You usually then give up your own reference to the root device so it will be
automatically destroyed if its context is no longer available.

This function is mainly useful when implementing an UPnP client.

```c
void on_context_available (GUPnPContextManager *manager, GUPnPContext *context, gpointer user_data)
{
    GError *error = NULL;

    GUPnPRootDevice *rd = gupnp_root_device_new (context, "BasicLight1.xml", ".", &amp;error);
    gupnp_context_manager_manage_root_device (manager, rd);
    // Subscribe to control point's signals etc.
    g_object_unref (rd);
}
```</doc>
        <source-position filename="libgupnp/gupnp-context-manager.h"
                         line="59"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="803">A #GUPnPContextManager</doc>
            <type name="ContextManager" c:type="GUPnPContextManager*"/>
          </instance-parameter>
          <parameter name="root_device" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="804">The #GUPnPRootDevice to be taken care of</doc>
            <type name="RootDevice" c:type="GUPnPRootDevice*"/>
          </parameter>
        </parameters>
      </method>
      <method name="rescan_control_points"
              c:identifier="gupnp_context_manager_rescan_control_points"
              version="0.20.3">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="725">This function starts a rescan on every control point managed by @manager.
Only the active control points send discovery messages.
This function should be called when servers are suspected to have
disappeared.</doc>
        <source-position filename="libgupnp/gupnp-context-manager.h"
                         line="50"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="727">A #GUPnPContextManager</doc>
            <type name="ContextManager" c:type="GUPnPContextManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="context-filter"
                transfer-ownership="none"
                getter="get_context_filter">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_context_manager_get_context_filter"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="564">The context filter to use.</doc>
        <type name="ContextFilter"/>
      </property>
      <property name="family"
                version="1.2.0"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                default-value="G_SOCKET_FAMILY_INVALID">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_context_manager_get_socket_family"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="523">The socket family to create contexts for. Use %G_SOCKET_FAMILY_INVALID
for any or %G_SOCKET_FAMILY_IPV4 for IPv4 contexts or
%G_SOCKET_FAMILY_IPV6 for IPv6 contexts</doc>
        <type name="Gio.SocketFamily"/>
      </property>
      <property name="port"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_port"
                default-value="0">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_context_manager_get_port"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="504">Port the contexts listen on, or 0 if you don't care what
port is used by #GUPnPContext objects created by this object.</doc>
        <type name="guint" c:type="guint"/>
      </property>
      <property name="uda-version"
                version="1.2.0"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_uda_version"
                default-value="GSSDP_UDA_VERSION_UNSPECIFIED">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_context_manager_get_uda_version"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="544">The UDA version the contexts will support. Use %GSSDP_UDA_VERSION_UNSPECIFIED
for using the default UDA version.</doc>
        <type name="GSSDP.UDAVersion"/>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <glib:signal name="context-available" when="first">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="580">Signals the availability of new #GUPnPContext.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="583">The now available #GUPnPContext</doc>
            <type name="Context"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="context-unavailable" when="first">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-context-manager.c"
             line="598">Signals the unavailability of a #GUPnPContext.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-context-manager.c"
                 line="601">The now unavailable #GUPnPContext</doc>
            <type name="Context"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ContextManagerClass"
            c:type="GUPnPContextManagerClass"
            glib:is-gtype-struct-for="ContextManager">
      <source-position filename="libgupnp/gupnp-context-manager.h" line="39"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <source-position filename="libgupnp/gupnp-context-manager.h"
                           line="35"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved2" introspectable="0">
        <callback name="_gupnp_reserved2">
          <source-position filename="libgupnp/gupnp-context-manager.h"
                           line="36"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved3" introspectable="0">
        <callback name="_gupnp_reserved3">
          <source-position filename="libgupnp/gupnp-context-manager.h"
                           line="37"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved4" introspectable="0">
        <callback name="_gupnp_reserved4">
          <source-position filename="libgupnp/gupnp-context-manager.h"
                           line="38"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <enumeration name="ControlError"
                 glib:type-name="GUPnPControlError"
                 glib:get-type="gupnp_control_error_get_type"
                 c:type="GUPnPControlError"
                 glib:error-domain="gupnp-control-error">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-error.h"
           line="65">Error codes used during invocation of service actions.</doc>
      <member name="invalid_action"
              value="401"
              c:identifier="GUPNP_CONTROL_ERROR_INVALID_ACTION"
              glib:nick="invalid-action"
              glib:name="GUPNP_CONTROL_ERROR_INVALID_ACTION">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="67">The action name was invalid.</doc>
      </member>
      <member name="invalid_args"
              value="402"
              c:identifier="GUPNP_CONTROL_ERROR_INVALID_ARGS"
              glib:nick="invalid-args"
              glib:name="GUPNP_CONTROL_ERROR_INVALID_ARGS">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="68">The action arguments were invalid.</doc>
      </member>
      <member name="out_of_sync"
              value="403"
              c:identifier="GUPNP_CONTROL_ERROR_OUT_OF_SYNC"
              glib:nick="out-of-sync"
              glib:name="GUPNP_CONTROL_ERROR_OUT_OF_SYNC">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="69">Out of sync (deprecated).</doc>
      </member>
      <member name="action_failed"
              value="501"
              c:identifier="GUPNP_CONTROL_ERROR_ACTION_FAILED"
              glib:nick="action-failed"
              glib:name="GUPNP_CONTROL_ERROR_ACTION_FAILED">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="70">The action failed.</doc>
      </member>
      <function name="quark" c:identifier="gupnp_control_error_quark">
        <return-value transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
    </enumeration>
    <class name="ControlPoint"
           c:symbol-prefix="control_point"
           c:type="GUPnPControlPoint"
           parent="GSSDP.ResourceBrowser"
           glib:type-name="GUPnPControlPoint"
           glib:get-type="gupnp_control_point_get_type"
           glib:type-struct="ControlPointClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-control-point.c"
           line="12">Network resource discovery.

#GUPnPControlPoint handles device and service discovery. After creating
a control point and activating it using [method@GSSDP.ResourceBrowser.set_active],
the [signal@GUPnP.ControlPoint::device-proxy-available],
[signal@GUPnP.ControlPoint::service-proxy-available],
[signal@GUPnP.ControlPoint::device-proxy-unavailable] and
[signal@GUPnP.ControlPoint::service-proxy-unavailable] signals will
be emitted whenever the availability of a device or service matching
the specified discovery target changes.</doc>
      <source-position filename="libgupnp/gupnp-control-point.h" line="50"/>
      <constructor name="new" c:identifier="gupnp_control_point_new">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-control-point.c"
             line="1177">Create a new #GUPnPControlPoint with the specified @context and @target.

@target should be a service or device name, such as
`urn:schemas-upnp-org:service:WANIPConnection:1` or
`urn:schemas-upnp-org:device:MediaRenderer:1`.</doc>
        <source-position filename="libgupnp/gupnp-control-point.h" line="53"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-control-point.c"
               line="1188">A new #GUPnPControlPoint object.</doc>
          <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
        </return-value>
        <parameters>
          <parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1179">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1180">The search target</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_full" c:identifier="gupnp_control_point_new_full">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-control-point.c"
             line="1203">Create a new #GUPnPControlPoint with the specified @context, @factory and
@target.

@target should be a service or device name, such as
`urn:schemas-upnp-org:service:WANIPConnection:1` or
`urn:schemas-upnp-org:device:MediaRenderer:1`.

By passing a custom `GUPnPResourceFactory`, the proxies handed out in ::device-available and
::service-available can be overridden to hand out custom classes instead of the generic
[class@GUPnP.ServiceProxy] and [class@GUPnP.DeviceProxy].</doc>
        <source-position filename="libgupnp/gupnp-control-point.h" line="57"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-control-point.c"
               line="1220">A new #GUPnPControlPoint object.</doc>
          <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
        </return-value>
        <parameters>
          <parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1205">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </parameter>
          <parameter name="factory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1206">A #GUPnPResourceFactory</doc>
            <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1207">The search target</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </constructor>
      <virtual-method name="device_proxy_available">
        <source-position filename="libgupnp/gupnp-control-point.h" line="34"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="control_point" transfer-ownership="none">
            <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
          </instance-parameter>
          <parameter name="proxy" transfer-ownership="none">
            <type name="DeviceProxy" c:type="GUPnPDeviceProxy*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="device_proxy_unavailable">
        <source-position filename="libgupnp/gupnp-control-point.h" line="37"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="control_point" transfer-ownership="none">
            <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
          </instance-parameter>
          <parameter name="proxy" transfer-ownership="none">
            <type name="DeviceProxy" c:type="GUPnPDeviceProxy*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="service_proxy_available">
        <source-position filename="libgupnp/gupnp-control-point.h" line="40"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="control_point" transfer-ownership="none">
            <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
          </instance-parameter>
          <parameter name="proxy" transfer-ownership="none">
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="service_proxy_unavailable">
        <source-position filename="libgupnp/gupnp-control-point.h" line="43"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="control_point" transfer-ownership="none">
            <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
          </instance-parameter>
          <parameter name="proxy" transfer-ownership="none">
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_context"
              c:identifier="gupnp_control_point_get_context"
              deprecated="1"
              deprecated-version="1.4.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-control-point.c"
             line="1239">Get the #GUPnPControlPoint associated with @control_point.</doc>
        <doc-deprecated xml:space="preserve">Use [method@GSSDP.ResourceBrowser.get_client] instead.</doc-deprecated>
        <source-position filename="libgupnp/gupnp-control-point.h" line="62"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-control-point.c"
               line="1245">The #GUPnPContext.</doc>
          <type name="Context" c:type="GUPnPContext*"/>
        </return-value>
        <parameters>
          <instance-parameter name="control_point" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1241">A #GUPnPControlPoint</doc>
            <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_resource_factory"
              c:identifier="gupnp_control_point_get_resource_factory"
              glib:get-property="resource-factory">
        <attribute name="org.gtk.Method.get_property"
                   value="resource-factory"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-control-point.c"
             line="1317">Get the #GUPnPResourceFactory used by the @control_point. If none was set during construction
by calling [ctor@GUPnP.ControlPoint.new_full], equivalent to calling
[func@GUPnP.ResourceFactory.get_default]</doc>
        <source-position filename="libgupnp/gupnp-control-point.h" line="71"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-control-point.c"
               line="1325">The #GUPnPResourceFactory used by this control point</doc>
          <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
        </return-value>
        <parameters>
          <instance-parameter name="control_point" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1319">A #GUPnPControlPoint</doc>
            <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_device_proxies"
              c:identifier="gupnp_control_point_list_device_proxies">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-control-point.c"
             line="1261">Get the list of #GUPnPDeviceProxy objects the control point currently assumes to
be active.

Since a device might have gone offline without signalizing it, but
the automatic resource timeout has not happened yet, it is possible that some of
the devices listed are not available anymore on the network.

Do not free the list nor its elements.</doc>
        <source-position filename="libgupnp/gupnp-control-point.h" line="65"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-control-point.c"
               line="1274">Device proxies
currently assumed to be active.</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="DeviceProxy"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="control_point" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1263">A #GUPnPControlPoint</doc>
            <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_service_proxies"
              c:identifier="gupnp_control_point_list_service_proxies">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-control-point.c"
             line="1289">Get the list of discovered #GUPnPServiceProxy objects the control point currently assumes to
be active.

Since a device might have gone offline without signalizing it, but
the automatic resource timeout has not happened yet, it is possible that some of
the services listed are not available anymore on the network.

Do not free the list nor its elements.</doc>
        <source-position filename="libgupnp/gupnp-control-point.h" line="68"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-control-point.c"
               line="1302">Service proxies
currently assumed to be active.</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="ServiceProxy"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="control_point" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1291">A #GUPnPControlPoint</doc>
            <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="resource-factory"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_resource_factory">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_control_point_get_resource_factory"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-control-point.c"
             line="1074">The resource factory to use. Set to NULL for default factory.</doc>
        <type name="ResourceFactory"/>
      </property>
      <field name="parent_instance">
        <type name="GSSDP.ResourceBrowser" c:type="GSSDPResourceBrowser"/>
      </field>
      <glib:signal name="device-proxy-available" when="last">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-control-point.c"
             line="1092">The ::device-proxy-available signal is emitted whenever a new
device has become available.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1095">The now available #GUPnPDeviceProxy</doc>
            <type name="DeviceProxy"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="device-proxy-unavailable" when="last">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-control-point.c"
             line="1113">The ::device-proxy-unavailable signal is emitted whenever a
device is not available any more.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1116">The now unavailable #GUPnPDeviceProxy</doc>
            <type name="DeviceProxy"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="service-proxy-available" when="last">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-control-point.c"
             line="1134">The ::service-proxy-available signal is emitted whenever a new
service has become available.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1137">The now available #GUPnPServiceProxy</doc>
            <type name="ServiceProxy"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="service-proxy-unavailable" when="last">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-control-point.c"
             line="1155">The ::service-proxy-unavailable signal is emitted whenever a
service is not available any more.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-control-point.c"
                 line="1158">The now unavailable #GUPnPServiceProxy</doc>
            <type name="ServiceProxy"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ControlPointClass"
            c:type="GUPnPControlPointClass"
            glib:is-gtype-struct-for="ControlPoint">
      <source-position filename="libgupnp/gupnp-control-point.h" line="50"/>
      <field name="parent_class">
        <type name="GSSDP.ResourceBrowserClass"
              c:type="GSSDPResourceBrowserClass"/>
      </field>
      <field name="device_proxy_available">
        <callback name="device_proxy_available">
          <source-position filename="libgupnp/gupnp-control-point.h"
                           line="34"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="control_point" transfer-ownership="none">
              <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
            </parameter>
            <parameter name="proxy" transfer-ownership="none">
              <type name="DeviceProxy" c:type="GUPnPDeviceProxy*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="device_proxy_unavailable">
        <callback name="device_proxy_unavailable">
          <source-position filename="libgupnp/gupnp-control-point.h"
                           line="37"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="control_point" transfer-ownership="none">
              <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
            </parameter>
            <parameter name="proxy" transfer-ownership="none">
              <type name="DeviceProxy" c:type="GUPnPDeviceProxy*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="service_proxy_available">
        <callback name="service_proxy_available">
          <source-position filename="libgupnp/gupnp-control-point.h"
                           line="40"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="control_point" transfer-ownership="none">
              <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
            </parameter>
            <parameter name="proxy" transfer-ownership="none">
              <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="service_proxy_unavailable">
        <callback name="service_proxy_unavailable">
          <source-position filename="libgupnp/gupnp-control-point.h"
                           line="43"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="control_point" transfer-ownership="none">
              <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
            </parameter>
            <parameter name="proxy" transfer-ownership="none">
              <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <source-position filename="libgupnp/gupnp-control-point.h"
                           line="47"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved2" introspectable="0">
        <callback name="_gupnp_reserved2">
          <source-position filename="libgupnp/gupnp-control-point.h"
                           line="48"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved3" introspectable="0">
        <callback name="_gupnp_reserved3">
          <source-position filename="libgupnp/gupnp-control-point.h"
                           line="49"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <glib:boxed glib:name="Date"
                c:symbol-prefix="date"
                glib:type-name="GUPnPDate"
                glib:get-type="gupnp_date_get_type">
    </glib:boxed>
    <glib:boxed glib:name="DateTime"
                c:symbol-prefix="date_time"
                glib:type-name="GUPnPDateTime"
                glib:get-type="gupnp_date_time_get_type">
    </glib:boxed>
    <glib:boxed glib:name="DateTimeTZ"
                c:symbol-prefix="date_time_tz"
                glib:type-name="GUPnPDateTimeTZ"
                glib:get-type="gupnp_date_time_tz_get_type">
    </glib:boxed>
    <class name="Device"
           c:symbol-prefix="device"
           c:type="GUPnPDevice"
           parent="DeviceInfo"
           glib:type-name="GUPnPDevice"
           glib:get-type="gupnp_device_get_type"
           glib:type-struct="DeviceClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-device.c"
           line="25">Base class for UPnP device implementations.

#GUPnPDevice allows for retrieving a device's sub-devices
and services. #GUPnPDevice implements the #GUPnPDeviceInfo
interface.</doc>
      <source-position filename="libgupnp/gupnp-device.h" line="32"/>
      <property name="root-device"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device.c"
             line="226">The containing #GUPnPRootDevice, or NULL if this is the root
device.</doc>
        <type name="RootDevice"/>
      </property>
      <field name="parent_instance">
        <type name="DeviceInfo" c:type="GUPnPDeviceInfo"/>
      </field>
    </class>
    <record name="DeviceClass"
            c:type="GUPnPDeviceClass"
            glib:is-gtype-struct-for="Device">
      <source-position filename="libgupnp/gupnp-device.h" line="32"/>
      <field name="parent_class">
        <type name="DeviceInfoClass" c:type="GUPnPDeviceInfoClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <source-position filename="libgupnp/gupnp-device.h" line="28"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved2" introspectable="0">
        <callback name="_gupnp_reserved2">
          <source-position filename="libgupnp/gupnp-device.h" line="29"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved3" introspectable="0">
        <callback name="_gupnp_reserved3">
          <source-position filename="libgupnp/gupnp-device.h" line="30"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved4" introspectable="0">
        <callback name="_gupnp_reserved4">
          <source-position filename="libgupnp/gupnp-device.h" line="31"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <class name="DeviceInfo"
           c:symbol-prefix="device_info"
           c:type="GUPnPDeviceInfo"
           parent="GObject.Object"
           abstract="1"
           glib:type-name="GUPnPDeviceInfo"
           glib:get-type="gupnp_device_info_get_type"
           glib:type-struct="DeviceInfoClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-device-info.c"
           line="52">Device information shared by local and remote devices

This class aggregates the information that is shared between remote and local
devices.</doc>
      <source-position filename="libgupnp/gupnp-device-info.h" line="46"/>
      <virtual-method name="create_device_instance" introspectable="0">
        <source-position filename="libgupnp/gupnp-device-info.h" line="36"/>
        <return-value>
          <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
          <parameter name="element" transfer-ownership="none">
            <type name="libxml2.Node" c:type="xmlNode*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="create_service_instance" introspectable="0">
        <source-position filename="libgupnp/gupnp-device-info.h" line="38"/>
        <return-value>
          <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
          <parameter name="element" transfer-ownership="none">
            <type name="libxml2.Node" c:type="xmlNode*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_element" introspectable="0">
        <source-position filename="libgupnp/gupnp-device-info.h" line="34"/>
        <return-value>
          <type name="libxml2.Node" c:type="xmlNode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="get_context"
              c:identifier="gupnp_device_info_get_context"
              glib:get-property="context">
        <attribute name="org.gtk.Method.get_property" value="context"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="420">Get the associated #GUPnPContext.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="50"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="426">The #GUPnPContext the devices is operating on.</doc>
          <type name="Context" c:type="GUPnPContext*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="422">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_description_value"
              c:identifier="gupnp_device_info_get_description_value"
              version="0.14.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="1159">This function provides generic access to the contents of arbitrary elements
in the device description file.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="132"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="1167">a newly allocated string containing the
requested value or %NULL if the device description doesn't contain the given @element</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1161">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
          <parameter name="element" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1162">Name of the description element to retrieve</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_device" c:identifier="gupnp_device_info_get_device">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="1283">Get the device with type @type directly contained in @info as
a new object implementing #GUPnPDeviceInfo, or %NULL if no such device
was found. The returned object should be unreffed when done.

Note that devices are not cached internally, so that every time you call
this function a new object is created. The application must cache any used
devices if it wishes to keep them around and re-use them.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="141"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="1296">A new #GUPnPDeviceInfo.</doc>
          <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1285">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1286">The type of the device to be retrieved.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_device_type"
              c:identifier="gupnp_device_info_get_device_type"
              glib:get-property="device-type">
        <attribute name="org.gtk.Method.get_property" value="device-type"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="505">Get the UPnP device type of this #GUPnPDeviceInfo, e.g. `urn:schemas-upnp-org:device:InternetGatewayDevice:1`</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="62"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="511">A constant string, or %NULL.</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="507">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_friendly_name"
              c:identifier="gupnp_device_info_get_friendly_name">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="530">Get the friendly name of the device.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="65"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="536">A newly allocated string containing the
"friendly name" of the device, or %NULL if not available. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="532">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_icon_async"
              c:identifier="gupnp_device_info_get_icon_async"
              glib:finish-func="get_icon_finish">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="1565">Download the device icon matching the request parameters. For details on
the lookup procedure, see [method@GUPnP.DeviceInfo.get_icon_url]</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="104"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1567">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
          <parameter name="requested_mime_type"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1568">The requested file
format, or %NULL for any</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="requested_depth" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1570">The requested color depth, or -1 for any</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="requested_width" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1571">The requested width, or -1 for any</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="requested_height" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1572">The requested height, or -1 for any</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="prefer_bigger" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1573">%TRUE if a bigger, rather than a smaller icon should be
returned if no exact match could be found</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="7">
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_icon_finish"
              c:identifier="gupnp_device_info_get_icon_finish"
              throws="1">
        <source-position filename="libgupnp/gupnp-device-info.h" line="115"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="1660">A GBytes contaning the icon or NULL on either
error or no matching icon was found.</doc>
          <type name="GLib.Bytes" c:type="GBytes*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1647">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
          <parameter name="res" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1648">A GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
          <parameter name="mime"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1649">The location where to store the the format
of the returned icon, or %NULL. The returned string should be freed after
use</doc>
            <type name="utf8" c:type="char**"/>
          </parameter>
          <parameter name="depth"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1652">The location where to store the depth of the
returned icon, or %NULL</doc>
            <type name="gint" c:type="int*"/>
          </parameter>
          <parameter name="width"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1654">The location where to store the width of the
returned icon, or %NULL</doc>
            <type name="gint" c:type="int*"/>
          </parameter>
          <parameter name="height"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1656">The location where to store the height of the
returned icon, or %NULL</doc>
            <type name="gint" c:type="int*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_icon_url"
              c:identifier="gupnp_device_info_get_icon_url">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="785">Get an URL pointing to the icon most closely matching the
given criteria, or %NULL.

If @requested_mime_type is set, only icons with
this mime type will be returned. If @requested_depth is set, only icons with
this or lower depth will be returned. If @requested_width and/or
@requested_height are set, only icons that are this size or smaller are
returned, unless @prefer_bigger is set, in which case the next biggest icon
will be returned. The returned strings should be freed.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="92"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="815">a string, or %NULL.  g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="787">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
          <parameter name="requested_mime_type"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="788">The requested file
format, or %NULL for any</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="requested_depth" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="790">The requested color depth, or -1 for any</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="requested_width" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="791">The requested width, or -1 for any</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="requested_height" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="792">The requested height, or -1 for any</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="prefer_bigger" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="793">%TRUE if a bigger, rather than a smaller icon should be
returned if no exact match could be found</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="mime_type"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="795">The location where to store the the format
of the returned icon, or %NULL. The returned string should be freed after
use</doc>
            <type name="utf8" c:type="char**"/>
          </parameter>
          <parameter name="depth"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="798">The location where to store the depth of the
returned icon, or %NULL</doc>
            <type name="gint" c:type="int*"/>
          </parameter>
          <parameter name="width"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="800">The location where to store the width of the
returned icon, or %NULL</doc>
            <type name="gint" c:type="int*"/>
          </parameter>
          <parameter name="height"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="802">The location where to store the height of the
returned icon, or %NULL</doc>
            <type name="gint" c:type="int*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_location"
              c:identifier="gupnp_device_info_get_location"
              glib:get-property="location">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="440">Get the URL of the device file</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="53"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="446">A s</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="442">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_manufacturer"
              c:identifier="gupnp_device_info_get_manufacturer">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="552">Get the manufacturer of the device.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="68"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="558">A newly allocated string containing the
manufacturer of the device, or %NULL if not available. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="554">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_manufacturer_url"
              c:identifier="gupnp_device_info_get_manufacturer_url">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="574">Get an URL pointing to the manufacturer's website.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="71"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="580">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="576">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_model_description"
              c:identifier="gupnp_device_info_get_model_description">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="596">Get the description of the device model.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="74"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="602">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="598">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_model_name"
              c:identifier="gupnp_device_info_get_model_name">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="617">Get the model name of the device.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="77"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="623">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="619">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_model_number"
              c:identifier="gupnp_device_info_get_model_number">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="638">Get the model number of the device.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="80"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="644">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="640">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_model_url"
              c:identifier="gupnp_device_info_get_model_url">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="659">Get an URL pointing to the device model's website.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="83"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="665">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="661">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_presentation_url"
              c:identifier="gupnp_device_info_get_presentation_url">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="723">Get an URL pointing to the device's presentation page, for web-based
administration, if available.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="123"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="730">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="725">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_resource_factory"
              c:identifier="gupnp_device_info_get_resource_factory"
              glib:get-property="resource-factory">
        <attribute name="org.gtk.Method.get_property"
                   value="resource-factory"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="400">Get the #GUPnPResourceFactory used by the @device_info.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="155"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="406">A #GUPnPResourceFactory.</doc>
          <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
        </return-value>
        <parameters>
          <instance-parameter name="device_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="402">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_serial_number"
              c:identifier="gupnp_device_info_get_serial_number">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="681">Get the serial number of the device.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="86"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="687">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="683">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_service" c:identifier="gupnp_device_info_get_service">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="1449">Get the service with type @type directly contained in @info as a new object
implementing #GUPnPServiceInfo, or %NULL if no such device was found.

Note that services are not cached internally, so that every time you call
this function a new object is created. The application must cache any used
services if it wishes to keep them around and re-use them.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="151"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="1461">A #GUPnPServiceInfo.</doc>
          <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1451">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1452">The type of the service to be retrieved.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_udn"
              c:identifier="gupnp_device_info_get_udn"
              glib:get-property="udn">
        <attribute name="org.gtk.Method.get_property" value="udn"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="480">Get the Unique Device Name of the device.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="59"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="486">A constant string.</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="482">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_upc" c:identifier="gupnp_device_info_get_upc">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="702">Get the Universal Product Code of the device.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="89"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="708">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="704">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_url_base"
              c:identifier="gupnp_device_info_get_url_base"
              glib:get-property="url-base">
        <attribute name="org.gtk.Method.get_property" value="url-base"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="460">Get the URL base of this device.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="56"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="466">A #SoupURI.</doc>
          <type name="GLib.Uri" c:type="const GUri*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="462">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_device_types"
              c:identifier="gupnp_device_info_list_device_types">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="1238">Get a #GList of strings representing the types of the devices
directly contained in @info.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="138"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="1245">A #GList of strings. The
elements should be g_free()'d and the list should be g_list_free()'d.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1240">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_devices"
              c:identifier="gupnp_device_info_list_devices">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="1187">Get a #GList of new objects implementing #GUPnPDeviceInfo
representing the devices directly contained in @info, excluding itself.

Note that devices are not cached internally, so that every time you
call this function new objects are created. The application
must cache any used devices if it wishes to keep them around and re-use
them.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="135"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="1199">a #GList of
new #GUPnPDeviceInfo objects or %NULL if no devices are</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="DeviceInfo"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1189">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_dlna_capabilities"
              c:identifier="gupnp_device_info_list_dlna_capabilities"
              version="0.14.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="1100">Get a #GList of strings that represent the device capabilities as announced
in the device description file using the &amp;lt;dlna:X_DLNACAP&amp;gt; element.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="129"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="1107">a #GList of newly allocated strings or
%NULL if the device description doesn't contain the &amp;lt;dlna:X_DLNACAP&amp;gt;
element.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1102">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_dlna_device_class_identifier"
              c:identifier="gupnp_device_info_list_dlna_device_class_identifier"
              version="0.20.4">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="1052">Get a list of strings that represent the device class and version as
announced in the device description file using the `&lt;dlna:X_DLNADOC&gt;`
element, e.g. `DMS-1.51`, `M-DMS-1.51` and so on.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="126"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="1060">a #GList of newly allocated strings or
%NULL if the device description doesn't contain any `&lt;dlna:X_DLNADOC&gt;`
element.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1054">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_service_types"
              c:identifier="gupnp_device_info_list_service_types">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="1404">Get a #GList of strings representing the types of the services
directly contained in @info, but not in its subdevices.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="148"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="1411">A #GList of strings. The
elements should be g_free()'d and the list should be g_list_free()'d.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1406">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_services"
              c:identifier="gupnp_device_info_list_services">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="1353">Get a #GList of new objects implementing #GUPnPServiceInfo representing the
services directly contained in @info. The returned list should be
g_list_free()'d and the elements should be g_object_unref()'d.

Note that services are not cached internally, so that every time you call
function new objects are created. The application must cache any used
services if it wishes to keep them around and re-use them.</doc>
        <source-position filename="libgupnp/gupnp-device-info.h" line="145"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-device-info.c"
               line="1365">A #GList of
new #GUPnPServiceInfo objects.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="ServiceInfo"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-device-info.c"
                 line="1355">A #GUPnPDeviceInfo</doc>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="context"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_context">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_device_info_get_context"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="232">The #GUPnPContext to use.</doc>
        <type name="Context"/>
      </property>
      <property name="device-type"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_device_type"
                default-value="NULL">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_device_info_get_device_type"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="280">The device type, e.g. `urn:schemas-upnp-org:device:InternetGatewayDevice:1`</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="document"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="311">The description document</doc>
        <type name="XMLDoc"/>
      </property>
      <property name="element"
                stability="Private"
                readable="0"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="327">Private property.</doc>
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <property name="location"
                writable="1"
                construct="1"
                transfer-ownership="none"
                getter="get_location"
                default-value="NULL">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_device_info_get_location"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="248">The location of the device description file.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="resource-factory"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_resource_factory">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_device_info_get_resource_factory"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="216">The resource factory to use. Set to NULL for default factory.</doc>
        <type name="ResourceFactory"/>
      </property>
      <property name="udn"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_udn"
                default-value="NULL">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_device_info_get_udn"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="264">The UDN of this device.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="url-base"
                writable="1"
                construct="1"
                transfer-ownership="none"
                getter="get_url_base">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_device_info_get_url_base"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-device-info.c"
             line="296">The URL base (#GUri).</doc>
        <type name="GLib.Uri"/>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="DeviceInfoClass"
            c:type="GUPnPDeviceInfoClass"
            glib:is-gtype-struct-for="DeviceInfo">
      <source-position filename="libgupnp/gupnp-device-info.h" line="46"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="get_element" introspectable="0">
        <callback name="get_element" introspectable="0">
          <source-position filename="libgupnp/gupnp-device-info.h" line="34"/>
          <return-value>
            <type name="libxml2.Node" c:type="xmlNode*"/>
          </return-value>
          <parameters>
            <parameter name="info" transfer-ownership="none">
              <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="create_device_instance" introspectable="0">
        <callback name="create_device_instance" introspectable="0">
          <source-position filename="libgupnp/gupnp-device-info.h" line="36"/>
          <return-value>
            <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
          </return-value>
          <parameters>
            <parameter name="info" transfer-ownership="none">
              <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
            </parameter>
            <parameter name="element" transfer-ownership="none">
              <type name="libxml2.Node" c:type="xmlNode*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="create_service_instance" introspectable="0">
        <callback name="create_service_instance" introspectable="0">
          <source-position filename="libgupnp/gupnp-device-info.h" line="38"/>
          <return-value>
            <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
          </return-value>
          <parameters>
            <parameter name="info" transfer-ownership="none">
              <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
            </parameter>
            <parameter name="element" transfer-ownership="none">
              <type name="libxml2.Node" c:type="xmlNode*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <source-position filename="libgupnp/gupnp-device-info.h" line="42"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved2" introspectable="0">
        <callback name="_gupnp_reserved2">
          <source-position filename="libgupnp/gupnp-device-info.h" line="43"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved3" introspectable="0">
        <callback name="_gupnp_reserved3">
          <source-position filename="libgupnp/gupnp-device-info.h" line="44"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved4" introspectable="0">
        <callback name="_gupnp_reserved4">
          <source-position filename="libgupnp/gupnp-device-info.h" line="45"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <class name="DeviceProxy"
           c:symbol-prefix="device_proxy"
           c:type="GUPnPDeviceProxy"
           parent="DeviceInfo"
           glib:type-name="GUPnPDeviceProxy"
           glib:get-type="gupnp_device_proxy_get_type"
           glib:type-struct="DeviceProxyClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-device-proxy.c"
           line="20">Interaction with remote UPnP devices.

#GUPnPDeviceProxy allows for retrieving proxies for a device's sub-devices
and services. It implements the [class@GUPnP.DeviceInfo] abstract class.</doc>
      <source-position filename="libgupnp/gupnp-device-proxy.h" line="33"/>
      <field name="parent_instance">
        <type name="DeviceInfo" c:type="GUPnPDeviceInfo"/>
      </field>
    </class>
    <record name="DeviceProxyClass"
            c:type="GUPnPDeviceProxyClass"
            glib:is-gtype-struct-for="DeviceProxy">
      <source-position filename="libgupnp/gupnp-device-proxy.h" line="33"/>
      <field name="parent_class">
        <type name="DeviceInfoClass" c:type="GUPnPDeviceInfoClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <source-position filename="libgupnp/gupnp-device-proxy.h" line="29"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved2" introspectable="0">
        <callback name="_gupnp_reserved2">
          <source-position filename="libgupnp/gupnp-device-proxy.h" line="30"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved3" introspectable="0">
        <callback name="_gupnp_reserved3">
          <source-position filename="libgupnp/gupnp-device-proxy.h" line="31"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved4" introspectable="0">
        <callback name="_gupnp_reserved4">
          <source-position filename="libgupnp/gupnp-device-proxy.h" line="32"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <enumeration name="EventingError"
                 glib:type-name="GUPnPEventingError"
                 glib:get-type="gupnp_eventing_error_get_type"
                 c:type="GUPnPEventingError"
                 glib:error-domain="gupnp-eventing-error">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-error.h"
           line="46">Error codes during eventing of state variables.</doc>
      <member name="subscription_failed"
              value="0"
              c:identifier="GUPNP_EVENTING_ERROR_SUBSCRIPTION_FAILED"
              glib:nick="subscription-failed"
              glib:name="GUPNP_EVENTING_ERROR_SUBSCRIPTION_FAILED">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="48">The subscription attempt failed.</doc>
      </member>
      <member name="subscription_lost"
              value="1"
              c:identifier="GUPNP_EVENTING_ERROR_SUBSCRIPTION_LOST"
              glib:nick="subscription-lost"
              glib:name="GUPNP_EVENTING_ERROR_SUBSCRIPTION_LOST">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="49">The subscription was lost.</doc>
      </member>
      <member name="notify_failed"
              value="2"
              c:identifier="GUPNP_EVENTING_ERROR_NOTIFY_FAILED"
              glib:nick="notify-failed"
              glib:name="GUPNP_EVENTING_ERROR_NOTIFY_FAILED">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="50">The notification failed.</doc>
      </member>
      <function name="quark" c:identifier="gupnp_eventing_error_quark">
        <return-value transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
    </enumeration>
    <class name="ResourceFactory"
           c:symbol-prefix="resource_factory"
           c:type="GUPnPResourceFactory"
           parent="GObject.Object"
           glib:type-name="GUPnPResourceFactory"
           glib:get-type="gupnp_resource_factory_get_type"
           glib:type-struct="ResourceFactoryClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-resource-factory.c"
           line="12">Associating custom Services, Devices, ServiceProxies and DeviceProxies with UPnP types.

#GUPnPResourceFactory objects are used by [class@GUPnP.ControlPoint],
[class@GUPnP.DeviceProxy] and [class@GUPnP.Device] to create resource proxy and resource
objects.

Register UPnP type - [alias@GObject.Type] pairs to have resource or resource proxy
objects created with the specified #GType whenever an object for a resource
of the specified UPnP type is requested. The #GType needs
to be derived from the relevant resource or resource proxy type (e.g.
a device proxy type needs to be derived from [class@GUPnP.DeviceProxy]).</doc>
      <source-position filename="libgupnp/gupnp-resource-factory.h" line="34"/>
      <constructor name="new" c:identifier="gupnp_resource_factory_new">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-resource-factory.c"
             line="97">Create a new #GUPnPResourceFactory object.</doc>
        <source-position filename="libgupnp/gupnp-resource-factory.h"
                         line="37"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-resource-factory.c"
               line="102">A #GUPnPResourceFactory object.</doc>
          <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
        </return-value>
      </constructor>
      <function name="get_default"
                c:identifier="gupnp_resource_factory_get_default">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-resource-factory.c"
             line="110">Get the default singleton #GUPnPResourceFactory object.</doc>
        <source-position filename="libgupnp/gupnp-resource-factory.h"
                         line="40"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-resource-factory.c"
               line="115">A @GUPnPResourceFactory object.</doc>
          <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
        </return-value>
      </function>
      <method name="register_resource_proxy_type"
              c:identifier="gupnp_resource_factory_register_resource_proxy_type">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-resource-factory.c"
             line="486">Registers the GType @type for the proxy of resource of UPnP type @upnp_type.
After this call, the factory @factory will create object of GType @type each
time it is asked to create a resource proxy object for UPnP type @upnp_type.

Note: GType @type must be a derived type of #GUPNP_TYPE_DEVICE_PROXY if
resource is a device or #GUPNP_TYPE_SERVICE_PROXY if its a service.</doc>
        <source-position filename="libgupnp/gupnp-resource-factory.h"
                         line="54"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="factory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-resource-factory.c"
                 line="488">A #GUPnPResourceFactory.</doc>
            <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
          </instance-parameter>
          <parameter name="upnp_type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-resource-factory.c"
                 line="489">The UPnP type name of the resource.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-resource-factory.c"
                 line="490">The requested GType assignment for the resource proxy.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="register_resource_type"
              c:identifier="gupnp_resource_factory_register_resource_type">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-resource-factory.c"
             line="431">Registers the GType @type for the resource of UPnP type @upnp_type. After
this call, the factory @factory will create object of GType @type each time
it is asked to create a resource object for UPnP type @upnp_type.

You can either register a type for a concrete version of a device or service
such as urn:schemas-upnp-org:service:AVTransport:2 or version-independently,
urn:schemas-upnp-org:service:AVTransport. If you register for an explicit
version of a service, it will be an exact match.

Note: GType @type must be a derived type of #GUPNP_TYPE_DEVICE if resource is
a device or #GUPNP_TYPE_SERVICE if its a service.</doc>
        <source-position filename="libgupnp/gupnp-resource-factory.h"
                         line="43"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="factory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-resource-factory.c"
                 line="433">A #GUPnPResourceFactory.</doc>
            <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
          </instance-parameter>
          <parameter name="upnp_type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-resource-factory.c"
                 line="434">The UPnP type name of the resource.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-resource-factory.c"
                 line="435">The requested GType assignment for the resource.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="unregister_resource_proxy_type"
              c:identifier="gupnp_resource_factory_unregister_resource_proxy_type">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-resource-factory.c"
             line="514">Unregisters the GType assignment for the proxy of resource of UPnP type
@upnp_type.</doc>
        <source-position filename="libgupnp/gupnp-resource-factory.h"
                         line="60"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-resource-factory.c"
               line="522">%TRUE if GType assignment was removed successfully, %FALSE
otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="factory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-resource-factory.c"
                 line="516">A #GUPnPResourceFactory.</doc>
            <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
          </instance-parameter>
          <parameter name="upnp_type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-resource-factory.c"
                 line="517">The UPnP type name of the resource.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unregister_resource_type"
              c:identifier="gupnp_resource_factory_unregister_resource_type">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-resource-factory.c"
             line="463">Unregisters the GType assignment for the resource of UPnP type @upnp_type.</doc>
        <source-position filename="libgupnp/gupnp-resource-factory.h"
                         line="49"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-resource-factory.c"
               line="470">%TRUE if GType assignment was removed successfully, %FALSE
otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="factory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-resource-factory.c"
                 line="465">A #GUPnPResourceFactory.</doc>
            <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
          </instance-parameter>
          <parameter name="upnp_type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-resource-factory.c"
                 line="466">The UPnP type name of the resource.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="ResourceFactoryClass"
            c:type="GUPnPResourceFactoryClass"
            glib:is-gtype-struct-for="ResourceFactory">
      <source-position filename="libgupnp/gupnp-resource-factory.h" line="34"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <source-position filename="libgupnp/gupnp-resource-factory.h"
                           line="30"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved2" introspectable="0">
        <callback name="_gupnp_reserved2">
          <source-position filename="libgupnp/gupnp-resource-factory.h"
                           line="31"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved3" introspectable="0">
        <callback name="_gupnp_reserved3">
          <source-position filename="libgupnp/gupnp-resource-factory.h"
                           line="32"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved4" introspectable="0">
        <callback name="_gupnp_reserved4">
          <source-position filename="libgupnp/gupnp-resource-factory.h"
                           line="33"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <class name="RootDevice"
           c:symbol-prefix="root_device"
           c:type="GUPnPRootDevice"
           parent="Device"
           glib:type-name="GUPnPRootDevice"
           glib:get-type="gupnp_root_device_get_type"
           glib:type-struct="RootDeviceClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-root-device.c"
           line="42">Implementation of an UPnP root device.

#GUPnPRootDevice allows for implementing root devices.</doc>
      <source-position filename="libgupnp/gupnp-root-device.h" line="41"/>
      <implements name="Gio.Initable"/>
      <constructor name="new" c:identifier="gupnp_root_device_new" throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-root-device.c"
             line="528">Create a new #GUPnPRootDevice object, automatically loading and parsing
device description document from @description_path.</doc>
        <source-position filename="libgupnp/gupnp-root-device.h" line="44"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-root-device.c"
               line="540">A new @GUPnPRootDevice object.</doc>
          <type name="RootDevice" c:type="GUPnPRootDevice*"/>
        </return-value>
        <parameters>
          <parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="530">The #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </parameter>
          <parameter name="description_path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="531">Path to device description document. This could either
be an absolute path or path relative to @description_folder.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="description_folder" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="533">Path to directory where description documents are provided.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_full"
                   c:identifier="gupnp_root_device_new_full"
                   throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-root-device.c"
             line="560">Create a new #GUPnPRootDevice, automatically loading and parsing
device description document from @description_path if @description_doc is
%NULL.</doc>
        <source-position filename="libgupnp/gupnp-root-device.h" line="50"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-root-device.c"
               line="575">A new #GUPnPRootDevice object.</doc>
          <type name="RootDevice" c:type="GUPnPRootDevice*"/>
        </return-value>
        <parameters>
          <parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="562">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </parameter>
          <parameter name="factory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="563">A #GUPnPResourceFactory</doc>
            <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
          </parameter>
          <parameter name="description_doc" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="564">Device description document, or %NULL</doc>
            <type name="XMLDoc" c:type="GUPnPXMLDoc*"/>
          </parameter>
          <parameter name="description_path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="565">Path to device description document. This could either
be an absolute path or path relative to @description_dir.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="description_folder" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="567">Path to folder where description documents are provided.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_available"
              c:identifier="gupnp_root_device_get_available"
              glib:get-property="available">
        <attribute name="org.gtk.Method.get_property" value="available"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-root-device.c"
             line="629">Checks whether @root_device is available on the network (announcing its presence).</doc>
        <source-position filename="libgupnp/gupnp-root-device.h" line="62"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-root-device.c"
               line="635">%TRUE if @root_device is available, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="root_device" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="631">A #GUPnPRootDevice</doc>
            <type name="RootDevice" c:type="GUPnPRootDevice*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_description_dir"
              c:identifier="gupnp_root_device_get_description_dir"
              glib:get-property="description-dir">
        <attribute name="org.gtk.Method.get_property" value="description-dir"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-root-device.c"
             line="689">Gets the path to the directory containing description documents related to
@root_device.</doc>
        <source-position filename="libgupnp/gupnp-root-device.h" line="73"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-root-device.c"
               line="696">The path to description document directory of @root_device.</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="root_device" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="691">A #GUPnPRootDevice</doc>
            <type name="RootDevice" c:type="GUPnPRootDevice*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_description_document_name"
              c:identifier="gupnp_root_device_get_description_document_name">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-root-device.c"
             line="649">Gets the name of the description document as hosted via HTTP.</doc>
        <source-position filename="libgupnp/gupnp-root-device.h" line="65"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-root-device.c"
               line="655">The relative location of @root_device.</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="root_device" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="651">A #GUPnPRootDevice</doc>
            <type name="RootDevice" c:type="GUPnPRootDevice*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_description_path"
              c:identifier="gupnp_root_device_get_description_path"
              glib:get-property="description-path">
        <attribute name="org.gtk.Method.get_property"
                   value="description-path"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-root-device.c"
             line="669">Gets the path to the device description document of @root_device.</doc>
        <source-position filename="libgupnp/gupnp-root-device.h" line="69"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-root-device.c"
               line="675">The path to device description document of @root_device.</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="root_device" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="671">A #GUPnPRootDevice</doc>
            <type name="RootDevice" c:type="GUPnPRootDevice*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_ssdp_resource_group"
              c:identifier="gupnp_root_device_get_ssdp_resource_group"
              version="0.20.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-root-device.c"
             line="710">Gets the #GSSDPResourceGroup used by @root_device.</doc>
        <source-position filename="libgupnp/gupnp-root-device.h" line="77"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-root-device.c"
               line="716">The #GSSDPResourceGroup of @root_device.</doc>
          <type name="GSSDP.ResourceGroup" c:type="GSSDPResourceGroup*"/>
        </return-value>
        <parameters>
          <instance-parameter name="root_device" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="712">A #GUPnPRootDevice</doc>
            <type name="RootDevice" c:type="GUPnPRootDevice*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_available"
              c:identifier="gupnp_root_device_set_available"
              glib:set-property="available">
        <attribute name="org.gtk.Method.get_property" value="available"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-root-device.c"
             line="606">Sets the availability of @root_device on the network (announcing
its presence).</doc>
        <source-position filename="libgupnp/gupnp-root-device.h" line="58"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="root_device" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="608">A #GUPnPRootDevice</doc>
            <type name="RootDevice" c:type="GUPnPRootDevice*"/>
          </instance-parameter>
          <parameter name="available" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-root-device.c"
                 line="609">%TRUE if @root_device should be available</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <property name="available"
                writable="1"
                transfer-ownership="none"
                setter="set_available"
                getter="get_available"
                default-value="FALSE">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_root_device_get_available"/>
        <attribute name="org.gtk.Property.set"
                   value="gupnp_root_device_set_available"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-root-device.c"
             line="510">TRUE if this device is available.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="description-dir"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_description_dir"
                default-value="NULL">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_root_device_get_description_dir"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-root-device.c"
             line="491">The path to a folder where description documents are provided.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="description-path"
                version="0.13.0"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_description_path"
                default-value="NULL">
        <attribute name="org.gtk.Property.get"
                   value="gupnp_root_device_get_description_path"/>
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-root-device.c"
             line="470">The path to device description document. This could either be an
absolute path or path relative to GUPnPRootDevice:description-dir.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="parent_instance">
        <type name="Device" c:type="GUPnPDevice"/>
      </field>
    </class>
    <record name="RootDeviceClass"
            c:type="GUPnPRootDeviceClass"
            glib:is-gtype-struct-for="RootDevice">
      <source-position filename="libgupnp/gupnp-root-device.h" line="41"/>
      <field name="parent_class">
        <type name="DeviceClass" c:type="GUPnPDeviceClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <source-position filename="libgupnp/gupnp-root-device.h" line="37"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved2" introspectable="0">
        <callback name="_gupnp_reserved2">
          <source-position filename="libgupnp/gupnp-root-device.h" line="38"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved3" introspectable="0">
        <callback name="_gupnp_reserved3">
          <source-position filename="libgupnp/gupnp-root-device.h" line="39"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved4" introspectable="0">
        <callback name="_gupnp_reserved4">
          <source-position filename="libgupnp/gupnp-root-device.h" line="40"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <enumeration name="RootdeviceError"
                 glib:type-name="GUPnPRootdeviceError"
                 glib:get-type="gupnp_rootdevice_error_get_type"
                 c:type="GUPnPRootdeviceError"
                 glib:error-domain="gupnp-root-device-error">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-error.h"
           line="109">Errors during [class@GUPnP.RootDevice] creation</doc>
      <member name="no_context"
              value="0"
              c:identifier="GUPNP_ROOT_DEVICE_ERROR_NO_CONTEXT"
              glib:nick="no-context"
              glib:name="GUPNP_ROOT_DEVICE_ERROR_NO_CONTEXT">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="111">No #GUPnPContext was passed to the root device.</doc>
      </member>
      <member name="no_description_path"
              value="1"
              c:identifier="GUPNP_ROOT_DEVICE_ERROR_NO_DESCRIPTION_PATH"
              glib:nick="no-description-path"
              glib:name="GUPNP_ROOT_DEVICE_ERROR_NO_DESCRIPTION_PATH">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="112">Device description path was missing</doc>
      </member>
      <member name="no_description_folder"
              value="2"
              c:identifier="GUPNP_ROOT_DEVICE_ERROR_NO_DESCRIPTION_FOLDER"
              glib:nick="no-description-folder"
              glib:name="GUPNP_ROOT_DEVICE_ERROR_NO_DESCRIPTION_FOLDER">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="113">Description folder was missing</doc>
      </member>
      <member name="no_network"
              value="3"
              c:identifier="GUPNP_ROOT_DEVICE_ERROR_NO_NETWORK"
              glib:nick="no-network"
              glib:name="GUPNP_ROOT_DEVICE_ERROR_NO_NETWORK">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="114">Network interface is not usable</doc>
      </member>
      <member name="fail"
              value="4"
              c:identifier="GUPNP_ROOT_DEVICE_ERROR_FAIL"
              glib:nick="fail"
              glib:name="GUPNP_ROOT_DEVICE_ERROR_FAIL">
      </member>
      <function name="quark" c:identifier="gupnp_rootdevice_error_quark">
        <return-value transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
    </enumeration>
    <enumeration name="ServerError"
                 glib:type-name="GUPnPServerError"
                 glib:get-type="gupnp_server_error_get_type"
                 c:type="GUPnPServerError"
                 glib:error-domain="gupnp-server-error">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-error.h"
           line="21">Error codes during communication with another server.</doc>
      <member name="internal_server_error"
              value="0"
              c:identifier="GUPNP_SERVER_ERROR_INTERNAL_SERVER_ERROR"
              glib:nick="internal-server-error"
              glib:name="GUPNP_SERVER_ERROR_INTERNAL_SERVER_ERROR">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="23">Internal server error.</doc>
      </member>
      <member name="not_found"
              value="1"
              c:identifier="GUPNP_SERVER_ERROR_NOT_FOUND"
              glib:nick="not-found"
              glib:name="GUPNP_SERVER_ERROR_NOT_FOUND">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="24">The resource was not found.</doc>
      </member>
      <member name="not_implemented"
              value="2"
              c:identifier="GUPNP_SERVER_ERROR_NOT_IMPLEMENTED"
              glib:nick="not-implemented"
              glib:name="GUPNP_SERVER_ERROR_NOT_IMPLEMENTED">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="25">This method is not implemented.</doc>
      </member>
      <member name="invalid_response"
              value="3"
              c:identifier="GUPNP_SERVER_ERROR_INVALID_RESPONSE"
              glib:nick="invalid-response"
              glib:name="GUPNP_SERVER_ERROR_INVALID_RESPONSE">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="26">Invalid response.</doc>
      </member>
      <member name="invalid_url"
              value="4"
              c:identifier="GUPNP_SERVER_ERROR_INVALID_URL"
              glib:nick="invalid-url"
              glib:name="GUPNP_SERVER_ERROR_INVALID_URL">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="27">Invalid URL.</doc>
      </member>
      <member name="other"
              value="5"
              c:identifier="GUPNP_SERVER_ERROR_OTHER"
              glib:nick="other"
              glib:name="GUPNP_SERVER_ERROR_OTHER">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="28">Unknown/unhandled error.</doc>
      </member>
      <function name="quark" c:identifier="gupnp_server_error_quark">
        <return-value transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
    </enumeration>
    <class name="Service"
           c:symbol-prefix="service"
           c:type="GUPnPService"
           parent="ServiceInfo"
           glib:type-name="GUPnPService"
           glib:get-type="gupnp_service_get_type"
           glib:type-struct="ServiceClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service.c"
           line="52">Implementation of an UPnP service

#GUPnPService allows for handling incoming actions and state variable
notification. It implements the [class@GUPnP.ServiceInfo] interface.

To implement a service, you can either connect to the [signal@GUPnP.Service::action-invoked]
and [signal@GUPnP.Service::query-variable] or derive from the `GUPnPService` class and override
the virtual functions [vfunc@GUPnP.Service.action_invoked] and  [vfunc@GUPnP.Service.query_variable].

For more details, see the ["Implementing UPnP devices"](server-tutorial.html#implementing-a-service) document</doc>
      <source-position filename="libgupnp/gupnp-service.h" line="57"/>
      <virtual-method name="action_invoked" invoker="action_invoked">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1874">Default handler for [signal@GUPnP.Service::action_invoked]. See its documentation for details.

Can be overridden by child classes instead of connecting to the signal.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="41"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="service" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1876">a `GUPnPService`</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </instance-parameter>
          <parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1877">a `GUPnPServiceAction`</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="notify_failed" invoker="notify_failed">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1913">Default handler for [signal@GUPnP.Service::notify_failed]. See its documentation for details.

Can be overridden by child classes instead of connecting to the signal.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="48"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="service" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1915">a `GUPnPService`</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </instance-parameter>
          <parameter name="callback_urls" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1916">a list of call-back urls that failed the notification</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="GLib.Uri"/>
            </type>
          </parameter>
          <parameter name="reason" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1917">An error that describes why the notification failed</doc>
            <type name="GLib.Error" c:type="const GError*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="query_variable" invoker="query_variable">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1892">Default handler for [signal@GUPnP.Service::query_variable]. See its documentation for details.

Can be overridden by child classes instead of connecting to the signal.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="44"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="service" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1894">a `GUPnPService`</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </instance-parameter>
          <parameter name="variable" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1895">the name of the variable that was queried</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1896">a value that should be filled to the current value of @variable</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="action_invoked"
              c:identifier="gupnp_service_action_invoked">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1874">Default handler for [signal@GUPnP.Service::action_invoked]. See its documentation for details.

Can be overridden by child classes instead of connecting to the signal.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="135"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="service" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1876">a `GUPnPService`</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </instance-parameter>
          <parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1877">a `GUPnPServiceAction`</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </parameter>
        </parameters>
      </method>
      <method name="freeze_notify" c:identifier="gupnp_service_freeze_notify">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1618">Stops sending out notifications to remote clients.

It causes new notifications to be queued up until [method@GUPnP.Service.thaw_notify] is called.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="124"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="service" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1620">a #GUPnPService</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="notify"
              c:identifier="gupnp_service_notify"
              introspectable="0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1324">Notifies remote clients that the properties have changed to the specified values.

```c
gupnp_service_notify (service,
                      "Volume", G_TYPE_FLOAT, 0.5,
                      "PlaybackSpeed", G_TYPE_INT, -1,
                      NULL);

```</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="115"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="service" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1326">A #GUPnPService</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </instance-parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1327">a list of tuples, consisting of the variable name, variable type and variable value,
terminated with %NULL.</doc>
            <varargs/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_failed" c:identifier="gupnp_service_notify_failed">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1913">Default handler for [signal@GUPnP.Service::notify_failed]. See its documentation for details.

Can be overridden by child classes instead of connecting to the signal.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="144"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="service" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1915">a `GUPnPService`</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </instance-parameter>
          <parameter name="callback_urls" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1916">a list of call-back urls that failed the notification</doc>
            <type name="GLib.List" c:type="const GList*">
              <type name="GLib.Uri"/>
            </type>
          </parameter>
          <parameter name="reason" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1917">An error that describes why the notification failed</doc>
            <type name="GLib.Error" c:type="const GError*"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_value" c:identifier="gupnp_service_notify_value">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1581">Notifies remote clients that @variable has changed to @value.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="119"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="service" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1583">a #GUPnPService</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </instance-parameter>
          <parameter name="variable" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1584">the name of the variable to notify</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1585">the value of the variable</doc>
            <type name="GObject.Value" c:type="const GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_variable"
              c:identifier="gupnp_service_query_variable">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1892">Default handler for [signal@GUPnP.Service::query_variable]. See its documentation for details.

Can be overridden by child classes instead of connecting to the signal.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="139"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="service" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1894">a `GUPnPService`</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </instance-parameter>
          <parameter name="variable" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1895">the name of the variable that was queried</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1896">a value that should be filled to the current value of @variable</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="signals_autoconnect"
              c:identifier="gupnp_service_signals_autoconnect"
              introspectable="0"
              throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1780">Connects call-back functions to the corresponding signals for variables and actions.

It attempts to connect all possible [signal@GUPnP.Service::action-invoked] and
[signal@GUPnP.Service::query-variable] signals to appropriate callbacks for
the service.

It is very similar to [method@Gtk.Builder.connect_signals] except that it attempts
to guess the names of the signal handlers on its own.

For this function to do its magic, the application must name the callback
functions for [signal@GUPnP.Service::action-invoked] signals by striping the CamelCase
off the action names and either prefix them with `on_` or append `_cb` to them.

Similar, for [signal@GUPnP.Service::query-variable] signals, except that the functions
shoul be prefixed with `query_` to the variable name.

For example, the callback function for the `GetSystemUpdateID` action should be
either named as
`get_system_update_id_cb` or `on_get_system_update_id` and the callback function
for the query of the `SystemUpdateID` state variable should be named
`query_system_update_id_cb` or `on_query_system_update_id`.

Note: This function will not work correctly if #GModule is not supported
on the platform or introspection is not available for @service.

Warning: This function can not and therefore does not guarantee that the
resulting signal connections will be correct as it depends heavily on a
particular naming schemes described above.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="130"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="service" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1782">a #GUPnPService</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </instance-parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1783">the data to pass to each of the callbacks</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="thaw_notify" c:identifier="gupnp_service_thaw_notify">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1638">Sends out any pending notifications, and stops queuing of new ones.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="127"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="service" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1640">a #GUPnPService</doc>
            <type name="Service" c:type="GUPnPService*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="root-device"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1237">The containing #GUPnPRootDevice.</doc>
        <type name="RootDevice"/>
      </property>
      <field name="parent_instance">
        <type name="ServiceInfo" c:type="GUPnPServiceInfo"/>
      </field>
      <glib:signal name="action-invoked" when="last" detailed="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1255">Emitted whenever an action is invoked. Handler should process
@action and must call either [method@GUPnP.ServiceAction.return_success] or
[method@GUPnP.ServiceAction.return_error].</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1258">the invoked #GUPnPServiceAction</doc>
            <type name="ServiceAction"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="notify-failed" when="last">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1301">Emitted whenever notification of a client fails.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="callback_url" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1304">a #GList of callback URLs</doc>
            <type name="GLib.List" c:type="gpointer">
              <type name="GLib.Uri"/>
            </type>
          </parameter>
          <parameter name="reason" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1305">a pointer to a #GError describing why the notify failed</doc>
            <type name="GLib.Error" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="query-variable" when="last" detailed="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="1277">Emitted whenever @service needs to know the value of @variable.
Handler should fill @value with the value of @variable.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="variable" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1280">the variable that is being queried</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="inout"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service.c"
                 line="1281">the location of the #GValue of the variable</doc>
            <type name="GObject.Value" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ServiceAction"
            c:type="GUPnPServiceAction"
            opaque="1"
            glib:type-name="GUPnPServiceAction"
            glib:get-type="gupnp_service_action_get_type"
            c:symbol-prefix="service_action">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service.h"
           line="25">Opaque structure for holding in-progress action data.</doc>
      <source-position filename="libgupnp/gupnp-service.h" line="30"/>
      <method name="get"
              c:identifier="gupnp_service_action_get"
              introspectable="0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="172">Retrieves the specified action arguments.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="67"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="174">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="175">tuples of argument name, argument type, and argument value
location, terminated with %NULL.</doc>
            <varargs/>
          </parameter>
        </parameters>
      </method>
      <method name="get_argument_count"
              c:identifier="gupnp_service_action_get_argument_count"
              version="0.18.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="332">Get the number of IN arguments from the @action and return it.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="111"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-action.c"
               line="338">The number of IN arguments from the @action.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="334">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_gvalue"
              c:identifier="gupnp_service_action_get_gvalue"
              shadows="get_value"
              version="0.14.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="302">Retrieves the value of @argument into a GValue of type @type and returns it.
The method exists only and only to satify PyGI, please use
gupnp_service_action_get_value() and ignore this if possible.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="81"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-action.c"
               line="312">Value as #GValue associated with @action.
g_value_unset() and g_slice_free() it after usage.</doc>
          <type name="GObject.Value" c:type="GValue*"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="304">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
          <parameter name="argument" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="305">The name of the argument to retrieve</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="306">The type of argument to retrieve</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_locales"
              c:identifier="gupnp_service_action_get_locales">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="153">Get an ordered (preferred first) #GList of locales preferred by
the client. Free list and elements after use.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="64"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-action.c"
               line="160">A #GList of #char*
locale names.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="155">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_message"
              c:identifier="gupnp_service_action_get_message"
              version="0.14.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="583">Get the #SoupMessage associated with @action. Mainly intended for
applications to be able to read HTTP headers received from clients.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="108"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-action.c"
               line="590">#SoupServerMessage associated with @action.
Unref after using it.</doc>
          <type name="Soup.ServerMessage" c:type="SoupServerMessage*"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="585">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="gupnp_service_action_get_name">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="137">Get the name of @action.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="61"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-action.c"
               line="143">The name of @action</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="139">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_value"
              c:identifier="gupnp_service_action_get_value"
              shadowed-by="get_gvalue"
              introspectable="0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="265">Retrieves the value of @argument into @value.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="76"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="267">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
          <parameter name="argument" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="268">The name of the argument to retrieve</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="value"
                     direction="inout"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="269">The #GValue to store the value of the argument, initialized
to the correct type.</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_values"
              c:identifier="gupnp_service_action_get_values"
              version="0.14.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="220">A variant of #gupnp_service_action_get that uses #GList instead of varargs.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="71"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-action.c"
               line="228">The values as #GList of
#GValue. g_list_free() the returned list and g_value_unset() and g_slice_free()
each element.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="GObject.Value"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="222">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
          <parameter name="arg_names" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="223">A #GList of argument names as string</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="arg_types" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="224">A #GList of argument types as #GType</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="GType"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="return_error"
              c:identifier="gupnp_service_action_return_error">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="499">Return @error_code.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="103"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="501">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
          <parameter name="error_code" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="502">The error code</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="error_description" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="503">The error description, or %NULL if @error_code is
one of #GUPNP_CONTROL_ERROR_INVALID_ACTION,
#GUPNP_CONTROL_ERROR_INVALID_ARGS, #GUPNP_CONTROL_ERROR_OUT_OF_SYNC or
#GUPNP_CONTROL_ERROR_ACTION_FAILED, in which case a description is
provided automatically.</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="return_success"
              c:identifier="gupnp_service_action_return_success"
              version="1.4.2">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="481">Return successfully.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="100"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="483">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set"
              c:identifier="gupnp_service_action_set"
              introspectable="0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="348">Sets the specified action return values.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="86"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="350">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="351">tuples of return value name, return value type, and
actual return value, terminated with %NULL.</doc>
            <varargs/>
          </parameter>
        </parameters>
      </method>
      <method name="set_value" c:identifier="gupnp_service_action_set_value">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="449">Sets the value of @argument to @value.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="95"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="451">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
          <parameter name="argument" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="452">The name of the return value to retrieve</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="453">The #GValue to store the return value</doc>
            <type name="GObject.Value" c:type="const GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_values"
              c:identifier="gupnp_service_action_set_values"
              version="0.14.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-action.c"
             line="401">Sets the specified action return values.</doc>
        <source-position filename="libgupnp/gupnp-service.h" line="90"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="403">A #GUPnPServiceAction</doc>
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </instance-parameter>
          <parameter name="arg_names" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="404">A #GList of argument names</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="arg_values" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-action.c"
                 line="405">The #GList of values (as
#GValue&lt;!-- --&gt;s) that line up with @arg_names.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="GObject.Value"/>
            </type>
          </parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="ServiceActionArgDirection"
                 glib:type-name="GUPnPServiceActionArgDirection"
                 glib:get-type="gupnp_service_action_arg_direction_get_type"
                 c:type="GUPnPServiceActionArgDirection">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service-introspection.h"
           line="31">Represents the direction of a service state variable.</doc>
      <member name="in"
              value="0"
              c:identifier="GUPNP_SERVICE_ACTION_ARG_DIRECTION_IN"
              glib:nick="in"
              glib:name="GUPNP_SERVICE_ACTION_ARG_DIRECTION_IN">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="33">An "in" variable, to the service.</doc>
      </member>
      <member name="out"
              value="1"
              c:identifier="GUPNP_SERVICE_ACTION_ARG_DIRECTION_OUT"
              glib:nick="out"
              glib:name="GUPNP_SERVICE_ACTION_ARG_DIRECTION_OUT">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="34">An "out" variable, from the service.</doc>
      </member>
    </enumeration>
    <record name="ServiceActionArgInfo"
            c:type="GUPnPServiceActionArgInfo"
            glib:type-name="GUPnPServiceActionArgInfo"
            glib:get-type="gupnp_service_action_arg_info_get_type"
            c:symbol-prefix="service_action_arg_info">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service-introspection.h"
           line="44">This structure contains information about the argument of service action.</doc>
      <source-position filename="libgupnp/gupnp-service-introspection.h"
                       line="59"/>
      <field name="name" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="46">The name of the action argument.</doc>
        <type name="utf8" c:type="char*"/>
      </field>
      <field name="direction" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="47">The direction of the action argument.</doc>
        <type name="ServiceActionArgDirection"
              c:type="GUPnPServiceActionArgDirection"/>
      </field>
      <field name="related_state_variable" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="48">The name of the state variable associated with this
argument.</doc>
        <type name="utf8" c:type="char*"/>
      </field>
      <field name="retval" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="50">Whether this argument is the return value of the action.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </field>
    </record>
    <record name="ServiceActionInfo"
            c:type="GUPnPServiceActionInfo"
            glib:type-name="GUPnPServiceActionInfo"
            glib:get-type="gupnp_service_action_info_get_type"
            c:symbol-prefix="service_action_info">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service-introspection.h"
           line="63">This structure contains information about a service action.</doc>
      <source-position filename="libgupnp/gupnp-service-introspection.h"
                       line="74"/>
      <field name="name" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="65">The name of the action argument.</doc>
        <type name="utf8" c:type="char*"/>
      </field>
      <field name="arguments" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="66">A GList of all the arguments
(of type #GUPnPServiceActionArgInfo) of this action.</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="ServiceActionArgInfo"/>
        </type>
      </field>
    </record>
    <record name="ServiceClass"
            c:type="GUPnPServiceClass"
            glib:is-gtype-struct-for="Service">
      <source-position filename="libgupnp/gupnp-service.h" line="57"/>
      <field name="parent_class">
        <type name="ServiceInfoClass" c:type="GUPnPServiceInfoClass"/>
      </field>
      <field name="action_invoked">
        <callback name="action_invoked">
          <source-position filename="libgupnp/gupnp-service.h" line="41"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="service" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-service.c"
                   line="1876">a `GUPnPService`</doc>
              <type name="Service" c:type="GUPnPService*"/>
            </parameter>
            <parameter name="action" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-service.c"
                   line="1877">a `GUPnPServiceAction`</doc>
              <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="query_variable">
        <callback name="query_variable">
          <source-position filename="libgupnp/gupnp-service.h" line="44"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="service" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-service.c"
                   line="1894">a `GUPnPService`</doc>
              <type name="Service" c:type="GUPnPService*"/>
            </parameter>
            <parameter name="variable" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-service.c"
                   line="1895">the name of the variable that was queried</doc>
              <type name="utf8" c:type="const char*"/>
            </parameter>
            <parameter name="value" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-service.c"
                   line="1896">a value that should be filled to the current value of @variable</doc>
              <type name="GObject.Value" c:type="GValue*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="notify_failed">
        <callback name="notify_failed">
          <source-position filename="libgupnp/gupnp-service.h" line="48"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="service" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-service.c"
                   line="1915">a `GUPnPService`</doc>
              <type name="Service" c:type="GUPnPService*"/>
            </parameter>
            <parameter name="callback_urls" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-service.c"
                   line="1916">a list of call-back urls that failed the notification</doc>
              <type name="GLib.List" c:type="const GList*">
                <type name="GLib.Uri"/>
              </type>
            </parameter>
            <parameter name="reason" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="libgupnp/gupnp-service.c"
                   line="1917">An error that describes why the notification failed</doc>
              <type name="GLib.Error" c:type="const GError*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <source-position filename="libgupnp/gupnp-service.h" line="53"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved2" introspectable="0">
        <callback name="_gupnp_reserved2">
          <source-position filename="libgupnp/gupnp-service.h" line="54"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved3" introspectable="0">
        <callback name="_gupnp_reserved3">
          <source-position filename="libgupnp/gupnp-service.h" line="55"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved4" introspectable="0">
        <callback name="_gupnp_reserved4">
          <source-position filename="libgupnp/gupnp-service.h" line="56"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <enumeration name="ServiceError"
                 glib:type-name="GUPnPServiceError"
                 glib:get-type="gupnp_service_error_get_type"
                 c:type="GUPnPServiceError"
                 glib:error-domain="gupnp-service-error">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-error.h"
           line="150">Errors during service handling</doc>
      <member name="autoconnect"
              value="0"
              c:identifier="GUPNP_SERVICE_ERROR_AUTOCONNECT"
              glib:nick="autoconnect"
              glib:name="GUPNP_SERVICE_ERROR_AUTOCONNECT">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="152">[method@GUPnP.Service.signals_autoconnect] failed</doc>
      </member>
      <function name="quark" c:identifier="gupnp_service_error_quark">
        <return-value transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
    </enumeration>
    <class name="ServiceInfo"
           c:symbol-prefix="service_info"
           c:type="GUPnPServiceInfo"
           parent="GObject.Object"
           abstract="1"
           glib:type-name="GUPnPServiceInfo"
           glib:get-type="gupnp_service_info_get_type"
           glib:type-struct="ServiceInfoClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service-info.c"
           line="47">Service information shared by local and remote services.

A class that contains the common parts between local and remote services.</doc>
      <source-position filename="libgupnp/gupnp-service-info.h" line="35"/>
      <method name="get_context"
              c:identifier="gupnp_service_info_get_context"
              glib:get-property="context">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="337">Get the #GUPnPContext associated with @info.</doc>
        <source-position filename="libgupnp/gupnp-service-info.h" line="38"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-info.c"
               line="343">A #GUPnPContext.</doc>
          <type name="Context" c:type="GUPnPContext*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="339">A #GUPnPServiceInfo</doc>
            <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_control_url"
              c:identifier="gupnp_service_info_get_control_url">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="493">Get the control URL for this service, or %NULL..</doc>
        <source-position filename="libgupnp/gupnp-service-info.h" line="59"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-info.c"
               line="499">A string. This string should be freed with g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="495">A #GUPnPServiceInfo</doc>
            <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_event_subscription_url"
              c:identifier="gupnp_service_info_get_event_subscription_url">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="515">Get the event subscription URL for this service, or %NULL.</doc>
        <source-position filename="libgupnp/gupnp-service-info.h" line="62"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-info.c"
               line="521">A string. This string should be freed with g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="517">A #GUPnPServiceInfo</doc>
            <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_id" c:identifier="gupnp_service_info_get_id">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="445">Get the serviceID of this service, or %NULL if there is no ID.

The serviceID should be unique to a device. This makes it possible to provide
the same serviceType multiple times on one device

Example: `org:serviceId:RenderingControl`</doc>
        <source-position filename="libgupnp/gupnp-service-info.h" line="53"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-info.c"
               line="456">A string. This string should be freed with g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="447">A #GUPnPServiceInfo</doc>
            <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_location"
              c:identifier="gupnp_service_info_get_location"
              glib:get-property="location">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="357">Get the location of the device description file.</doc>
        <source-position filename="libgupnp/gupnp-service-info.h" line="41"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-info.c"
               line="363">A constant string.</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="359">A #GUPnPServiceInfo</doc>
            <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_scpd_url"
              c:identifier="gupnp_service_info_get_scpd_url">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="471">Get the SCPD URL for this service, or %NULL if there is no SCPD.</doc>
        <source-position filename="libgupnp/gupnp-service-info.h" line="56"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-info.c"
               line="477">A string. This string should be freed with g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="473">A #GUPnPServiceInfo</doc>
            <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_service_type"
              c:identifier="gupnp_service_info_get_service_type"
              glib:get-property="service-type">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="417">Get the UPnP service type, or %NULL.

Example: `urn:schemas-upnp-org:service:RenderingControl:1`</doc>
        <source-position filename="libgupnp/gupnp-service-info.h" line="50"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-info.c"
               line="425">A constant string.</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="419">A #GUPnPServiceInfo</doc>
            <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_udn"
              c:identifier="gupnp_service_info_get_udn"
              glib:get-property="udn">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="397">Get the Unique Device Name of the containing device.</doc>
        <source-position filename="libgupnp/gupnp-service-info.h" line="47"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-info.c"
               line="403">A constant string.</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="399">A #GUPnPServiceInfo</doc>
            <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_url_base"
              c:identifier="gupnp_service_info_get_url_base"
              glib:get-property="url-base">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="377">Get the URL base of this service.</doc>
        <source-position filename="libgupnp/gupnp-service-info.h" line="44"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-info.c"
               line="383">A constant #SoupURI.</doc>
          <type name="GLib.Uri" c:type="const GUri*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="379">A #GUPnPServiceInfo</doc>
            <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="introspect_async"
              c:identifier="gupnp_service_info_introspect_async"
              version="1.2.2"
              glib:finish-func="introspect_finish">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="605">Note that introspection object is created from the information in service
description document (SCPD) provided by the service so it can not be created
if the service does not provide a SCPD.

If @cancellable is used to cancel the call, @callback will be called with
error code %G_IO_ERROR_CANCELLED.</doc>
        <source-position filename="libgupnp/gupnp-service-info.h" line="65"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="607">A #GUPnPServiceInfo</doc>
            <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="608">a #GCancellable that can be used to cancel the call.</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="2">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="609">callback to be called when introspection object is ready.</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="610">user_data to be passed to the callback.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="introspect_finish"
              c:identifier="gupnp_service_info_introspect_finish"
              version="1.2.2"
              throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="693">Finish an asynchronous call initiated with
gupnp_service_info_introspect_async().</doc>
        <source-position filename="libgupnp/gupnp-service-info.h" line="71"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-info.c"
               line="702">%NULL, if the call had an error, a
#GUPnPServiceIntrospection object otherwise.</doc>
          <type name="ServiceIntrospection"
                c:type="GUPnPServiceIntrospection*"/>
        </return-value>
        <parameters>
          <instance-parameter name="info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="695">A GUPnPServiceInfo</doc>
            <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
          </instance-parameter>
          <parameter name="res" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-info.c"
                 line="696">A #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <property name="context"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_context">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="205">The #GUPnPContext to use.</doc>
        <type name="Context"/>
      </property>
      <property name="document"
                stability="Private"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="295">Private property.</doc>
        <type name="XMLDoc"/>
      </property>
      <property name="element"
                stability="Private"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="316">Private property.</doc>
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <property name="location"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_location"
                default-value="NULL">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="223">The location of the device description file.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="service-type"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_service_type"
                default-value="NULL">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="260">The service type.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="udn"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_udn"
                default-value="NULL">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="242">The UDN of the containing device.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="url-base"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_url_base">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-info.c"
             line="278">The URL base (#SoupURI).</doc>
        <type name="GLib.Uri"/>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="ServiceInfoClass"
            c:type="GUPnPServiceInfoClass"
            glib:is-gtype-struct-for="ServiceInfo">
      <source-position filename="libgupnp/gupnp-service-info.h" line="35"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <source-position filename="libgupnp/gupnp-service-info.h" line="31"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved2" introspectable="0">
        <callback name="_gupnp_reserved2">
          <source-position filename="libgupnp/gupnp-service-info.h" line="32"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved3" introspectable="0">
        <callback name="_gupnp_reserved3">
          <source-position filename="libgupnp/gupnp-service-info.h" line="33"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_gupnp_reserved4" introspectable="0">
        <callback name="_gupnp_reserved4">
          <source-position filename="libgupnp/gupnp-service-info.h" line="34"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <class name="ServiceIntrospection"
           c:symbol-prefix="service_introspection"
           c:type="GUPnPServiceIntrospection"
           parent="GObject.Object"
           glib:type-name="GUPnPServiceIntrospection"
           glib:get-type="gupnp_service_introspection_get_type"
           glib:type-struct="ServiceIntrospectionClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service-introspection.c"
           line="50">Introspection of local and remote services..

The #GUPnPServiceIntrospection class provides methods for service
introspection based on information contained in its service description
document (SCPD). There is no constructor provided for this class, please use
[method@GUPnP.ServiceInfo.introspect_async] to create a
#GUPnPServiceIntrospection object for a specific service.

Note that all the introspection information is retrieved from the service
description document (SCPD) provided by the service and hence can not be
guaranteed to be complete. An UPnP service is required to provide a SCPD but
unfortunately, many services either do not provide this document or the
document does not provide any or all of the introspection information.

This class exposes internals of the UPnP protocol and should not need
to be used for regular device or control point development.</doc>
      <source-position filename="libgupnp/gupnp-service-introspection.h"
                       line="25"/>
      <implements name="Gio.Initable"/>
      <method name="get_action"
              c:identifier="gupnp_service_introspection_get_action">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.c"
             line="978">Returns the action by the name @action_name in this service.</doc>
        <source-position filename="libgupnp/gupnp-service-introspection.h"
                         line="123"/>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-introspection.c"
               line="985">the action or %NULL. Do not modify or free
it.</doc>
          <type name="ServiceActionInfo"
                c:type="const GUPnPServiceActionInfo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="introspection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-introspection.c"
                 line="980">A #GUPnPServiceIntrospection</doc>
            <type name="ServiceIntrospection"
                  c:type="GUPnPServiceIntrospection*"/>
          </instance-parameter>
          <parameter name="action_name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-introspection.c"
                 line="981">The name of the action to retrieve</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_state_variable"
              c:identifier="gupnp_service_introspection_get_state_variable">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.c"
             line="938">Returns the state variable by the name @variable_name in this service.</doc>
        <source-position filename="libgupnp/gupnp-service-introspection.h"
                         line="136"/>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-introspection.c"
               line="945">the state variable or %NULL. Do not modify or
free it.</doc>
          <type name="ServiceStateVariableInfo"
                c:type="const GUPnPServiceStateVariableInfo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="introspection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-introspection.c"
                 line="940">A #GUPnPServiceIntrospection</doc>
            <type name="ServiceIntrospection"
                  c:type="GUPnPServiceIntrospection*"/>
          </instance-parameter>
          <parameter name="variable_name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-introspection.c"
                 line="941">The name of the variable to retrieve</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="list_action_names"
              c:identifier="gupnp_service_introspection_list_action_names">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.c"
             line="828">Returns a GList of names of all the actions in this service.</doc>
        <source-position filename="libgupnp/gupnp-service-introspection.h"
                         line="115"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-introspection.c"
               line="834">A GList of names of all
the actions or %NULL. Do not modify or free it or its contents.</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="utf8"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="introspection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-introspection.c"
                 line="830">A #GUPnPServiceIntrospection</doc>
            <type name="ServiceIntrospection"
                  c:type="GUPnPServiceIntrospection*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_actions"
              c:identifier="gupnp_service_introspection_list_actions">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.c"
             line="857">Returns a #GList of all the actions (of type #GUPnPServiceActionInfo) in
this service.</doc>
        <source-position filename="libgupnp/gupnp-service-introspection.h"
                         line="119"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-introspection.c"
               line="864">A
#GList of all the actions or %NULL. Do not modify or free it or its
contents.</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="ServiceActionInfo"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="introspection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-introspection.c"
                 line="859">A #GUPnPServiceIntrospection</doc>
            <type name="ServiceIntrospection"
                  c:type="GUPnPServiceIntrospection*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_state_variable_names"
              c:identifier="gupnp_service_introspection_list_state_variable_names">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.c"
             line="902">Returns a #GList of names of all the state variables in this service.</doc>
        <source-position filename="libgupnp/gupnp-service-introspection.h"
                         line="128"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-introspection.c"
               line="908">A #GList of names of all
the state variables or %NULL. Do not modify or free it or its contents.</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="utf8"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="introspection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-introspection.c"
                 line="904">A #GUPnPServiceIntrospection</doc>
            <type name="ServiceIntrospection"
                  c:type="GUPnPServiceIntrospection*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_state_variables"
              c:identifier="gupnp_service_introspection_list_state_variables">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.c"
             line="879">Returns a GList of all the state variables (of type
#GUPnPServiceStateVariableInfo) in this service.</doc>
        <source-position filename="libgupnp/gupnp-service-introspection.h"
                         line="132"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-introspection.c"
               line="886">
A #GList of all the state variables or %NULL. Do not modify or free it or
its contents.</doc>
          <type name="GLib.List" c:type="const GList*">
            <type name="ServiceStateVariableInfo"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="introspection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-introspection.c"
                 line="881">A #GUPnPServiceIntrospection</doc>
            <type name="ServiceIntrospection"
                  c:type="GUPnPServiceIntrospection*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="scpd"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.c"
             line="286">The scpd of the device description file.</doc>
        <type name="gpointer" c:type="gpointer"/>
      </property>
    </class>
    <record name="ServiceIntrospectionClass"
            c:type="GUPnPServiceIntrospectionClass"
            glib:is-gtype-struct-for="ServiceIntrospection">
      <source-position filename="libgupnp/gupnp-service-introspection.h"
                       line="25"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <enumeration name="ServiceIntrospectionError"
                 glib:type-name="GUPnPServiceIntrospectionError"
                 glib:get-type="gupnp_service_introspection_error_get_type"
                 c:type="GUPnPServiceIntrospectionError"
                 glib:error-domain="gupnp-service-introspection-error">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-error.h"
           line="132">Errors during service introspection</doc>
      <member name="other"
              value="0"
              c:identifier="GUPNP_SERVICE_INTROSPECTION_ERROR_OTHER"
              glib:nick="other"
              glib:name="GUPNP_SERVICE_INTROSPECTION_ERROR_OTHER">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="134">Unknown error</doc>
      </member>
      <function name="quark"
                c:identifier="gupnp_service_introspection_error_quark">
        <return-value transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
    </enumeration>
    <class name="ServiceProxy"
           c:symbol-prefix="service_proxy"
           c:type="GUPnPServiceProxy"
           parent="ServiceInfo"
           glib:type-name="GUPnPServiceProxy"
           glib:get-type="gupnp_service_proxy_get_type"
           glib:type-struct="ServiceProxyClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service-proxy.c"
           line="57">Proxy class for remote services.

#GUPnPServiceProxy sends commands to a remote UPnP service and handles
incoming event notifications.</doc>
      <source-position filename="libgupnp/gupnp-service-proxy.h" line="47"/>
      <virtual-method name="subscription_lost">
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="37"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </instance-parameter>
          <parameter name="reason" transfer-ownership="none">
            <type name="GLib.Error" c:type="const GError*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="add_notify"
              c:identifier="gupnp_service_proxy_add_notify"
              shadowed-by="add_notify_full"
              introspectable="0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="564">Sets up @callback to be called whenever a change notification for
@variable is recieved.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="99"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.c"
               line="575">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="566">A #GUPnPServiceProxy</doc>
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </instance-parameter>
          <parameter name="variable" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="567">The variable to add notification for</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="568">The type of the variable</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="async"
                     closure="3">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="569">The callback to call when @variable changes</doc>
            <type name="ServiceProxyNotifyCallback"
                  c:type="GUPnPServiceProxyNotifyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="570">User data for @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_notify_full"
              c:identifier="gupnp_service_proxy_add_notify_full"
              shadows="add_notify"
              version="0.20.12">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="593">Sets up @callback to be called whenever a change notification for
@variable is recieved.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="106"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.c"
               line="607">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="595">A #GUPnPServiceProxy</doc>
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </instance-parameter>
          <parameter name="variable" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="596">The variable to add notification for</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="597">The type of the variable</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="notified"
                     closure="3"
                     destroy="4">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="598">The callback to call when @variable changes</doc>
            <type name="ServiceProxyNotifyCallback"
                  c:type="GUPnPServiceProxyNotifyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="599">User data for @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="notify"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="600">Function to call when the notification is removed, or %NULL</doc>
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_raw_notify"
              c:identifier="gupnp_service_proxy_add_raw_notify"
              version="0.20.12">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="669">Get a notification for anything that happens on the peer.

@value in @callback will be of type G_TYPE_POINTER and contain the pre-parsed
[type@libxml2.Doc]. Do NOT free or modify this document.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="114"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.c"
               line="682">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="671">A #GUPnPServiceProxy</doc>
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </instance-parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="notified"
                     closure="1"
                     destroy="2">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="672">The callback to call when the peer issues any
variable notification.</doc>
            <type name="ServiceProxyNotifyCallback"
                  c:type="GUPnPServiceProxyNotifyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="674">User data for @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="notify"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="675">A #GDestroyNotify for @user_data</doc>
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="call_action"
              c:identifier="gupnp_service_proxy_call_action"
              version="1.2.0"
              throws="1"
              glib:async-func="call_action_async">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="1646">Synchronously call the @action on the remote UPnP service.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="222"/>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.c"
               line="1656">%NULL on error, @action if successful.</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1648">A #GUPnPServiceProxy</doc>
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </instance-parameter>
          <parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1649">An action</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1650">A #GCancellable which can be used to cancel the
current action call</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="call_action_async"
              c:identifier="gupnp_service_proxy_call_action_async"
              version="1.2.0"
              glib:finish-func="call_action_finish"
              glib:sync-func="call_action">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="1571">Start a call on the remote UPnP service using the pre-configured @action.
Use gupnp_service_proxy_call_action_finish() in the @callback to finalize
the call and gupnp_service_proxy_action_get_result(),
gupnp_service_proxy_action_get_result_hash() or
gupnp_service_proxy_action_get_result_list() to extract the result of the
remote call.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="209"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1573">A #GUPnPServiceProxy</doc>
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </instance-parameter>
          <parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1574">A #GUPnPServiceProxyAction to call</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1575">A #GCancellable which can be used to cancel the
current action call</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="3">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1577">A #GAsyncReadyCallback to call when the action is
finished.</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1579">User data for @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="call_action_finish"
              c:identifier="gupnp_service_proxy_call_action_finish"
              version="1.2.0"
              throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="1620">Finish an asynchronous call initiated with
gupnp_service_proxy_call_action_async().</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="217"/>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.c"
               line="1629">%NULL, if the call had an error, the action otherwise.</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1622">a #GUPnPServiceProxy</doc>
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1623">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_subscribed"
              c:identifier="gupnp_service_proxy_get_subscribed"
              glib:get-property="subscribed">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="1551">Returns if we are subscribed to this service.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="136"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.c"
               line="1557">%TRUE if we are subscribed to this service, otherwise %FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1553">A #GUPnPServiceProxy</doc>
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="remove_notify"
              c:identifier="gupnp_service_proxy_remove_notify">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="701">Cancels the variable change notification for @callback and @user_data.

Up to version 0.20.9 this function must not be called directlya or
indirectly from a #GUPnPServiceProxyNotifyCallback associated with this
service proxy, even if it is for another variable. In later versions such
calls are allowed.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="120"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.c"
               line="715">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="703">A #GUPnPServiceProxy</doc>
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </instance-parameter>
          <parameter name="variable" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="704">The variable to add notification for</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="705">The callback to call when @variable changes</doc>
            <type name="ServiceProxyNotifyCallback"
                  c:type="GUPnPServiceProxyNotifyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="706">User data for @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_raw_notify"
              c:identifier="gupnp_service_proxy_remove_raw_notify">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="780">Cancels the variable change notification for @callback and @user_data.

This function must not be called directly or indirectly from a
#GUPnPServiceProxyNotifyCallback associated with this service proxy, even
if it is for another variable.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="126"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.c"
               line="792">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="782">A #GUPnPServiceProxy</doc>
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </instance-parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="783">The callback to call when @variable changes</doc>
            <type name="ServiceProxyNotifyCallback"
                  c:type="GUPnPServiceProxyNotifyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="784">User data for @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_credentials"
              c:identifier="gupnp_service_proxy_set_credentials"
              version="1.6.4">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="1720">Sets user and password for authentication</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="228"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1722">A #GUPnPServiceProxy</doc>
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </instance-parameter>
          <parameter name="user" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1723">user name for authentication</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="password" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1724">user password for authentication</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_subscribed"
              c:identifier="gupnp_service_proxy_set_subscribed"
              glib:set-property="subscribed">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="1517">(Un)subscribes to this service.

&lt;note&gt;The relevant messages are not immediately sent but queued.
If you want to unsubcribe from this service because the application
is quitting, rely on automatic synchronised unsubscription on object
destruction instead.&lt;/note&gt;</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="132"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="proxy" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1519">A #GUPnPServiceProxy</doc>
            <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
          </instance-parameter>
          <parameter name="subscribed" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="1520">%TRUE to subscribe to this service</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <property name="subscribed"
                writable="1"
                transfer-ownership="none"
                setter="set_subscribed"
                getter="get_subscribed"
                default-value="FALSE">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="296">Whether we are subscribed to this service.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <field name="parent_instance">
        <type name="ServiceInfo" c:type="GUPnPServiceInfo"/>
      </field>
      <glib:signal name="subscription-lost" when="last">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy.c"
             line="314">Emitted whenever the subscription to this service has been lost due
to an error condition.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy.c"
                 line="317">A pointer to a #GError describing why the subscription has
been lost</doc>
            <type name="GLib.Error" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ServiceProxyAction"
            c:type="GUPnPServiceProxyAction"
            opaque="1"
            glib:type-name="GUPnPServiceProxyAction"
            glib:get-type="gupnp_service_proxy_action_get_type"
            c:symbol-prefix="service_proxy_action">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service-proxy.h"
           line="49">Opaque structure for holding in-progress action data.</doc>
      <source-position filename="libgupnp/gupnp-service-proxy.h" line="54"/>
      <constructor name="new"
                   c:identifier="gupnp_service_proxy_action_new"
                   introspectable="0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="406">Prepares action @action with parameters @Varargs to be sent off to
a remote service later with gupnp_service_proxy_call_action() or
gupnp_service_proxy_call_action_async().

After the action call has finished, the results of the call may be
retrived from the #GUPnPServiceProxyAction by using
gupnp_service_proxy_action_get_result(),
gupnp_service_proxy_action_get_result_list() or
gupnp_service_proxy_action_get_result_hash()

```c
GUPnPServiceProxyAction *action =
        gupnp_service_proxy_action_new ("GetVolume",
                                        // Parameters
                                        "InstanceID", G_TYPE_INT, 0,
                                        "Channel", G_TYPE_STRING, "Master",
                                        NULL);

GError *error = NULL;
gupnp_service_proxy_call_action (proxy, action, NULL, &amp;error);
if (error != NULL) {
        g_warning ("Failed to call GetVolume: %s", error-&gt;message);
        g_clear_error (&amp;error);

        return;
}

guint16 volume = 0;
if (!gupnp_service_proxy_action_get_result (action,
                                            &amp;error,
                                            "CurrentVolume", G_TYPE_UINT, &amp;volume,
                                            NULL)) {
        g_message ("Current Volume: %u", volume);
}

gupnp_service_proxy_action_unref (action);
```</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="141"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="450">A newly created #GUPnPServiceProxyAction</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="408">The name of a remote action to call</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="409">tuples of in parameter name, in parameter type, and in parameter
value, terminated with %NULL</doc>
            <varargs/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_from_list"
                   c:identifier="gupnp_service_proxy_action_new_from_list">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="493">Prepares action @action with parameters @in_names and @in_values to be
sent off to a remote service later with gupnp_service_proxy_call_action() or
gupnp_service_proxy_call_action_async(). This is mainly useful for language
bindings.

After the action call has finished, the results of the call may be
retrived from the #GUPnPServiceProxyAction by using
gupnp_service_proxy_action_get_result(),
gupnp_service_proxy_action_get_result_list() or
gupnp_service_proxy_action_get_result_hash()
```c
GList *in_args = NULL;
in_args = g_list_append (in_args, "InstanceID");
in_args = g_list_append (in_args, "Unit");
in_args = g_list_append (in_args, "Target");

GValue instance = G_VALUE_INIT;
g_value_set_int (&amp;instance, 0);
GValue unit = G_VALUE_INIT;
g_value_set_static_string (&amp;unit, "ABS_TIME");
GValue target = G_VALUE_INIT;
g_value_set_static_string (&amp;target, "00:00:00.000");

GList *in_values = NULL;
in_values = g_list_append (in_values, &amp;instance);
in_values = g_list_append (in_values, &amp;unit);
in_values = g_list_append (in_values, &amp;target);

GUPnPServiceProxyAction *action =
        gunp_service_proxy_action_new_from_list ("Seek", in_args, in_values);

GError *error = NULL;
gupnp_service_proxy_call_action_async (proxy, action, NULL, on_action_finished, NULL);
gupnp_service_proxy_action_unref (action);
```</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="148"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="537">A newly created #GUPnPServiceProxyAction</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="495">An action</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="in_names" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="496">#GList of 'in' parameter
names (as strings)</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="in_values" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="498">#GList of values (as
#GValue) that line up with @in_names</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="GObject.Value"/>
            </type>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_plain"
                   c:identifier="gupnp_service_proxy_action_new_plain"
                   version="1.6.6">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="277">Prepares action @action with to be sent off to
a remote service later with gupnp_service_proxy_call_action() or
gupnp_service_proxy_call_action_async() if no arguments required or by adding more
parameters with gupnp_service_proxy_action_add()

After the action call has finished, the results of the call may be
retrived from the #GUPnPServiceProxyAction by using
gupnp_service_proxy_action_get_result(),
gupnp_service_proxy_action_get_result_list() or
gupnp_service_proxy_action_get_result_hash()

```c
GUPnPServiceProxyAction *action =
        gupnp_service_proxy_action_new_plain ("GetVolume");
gupnp_service_proxy_action_add (action, "InstanceID", value_instance);
gupnp_service_proxy_action_add (action, "Channel", value_channel);
````</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="145"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="299">A newly created #GUPnPServiceProxyAction</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="279">The name of a remote action to call</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="add_argument"
              c:identifier="gupnp_service_proxy_action_add_argument"
              version="1.6.6">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="565">Append @name to the list of arguments used by @action</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="162"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="573">@action for convenience.</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="567">The action to append to</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="568">The name of the argument</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="569">The value of the argument</doc>
            <type name="GObject.Value" c:type="const GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_result"
              c:identifier="gupnp_service_proxy_action_get_result"
              introspectable="0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="991">Retrieves the result of @action. The out parameters in @Varargs will be
filled in, and if an error occurred, @error will be set. In case of
an UPnP error the error code will be the same in @error.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="192"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="1003">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="993">A #GUPnPServiceProxyAction handle</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </instance-parameter>
          <parameter name="error"
                     direction="inout"
                     caller-allocates="0"
                     transfer-ownership="full"
                     nullable="1"
                     allow-none="1"
                     optional="1">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="994">The location where to store any error, or %NULL</doc>
            <type name="GLib.Error" c:type="GError**"/>
          </parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="995">tuples of out parameter name, out parameter type, and out parameter
value location, terminated with %NULL. The out parameter values should be
freed after use</doc>
            <varargs/>
          </parameter>
        </parameters>
      </method>
      <method name="get_result_hash"
              c:identifier="gupnp_service_proxy_action_get_result_hash"
              version="1.2.0"
              throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="903">See gupnp_service_proxy_action_get_result(); this version takes a #GHashTable for
runtime generated parameter lists.

The @out_hash needs to be pre-initialized with key value pairs denoting the argument
to retrieve and an empty #GValue initialized to hold the wanted type with g_value_init().

```c
void on_action_finished(GObject *object, GAsyncResult *res, gpointer user_data)
{
    GUPnPServiceProxyAction *action;
    GError *error;

    action = gupnp_service_proxy_call_action_finish (GUPNP_SERVICE_PROXY (object),
                                                     res,
                                                     &amp;error);

    if (error != NULL) {
             g_print ("Call failed: %s", error-&gt;message);
             g_clear_error (&amp;error);
             return;
    }

    GValue play_mode = G_VALUE_INIT;
    g_value_init(&amp;play_mode, G_TYPE_STRING);
    GValue rec_quality_mode = G_VALUE_INIT;
    g_value_init(&amp;rec_quality_mode, G_TYPE_STRING);

    GHashTable *out_args = g_hash_table_new (g_str_hash, g_str_equal);
    g_hash_table_insert(out_args, "PlayMode", &amp;play_mode);
    g_hash_table_insert(out_args, "RecQualityMode", &amp;rec_quality_mode);

    if (!gupnp_service_proxy_action_get_result_hash (action,
                                                     out_args,
                                                     &amp;error)) {
             g_print ("Getting results failed: %s", error-&gt;message);
             g_clear_error (&amp;error);
             return;
    }

    g_value_unset (&amp;play_mode);
    g_value_unset (&amp;rec_quality_mode);

    g_hash_table_unref (out_args);
}
```</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="203"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="956">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="905">A #GUPnPServiceProxyAction handle</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </instance-parameter>
          <parameter name="out_hash"
                     direction="inout"
                     caller-allocates="0"
                     transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="906">A #GHashTable of
out parameter name and initialised #GValue pairs</doc>
            <type name="GLib.HashTable" c:type="GHashTable*">
              <type name="utf8"/>
              <type name="GObject.Value"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="get_result_list"
              c:identifier="gupnp_service_proxy_action_get_result_list"
              version="1.2.0"
              throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="785">A variant of gupnp_service_proxy_action_get_result() that takes lists of
out-parameter names, types and place-holders for values.

The returned list in @out_values must be freed using `g_list_free` and each element
in it using `g_value_unset` and `g_free`.
```c
void on_action_finished(GObject *object, GAsyncResult *res, gpointer user_data)
{
    GUPnPServiceProxyAction *action;
    GError *error;

    action = gupnp_service_proxy_call_action_finish (GUPNP_SERVICE_PROXY (object),
                                                     res,
                                                     &amp;error);

    if (error != NULL) {
             g_print ("Call failed: %s", error-&gt;message);
             g_clear_error (&amp;error);
             return;
    }

    GList *out_args = NULL;
    out_args = g_list_append (out_args, "PlayMode");
    out_args = g_list_append (out_args, "RecQualityMode");
    GList *out_types = NULL;
    out_types = g_list_append (out_types, GSIZE_TO_POINTER (G_TYPE_STRING));
    out_types = g_list_append (out_types, GSIZE_TO_POINTER (G_TYPE_STRING));
    GList *out_values = NULL;

    if (!gupnp_service_proxy_action_get_result_list (action,
                                                     out_args,
                                                     out_types,
                                                     &amp;out_values,
                                                     &amp;error)) {
             g_print ("Getting results failed: %s", error-&gt;message);
             g_clear_error (&amp;error);
             return;
    }

    GList *iter = out_values;
    while (iter != NULL) {
        GValue *value = iter-&gt;data;
        g_print ("Result: %s\n", g_value_get_string (value));
        g_value_unset (value);
        g_free (value);
        iter = g_list_remove_link (iter, iter);
    }
    g_list_free (out_values);
}
```</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="197"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="847">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="787">A #GUPnPServiceProxyAction handle</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </instance-parameter>
          <parameter name="out_names" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="788">#GList of 'out' parameter
names (as strings)</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="out_types" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="790">#GList of types (as #GType)
that line up with @out_names</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="GType"/>
            </type>
          </parameter>
          <parameter name="out_values"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="792">#GList of values
(as #GValue) that line up with @out_names and @out_types.</doc>
            <type name="GLib.List" c:type="GList**">
              <type name="GObject.Value"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="iterate"
              c:identifier="gupnp_service_proxy_action_iterate"
              version="1.6.6"
              throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="61">Iterate over the out arguments of a finished action</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="173"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="68">A newly created GUPnPServiceProxyActionIterator, or %NULL on error</doc>
          <type name="ServiceProxyActionIter"
                c:type="GUPnPServiceProxyActionIter*"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="63">A finished GUPnPServiceProxyAction</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref"
              c:identifier="gupnp_service_proxy_action_ref"
              version="1.2.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="317">Increases reference count of `action`</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="153"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="323">@action with an increased reference count</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="319">an action</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set"
              c:identifier="gupnp_service_proxy_action_set"
              version="1.4.0"
              throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="1044">Update the value of @key to @value.

@key needs to already exist in @action.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="167"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="1055">true if successfully modified, false otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="1046">the action to modify</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="1047">the name of the value to modify</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="1048">the new value of @key</doc>
            <type name="GObject.Value" c:type="const GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unref"
              c:identifier="gupnp_service_proxy_action_unref"
              version="1.2.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="360">Decreases reference count of `action`. If reference count drops to 0,
the action and its contents will be freed.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="156"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="362">an action</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <callback name="ServiceProxyActionCallback"
              c:type="GUPnPServiceProxyActionCallback"
              deprecated="1"
              deprecated-version="1.2.0">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service-proxy.h"
           line="68">Callback notifying that @action on @proxy has returned and
gupnp_service_proxy_end_action() etc can be called.</doc>
      <source-position filename="libgupnp/gupnp-service-proxy.h" line="78"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="proxy" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.h"
               line="70">The #GUPnPServiceProxy @action is called from</doc>
          <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
        </parameter>
        <parameter name="action" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.h"
               line="71">The #GUPnPServiceProxyAction in progress</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.h"
               line="72">User data</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <class name="ServiceProxyActionIter"
           c:symbol-prefix="service_proxy_action_iter"
           c:type="GUPnPServiceProxyActionIter"
           version="1.6.6"
           parent="GObject.Object"
           glib:type-name="GUPnPServiceProxyActionIter"
           glib:get-type="gupnp_service_proxy_action_iter_get_type"
           glib:type-struct="ServiceProxyActionIterClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service-proxy.h"
           line="61">An opaque object representing an iterator over the out parameters of an action</doc>
      <source-position filename="libgupnp/gupnp-service-proxy.h" line="56"/>
      <method name="get_name"
              c:identifier="gupnp_service_proxy_action_iter_get_name"
              version="1.6.6">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="133">Get the name of the current out argument</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="180"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="139">Name of the current argument</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="135">A GUPnP.ServiceProxyActionIter</doc>
            <type name="ServiceProxyActionIter"
                  c:type="GUPnPServiceProxyActionIter*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_value"
              c:identifier="gupnp_service_proxy_action_iter_get_value"
              version="1.6.6">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="159">Get the value of the current parameter.

If the service proxy had a successful introspection, the type according
to the introspection data will be used, otherwise it will be string.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="183"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="169">%TRUE if the value could be read successfully</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="161">A GUPnP.ServiceProxyActionIter</doc>
            <type name="ServiceProxyActionIter"
                  c:type="GUPnPServiceProxyActionIter*"/>
          </instance-parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="1"
                     transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="162">The value</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_value_as"
              c:identifier="gupnp_service_proxy_action_iter_get_value_as"
              version="1.6.8">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="214">Get the value of the current parameter.

Converts the value to the given type, similar to the other
finish_action functions.</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="187"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="225">%TRUE if the value could be read successfully</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="216">A GUPnP.ServiceProxyActionIter</doc>
            <type name="ServiceProxyActionIter"
                  c:type="GUPnPServiceProxyActionIter*"/>
          </instance-parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="217">The type to convert the value to</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="1"
                     transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="218">The value</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="next"
              c:identifier="gupnp_service_proxy_action_iter_next"
              version="1.6.6">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-proxy-action.c"
             line="111">Move @self to the next out value of the iterated action</doc>
        <source-position filename="libgupnp/gupnp-service-proxy.h" line="177"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy-action.c"
               line="117">%TRUE if the next value was available</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-service-proxy-action.c"
                 line="113">A GUPnP.ServiceProxyActionIter</doc>
            <type name="ServiceProxyActionIter"
                  c:type="GUPnPServiceProxyActionIter*"/>
          </instance-parameter>
        </parameters>
      </method>
    </class>
    <record name="ServiceProxyActionIterClass"
            c:type="GUPnPServiceProxyActionIterClass"
            glib:is-gtype-struct-for="ServiceProxyActionIter">
      <source-position filename="libgupnp/gupnp-service-proxy.h" line="56"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <record name="ServiceProxyClass"
            c:type="GUPnPServiceProxyClass"
            glib:is-gtype-struct-for="ServiceProxy">
      <source-position filename="libgupnp/gupnp-service-proxy.h" line="47"/>
      <field name="parent_class">
        <type name="ServiceInfoClass" c:type="GUPnPServiceInfoClass"/>
      </field>
      <field name="subscription_lost">
        <callback name="subscription_lost">
          <source-position filename="libgupnp/gupnp-service-proxy.h"
                           line="37"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="proxy" transfer-ownership="none">
              <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
            </parameter>
            <parameter name="reason" transfer-ownership="none">
              <type name="GLib.Error" c:type="const GError*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <callback name="ServiceProxyNotifyCallback"
              c:type="GUPnPServiceProxyNotifyCallback">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service-proxy.h"
           line="83">Callback notifying that the state variable @variable on @proxy has changed to
@value.</doc>
      <source-position filename="libgupnp/gupnp-service-proxy.h" line="93"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="proxy" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.h"
               line="85">The #GUPnPServiceProxy the notification originates from</doc>
          <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
        </parameter>
        <parameter name="variable" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.h"
               line="86">The name of the variable being notified</doc>
          <type name="utf8" c:type="const char*"/>
        </parameter>
        <parameter name="value" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.h"
               line="87">The #GValue of the variable being notified</doc>
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="3">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-service-proxy.h"
               line="88">User data</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="ServiceStateVariableInfo"
            c:type="GUPnPServiceStateVariableInfo"
            glib:type-name="GUPnPServiceStateVariableInfo"
            glib:get-type="gupnp_service_state_variable_info_get_type"
            c:symbol-prefix="service_state_variable_info">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service-introspection.h"
           line="79">This structure contains information about service state variable.</doc>
      <source-position filename="libgupnp/gupnp-service-introspection.h"
                       line="109"/>
      <field name="name" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="81">The name of the state variable.</doc>
        <type name="utf8" c:type="char*"/>
      </field>
      <field name="send_events" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="82">Whether this state variable can source events.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </field>
      <field name="is_numeric" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="83">Wether this state variable is a numeric type (integer and
float).</doc>
        <type name="gboolean" c:type="gboolean"/>
      </field>
      <field name="type" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="85">The GType of this state variable.</doc>
        <type name="GType" c:type="GType"/>
      </field>
      <field name="default_value" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="86">The default value of this state variable.</doc>
        <type name="GObject.Value" c:type="GValue"/>
      </field>
      <field name="minimum" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="87">The minimum value of this state variable. Only applies to numeric
data types.</doc>
        <type name="GObject.Value" c:type="GValue"/>
      </field>
      <field name="maximum" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="89">The maximum value of this state variable. Only applies to numeric
data types.</doc>
        <type name="GObject.Value" c:type="GValue"/>
      </field>
      <field name="step" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="91">The step value of this state variable. Only applies to numeric
data types.</doc>
        <type name="GObject.Value" c:type="GValue"/>
      </field>
      <field name="allowed_values" writable="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service-introspection.h"
             line="93">The allowed values of this state variable. Only applies to
string data types. Unlike the other fields in this structure, this field
contains a list of (char *) strings rather than GValues.</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="utf8"/>
        </type>
      </field>
    </record>
    <glib:boxed glib:name="Time"
                c:symbol-prefix="time"
                glib:type-name="GUPnPTime"
                glib:get-type="gupnp_time_get_type">
    </glib:boxed>
    <glib:boxed glib:name="TimeTZ"
                c:symbol-prefix="time_tz"
                glib:type-name="GUPnPTimeTZ"
                glib:get-type="gupnp_time_tz_get_type">
    </glib:boxed>
    <glib:boxed glib:name="URI"
                c:symbol-prefix="uri"
                glib:type-name="GUPnPURI"
                glib:get-type="gupnp_uri_get_type">
    </glib:boxed>
    <glib:boxed glib:name="UUID"
                c:symbol-prefix="uuid"
                glib:type-name="GUPnPUUID"
                glib:get-type="gupnp_uuid_get_type">
    </glib:boxed>
    <class name="XMLDoc"
           c:symbol-prefix="xml_doc"
           c:type="GUPnPXMLDoc"
           version="0.14.0"
           parent="GObject.Object"
           glib:type-name="GUPnPXMLDoc"
           glib:get-type="gupnp_xml_doc_get_type"
           glib:type-struct="XMLDocClass">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-xml-doc.c"
           line="24">Reference-counting wrapper for libxml's #xmlDoc</doc>
      <source-position filename="libgupnp/gupnp-xml-doc.h" line="23"/>
      <implements name="Gio.Initable"/>
      <constructor name="new"
                   c:identifier="gupnp_xml_doc_new"
                   version="0.14.0">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-xml-doc.c"
             line="187">Create a new #GUPnPXMLDoc for @xml_doc.</doc>
        <source-position filename="libgupnp/gupnp-xml-doc.h" line="30"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-xml-doc.c"
               line="193">A new #GUPnPXMLDoc, or %NULL on an error</doc>
          <type name="XMLDoc" c:type="GUPnPXMLDoc*"/>
        </return-value>
        <parameters>
          <parameter name="xml_doc" transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-xml-doc.c"
                 line="189">Pointer to #xmlDoc to wrap under this object</doc>
            <type name="libxml2.Doc" c:type="xmlDoc*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_from_path"
                   c:identifier="gupnp_xml_doc_new_from_path"
                   version="0.14.0"
                   throws="1">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-xml-doc.c"
             line="207">Create a new #GUPnPXMLDoc for the XML document at @path.</doc>
        <source-position filename="libgupnp/gupnp-xml-doc.h" line="33"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-xml-doc.c"
               line="214">A new #GUPnPXMLDoc, or %NULL on an error</doc>
          <type name="XMLDoc" c:type="GUPnPXMLDoc*"/>
        </return-value>
        <parameters>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-xml-doc.c"
                 line="209">Path to xml document</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_doc" c:identifier="gupnp_xml_doc_get_doc">
        <source-position filename="libgupnp/gupnp-xml-doc.h" line="37"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-xml-doc.c"
               line="234">a pointer to the wrapped #xmlDoc</doc>
          <type name="libxml2.Doc" c:type="const xmlDoc*"/>
        </return-value>
        <parameters>
          <instance-parameter name="xml_doc" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="libgupnp/gupnp-xml-doc.c"
                 line="232">A #GUPnPXMLDoc</doc>
            <type name="XMLDoc" c:type="GUPnPXMLDoc*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="doc"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <property name="path"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                default-value="NULL">
        <type name="utf8" c:type="gchar*"/>
      </property>
    </class>
    <record name="XMLDocClass"
            c:type="GUPnPXMLDocClass"
            glib:is-gtype-struct-for="XMLDoc">
      <source-position filename="libgupnp/gupnp-xml-doc.h" line="23"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <enumeration name="XMLError"
                 glib:type-name="GUPnPXMLError"
                 glib:get-type="gupnp_xml_error_get_type"
                 c:type="GUPnPXMLError"
                 glib:error-domain="gupnp-xml-error">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-error.h"
           line="86">Errors during occuring during processing of XML data.</doc>
      <member name="parse"
              value="0"
              c:identifier="GUPNP_XML_ERROR_PARSE"
              glib:nick="parse"
              glib:name="GUPNP_XML_ERROR_PARSE">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="88">Generic XML parsing error.</doc>
      </member>
      <member name="no_node"
              value="1"
              c:identifier="GUPNP_XML_ERROR_NO_NODE"
              glib:nick="no-node"
              glib:name="GUPNP_XML_ERROR_NO_NODE">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="89">A required XML node was not found.</doc>
      </member>
      <member name="empty_node"
              value="2"
              c:identifier="GUPNP_XML_ERROR_EMPTY_NODE"
              glib:nick="empty-node"
              glib:name="GUPNP_XML_ERROR_EMPTY_NODE">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="90">An XML node is unexpectedly empty.</doc>
      </member>
      <member name="invalid_attribute"
              value="3"
              c:identifier="GUPNP_XML_ERROR_INVALID_ATTRIBUTE"
              glib:nick="invalid-attribute"
              glib:name="GUPNP_XML_ERROR_INVALID_ATTRIBUTE">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="91">An XML node has an unknown attribute.</doc>
      </member>
      <member name="other"
              value="4"
              c:identifier="GUPNP_XML_ERROR_OTHER"
              glib:nick="other"
              glib:name="GUPNP_XML_ERROR_OTHER">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-error.h"
             line="92">Unknown/unhandled XML related errors.</doc>
      </member>
      <function name="quark" c:identifier="gupnp_xml_error_quark">
        <return-value transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
    </enumeration>
    <function name="control_error_quark"
              c:identifier="gupnp_control_error_quark"
              moved-to="ControlError.quark">
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="eventing_error_quark"
              c:identifier="gupnp_eventing_error_quark"
              moved-to="EventingError.quark">
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="get_uuid"
              c:identifier="gupnp_get_uuid"
              deprecated="1"
              deprecated-version="1.6.">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-service.c"
           line="549">Generate and return a new UUID.</doc>
      <doc-deprecated xml:space="preserve">Use [func@GLib.uuid_string_random] instead.</doc-deprecated>
      <source-position filename="libgupnp/gupnp-uuid.h" line="17"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="libgupnp/gupnp-service.c"
             line="554">A newly generated UUID in string representation.</doc>
        <type name="utf8" c:type="char*"/>
      </return-value>
    </function>
    <docsection name="gupnp-types">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-types.c"
           line="11">These GTypes are used to marshal to and from string data to particular UPnP
types when invoking actions on a #GUPnPServiceProxy.</doc>
    </docsection>
    <function name="rootdevice_error_quark"
              c:identifier="gupnp_rootdevice_error_quark"
              moved-to="RootdeviceError.quark">
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="server_error_quark"
              c:identifier="gupnp_server_error_quark"
              moved-to="ServerError.quark">
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="service_error_quark"
              c:identifier="gupnp_service_error_quark"
              moved-to="ServiceError.quark">
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="service_introspection_error_quark"
              c:identifier="gupnp_service_introspection_error_quark"
              moved-to="ServiceIntrospectionError.quark">
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function-macro name="value_get_string"
                    c:identifier="gupnp_value_get_string"
                    introspectable="0">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-types.h"
           line="117">Helper macro to get a char* from a `GValue`</doc>
      <source-position filename="libgupnp/gupnp-types.h" line="114"/>
      <parameters>
        <parameter name="value">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-types.h"
               line="119">a [GLib.Value]</doc>
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="value_get_xml_node"
                    c:identifier="gupnp_value_get_xml_node"
                    introspectable="0">
      <doc xml:space="preserve"
           filename="libgupnp/gupnp-types.h"
           line="108">Helper macro to get the xmlNode* from a `GValue`</doc>
      <source-position filename="libgupnp/gupnp-types.h" line="105"/>
      <parameters>
        <parameter name="value">
          <doc xml:space="preserve"
               filename="libgupnp/gupnp-types.h"
               line="110">a [GLib.Value]</doc>
        </parameter>
      </parameters>
    </function-macro>
    <function name="xml_error_quark"
              c:identifier="gupnp_xml_error_quark"
              moved-to="XMLError.quark">
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
  </namespace>
</repository>
