<?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:glib="http://www.gtk.org/introspection/glib/1.0">
  <include name="GLib" version="2.0"/>
  <include name="GObject" version="2.0"/>
  <include name="GSSDP" version="1.0"/>
  <include name="Gio" version="2.0"/>
  <include name="Soup" version="2.4"/>
  <include name="libxml2" version="2.0"/>
  <namespace name="GUPnP"
             version="1.0"
             shared-library="libgupnp-1.0.so.1.0"
             c:identifier-prefixes="GUPnP"
             c:symbol-prefixes="gupnp">
    <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:whitespace="preserve">This struct contains private data only, and should be accessed using the
functions below.</doc>
      <implements name="Gio.Initable"/>
      <constructor name="new" c:identifier="gupnp_context_new" throws="1">
        <doc xml:whitespace="preserve">Create a new #GUPnPContext with the specified @main_context, @interface and
@port.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A new #GUPnPContext object, or %NULL on an error</doc>
          <type name="Context" c:type="GUPnPContext*"/>
        </return-value>
        <parameters>
          <parameter name="main_context" transfer-ownership="none">
            <doc xml:whitespace="preserve">Deprecated: 0.17.2: Always set to %NULL. If you want to use a different context, use g_main_context_push_thread_default().</doc>
            <type name="GLib.MainContext" c:type="GMainContext*"/>
          </parameter>
          <parameter name="interface" transfer-ownership="none">
            <doc xml:whitespace="preserve">The network interface to use, or %NULL to auto-detect.</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="port" transfer-ownership="none">
            <doc xml:whitespace="preserve">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>
      <method name="get_default_language"
              c:identifier="gupnp_context_get_default_language">
        <doc xml:whitespace="preserve">Get the default Content-Language header for this context.

header.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The default content of the Content-Language</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_host_ip" c:identifier="gupnp_context_get_host_ip">
        <doc xml:whitespace="preserve">Get the IP address we advertise ourselves as using.


Deprecated:0.12.7: The "host-ip" property has moved to the base class
#GSSDPClient so newer applications should use
#gssdp_client_get_host_ip instead.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The IP address. This string should not be freed.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_port" c:identifier="gupnp_context_get_port">
        <doc xml:whitespace="preserve">Get the port that the SOAP server is running on.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The port the SOAP server is running on.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
      </method>
      <method name="get_server" c:identifier="gupnp_context_get_server">
        <doc xml:whitespace="preserve">Get the #SoupServer HTTP server that GUPnP is using.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The #SoupServer used by GUPnP. Do not unref this when finished.</doc>
          <type name="Soup.Server" c:type="SoupServer*"/>
        </return-value>
      </method>
      <method name="get_session" c:identifier="gupnp_context_get_session">
        <doc xml:whitespace="preserve">Get the #SoupSession object that GUPnP is using.

this when finished.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The #SoupSession used by GUPnP. Do not unref</doc>
          <type name="Soup.Session" c:type="SoupSession*"/>
        </return-value>
      </method>
      <method name="get_subscription_timeout"
              c:identifier="gupnp_context_get_subscription_timeout">
        <doc xml:whitespace="preserve">Get the event subscription timeout (in seconds), or 0 meaning there is no
timeout.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The event subscription timeout in seconds.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
      </method>
      <method name="host_path" c:identifier="gupnp_context_host_path">
        <doc xml:whitespace="preserve">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>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="local_path" transfer-ownership="none">
            <doc xml:whitespace="preserve">Path to the local file or folder to be hosted</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="server_path" transfer-ownership="none">
            <doc xml:whitespace="preserve">Web server path where @local_path should be hosted</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="host_path_for_agent"
              c:identifier="gupnp_context_host_path_for_agent">
        <doc xml:whitespace="preserve">Use this method to serve different local path to specific user-agent(s). The
path @server_path must already be hosted by @context.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE on success, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="local_path" transfer-ownership="none">
            <doc xml:whitespace="preserve">Path to the local file or folder to be hosted</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="server_path" transfer-ownership="none">
            <doc xml:whitespace="preserve">Web server path already being hosted</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="user_agent" transfer-ownership="none">
            <doc xml:whitespace="preserve">The user-agent as a #GRegex.</doc>
            <type name="GLib.Regex" c:type="GRegex*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_default_language"
              c:identifier="gupnp_context_set_default_language">
        <doc xml:whitespace="preserve">Set the default language for the Content-Length 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>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="language" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_subscription_timeout"
              c:identifier="gupnp_context_set_subscription_timeout">
        <doc xml:whitespace="preserve">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>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="timeout" transfer-ownership="none">
            <doc xml:whitespace="preserve">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:whitespace="preserve">Stop hosting the file or folder at @server_path.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="server_path" transfer-ownership="none">
            <doc xml:whitespace="preserve">Web server path where the file or folder is hosted</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </method>
      <property name="default-language"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">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"/>
      </property>
      <property name="port"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The port to run on. Set to 0 if you don't care what port to run on.</doc>
        <type name="guint"/>
      </property>
      <property name="server" transfer-ownership="none">
        <doc xml:whitespace="preserve">The #SoupServer HTTP server used by GUPnP.</doc>
        <type name="Soup.Server"/>
      </property>
      <property name="session" transfer-ownership="none">
        <doc xml:whitespace="preserve">The #SoupSession object used by GUPnP.</doc>
        <type name="Soup.Session"/>
      </property>
      <property name="subscription-timeout"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">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"/>
      </property>
      <field name="parent">
        <type name="GSSDP.Client" c:type="GSSDPClient"/>
      </field>
      <field name="priv">
        <type name="ContextPrivate" c:type="GUPnPContextPrivate*"/>
      </field>
    </class>
    <record name="ContextClass"
            c:type="GUPnPContextClass"
            glib:is-gtype-struct-for="Context">
      <field name="parent_class">
        <type name="GSSDP.ClientClass" c:type="GSSDPClientClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <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">
          <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">
          <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">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <class name="ContextManager"
           c:symbol-prefix="context_manager"
           c:type="GUPnPContextManager"
           parent="GObject.Object"
           abstract="1"
           glib:type-name="GUPnPContextManager"
           glib:get-type="gupnp_context_manager_get_type"
           glib:type-struct="ContextManagerClass">
      <doc xml:whitespace="preserve">This struct contains private data only, and should be accessed using the
functions below.</doc>
      <constructor name="new"
                   c:identifier="gupnp_context_manager_new"
                   deprecated="Use gupnp_context_manager_create()."
                   deprecated-version="0.17.2">
        <doc xml:whitespace="preserve">Same as gupnp_context_manager_create().</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A new #GUPnPContextManager object.</doc>
          <type name="ContextManager" c:type="GUPnPContextManager*"/>
        </return-value>
        <parameters>
          <parameter name="main_context"
                     transfer-ownership="none"
                     allow-none="1">
            <doc xml:whitespace="preserve">Deprecated: 0.17.2: %NULL. If you want to use a different main context use g_main_context_push_thread_default() instead.</doc>
            <type name="GLib.MainContext" c:type="GMainContext*"/>
          </parameter>
          <parameter name="port" transfer-ownership="none">
            <doc xml:whitespace="preserve">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>
      </constructor>
      <function name="create" c:identifier="gupnp_context_manager_create">
        <doc xml:whitespace="preserve">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 runtime. If it is not available,
the implementation falls back to the basic Unix context manager instead.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A new #GUPnPContextManager object.</doc>
          <type name="ContextManager" c:type="GUPnPContextManager*"/>
        </return-value>
        <parameters>
          <parameter name="port" transfer-ownership="none">
            <doc xml:whitespace="preserve">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="manage_control_point"
              c:identifier="gupnp_context_manager_manage_control_point">
        <doc xml:whitespace="preserve">By calling this function, you are asking @manager to keep a reference to
@control_point until it's associated #GUPnPContext is no longer available.
You usually want to call this function from
#GUPnPContextManager::context-available handler after you create a
#GUPnPControlPoint object for the newly available context.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="control_point" transfer-ownership="none">
            <doc xml:whitespace="preserve">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">
        <doc xml:whitespace="preserve">By calling this function, you are asking @manager to keep a reference to
@root_device when it's associated #GUPnPContext is no longer available. You
usually want to call this function from
#GUPnPContextManager::context-available handler after you create a
#GUPnPRootDevice object for the newly available context.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="root_device" transfer-ownership="none">
            <doc xml:whitespace="preserve">The #GUPnPRootDevice to be taken care of</doc>
            <type name="RootDevice" c:type="GUPnPRootDevice*"/>
          </parameter>
        </parameters>
      </method>
      <property name="main-context"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="gpointer"/>
      </property>
      <property name="port"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">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"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="ContextManagerPrivate"
              c:type="GUPnPContextManagerPrivate*"/>
      </field>
      <glib:signal name="context-available" when="last">
        <doc xml:whitespace="preserve">Signals the availability of new #GUPnPContext.</doc>
        <return-value transfer-ownership="none">
          <type name="none"/>
        </return-value>
        <parameters>
          <parameter name="context" transfer-ownership="none">
            <doc xml:whitespace="preserve">The now available #GUPnPContext</doc>
            <type name="Context"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="context-unavailable" when="first">
        <doc xml:whitespace="preserve">Signals the unavailability of a #GUPnPContext.</doc>
        <return-value transfer-ownership="none">
          <type name="none"/>
        </return-value>
        <parameters>
          <parameter name="context" transfer-ownership="none">
            <doc xml:whitespace="preserve">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">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <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">
          <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">
          <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">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <record name="ContextManagerPrivate"
            c:type="GUPnPContextManagerPrivate"
            disguised="1">
    </record>
    <record name="ContextPrivate" c:type="GUPnPContextPrivate" disguised="1">
    </record>
    <enumeration name="ControlError" c:type="GUPnPControlError">
      <doc xml:whitespace="preserve">#GError codes used for errors in the #GUPNP_CONTROL_ERROR domain, during
invocation of service actions.</doc>
      <member name="invalid_action"
              value="401"
              c:identifier="GUPNP_CONTROL_ERROR_INVALID_ACTION"/>
      <member name="invalid_args"
              value="402"
              c:identifier="GUPNP_CONTROL_ERROR_INVALID_ARGS"/>
      <member name="out_of_sync"
              value="403"
              c:identifier="GUPNP_CONTROL_ERROR_OUT_OF_SYNC"/>
      <member name="action_failed"
              value="501"
              c:identifier="GUPNP_CONTROL_ERROR_ACTION_FAILED"/>
    </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:whitespace="preserve">This struct contains private data only, and should be accessed using the
functions below.</doc>
      <constructor name="new" c:identifier="gupnp_control_point_new">
        <doc xml:whitespace="preserve">Create a new #GUPnPControlPoint with the specified @context and @target.

@target should be a service or device name, such as
&lt;literal&gt;urn:schemas-upnp-org:service:WANIPConnection:1&lt;/literal&gt; or
&lt;literal&gt;urn:schemas-upnp-org:device:MediaRenderer:1&lt;/literal&gt;.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A new #GUPnPControlPoint object.</doc>
          <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
        </return-value>
        <parameters>
          <parameter name="context" transfer-ownership="none">
            <doc xml:whitespace="preserve">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <doc xml:whitespace="preserve">The search target</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_full" c:identifier="gupnp_control_point_new_full">
        <doc xml:whitespace="preserve">Create a new #GUPnPControlPoint with the specified @context, @factory and
@target.

@target should be a service or device name, such as
&lt;literal&gt;urn:schemas-upnp-org:service:WANIPConnection:1&lt;/literal&gt; or
&lt;literal&gt;urn:schemas-upnp-org:device:MediaRenderer:1&lt;/literal&gt;.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A new #GUPnPControlPoint object.</doc>
          <type name="ControlPoint" c:type="GUPnPControlPoint*"/>
        </return-value>
        <parameters>
          <parameter name="context" transfer-ownership="none">
            <doc xml:whitespace="preserve">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </parameter>
          <parameter name="factory" transfer-ownership="none">
            <doc xml:whitespace="preserve">A #GUPnPResourceFactory</doc>
            <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <doc xml:whitespace="preserve">The search target</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </constructor>
      <virtual-method name="device_proxy_available">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="proxy" transfer-ownership="none">
            <type name="DeviceProxy" c:type="GUPnPDeviceProxy*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="device_proxy_unavailable">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="proxy" transfer-ownership="none">
            <type name="DeviceProxy" c:type="GUPnPDeviceProxy*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="service_proxy_available">
        <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>
        </parameters>
      </virtual-method>
      <virtual-method name="service_proxy_unavailable">
        <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>
        </parameters>
      </virtual-method>
      <method name="get_context"
              c:identifier="gupnp_control_point_get_context">
        <doc xml:whitespace="preserve">Get the #GUPnPControlPoint associated with @control_point.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The #GUPnPContext.</doc>
          <type name="Context" c:type="GUPnPContext*"/>
        </return-value>
      </method>
      <method name="get_resource_factory"
              c:identifier="gupnp_control_point_get_resource_factory">
        <doc xml:whitespace="preserve">Get the #GUPnPResourceFactory used by the @control_point.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A #GUPnPResourceFactory.</doc>
          <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
        </return-value>
      </method>
      <method name="list_device_proxies"
              c:identifier="gupnp_control_point_list_device_proxies">
        <doc xml:whitespace="preserve">Get the #GList of discovered #GUPnPDeviceProxy objects. Do not free the list
nor its elements.

#GUPnPDeviceProxy objects.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">a #GList of</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="DeviceProxy"/>
          </type>
        </return-value>
      </method>
      <method name="list_service_proxies"
              c:identifier="gupnp_control_point_list_service_proxies">
        <doc xml:whitespace="preserve">Get the #GList of discovered #GUPnPServiceProxy objects. Do not free the
list nor its elements.

of #GUPnPServiceProxy objects.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">a #GList</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="ServiceProxy"/>
          </type>
        </return-value>
      </method>
      <property name="resource-factory"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The resource factory to use. Set to NULL for default factory.</doc>
        <type name="ResourceFactory"/>
      </property>
      <field name="parent">
        <type name="GSSDP.ResourceBrowser" c:type="GSSDPResourceBrowser"/>
      </field>
      <field name="priv">
        <type name="ControlPointPrivate" c:type="GUPnPControlPointPrivate*"/>
      </field>
      <glib:signal name="device-proxy-available" when="last">
        <doc xml:whitespace="preserve">The ::device-proxy-available signal is emitted whenever a new
device has become available.</doc>
        <return-value transfer-ownership="none">
          <type name="none"/>
        </return-value>
        <parameters>
          <parameter name="proxy" transfer-ownership="none">
            <doc xml:whitespace="preserve">The now available #GUPnPDeviceProxy</doc>
            <type name="DeviceProxy"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="device-proxy-unavailable" when="last">
        <doc xml:whitespace="preserve">The ::device-proxy-unavailable signal is emitted whenever a
device is not available any more.</doc>
        <return-value transfer-ownership="none">
          <type name="none"/>
        </return-value>
        <parameters>
          <parameter name="proxy" transfer-ownership="none">
            <doc xml:whitespace="preserve">The now unavailable #GUPnPDeviceProxy</doc>
            <type name="DeviceProxy"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="service-proxy-available" when="last">
        <doc xml:whitespace="preserve">The ::service-proxy-available signal is emitted whenever a new
service has become available.</doc>
        <return-value transfer-ownership="none">
          <type name="none"/>
        </return-value>
        <parameters>
          <parameter name="proxy" transfer-ownership="none">
            <doc xml:whitespace="preserve">The now available #GUPnPServiceProxy</doc>
            <type name="ServiceProxy"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="service-proxy-unavailable" when="last">
        <doc xml:whitespace="preserve">The ::service-proxy-unavailable signal is emitted whenever a
service is not available any more.</doc>
        <return-value transfer-ownership="none">
          <type name="none"/>
        </return-value>
        <parameters>
          <parameter name="proxy" transfer-ownership="none">
            <doc xml:whitespace="preserve">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">
      <field name="parent_class">
        <type name="GSSDP.ResourceBrowserClass"
              c:type="GSSDPResourceBrowserClass"/>
      </field>
      <field name="device_proxy_available">
        <callback name="device_proxy_available">
          <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">
          <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">
          <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">
          <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">
          <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">
          <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">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <record name="ControlPointPrivate"
            c:type="GUPnPControlPointPrivate"
            disguised="1">
    </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:whitespace="preserve">This struct contains private data only, and should be accessed using the
functions below.</doc>
      <property name="root-device"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The containing #GUPnPRootDevice, or NULL if this is the root
device.</doc>
        <type name="RootDevice"/>
      </property>
      <field name="parent">
        <type name="DeviceInfo" c:type="GUPnPDeviceInfo"/>
      </field>
      <field name="priv">
        <type name="DevicePrivate" c:type="GUPnPDevicePrivate*"/>
      </field>
    </class>
    <record name="DeviceClass"
            c:type="GUPnPDeviceClass"
            glib:is-gtype-struct-for="Device">
      <field name="parent_class">
        <type name="DeviceInfoClass" c:type="GUPnPDeviceInfoClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <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">
          <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">
          <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">
          <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:whitespace="preserve">This struct contains private data only, and should be accessed using the
functions below.</doc>
      <virtual-method name="get_element" introspectable="0">
        <return-value>
          <type name="libxml2.Node" c:type="xmlNode*"/>
        </return-value>
      </virtual-method>
      <method name="get_context" c:identifier="gupnp_device_info_get_context">
        <doc xml:whitespace="preserve">Get the associated #GUPnPContext.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A #GUPnPContext.</doc>
          <type name="Context" c:type="GUPnPContext*"/>
        </return-value>
      </method>
      <method name="get_description_value"
              c:identifier="gupnp_device_info_get_description_value">
        <doc xml:whitespace="preserve">This function provides generic access to the contents of arbitrary elements
in the device description file.

description doesn't contain the given @element</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">a newly allocated string or %NULL if the device</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <parameter name="element" transfer-ownership="none">
            <doc xml:whitespace="preserve">Name of the description element to retrieve</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_device" c:identifier="gupnp_device_info_get_device">
        <doc xml:whitespace="preserve">Get the service 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>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A new #GUPnPDeviceInfo.</doc>
          <type name="DeviceInfo" c:type="GUPnPDeviceInfo*"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <doc xml:whitespace="preserve">The type of the device to be retrieved.</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_device_type"
              c:identifier="gupnp_device_info_get_device_type">
        <doc xml:whitespace="preserve">Get the UPnP device type.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A constant string, or %NULL.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_friendly_name"
              c:identifier="gupnp_device_info_get_friendly_name">
        <doc xml:whitespace="preserve">Get the friendly name of the device.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_icon_url"
              c:identifier="gupnp_device_info_get_icon_url">
        <doc xml:whitespace="preserve">Get a 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>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">a string, or %NULL.  g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <parameter name="requested_mime_type"
                     transfer-ownership="none"
                     allow-none="1">
            <doc xml:whitespace="preserve">The requested file format, or %NULL for any</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="requested_depth" transfer-ownership="none">
            <doc xml:whitespace="preserve">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:whitespace="preserve">The requested width, or -1 for any</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="requested_height" transfer-ownership="none">
            <doc xml:whitespace="preserve">The requested height, or -1 for any</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="prefer_bigger" transfer-ownership="none">
            <doc xml:whitespace="preserve">%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"
                     allow-none="1">
            <doc xml:whitespace="preserve">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"
                     allow-none="1">
            <doc xml:whitespace="preserve">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"
                     allow-none="1">
            <doc xml:whitespace="preserve">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"
                     allow-none="1">
            <doc xml:whitespace="preserve">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">
        <doc xml:whitespace="preserve">Get the location of the device description file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A constant string.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_manufacturer"
              c:identifier="gupnp_device_info_get_manufacturer">
        <doc xml:whitespace="preserve">Get the manufacturer of the device.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_manufacturer_url"
              c:identifier="gupnp_device_info_get_manufacturer_url">
        <doc xml:whitespace="preserve">Get a URL pointing to the manufacturer's website.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_model_description"
              c:identifier="gupnp_device_info_get_model_description">
        <doc xml:whitespace="preserve">Get the description of the device model.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_model_name"
              c:identifier="gupnp_device_info_get_model_name">
        <doc xml:whitespace="preserve">Get the model name of the device.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_model_number"
              c:identifier="gupnp_device_info_get_model_number">
        <doc xml:whitespace="preserve">Get the model number of the device.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_model_url"
              c:identifier="gupnp_device_info_get_model_url">
        <doc xml:whitespace="preserve">Get a URL pointing to the device model's website.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_presentation_url"
              c:identifier="gupnp_device_info_get_presentation_url">
        <doc xml:whitespace="preserve">Get a URL pointing to the device's presentation page, for web-based
administration.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_resource_factory"
              c:identifier="gupnp_device_info_get_resource_factory">
        <doc xml:whitespace="preserve">Get the #GUPnPResourceFactory used by the @device_info.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A #GUPnPResourceFactory.</doc>
          <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
        </return-value>
      </method>
      <method name="get_serial_number"
              c:identifier="gupnp_device_info_get_serial_number">
        <doc xml:whitespace="preserve">Get the serial number of the device.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_service" c:identifier="gupnp_device_info_get_service">
        <doc xml:whitespace="preserve">Get the service with type @type directly contained in @info as a new object
implementing #GUPnPServiceInfo, or %NULL if no such device was found. The
returned object should be unreffed when done.

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>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A #GUPnPServiceInfo.</doc>
          <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <doc xml:whitespace="preserve">The type of the service to be retrieved.</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_udn" c:identifier="gupnp_device_info_get_udn">
        <doc xml:whitespace="preserve">Get the Unique Device Name of the device.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A constant string.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_upc" c:identifier="gupnp_device_info_get_upc">
        <doc xml:whitespace="preserve">Get the Universal Product Code of the device.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string, or %NULL. g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_url_base"
              c:identifier="gupnp_device_info_get_url_base">
        <doc xml:whitespace="preserve">Get the URL base of this device.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A #SoupURI.</doc>
          <type name="Soup.URI" c:type="SoupURI*"/>
        </return-value>
      </method>
      <method name="list_device_types"
              c:identifier="gupnp_device_info_list_device_types">
        <doc xml:whitespace="preserve">Get a #GList of strings representing the types of the devices
directly contained in @info.

elements should be g_free()'d and the list should be g_list_free()'d.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A #GList of strings. The</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
      </method>
      <method name="list_devices"
              c:identifier="gupnp_device_info_list_devices">
        <doc xml:whitespace="preserve">Get a #GList of new objects implementing #GUPnPDeviceInfo
representing the devices directly contained in @info. The returned list
should be g_list_free()'d and the elements should be g_object_unref()'d.

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.

new #GUPnPDeviceInfo objects.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">a #GList of</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="DeviceInfo"/>
          </type>
        </return-value>
      </method>
      <method name="list_dlna_capabilities"
              c:identifier="gupnp_device_info_list_dlna_capabilities">
        <doc xml:whitespace="preserve">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.

%NULL if the device description doesn't contain the &amp;lt;dlna:X_DLNACAP&amp;gt;
element.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">a #GList of newly allocated strings or</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
      </method>
      <method name="list_service_types"
              c:identifier="gupnp_device_info_list_service_types">
        <doc xml:whitespace="preserve">Get a #GList of strings representing the types of the services
directly contained in @info.

elements should be g_free()'d and the list should be g_list_free()'d.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A #GList of strings. The</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
      </method>
      <method name="list_services"
              c:identifier="gupnp_device_info_list_services">
        <doc xml:whitespace="preserve">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.

new #GUPnPServiceInfo objects.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A #GList of</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="ServiceInfo"/>
          </type>
        </return-value>
      </method>
      <property name="context"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The #GUPnPContext to use.</doc>
        <type name="Context"/>
      </property>
      <property name="device-type"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The device type.</doc>
        <type name="utf8"/>
      </property>
      <property name="document"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">Private property.</doc>
        <type name="XMLDoc"/>
      </property>
      <property name="element"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">Private property.</doc>
        <type name="gpointer"/>
      </property>
      <property name="location"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The location of the device description file.</doc>
        <type name="utf8"/>
      </property>
      <property name="resource-factory"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">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">
        <doc xml:whitespace="preserve">The UDN of this device.</doc>
        <type name="utf8"/>
      </property>
      <property name="url-base"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The URL base (#SoupURI).</doc>
        <type name="gpointer"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="DeviceInfoPrivate" c:type="GUPnPDeviceInfoPrivate*"/>
      </field>
    </class>
    <record name="DeviceInfoClass"
            c:type="GUPnPDeviceInfoClass"
            glib:is-gtype-struct-for="DeviceInfo">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="get_element" introspectable="0">
        <callback name="get_element" introspectable="0">
          <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="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <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">
          <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">
          <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">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <record name="DeviceInfoPrivate"
            c:type="GUPnPDeviceInfoPrivate"
            disguised="1">
    </record>
    <record name="DevicePrivate" c:type="GUPnPDevicePrivate" disguised="1">
    </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:whitespace="preserve">This struct contains private data only, and should be accessed using the
functions below.</doc>
      <field name="parent">
        <type name="DeviceInfo" c:type="GUPnPDeviceInfo"/>
      </field>
      <field name="priv">
        <type name="DeviceProxyPrivate" c:type="GUPnPDeviceProxyPrivate*"/>
      </field>
    </class>
    <record name="DeviceProxyClass"
            c:type="GUPnPDeviceProxyClass"
            glib:is-gtype-struct-for="DeviceProxy">
      <field name="parent_class">
        <type name="DeviceInfoClass" c:type="GUPnPDeviceInfoClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <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">
          <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">
          <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">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <record name="DeviceProxyPrivate"
            c:type="GUPnPDeviceProxyPrivate"
            disguised="1">
    </record>
    <enumeration name="EventingError" c:type="GUPnPEventingError">
      <doc xml:whitespace="preserve">#GError codes used for errors in the #GUPNP_EVENTING_ERROR domain, during
eventing of state variables.</doc>
      <member name="subscription_failed"
              value="0"
              c:identifier="GUPNP_EVENTING_ERROR_SUBSCRIPTION_FAILED"/>
      <member name="subscription_lost"
              value="1"
              c:identifier="GUPNP_EVENTING_ERROR_SUBSCRIPTION_LOST"/>
      <member name="notify_failed"
              value="2"
              c:identifier="GUPNP_EVENTING_ERROR_NOTIFY_FAILED"/>
    </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:whitespace="preserve">This struct contains private data only, and should be accessed using the
functions below.</doc>
      <constructor name="new" c:identifier="gupnp_resource_factory_new">
        <doc xml:whitespace="preserve">Create a new #GUPnPResourceFactory object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">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:whitespace="preserve">Get the default singleton #GUPnPResourceFactory object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">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:whitespace="preserve">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>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="upnp_type" transfer-ownership="none">
            <doc xml:whitespace="preserve">The UPnP type name of the resource.</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:whitespace="preserve">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:whitespace="preserve">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.

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>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="upnp_type" transfer-ownership="none">
            <doc xml:whitespace="preserve">The UPnP type name of the resource.</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:whitespace="preserve">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:whitespace="preserve">Unregisters the GType assignment for the proxy of resource of UPnP type
@upnp_type.

otherwise.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE if GType assignment was removed successfully, %FALSE</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="upnp_type" transfer-ownership="none">
            <doc xml:whitespace="preserve">The UPnP type name of the resource.</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unregister_resource_type"
              c:identifier="gupnp_resource_factory_unregister_resource_type">
        <doc xml:whitespace="preserve">Unregisters the GType assignment for the resource of UPnP type @upnp_type.

otherwise.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE if GType assignment was removed successfully, %FALSE</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="upnp_type" transfer-ownership="none">
            <doc xml:whitespace="preserve">The UPnP type name of the resource.</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="ResourceFactoryPrivate"
              c:type="GUPnPResourceFactoryPrivate*"/>
      </field>
    </class>
    <record name="ResourceFactoryClass"
            c:type="GUPnPResourceFactoryClass"
            glib:is-gtype-struct-for="ResourceFactory">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <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">
          <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">
          <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">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <record name="ResourceFactoryPrivate"
            c:type="GUPnPResourceFactoryPrivate"
            disguised="1">
    </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:whitespace="preserve">This struct contains private data only, and should be accessed using the
functions below.</doc>
      <constructor name="new" c:identifier="gupnp_root_device_new">
        <doc xml:whitespace="preserve">Create a new #GUPnPRootDevice object, automatically loading and parsing
device description document from @description_path.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A new @GUPnPRootDevice object.</doc>
          <type name="RootDevice" c:type="GUPnPRootDevice*"/>
        </return-value>
        <parameters>
          <parameter name="context" transfer-ownership="none">
            <doc xml:whitespace="preserve">The #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </parameter>
          <parameter name="description_path" transfer-ownership="none">
            <doc xml:whitespace="preserve">Path to device description document. This could either be an absolute path or path relative to @description_dir.</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="description_dir" transfer-ownership="none">
            <doc xml:whitespace="preserve">Path to directory where description documents are provided.</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_full" c:identifier="gupnp_root_device_new_full">
        <doc xml:whitespace="preserve">Create a new #GUPnPRootDevice, automatically loading and parsing
device description document from @description_path if @description_doc is
%NULL.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A new #GUPnPRootDevice object.</doc>
          <type name="RootDevice" c:type="GUPnPRootDevice*"/>
        </return-value>
        <parameters>
          <parameter name="context" transfer-ownership="none">
            <doc xml:whitespace="preserve">A #GUPnPContext</doc>
            <type name="Context" c:type="GUPnPContext*"/>
          </parameter>
          <parameter name="factory" transfer-ownership="none">
            <doc xml:whitespace="preserve">A #GUPnPResourceFactory</doc>
            <type name="ResourceFactory" c:type="GUPnPResourceFactory*"/>
          </parameter>
          <parameter name="description_doc" transfer-ownership="none">
            <doc xml:whitespace="preserve">Device description document, or %NULL</doc>
            <type name="XMLDoc" c:type="GUPnPXMLDoc*"/>
          </parameter>
          <parameter name="description_path" transfer-ownership="none">
            <doc xml:whitespace="preserve">Path to device description document. This could either be an absolute path or path relative to @description_dir.</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="description_dir" transfer-ownership="none">
            <doc xml:whitespace="preserve">Path to directory where description documents are provided.</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_available"
              c:identifier="gupnp_root_device_get_available">
        <doc xml:whitespace="preserve">Get whether or not @root_device is available (announcing its presence).</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE if @root_device is available, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="get_description_dir"
              c:identifier="gupnp_root_device_get_description_dir">
        <doc xml:whitespace="preserve">Get the path to the directory containing description documents related to
@root_device.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The path to description document directory of @root_device.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_description_path"
              c:identifier="gupnp_root_device_get_description_path">
        <doc xml:whitespace="preserve">Get the path to the device description document of @root_device.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The path to device description document of @root_device.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_relative_location"
              c:identifier="gupnp_root_device_get_relative_location">
        <doc xml:whitespace="preserve">Get the relative location of @root_device.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The relative location of @root_device.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="set_available"
              c:identifier="gupnp_root_device_set_available">
        <doc xml:whitespace="preserve">Controls whether or not @root_device is available (announcing
its presence).</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="available" transfer-ownership="none">
            <doc xml:whitespace="preserve">%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">
        <doc xml:whitespace="preserve">TRUE if this device is available.</doc>
        <type name="gboolean"/>
      </property>
      <property name="description-dir"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The path to directory where description documents are provided.</doc>
        <type name="utf8"/>
      </property>
      <property name="description-doc"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">Device description document. Constructor property.</doc>
        <type name="XMLDoc"/>
      </property>
      <property name="description-path"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The path to device description document. This could either be an
absolute path or path relative to GUPnPRootDevice:description-dir.</doc>
        <type name="utf8"/>
      </property>
      <field name="parent">
        <type name="Device" c:type="GUPnPDevice"/>
      </field>
      <field name="priv">
        <type name="RootDevicePrivate" c:type="GUPnPRootDevicePrivate*"/>
      </field>
    </class>
    <record name="RootDeviceClass"
            c:type="GUPnPRootDeviceClass"
            glib:is-gtype-struct-for="RootDevice">
      <field name="parent_class">
        <type name="DeviceClass" c:type="GUPnPDeviceClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <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">
          <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">
          <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">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <record name="RootDevicePrivate"
            c:type="GUPnPRootDevicePrivate"
            disguised="1">
    </record>
    <enumeration name="ServerError" c:type="GUPnPServerError">
      <doc xml:whitespace="preserve">#GError codes used for errors in the #GUPNP_SERVER_ERROR domain, when there
is communication with another server.</doc>
      <member name="internal_server_error"
              value="0"
              c:identifier="GUPNP_SERVER_ERROR_INTERNAL_SERVER_ERROR"/>
      <member name="not_found"
              value="1"
              c:identifier="GUPNP_SERVER_ERROR_NOT_FOUND"/>
      <member name="not_implemented"
              value="2"
              c:identifier="GUPNP_SERVER_ERROR_NOT_IMPLEMENTED"/>
      <member name="invalid_response"
              value="3"
              c:identifier="GUPNP_SERVER_ERROR_INVALID_RESPONSE"/>
      <member name="invalid_url"
              value="4"
              c:identifier="GUPNP_SERVER_ERROR_INVALID_URL"/>
      <member name="other" value="5" c:identifier="GUPNP_SERVER_ERROR_OTHER"/>
    </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:whitespace="preserve">This struct contains private data only, and should be accessed using the
functions below.</doc>
      <virtual-method name="action_invoked">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="notify_failed" introspectable="0">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="callback_urls" transfer-ownership="none">
            <type name="GLib.List" c:type="GList*">
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
          <parameter name="reason" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="query_variable">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="variable" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="freeze_notify" c:identifier="gupnp_service_freeze_notify">
        <doc xml:whitespace="preserve">Causes new notifications to be queued up until gupnp_service_thaw_notify()
is called.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="notify"
              c:identifier="gupnp_service_notify"
              introspectable="0">
        <doc xml:whitespace="preserve">Notifies listening clients that the properties listed in @Varargs
have changed to the specified values.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="notify_valist"
              c:identifier="gupnp_service_notify_valist"
              introspectable="0">
        <doc xml:whitespace="preserve">See gupnp_service_notify(); this version takes a va_list for
use by language bindings.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="var_args" transfer-ownership="none">
            <doc xml:whitespace="preserve">A va_list of tuples of variable name, variable type, and variable value, terminated with %NULL.</doc>
            <type name="va_list" c:type="va_list"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_value" c:identifier="gupnp_service_notify_value">
        <doc xml:whitespace="preserve">Notifies listening clients that @variable has changed to @value.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="variable" transfer-ownership="none">
            <doc xml:whitespace="preserve">The name of the variable to notify</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:whitespace="preserve">The value of the variable</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="signals_autoconnect"
              c:identifier="gupnp_service_signals_autoconnect"
              throws="1">
        <doc xml:whitespace="preserve">A convenience function that attempts to connect all possible
#GUPnPService::action-invoked and #GUPnPService::query-variable signals to
appropriate callbacks for the service @service. It uses service introspection
and GModule's introspective features. It is very simillar to
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 #GUPnPService::action-invoked signals by striping the CamelCase
off the action names and either prepend "on_" or append "_cb" to them. Same
goes for #GUPnPService::query-variable signals, except that "query_" should
be prepended to the variable name. For example, callback function for
"GetSystemUpdateID" action should be either named as
"get_system_update_id_cb" or "on_get_system_update_id" and callback function
for the query of "SystemUpdateID" state variable should be named
"query_system_update_id_cb" or "on_query_system_update_id".

Note that this function will not work correctly if GModule is not supported
on the platform or introspection is not available for service @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>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="user_data" transfer-ownership="none">
            <doc xml:whitespace="preserve">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:whitespace="preserve">Sends out any pending notifications, and stops queuing of new ones.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <property name="root-device"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The containing #GUPnPRootDevice.</doc>
        <type name="RootDevice"/>
      </property>
      <field name="parent">
        <type name="ServiceInfo" c:type="GUPnPServiceInfo"/>
      </field>
      <field name="priv">
        <type name="ServicePrivate" c:type="GUPnPServicePrivate*"/>
      </field>
      <glib:signal name="action-invoked" when="last" detailed="1">
        <doc xml:whitespace="preserve">Emitted whenever an action is invoked. Handler should process
@action and must call either gupnp_service_action_return() or
gupnp_service_action_return_error().</doc>
        <return-value transfer-ownership="none">
          <type name="none"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">The invoked #GUPnPServiceAction</doc>
            <type name="ServiceAction"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="notify-failed" when="last">
        <doc xml:whitespace="preserve">Emitted whenever notification of a client fails.</doc>
        <return-value transfer-ownership="none">
          <type name="none"/>
        </return-value>
        <parameters>
          <parameter name="callback_url" transfer-ownership="none">
            <doc xml:whitespace="preserve">The callback URL</doc>
            <type name="gpointer"/>
          </parameter>
          <parameter name="reason" transfer-ownership="none">
            <doc xml:whitespace="preserve">A pointer to a #GError describing why the notify failed</doc>
            <type name="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="query-variable" when="last" detailed="1">
        <doc xml:whitespace="preserve">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"/>
        </return-value>
        <parameters>
          <parameter name="variable" transfer-ownership="none">
            <doc xml:whitespace="preserve">The variable that is being queried</doc>
            <type name="utf8"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:whitespace="preserve">The location of the #GValue of the variable</doc>
            <type name="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ServiceAction"
            c:type="GUPnPServiceAction"
            glib:type-name="GUPnPServiceAction"
            glib:get-type="gupnp_service_action_get_type"
            c:symbol-prefix="service_action">
      <doc xml:whitespace="preserve">Opaque structure for holding in-progress action data.</doc>
      <method name="get"
              c:identifier="gupnp_service_action_get"
              introspectable="0">
        <doc xml:whitespace="preserve">Retrieves the specified action arguments.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="get_argument_count"
              c:identifier="gupnp_service_action_get_argument_count">
        <doc xml:whitespace="preserve">Get the number of IN arguments from the @action and return it.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The number of IN arguments from the @action.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
      </method>
      <method name="get_gvalue"
              c:identifier="gupnp_service_action_get_gvalue"
              shadows="get_value">
        <doc xml:whitespace="preserve">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.

#g_value_unset and #g_slice_free it after usage.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">Value as #GValue associated with @action.</doc>
          <type name="GObject.Value" c:type="GValue*"/>
        </return-value>
        <parameters>
          <parameter name="argument" transfer-ownership="none">
            <doc xml:whitespace="preserve">The name of the argument to retrieve</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:whitespace="preserve">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:whitespace="preserve">Get an ordered (preferred first) #GList of locales preferred by
the client. Free list and elements after use.

locale names.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A #GList of #char*</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
      </method>
      <method name="get_message"
              c:identifier="gupnp_service_action_get_message">
        <doc xml:whitespace="preserve">Get the #SoupMessage associated with @action. Mainly intended for
applications to be able to read HTTP headers received from clients.

after using it.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">#SoupMessage associated with @action. Unref</doc>
          <type name="Soup.Message" c:type="SoupMessage*"/>
        </return-value>
      </method>
      <method name="get_name" c:identifier="gupnp_service_action_get_name">
        <doc xml:whitespace="preserve">Get the name of @action.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The name of @action</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_valist"
              c:identifier="gupnp_service_action_get_valist"
              introspectable="0">
        <doc xml:whitespace="preserve">See gupnp_service_action_get(); this version takes a va_list for
use by language bindings.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="var_args" transfer-ownership="none">
            <doc xml:whitespace="preserve">va_list of tuples of argument name, argument type, and argument value location.</doc>
            <type name="va_list" c:type="va_list"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_value"
              c:identifier="gupnp_service_action_get_value"
              shadowed-by="get_gvalue"
              introspectable="0">
        <doc xml:whitespace="preserve">Retrieves the value of @argument into @value.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="argument" transfer-ownership="none">
            <doc xml:whitespace="preserve">The name of the argument to retrieve</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:whitespace="preserve">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">
        <doc xml:whitespace="preserve">A variant of #gupnp_service_action_get that uses #GList instead of varargs.

#GValue. #g_list_free the returned list and #g_value_unset and #g_slice_free
each element.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">The values as #GList of</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="GObject.Value"/>
          </type>
        </return-value>
        <parameters>
          <parameter name="arg_names" transfer-ownership="none">
            <doc xml:whitespace="preserve">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:whitespace="preserve">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" c:identifier="gupnp_service_action_return">
        <doc xml:whitespace="preserve">Return succesfully.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="return_error"
              c:identifier="gupnp_service_action_return_error">
        <doc xml:whitespace="preserve">Return @error_code.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="error_code" transfer-ownership="none">
            <doc xml:whitespace="preserve">The error code</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="error_description" transfer-ownership="none">
            <doc xml:whitespace="preserve">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="char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set"
              c:identifier="gupnp_service_action_set"
              introspectable="0">
        <doc xml:whitespace="preserve">Sets the specified action return values.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="set_valist"
              c:identifier="gupnp_service_action_set_valist"
              introspectable="0">
        <doc xml:whitespace="preserve">See gupnp_service_action_set(); this version takes a va_list for
use by language bindings.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="var_args" transfer-ownership="none">
            <doc xml:whitespace="preserve">va_list of tuples of return value name, return value type, and actual return value.</doc>
            <type name="va_list" c:type="va_list"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_value" c:identifier="gupnp_service_action_set_value">
        <doc xml:whitespace="preserve">Sets the value of @argument to @value.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="argument" transfer-ownership="none">
            <doc xml:whitespace="preserve">The name of the return value to retrieve</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:whitespace="preserve">The #GValue to store the return value</doc>
            <type name="GObject.Value" c:type="GValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_values" c:identifier="gupnp_service_action_set_values">
        <doc xml:whitespace="preserve">Sets the specified action return values.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="arg_names" transfer-ownership="none">
            <doc xml:whitespace="preserve">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:whitespace="preserve">The #GList of values (as #GValues) 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"
                 c:type="GUPnPServiceActionArgDirection">
      <doc xml:whitespace="preserve">Represents the direction of a service state variable.</doc>
      <member name="in"
              value="0"
              c:identifier="GUPNP_SERVICE_ACTION_ARG_DIRECTION_IN"/>
      <member name="out"
              value="1"
              c:identifier="GUPNP_SERVICE_ACTION_ARG_DIRECTION_OUT"/>
    </enumeration>
    <record name="ServiceActionArgInfo" c:type="GUPnPServiceActionArgInfo">
      <doc xml:whitespace="preserve">This structure contains information about the argument of service action.</doc>
      <field name="name" writable="1">
        <type name="utf8" c:type="char*"/>
      </field>
      <field name="direction" writable="1">
        <type name="ServiceActionArgDirection"
              c:type="GUPnPServiceActionArgDirection"/>
      </field>
      <field name="related_state_variable" writable="1">
        <type name="utf8" c:type="char*"/>
      </field>
      <field name="retval" writable="1">
        <type name="gboolean" c:type="gboolean"/>
      </field>
    </record>
    <record name="ServiceActionInfo" c:type="GUPnPServiceActionInfo">
      <doc xml:whitespace="preserve">This structure contains information about a service action.</doc>
      <field name="name" writable="1">
        <type name="utf8" c:type="char*"/>
      </field>
      <field name="arguments" writable="1">
        <type name="GLib.List" c:type="GList*">
          <type name="gpointer" c:type="gpointer"/>
        </type>
      </field>
    </record>
    <record name="ServiceClass"
            c:type="GUPnPServiceClass"
            glib:is-gtype-struct-for="Service">
      <field name="parent_class">
        <type name="ServiceInfoClass" c:type="GUPnPServiceInfoClass"/>
      </field>
      <field name="action_invoked">
        <callback name="action_invoked">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="service" transfer-ownership="none">
              <type name="Service" c:type="GUPnPService*"/>
            </parameter>
            <parameter name="action" transfer-ownership="none">
              <type name="ServiceAction" c:type="GUPnPServiceAction*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="query_variable">
        <callback name="query_variable">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="service" transfer-ownership="none">
              <type name="Service" c:type="GUPnPService*"/>
            </parameter>
            <parameter name="variable" transfer-ownership="none">
              <type name="utf8" c:type="char*"/>
            </parameter>
            <parameter name="value" transfer-ownership="none">
              <type name="GObject.Value" c:type="GValue*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="notify_failed" introspectable="0">
        <callback name="notify_failed" introspectable="0">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="service" transfer-ownership="none">
              <type name="Service" c:type="GUPnPService*"/>
            </parameter>
            <parameter name="callback_urls" transfer-ownership="none">
              <type name="GLib.List" c:type="GList*">
                <type name="gpointer" c:type="gpointer"/>
              </type>
            </parameter>
            <parameter name="reason" transfer-ownership="none">
              <type name="GLib.Error" c:type="GError*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <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">
          <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">
          <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">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <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:whitespace="preserve">This struct contains private data only, and should be accessed using the
functions below.</doc>
      <method name="get_context" c:identifier="gupnp_service_info_get_context">
        <doc xml:whitespace="preserve">Get the #GUPnPContext associated with @info.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A #GUPnPContext.</doc>
          <type name="Context" c:type="GUPnPContext*"/>
        </return-value>
      </method>
      <method name="get_control_url"
              c:identifier="gupnp_service_info_get_control_url">
        <doc xml:whitespace="preserve">Get the control URL for this service, or %NULL..</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string. This string should be freed with g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_event_subscription_url"
              c:identifier="gupnp_service_info_get_event_subscription_url">
        <doc xml:whitespace="preserve">Get the event subscription URL for this service, or %NULL.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string. This string should be freed with g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_id" c:identifier="gupnp_service_info_get_id">
        <doc xml:whitespace="preserve">Get the ID of this service, or %NULL if there is no ID.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string. This string should be freed with g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_introspection"
              c:identifier="gupnp_service_info_get_introspection"
              throws="1">
        <doc xml:whitespace="preserve">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 an SCPD.

Warning: You  should use gupnp_service_info_get_introspection_async()
instead, this function re-enter the GMainloop before returning.

service or %NULL. Unref after use.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A new #GUPnPServiceIntrospection for this</doc>
          <type name="ServiceIntrospection"
                c:type="GUPnPServiceIntrospection*"/>
        </return-value>
      </method>
      <method name="get_introspection_async"
              c:identifier="gupnp_service_info_get_introspection_async">
        <doc xml:whitespace="preserve">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 an SCPD.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="async"
                     closure="1">
            <doc xml:whitespace="preserve">callback to be called when introspection object is ready.</doc>
            <type name="ServiceIntrospectionCallback"
                  c:type="GUPnPServiceIntrospectionCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <doc xml:whitespace="preserve">user_data to be passed to the callback.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_location"
              c:identifier="gupnp_service_info_get_location">
        <doc xml:whitespace="preserve">Get the location of the device description file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A constant string.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_scpd_url"
              c:identifier="gupnp_service_info_get_scpd_url">
        <doc xml:whitespace="preserve">Get the SCPD URL for this service, or %NULL if there is no SCPD.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A string. This string should be freed with g_free() after use.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_service_type"
              c:identifier="gupnp_service_info_get_service_type">
        <doc xml:whitespace="preserve">Get the UPnP service type, or %NULL.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A constant string.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_udn" c:identifier="gupnp_service_info_get_udn">
        <doc xml:whitespace="preserve">Get the Unique Device Name of the containing device.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A constant string.</doc>
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="get_url_base"
              c:identifier="gupnp_service_info_get_url_base">
        <doc xml:whitespace="preserve">Get the URL base of this service.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A constant #SoupURI.</doc>
          <type name="Soup.URI" c:type="SoupURI*"/>
        </return-value>
      </method>
      <property name="context"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The #GUPnPContext to use.</doc>
        <type name="Context"/>
      </property>
      <property name="document"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">Private property.</doc>
        <type name="XMLDoc"/>
      </property>
      <property name="element"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">Private property.</doc>
        <type name="gpointer"/>
      </property>
      <property name="location"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The location of the device description file.</doc>
        <type name="utf8"/>
      </property>
      <property name="service-type"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The service type.</doc>
        <type name="utf8"/>
      </property>
      <property name="udn"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The UDN of the containing device.</doc>
        <type name="utf8"/>
      </property>
      <property name="url-base"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The URL base (#SoupURI).</doc>
        <type name="gpointer"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="ServiceInfoPrivate" c:type="GUPnPServiceInfoPrivate*"/>
      </field>
    </class>
    <record name="ServiceInfoClass"
            c:type="GUPnPServiceInfoClass"
            glib:is-gtype-struct-for="ServiceInfo">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <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">
          <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">
          <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">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <record name="ServiceInfoPrivate"
            c:type="GUPnPServiceInfoPrivate"
            disguised="1">
    </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:whitespace="preserve">This struct contains private data only, and should be accessed using the
functions below.</doc>
      <method name="get_action"
              c:identifier="gupnp_service_introspection_get_action">
        <doc xml:whitespace="preserve">Returns the action by the name @action_name in this service.

it.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">the action or %NULL. Do not modify or free</doc>
          <type name="ServiceActionInfo" c:type="GUPnPServiceActionInfo*"/>
        </return-value>
        <parameters>
          <parameter name="action_name" transfer-ownership="none">
            <doc xml:whitespace="preserve">The name of the action to retreive</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_state_variable"
              c:identifier="gupnp_service_introspection_get_state_variable">
        <doc xml:whitespace="preserve">Returns the state variable by the name @variable_name in this service.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">the state variable or %NULL. Do not modify or free it.</doc>
          <type name="ServiceStateVariableInfo"
                c:type="GUPnPServiceStateVariableInfo*"/>
        </return-value>
        <parameters>
          <parameter name="variable_name" transfer-ownership="none">
            <doc xml:whitespace="preserve">The name of the variable to retreive</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="list_action_names"
              c:identifier="gupnp_service_introspection_list_action_names">
        <doc xml:whitespace="preserve">Returns a GList of names of all the actions in this service.

the actions or %NULL. Do not modify or free it or its contents.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A GList of names of all</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
      </method>
      <method name="list_actions"
              c:identifier="gupnp_service_introspection_list_actions"
              introspectable="0">
        <doc xml:whitespace="preserve">Returns a #GList of all the actions (of type #GUPnPServiceActionInfo) in
this service.

#GList of all the actions or %NULL. Do not modify or free it or its
contents.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="ServiceActionInfo*"/>
          </type>
        </return-value>
      </method>
      <method name="list_state_variable_names"
              c:identifier="gupnp_service_introspection_list_state_variable_names">
        <doc xml:whitespace="preserve">Returns a #GList of names of all the state variables in this service.

the state variables or %NULL. Do not modify or free it or its contents.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A #GList of names of all</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="utf8"/>
          </type>
        </return-value>
      </method>
      <method name="list_state_variables"
              c:identifier="gupnp_service_introspection_list_state_variables">
        <doc xml:whitespace="preserve">Returns a GList of all the state variables (of type
#GUPnPServiceStateVariableInfo) in this service.

A #GList of all the state variables or %NULL. Do not modify or free it or
its contents.</doc>
        <return-value transfer-ownership="none">
          <type name="GLib.List" c:type="GList*">
            <type name="ServiceStateVariableInfo"/>
          </type>
        </return-value>
      </method>
      <property name="scpd"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:whitespace="preserve">The scpd of the device description file.</doc>
        <type name="gpointer"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="ServiceIntrospectionPrivate"
              c:type="GUPnPServiceIntrospectionPrivate*"/>
      </field>
    </class>
    <callback name="ServiceIntrospectionCallback"
              c:type="GUPnPServiceIntrospectionCallback">
      <doc xml:whitespace="preserve">Callback notifying that @introspection for @info has been obtained.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="info" transfer-ownership="none">
          <doc xml:whitespace="preserve">The #GUPnPServiceInfo introspection was requested for</doc>
          <type name="ServiceInfo" c:type="GUPnPServiceInfo*"/>
        </parameter>
        <parameter name="introspection" transfer-ownership="none">
          <doc xml:whitespace="preserve">The new #GUPnPServiceIntrospection object, or NULL</doc>
          <type name="ServiceIntrospection"
                c:type="GUPnPServiceIntrospection*"/>
        </parameter>
        <parameter name="error" transfer-ownership="none">
          <doc xml:whitespace="preserve">The #GError that occurred, or NULL</doc>
          <type name="GLib.Error" c:type="GError*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="3">
          <doc xml:whitespace="preserve">User data</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="ServiceIntrospectionClass"
            c:type="GUPnPServiceIntrospectionClass"
            glib:is-gtype-struct-for="ServiceIntrospection">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <record name="ServiceIntrospectionPrivate"
            c:type="GUPnPServiceIntrospectionPrivate"
            disguised="1">
    </record>
    <record name="ServicePrivate" c:type="GUPnPServicePrivate" disguised="1">
    </record>
    <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:whitespace="preserve">This struct contains private data only, and should be accessed using the
functions below.</doc>
      <virtual-method name="subscription_lost">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="reason" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="add_notify" c:identifier="gupnp_service_proxy_add_notify">
        <doc xml:whitespace="preserve">Sets up @callback to be called whenever a change notification for
@variable is recieved.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="variable" transfer-ownership="none">
            <doc xml:whitespace="preserve">The variable to add notification for</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:whitespace="preserve">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:whitespace="preserve">The callback to call when @variable changes</doc>
            <type name="ServiceProxyNotifyCallback"
                  c:type="GUPnPServiceProxyNotifyCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <doc xml:whitespace="preserve">User data for @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="begin_action"
              c:identifier="gupnp_service_proxy_begin_action"
              introspectable="0">
        <doc xml:whitespace="preserve">Sends action @action with parameters @Varargs to the service exposed by
@proxy asynchronously, calling @callback on completion. From @callback, call
gupnp_service_proxy_end_action() to check for errors, to retrieve return
values, and to free the #GUPnPServiceProxyAction.

gupnp_service_proxy_cancel_action() or
gupnp_service_proxy_end_action_valist().</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A #GUPnPServiceProxyAction handle. This will be freed when</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">An action</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="async"
                     closure="2">
            <doc xml:whitespace="preserve">The callback to call when sending the action has succeeded or failed</doc>
            <type name="ServiceProxyActionCallback"
                  c:type="GUPnPServiceProxyActionCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <doc xml:whitespace="preserve">User data for @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="begin_action_hash"
              c:identifier="gupnp_service_proxy_begin_action_hash">
        <doc xml:whitespace="preserve">See gupnp_service_proxy_begin_action(); this version takes a #GHashTable
for runtime generated parameter lists.

be freed when calling gupnp_service_proxy_cancel_action() or
gupnp_service_proxy_end_action_hash().</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A #GUPnPServiceProxyAction handle. This will</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">An action</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="async"
                     closure="2">
            <doc xml:whitespace="preserve">The callback to call when sending the action has succeeded or failed</doc>
            <type name="ServiceProxyActionCallback"
                  c:type="GUPnPServiceProxyActionCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <doc xml:whitespace="preserve">User data for @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="hash" transfer-ownership="none">
            <doc xml:whitespace="preserve">A #GHashTable of in parameter name and #GValue pairs</doc>
            <type name="GLib.HashTable" c:type="GHashTable*">
              <type name="gpointer" c:type="gpointer"/>
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="begin_action_list"
              c:identifier="gupnp_service_proxy_begin_action_list">
        <doc xml:whitespace="preserve">A variant of #gupnp_service_proxy_begin_action that takes lists of
in-parameter names, types and values.

be freed when calling #gupnp_service_proxy_cancel_action or
#gupnp_service_proxy_end_action_list.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A #GUPnPServiceProxyAction handle. This will</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">An action</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="in_names" transfer-ownership="none">
            <doc xml:whitespace="preserve">#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:whitespace="preserve">#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>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="async"
                     closure="4">
            <doc xml:whitespace="preserve">The callback to call when sending the action has succeeded or failed</doc>
            <type name="ServiceProxyActionCallback"
                  c:type="GUPnPServiceProxyActionCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <doc xml:whitespace="preserve">User data for @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="begin_action_valist"
              c:identifier="gupnp_service_proxy_begin_action_valist"
              introspectable="0">
        <doc xml:whitespace="preserve">See gupnp_service_proxy_begin_action(); this version takes a va_list for
use by language bindings.

be freed when calling gupnp_service_proxy_cancel_action() or
gupnp_service_proxy_end_action_valist().</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">A #GUPnPServiceProxyAction handle. This will</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">An action</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="async"
                     closure="2">
            <doc xml:whitespace="preserve">The callback to call when sending the action has succeeded or failed</doc>
            <type name="ServiceProxyActionCallback"
                  c:type="GUPnPServiceProxyActionCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <doc xml:whitespace="preserve">User data for @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="var_args" transfer-ownership="none">
            <doc xml:whitespace="preserve">A va_list of tuples of in parameter name, in parameter type, and in parameter value</doc>
            <type name="va_list" c:type="va_list"/>
          </parameter>
        </parameters>
      </method>
      <method name="cancel_action"
              c:identifier="gupnp_service_proxy_cancel_action">
        <doc xml:whitespace="preserve">Cancels @action, freeing the @action handle.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">A #GUPnPServiceProxyAction handle</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </parameter>
        </parameters>
      </method>
      <method name="end_action"
              c:identifier="gupnp_service_proxy_end_action"
              introspectable="0">
        <doc xml:whitespace="preserve">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
a UPnPError the error code will be the same in @error.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">A #GUPnPServiceProxyAction handle</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:whitespace="preserve">The location where to store any error, or %NULL</doc>
            <type name="GLib.Error" c:type="GError**"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="end_action_hash"
              c:identifier="gupnp_service_proxy_end_action_hash">
        <doc xml:whitespace="preserve">See gupnp_service_proxy_end_action(); this version takes a #GHashTable for
runtime generated parameter lists.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">A #GUPnPServiceProxyAction handle</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:whitespace="preserve">The location where to store any error, or %NULL</doc>
            <type name="GLib.Error" c:type="GError**"/>
          </parameter>
          <parameter name="hash"
                     direction="inout"
                     caller-allocates="0"
                     transfer-ownership="none">
            <doc xml:whitespace="preserve">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="end_action_list"
              c:identifier="gupnp_service_proxy_end_action_list">
        <doc xml:whitespace="preserve">A variant of #gupnp_service_proxy_end_action 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_slice_free.

Return value : %TRUE on success.</doc>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">A #GUPnPServiceProxyAction handle</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:whitespace="preserve">The location where to store any error, or %NULL</doc>
            <type name="GLib.Error" c:type="GError**"/>
          </parameter>
          <parameter name="out_names" transfer-ownership="none">
            <doc xml:whitespace="preserve">#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:whitespace="preserve">#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:whitespace="preserve">#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="end_action_valist"
              c:identifier="gupnp_service_proxy_end_action_valist"
              introspectable="0">
        <doc xml:whitespace="preserve">See gupnp_service_proxy_end_action(); this version takes a va_list for
use by language bindings.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">A #GUPnPServiceProxyAction handle</doc>
            <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:whitespace="preserve">The location where to store any error, or %NULL</doc>
            <type name="GLib.Error" c:type="GError**"/>
          </parameter>
          <parameter name="var_args" transfer-ownership="none">
            <doc xml:whitespace="preserve">A va_list of tuples of out parameter name, out parameter type, and out parameter value location. The out parameter values should be freed after use</doc>
            <type name="va_list" c:type="va_list"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_subscribed"
              c:identifier="gupnp_service_proxy_get_subscribed">
        <doc xml:whitespace="preserve">Returns if we are subscribed to this service.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE if we are subscribed to this service, otherwise %FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
      </method>
      <method name="remove_notify"
              c:identifier="gupnp_service_proxy_remove_notify">
        <doc xml:whitespace="preserve">Cancels the variable change notification for @callback and @user_data.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="variable" transfer-ownership="none">
            <doc xml:whitespace="preserve">The variable to add notification for</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <doc xml:whitespace="preserve">The callback to call when @variable changes</doc>
            <type name="ServiceProxyNotifyCallback"
                  c:type="GUPnPServiceProxyNotifyCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <doc xml:whitespace="preserve">User data for @callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="send_action"
              c:identifier="gupnp_service_proxy_send_action"
              introspectable="0">
        <doc xml:whitespace="preserve">Sends action @action with parameters @Varargs to the service exposed by
@proxy synchronously. If an error occurred, @error will be set. In case of
a UPnPError the error code will be the same in @error.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE if sending the action was succesful.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">An action</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:whitespace="preserve">The location where to store any error, or %NULL</doc>
            <type name="GLib.Error" c:type="GError**"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="send_action_hash"
              c:identifier="gupnp_service_proxy_send_action_hash">
        <doc xml:whitespace="preserve">See gupnp_service_proxy_send_action(); this version takes a pair of
#GHashTable&lt;!-- --&gt;s for runtime determined parameter lists.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE if sending the action was succesful.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">An action</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:whitespace="preserve">The location where to store any error, or %NULL</doc>
            <type name="GLib.Error" c:type="GError**"/>
          </parameter>
          <parameter name="in_hash" transfer-ownership="none">
            <doc xml:whitespace="preserve">A #GHashTable of in parameter name and #GValue pairs</doc>
            <type name="GLib.HashTable" c:type="GHashTable*">
              <type name="utf8"/>
              <type name="GObject.Value"/>
            </type>
          </parameter>
          <parameter name="out_hash"
                     direction="inout"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:whitespace="preserve">A #GHashTable of out parameter name and initialized #GValue pairs</doc>
            <type name="GLib.HashTable" c:type="GHashTable*">
              <type name="utf8"/>
              <type name="GObject.Value"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="send_action_list"
              c:identifier="gupnp_service_proxy_send_action_list">
        <doc xml:whitespace="preserve">The synchronous variant of #gupnp_service_proxy_begin_action_list and
#gupnp_service_proxy_end_action_list.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE if sending the action was succesful.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">An action</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:whitespace="preserve">The location where to store any error, or %NULL</doc>
            <type name="GLib.Error" c:type="GError**"/>
          </parameter>
          <parameter name="in_names" transfer-ownership="none">
            <doc xml:whitespace="preserve">#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:whitespace="preserve">#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>
          <parameter name="out_names" transfer-ownership="none">
            <doc xml:whitespace="preserve">#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:whitespace="preserve">#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:whitespace="preserve">#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="send_action_valist"
              c:identifier="gupnp_service_proxy_send_action_valist"
              introspectable="0">
        <doc xml:whitespace="preserve">See gupnp_service_proxy_send_action(); this version takes a va_list for
use by language bindings.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%TRUE if sending the action was succesful.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="action" transfer-ownership="none">
            <doc xml:whitespace="preserve">An action</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:whitespace="preserve">The location where to store any error, or %NULL</doc>
            <type name="GLib.Error" c:type="GError**"/>
          </parameter>
          <parameter name="var_args" transfer-ownership="none">
            <doc xml:whitespace="preserve">va_list of tuples of in parameter name, in parameter type, and in parameter value, followed by %NULL, and then tuples of out parameter name, out parameter type, and out parameter value location</doc>
            <type name="va_list" c:type="va_list"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_subscribed"
              c:identifier="gupnp_service_proxy_set_subscribed">
        <doc xml:whitespace="preserve">(Un)subscribes to this service.

Note that 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.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="subscribed" transfer-ownership="none">
            <doc xml:whitespace="preserve">%TRUE to subscribe to this service</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <property name="subscribed" writable="1" transfer-ownership="none">
        <doc xml:whitespace="preserve">Whether we are subscribed to this service.</doc>
        <type name="gboolean"/>
      </property>
      <field name="parent">
        <type name="ServiceInfo" c:type="GUPnPServiceInfo"/>
      </field>
      <field name="priv">
        <type name="ServiceProxyPrivate" c:type="GUPnPServiceProxyPrivate*"/>
      </field>
      <glib:signal name="subscription-lost" when="last">
        <doc xml:whitespace="preserve">Emitted whenever the subscription to this service has been lost due
to an error condition.</doc>
        <return-value transfer-ownership="none">
          <type name="none"/>
        </return-value>
        <parameters>
          <parameter name="error" transfer-ownership="none">
            <doc xml:whitespace="preserve">A pointer to a #GError describing why the subscription has been lost</doc>
            <type name="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ServiceProxyAction"
            c:type="GUPnPServiceProxyAction"
            disguised="1">
      <doc xml:whitespace="preserve">Opaque structure for holding in-progress action data.</doc>
    </record>
    <callback name="ServiceProxyActionCallback"
              c:type="GUPnPServiceProxyActionCallback">
      <doc xml:whitespace="preserve">Callback notifying that @action on @proxy has returned and
gupnp_service_proxy_end_action() etc can be called.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="proxy" transfer-ownership="none">
          <doc xml:whitespace="preserve">The #GUPnPServiceProxy @action is called from</doc>
          <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
        </parameter>
        <parameter name="action" transfer-ownership="none">
          <doc xml:whitespace="preserve">The #GUPnPServiceProxyAction in progress</doc>
          <type name="ServiceProxyAction" c:type="GUPnPServiceProxyAction*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <doc xml:whitespace="preserve">User data</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="ServiceProxyClass"
            c:type="GUPnPServiceProxyClass"
            glib:is-gtype-struct-for="ServiceProxy">
      <field name="parent_class">
        <type name="ServiceInfoClass" c:type="GUPnPServiceInfoClass"/>
      </field>
      <field name="subscription_lost">
        <callback name="subscription_lost">
          <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="GError*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_gupnp_reserved1" introspectable="0">
        <callback name="_gupnp_reserved1">
          <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">
          <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">
          <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">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <callback name="ServiceProxyNotifyCallback"
              c:type="GUPnPServiceProxyNotifyCallback">
      <doc xml:whitespace="preserve">Callback notifying that the state variable @variable on @proxy has changed to
@value.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="proxy" transfer-ownership="none">
          <doc xml:whitespace="preserve">The #GUPnPServiceProxy the notification originates from</doc>
          <type name="ServiceProxy" c:type="GUPnPServiceProxy*"/>
        </parameter>
        <parameter name="variable" transfer-ownership="none">
          <doc xml:whitespace="preserve">The name of the variable being notified</doc>
          <type name="utf8" c:type="char*"/>
        </parameter>
        <parameter name="value" transfer-ownership="none">
          <doc xml:whitespace="preserve">The #GValue of the variable being notified</doc>
          <type name="GObject.Value" c:type="GValue*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="3">
          <doc xml:whitespace="preserve">User data</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="ServiceProxyPrivate"
            c:type="GUPnPServiceProxyPrivate"
            disguised="1">
    </record>
    <record name="ServiceStateVariableInfo"
            c:type="GUPnPServiceStateVariableInfo">
      <doc xml:whitespace="preserve">This structure contains information about service state variable.</doc>
      <field name="name" writable="1">
        <type name="utf8" c:type="char*"/>
      </field>
      <field name="send_events" writable="1">
        <type name="gboolean" c:type="gboolean"/>
      </field>
      <field name="is_numeric" writable="1">
        <type name="gboolean" c:type="gboolean"/>
      </field>
      <field name="type" writable="1">
        <type name="GType" c:type="GType"/>
      </field>
      <field name="default_value" writable="1">
        <type name="GObject.Value" c:type="GValue"/>
      </field>
      <field name="minimum" writable="1">
        <type name="GObject.Value" c:type="GValue"/>
      </field>
      <field name="maximum" writable="1">
        <type name="GObject.Value" c:type="GValue"/>
      </field>
      <field name="step" writable="1">
        <type name="GObject.Value" c:type="GValue"/>
      </field>
      <field name="allowed_values" writable="1">
        <type name="GLib.List" c:type="GList*">
          <type name="gpointer" c:type="gpointer"/>
        </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"
           parent="GObject.Object"
           glib:type-name="GUPnPXMLDoc"
           glib:get-type="gupnp_xml_doc_get_type"
           glib:type-struct="XMLDocClass">
      <constructor name="new" c:identifier="gupnp_xml_doc_new">
        <doc xml:whitespace="preserve">Create a new #GUPnPXMLDoc for @xml_doc.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">A new #GUPnPXMLDoc, or %NULL on an error</doc>
          <type name="XMLDoc" c:type="GUPnPXMLDoc*"/>
        </return-value>
        <parameters>
          <parameter name="xml_doc" transfer-ownership="none">
            <doc xml:whitespace="preserve">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"
                   throws="1">
        <doc xml:whitespace="preserve">Create a new #GUPnPXMLDoc for the XML document at @path.</doc>
        <return-value transfer-ownership="full">
          <doc xml:whitespace="preserve">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:whitespace="preserve">Path to xml document</doc>
            <type name="utf8" c:type="char*"/>
          </parameter>
        </parameters>
      </constructor>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="doc">
        <type name="libxml2.Doc" c:type="xmlDoc*"/>
      </field>
    </class>
    <record name="XMLDocClass"
            c:type="GUPnPXMLDocClass"
            glib:is-gtype-struct-for="XMLDoc">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <enumeration name="XMLError" c:type="GUPnPXMLError">
      <doc xml:whitespace="preserve">#GError codes used for errors in the #GUPNP_XML_ERROR domain, during
processing of XML data.</doc>
      <member name="parse" value="0" c:identifier="GUPNP_XML_ERROR_PARSE"/>
      <member name="no_node" value="1" c:identifier="GUPNP_XML_ERROR_NO_NODE"/>
      <member name="empty_node"
              value="2"
              c:identifier="GUPNP_XML_ERROR_EMPTY_NODE"/>
      <member name="invalid_attribute"
              value="3"
              c:identifier="GUPNP_XML_ERROR_INVALID_ATTRIBUTE"/>
      <member name="other" value="4" c:identifier="GUPNP_XML_ERROR_OTHER"/>
    </enumeration>
    <function name="control_error_quark"
              c:identifier="gupnp_control_error_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">
      <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">
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="xml_error_quark" c:identifier="gupnp_xml_error_quark">
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
  </namespace>
</repository>
