<?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="GObject" version="2.0"/>
  <include name="Gio" version="2.0"/>
  <package name="spice-client-glib-2.0"/>
  <c:include name="spice-client.h"/>
  <namespace name="SpiceClientGLib"
             version="2.0"
             shared-library="libspice-client-glib-2.0.so.1.0"
             c:identifier-prefixes="Spice"
             c:symbol-prefixes="spice">
    <class name="Audio"
           c:symbol-prefix="audio"
           c:type="SpiceAudio"
           parent="GObject.Object"
           abstract="1"
           glib:type-name="SpiceAudio"
           glib:get-type="spice_audio_get_type"
           glib:type-struct="AudioClass">
      <doc xml:space="preserve">The #SpiceAudio struct is opaque and should not be accessed directly.</doc>
      <constructor name="new"
                   c:identifier="spice_audio_new"
                   deprecated="Use spice_audio_get() instead"
                   deprecated-version="0.8">
        <doc xml:space="preserve">Once instantiated, #SpiceAudio will handle the playback and record
channels to stream to your local audio system.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #SpiceAudio instance or %NULL if no backend or failed.</doc>
          <type name="Audio" c:type="SpiceAudio*"/>
        </return-value>
        <parameters>
          <parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceSession to connect to</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </parameter>
          <parameter name="context" transfer-ownership="none">
            <doc xml:space="preserve">a #GMainContext to attach to (or %NULL for default).</doc>
            <type name="GLib.MainContext" c:type="GMainContext*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">a name for the audio channels (or %NULL for application name).</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </constructor>
      <function name="get" c:identifier="spice_audio_get">
        <doc xml:space="preserve">Gets the #SpiceAudio associated with the passed in #SpiceSession.
A new #SpiceAudio instance will be created the first time this
function is called for a certain #SpiceSession.

Note that this function returns a weak reference, which should not be used
after the #SpiceSession itself has been unref-ed by the caller.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a weak reference to a #SpiceAudio instance or %NULL if failed.</doc>
          <type name="Audio" c:type="SpiceAudio*"/>
        </return-value>
        <parameters>
          <parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceSession to connect to</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </parameter>
          <parameter name="context" transfer-ownership="none" allow-none="1">
            <doc xml:space="preserve">a #GMainContext to attach to (or %NULL for default).</doc>
            <type name="GLib.MainContext" c:type="GMainContext*"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="connect_channel">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="audio" transfer-ownership="none">
            <type name="Audio" c:type="SpiceAudio*"/>
          </instance-parameter>
          <parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <property name="main-context"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="GLib.MainContext"/>
      </property>
      <property name="session"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:space="preserve">#SpiceSession this #SpiceAudio is associated with</doc>
        <type name="Session"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="AudioPrivate" c:type="SpiceAudioPrivate*"/>
      </field>
    </class>
    <record name="AudioClass"
            c:type="SpiceAudioClass"
            glib:is-gtype-struct-for="Audio">
      <doc xml:space="preserve">Class structure for #SpiceAudio.</doc>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="connect_channel">
        <callback name="connect_channel">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="audio" transfer-ownership="none">
              <type name="Audio" c:type="SpiceAudio*"/>
            </parameter>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_spice_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gchar" fixed-size="0">
          <type name="gchar" c:type="gchar"/>
        </array>
      </field>
    </record>
    <record name="AudioPrivate" c:type="SpiceAudioPrivate" disguised="1">
    </record>
    <class name="Channel"
           c:symbol-prefix="channel"
           c:type="SpiceChannel"
           parent="GObject.Object"
           glib:type-name="SpiceChannel"
           glib:get-type="spice_channel_get_type"
           glib:type-struct="ChannelClass">
      <constructor name="new" c:identifier="spice_channel_new">
        <doc xml:space="preserve">Create a new #SpiceChannel of type @type, and channel ID @id.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a weak reference to #SpiceChannel, the session owns the reference</doc>
          <type name="Channel" c:type="SpiceChannel*"/>
        </return-value>
        <parameters>
          <parameter name="s" transfer-ownership="none">
            <doc xml:space="preserve">the @SpiceSession the channel is linked to</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve">the requested SPICECHANNELPRIVATE type</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve">the channel-id</doc>
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </constructor>
      <function name="string_to_type"
                c:identifier="spice_channel_string_to_type">
        <return-value transfer-ownership="none">
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <parameter name="str" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </function>
      <function name="type_to_string"
                c:identifier="spice_channel_type_to_string">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="channel_disconnect">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="channel_event">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="event" transfer-ownership="none">
            <type name="ChannelEvent" c:type="SpiceChannelEvent"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="channel_reset">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="migrating" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="channel_reset_capabilities">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="channel_send_migration_handshake">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="channel_up">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="handle_msg">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="msg" transfer-ownership="none">
            <type name="MsgIn" c:type="SpiceMsgIn*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="iterate_read">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="iterate_write">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="open_fd">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="with_tls" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="connect" c:identifier="spice_channel_connect">
        <doc xml:space="preserve">Connect the channel, using #SpiceSession connection informations</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="destroy" c:identifier="spice_channel_destroy">
        <doc xml:space="preserve">Disconnect and unref the @channel. Called by @spice_session_disconnect()</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="disconnect" c:identifier="spice_channel_disconnect">
        <doc xml:space="preserve">Close the socket and reset connection specific data. Finally, emit
@reason #SpiceChannel::channel-event on main context if not
#SPICE_CHANNEL_NONE.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="reason" transfer-ownership="none">
            <doc xml:space="preserve">a channel event emitted on main context (or #SPICE_CHANNEL_NONE)</doc>
            <type name="ChannelEvent" c:type="SpiceChannelEvent"/>
          </parameter>
        </parameters>
      </method>
      <method name="flush_async"
              c:identifier="spice_channel_flush_async"
              version="0.15">
        <doc xml:space="preserve">Forces an asynchronous write of all user-space buffered data for
the given channel.

When the operation is finished callback will be called. You can
then call spice_channel_flush_finish() to get the result of the
operation.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel</doc>
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     allow-none="1">
            <doc xml:space="preserve">optional GCancellable object, %NULL to ignore</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     allow-none="1"
                     scope="async"
                     closure="2">
            <doc xml:space="preserve">callback to call when the request is satisfied</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <doc xml:space="preserve">the data to pass to callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="flush_finish"
              c:identifier="spice_channel_flush_finish"
              version="0.15"
              throws="1">
        <doc xml:space="preserve">Finishes flushing a channel.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if flush operation succeeded, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel</doc>
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="open_fd" c:identifier="spice_channel_open_fd">
        <doc xml:space="preserve">Connect the channel using @fd socket.

If @fd is -1, a valid fd will be requested later via the
SpiceChannel::open-fd signal.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="fd" transfer-ownership="none">
            <doc xml:space="preserve">a file descriptor (socket) or -1. request mechanism</doc>
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_capability"
              c:identifier="spice_channel_set_capability"
              deprecated="this function has been removed"
              deprecated-version="0.13">
        <doc xml:space="preserve">Enable specific channel-kind capability.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="cap" transfer-ownership="none">
            <doc xml:space="preserve">a capability</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="test_capability"
              c:identifier="spice_channel_test_capability">
        <doc xml:space="preserve">Test availability of remote "channel kind capability".</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @cap (channel kind capability) is available.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="cap" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="test_common_capability"
              c:identifier="spice_channel_test_common_capability">
        <doc xml:space="preserve">Test availability of remote "common channel capability".</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @cap (common channel capability) is available.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="cap" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <property name="channel-id"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <property name="channel-type"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <property name="spice-session"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Session"/>
      </property>
      <property name="total-read-bytes" transfer-ownership="none">
        <type name="gulong" c:type="gulong"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="ChannelPrivate" c:type="SpiceChannelPrivate*"/>
      </field>
      <glib:signal name="channel-event" when="first">
        <doc xml:space="preserve">The #SpiceChannel::channel-event signal is emitted when the
state of the connection change.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannelEvent</doc>
            <type name="ChannelEvent"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="open-fd" when="first">
        <doc xml:space="preserve">The #SpiceChannel::open-fd signal is emitted when a new
connection is requested. This signal is emitted when the
connection is made with spice_session_open_fd().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="with_tls" transfer-ownership="none">
            <doc xml:space="preserve">wether TLS connection is requested</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ChannelClass"
            c:type="SpiceChannelClass"
            glib:is-gtype-struct-for="Channel">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="channel_event">
        <callback name="channel_event">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="event" transfer-ownership="none">
              <type name="ChannelEvent" c:type="SpiceChannelEvent"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="open_fd">
        <callback name="open_fd">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="with_tls" transfer-ownership="none">
              <type name="gint" c:type="int"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="handle_msg">
        <callback name="handle_msg">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="msg" transfer-ownership="none">
              <type name="MsgIn" c:type="SpiceMsgIn*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="channel_up">
        <callback name="channel_up">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="iterate_write">
        <callback name="iterate_write">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="iterate_read">
        <callback name="iterate_read">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="channel_disconnect">
        <callback name="channel_disconnect">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="channel_reset">
        <callback name="channel_reset">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="migrating" transfer-ownership="none">
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="channel_reset_capabilities">
        <callback name="channel_reset_capabilities">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="channel_send_migration_handshake">
        <callback name="channel_send_migration_handshake">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_spice_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gchar" fixed-size="0">
          <type name="gchar" c:type="gchar"/>
        </array>
      </field>
    </record>
    <enumeration name="ChannelEvent"
                 glib:type-name="SpiceChannelEvent"
                 glib:get-type="spice_channel_event_get_type"
                 c:type="SpiceChannelEvent">
      <doc xml:space="preserve">An event, emitted by #SpiceChannel::channel-event signal.</doc>
      <member name="none"
              value="0"
              c:identifier="SPICE_CHANNEL_NONE"
              glib:nick="none">
        <doc xml:space="preserve">no event, or ignored event</doc>
      </member>
      <member name="opened"
              value="10"
              c:identifier="SPICE_CHANNEL_OPENED"
              glib:nick="opened">
        <doc xml:space="preserve">connection is authentified and ready</doc>
      </member>
      <member name="switching"
              value="11"
              c:identifier="SPICE_CHANNEL_SWITCHING"
              glib:nick="switching">
      </member>
      <member name="closed"
              value="12"
              c:identifier="SPICE_CHANNEL_CLOSED"
              glib:nick="closed">
        <doc xml:space="preserve">connection is closed normally (sent if channel was ready)</doc>
      </member>
      <member name="error_connect"
              value="20"
              c:identifier="SPICE_CHANNEL_ERROR_CONNECT"
              glib:nick="error-connect">
        <doc xml:space="preserve">connection error</doc>
      </member>
      <member name="error_tls"
              value="21"
              c:identifier="SPICE_CHANNEL_ERROR_TLS"
              glib:nick="error-tls">
        <doc xml:space="preserve">SSL error</doc>
      </member>
      <member name="error_link"
              value="22"
              c:identifier="SPICE_CHANNEL_ERROR_LINK"
              glib:nick="error-link">
        <doc xml:space="preserve">error during link process</doc>
      </member>
      <member name="error_auth"
              value="23"
              c:identifier="SPICE_CHANNEL_ERROR_AUTH"
              glib:nick="error-auth">
        <doc xml:space="preserve">authentication error</doc>
      </member>
      <member name="error_io"
              value="24"
              c:identifier="SPICE_CHANNEL_ERROR_IO"
              glib:nick="error-io">
        <doc xml:space="preserve">IO error</doc>
      </member>
    </enumeration>
    <record name="ChannelPrivate" c:type="SpiceChannelPrivate" disguised="1">
    </record>
    <enumeration name="ClientError"
                 c:type="SpiceClientError"
                 glib:error-domain="spice-client-error-quark">
      <doc xml:space="preserve">Error codes returned by spice-client API.</doc>
      <member name="error_failed"
              value="0"
              c:identifier="SPICE_CLIENT_ERROR_FAILED">
        <doc xml:space="preserve">generic error code</doc>
      </member>
      <member name="usb_device_rejected"
              value="1"
              c:identifier="SPICE_CLIENT_USB_DEVICE_REJECTED">
      </member>
      <member name="usb_device_lost"
              value="2"
              c:identifier="SPICE_CLIENT_USB_DEVICE_LOST">
      </member>
    </enumeration>
    <class name="CursorChannel"
           c:symbol-prefix="cursor_channel"
           c:type="SpiceCursorChannel"
           parent="Channel"
           glib:type-name="SpiceCursorChannel"
           glib:get-type="spice_cursor_channel_get_type"
           glib:type-struct="CursorChannelClass">
      <doc xml:space="preserve">The #SpiceCursorChannel struct is opaque and should not be accessed directly.</doc>
      <virtual-method name="cursor_hide">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="cursor_move">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
          </instance-parameter>
          <parameter name="x" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="cursor_reset">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="cursor_set">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
          </instance-parameter>
          <parameter name="width" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="hot_x" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="hot_y" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="rgba" transfer-ownership="none">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </virtual-method>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="CursorChannelPrivate" c:type="SpiceCursorChannelPrivate*"/>
      </field>
      <glib:signal name="cursor-hide" when="first">
        <doc xml:space="preserve">The #SpiceCursorChannel::cursor-hide signal is emitted to hide
the cursor/pointer on the display area.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="cursor-move" when="first">
        <doc xml:space="preserve">The #SpiceCursorChannel::cursor-move signal is emitted to update
the cursor position on the display area.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="x" transfer-ownership="none">
            <doc xml:space="preserve">x position</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <doc xml:space="preserve">y position</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="cursor-reset" when="first">
        <doc xml:space="preserve">The #SpiceCursorChannel::cursor-reset signal is emitted to
reset the cursor to its default context.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="cursor-set" when="first">
        <doc xml:space="preserve">The #SpiceCursorChannel::cursor-set signal is emitted to modify
cursor aspect and position on the display area.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">width of the shape</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">height of the shape</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="hot_x" transfer-ownership="none">
            <doc xml:space="preserve">horizontal offset of the 'hotspot' of the cursor</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="hot_y" transfer-ownership="none">
            <doc xml:space="preserve">vertical offset of the 'hotspot' of the cursor</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="rgba" transfer-ownership="none">
            <doc xml:space="preserve">32bits shape data, or %NULL if default cursor. It might be freed after the signal is emitted, so make sure to copy it if you need it later!</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="CursorChannelClass"
            c:type="SpiceCursorChannelClass"
            glib:is-gtype-struct-for="CursorChannel">
      <doc xml:space="preserve">Class structure for #SpiceCursorChannel.</doc>
      <field name="parent_class">
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
      <field name="cursor_set">
        <callback name="cursor_set">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
            </parameter>
            <parameter name="width" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="height" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="hot_x" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="hot_y" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="rgba" transfer-ownership="none">
              <type name="gpointer" c:type="gpointer"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="cursor_move">
        <callback name="cursor_move">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
            </parameter>
            <parameter name="x" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="y" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="cursor_hide">
        <callback name="cursor_hide">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="cursor_reset">
        <callback name="cursor_reset">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="CursorChannelPrivate"
            c:type="SpiceCursorChannelPrivate"
            disguised="1">
    </record>
    <class name="DisplayChannel"
           c:symbol-prefix="display_channel"
           c:type="SpiceDisplayChannel"
           parent="Channel"
           glib:type-name="SpiceDisplayChannel"
           glib:get-type="spice_display_channel_get_type"
           glib:type-struct="DisplayChannelClass">
      <doc xml:space="preserve">The #SpiceDisplayChannel struct is opaque and should not be accessed directly.</doc>
      <property name="height" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="monitors" version="0.13" transfer-ownership="none">
        <doc xml:space="preserve">Current monitors configuration.</doc>
        <array name="GLib.Array">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </property>
      <property name="monitors-max" version="0.13" transfer-ownership="none">
        <doc xml:space="preserve">The maximum number of monitors the server or guest supports.
May change during client lifetime, for instance guest may
reboot or dynamically adjust this.</doc>
        <type name="guint" c:type="guint"/>
      </property>
      <property name="width" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="DisplayChannelPrivate"
              c:type="SpiceDisplayChannelPrivate*"/>
      </field>
      <glib:signal name="display-invalidate" when="first">
        <doc xml:space="preserve">The #SpiceDisplayChannel::display-invalidate signal is emitted
when the rectangular region x/y/w/h of the primary buffer is
updated.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="x" transfer-ownership="none">
            <doc xml:space="preserve">x position</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <doc xml:space="preserve">y position</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">width</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">height</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="display-mark" when="first">
        <doc xml:space="preserve">The #SpiceDisplayChannel::display-mark signal is emitted when
the %RED_DISPLAY_MARK command is received, and the display
should be exposed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="display-primary-create" when="first">
        <doc xml:space="preserve">The #SpiceDisplayChannel::display-primary-create signal
provides main display buffer data.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <doc xml:space="preserve">%SPICE_SURFACE_FMT_32_xRGB or %SPICE_SURFACE_FMT_16_555;</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">width resolution</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">height resolution</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="stride" transfer-ownership="none">
            <doc xml:space="preserve">the buffer stride ("width" padding)</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="shmid" transfer-ownership="none">
            <doc xml:space="preserve">identifier of the shared memory segment associated with the @imgdata, or -1 if not shm</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="imgdata" transfer-ownership="none">
            <doc xml:space="preserve">pointer to surface buffer</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="display-primary-destroy" when="first">
        <doc xml:space="preserve">The #SpiceDisplayChannel::display-primary-destroy signal is
emitted when the primary surface is freed and should not be
accessed anymore.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="DisplayChannelClass"
            c:type="SpiceDisplayChannelClass"
            glib:is-gtype-struct-for="DisplayChannel">
      <doc xml:space="preserve">Class structure for #SpiceDisplayChannel.</doc>
      <field name="parent_class">
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
      <field name="display_primary_create">
        <callback name="display_primary_create">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="format" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="width" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="height" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="stride" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="shmid" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="data" transfer-ownership="none">
              <type name="gpointer" c:type="gpointer"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="display_primary_destroy">
        <callback name="display_primary_destroy">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="display_invalidate">
        <callback name="display_invalidate">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="x" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="y" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="w" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="h" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="display_mark">
        <callback name="display_mark">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="mark" transfer-ownership="none">
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="DisplayChannelPrivate"
            c:type="SpiceDisplayChannelPrivate"
            disguised="1">
    </record>
    <record name="DisplayMonitorConfig" c:type="SpiceDisplayMonitorConfig">
      <field name="id" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="surface_id" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="x" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="y" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="width" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
      <field name="height" writable="1">
        <type name="guint" c:type="guint"/>
      </field>
    </record>
    <record name="DisplayPrimary" c:type="SpiceDisplayPrimary">
      <field name="format" writable="1">
        <type name="gpointer" c:type="SpiceSurfaceFmt"/>
      </field>
      <field name="width" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="height" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="stride" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="shmid" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="data" writable="1">
        <type name="guint8" c:type="guint8*"/>
      </field>
      <field name="marked" writable="1">
        <type name="gboolean" c:type="gboolean"/>
      </field>
    </record>
    <class name="InputsChannel"
           c:symbol-prefix="inputs_channel"
           c:type="SpiceInputsChannel"
           parent="Channel"
           glib:type-name="SpiceInputsChannel"
           glib:get-type="spice_inputs_channel_get_type"
           glib:type-struct="InputsChannelClass">
      <doc xml:space="preserve">The #SpiceInputsChannel struct is opaque and should not be accessed directly.</doc>
      <property name="key-modifiers" transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="InputsChannelPrivate" c:type="SpiceInputsChannelPrivate*"/>
      </field>
      <glib:signal name="inputs-modifiers" when="first">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="InputsChannelClass"
            c:type="SpiceInputsChannelClass"
            glib:is-gtype-struct-for="InputsChannel">
      <doc xml:space="preserve">Class structure for #SpiceInputsChannel.</doc>
      <field name="parent_class">
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
      <field name="inputs_modifiers">
        <callback name="inputs_modifiers">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="InputsChannelPrivate"
            c:type="SpiceInputsChannelPrivate"
            disguised="1">
    </record>
    <bitfield name="InputsLock"
              glib:type-name="SpiceInputsLock"
              glib:get-type="spice_inputs_lock_get_type"
              c:type="SpiceInputsLock">
      <member name="scroll_lock"
              value="1"
              c:identifier="SPICE_INPUTS_SCROLL_LOCK"
              glib:nick="scroll-lock">
      </member>
      <member name="num_lock"
              value="2"
              c:identifier="SPICE_INPUTS_NUM_LOCK"
              glib:nick="num-lock">
      </member>
      <member name="caps_lock"
              value="4"
              c:identifier="SPICE_INPUTS_CAPS_LOCK"
              glib:nick="caps-lock">
      </member>
    </bitfield>
    <class name="MainChannel"
           c:symbol-prefix="main_channel"
           c:type="SpiceMainChannel"
           parent="Channel"
           glib:type-name="SpiceMainChannel"
           glib:get-type="spice_main_channel_get_type"
           glib:type-struct="MainChannelClass">
      <doc xml:space="preserve">The #SpiceMainChannel struct is opaque and should not be accessed directly.</doc>
      <property name="agent-caps-0" transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <property name="agent-connected" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="color-depth"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="disable-animation"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="disable-display-align"
                version="0.13"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Disable automatic horizontal display position alignment.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="disable-display-position"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="disable-font-smooth"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="disable-wallpaper"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="mouse-mode" transfer-ownership="none">
        <doc xml:space="preserve">Spice protocol specifies two mouse modes, client mode and
server mode. In client mode (%SPICE_MOUSE_MODE_CLIENT), the
affective mouse is the client side mouse: the client sends
mouse position within the display and the server sends mouse
shape messages. In server mode (%SPICE_MOUSE_MODE_SERVER), the
client sends relative mouse movements and the server sends
position and shape commands.</doc>
        <type name="gint" c:type="gint"/>
      </property>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="MainChannelPrivate" c:type="SpiceMainChannelPrivate*"/>
      </field>
      <glib:signal name="main-agent-update" when="first">
        <doc xml:space="preserve">Notify when the %SpiceMainChannel:agent-connected or
%SpiceMainChannel:agent-caps-0 property change.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="main-clipboard"
                   when="last"
                   deprecated="use SpiceMainChannel::main-clipboard-selection instead."
                   deprecated-version="0.6">
        <doc xml:space="preserve">Provides guest clipboard data requested by spice_main_clipboard_request().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve">the VD_AGENT_CLIPBOARD data type</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">clipboard data</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">size of @data in bytes</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-clipboard-grab"
                   when="last"
                   deprecated="use SpiceMainChannel::main-clipboard-selection-grab instead."
                   deprecated-version="0.6">
        <doc xml:space="preserve">Inform when clipboard data is available from the guest, and for
which @types.</doc>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="types" transfer-ownership="none">
            <doc xml:space="preserve">the VD_AGENT_CLIPBOARD data types</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="ntypes" transfer-ownership="none">
            <doc xml:space="preserve">the number of @types</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-clipboard-release"
                   when="last"
                   deprecated="use SpiceMainChannel::main-clipboard-selection-release instead."
                   deprecated-version="0.6">
        <doc xml:space="preserve">Inform when the clipboard is released from the guest, when no
clipboard data is available from the guest.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="main-clipboard-request"
                   when="last"
                   deprecated="use SpiceMainChannel::main-clipboard-selection-request instead."
                   deprecated-version="0.6">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the request is successful  Request clipbard data from the client.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="types" transfer-ownership="none">
            <doc xml:space="preserve">the VD_AGENT_CLIPBOARD request type</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-clipboard-selection" when="last" version="0.6">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="p0" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="p1" transfer-ownership="none">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="p2" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-clipboard-selection-grab"
                   when="last"
                   version="0.6">
        <doc xml:space="preserve">Inform when clipboard data is available from the guest, and for
which @types.</doc>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="p0" transfer-ownership="none">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="p1" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-clipboard-selection-release"
                   when="last"
                   version="0.6">
        <doc xml:space="preserve">Inform when the clipboard is released from the guest, when no
clipboard data is available from the guest.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-clipboard-selection-request"
                   when="last"
                   version="0.6">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the request is successful  Request clipbard data from the client.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="p0" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-mouse-update" when="first">
        <doc xml:space="preserve">Notify when the mouse mode has changed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="migration-started" when="last">
        <doc xml:space="preserve">Inform when migration is starting. Application wishing to make
connections themself can set the #SpiceSession:client-sockets
to @TRUE, then follow #SpiceSession::channel-new creation, and
use spice_channel_open_fd() once the socket is created.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a migration #SpiceSession</doc>
            <type name="GObject.Object"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="MainChannelClass"
            c:type="SpiceMainChannelClass"
            glib:is-gtype-struct-for="MainChannel">
      <doc xml:space="preserve">Class structure for #SpiceMainChannel.</doc>
      <field name="parent_class">
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
      <field name="mouse_update">
        <callback name="mouse_update">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="agent_update">
        <callback name="agent_update">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="MainChannelPrivate"
            c:type="SpiceMainChannelPrivate"
            disguised="1">
    </record>
    <record name="MsgIn" c:type="SpiceMsgIn" disguised="1">
    </record>
    <record name="MsgOut" c:type="SpiceMsgOut" disguised="1">
    </record>
    <class name="PlaybackChannel"
           c:symbol-prefix="playback_channel"
           c:type="SpicePlaybackChannel"
           parent="Channel"
           glib:type-name="SpicePlaybackChannel"
           glib:get-type="spice_playback_channel_get_type"
           glib:type-struct="PlaybackChannelClass">
      <doc xml:space="preserve">The #SpicePlaybackChannel struct is opaque and should not be accessed directly.</doc>
      <virtual-method name="playback_data">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
          </instance-parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="gpointer" c:type="gpointer*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="playback_start">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
          </instance-parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="channels" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="freq" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="playback_stop">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="set_delay" c:identifier="spice_playback_channel_set_delay">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
          </instance-parameter>
          <parameter name="delay_ms" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <property name="min-latency" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="mute" writable="1" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="nchannels" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="volume" writable="1" transfer-ownership="none">
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="PlaybackChannelPrivate"
              c:type="SpicePlaybackChannelPrivate*"/>
      </field>
      <glib:signal name="playback-data" when="first">
        <doc xml:space="preserve">Provide audio data to be played.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">pointer to audio data</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="data_size" transfer-ownership="none">
            <doc xml:space="preserve">size in byte of @data</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="playback-get-delay" when="first">
        <doc xml:space="preserve">Notify when the current playback delay is requested</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="playback-start" when="first">
        <doc xml:space="preserve">Notify when the playback should start, and provide audio format
characteristics.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <doc xml:space="preserve">a #SPICE_AUDIO_FMT</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="channels" transfer-ownership="none">
            <doc xml:space="preserve">number of channels</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="rate" transfer-ownership="none">
            <doc xml:space="preserve">audio rate</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="playback-stop" when="first">
        <doc xml:space="preserve">Notify when the playback should stop.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="PlaybackChannelClass"
            c:type="SpicePlaybackChannelClass"
            glib:is-gtype-struct-for="PlaybackChannel">
      <doc xml:space="preserve">Class structure for #SpicePlaybackChannel.</doc>
      <field name="parent_class">
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
      <field name="playback_start">
        <callback name="playback_start">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
            </parameter>
            <parameter name="format" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="channels" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="freq" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="playback_data">
        <callback name="playback_data">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
            </parameter>
            <parameter name="data" transfer-ownership="none">
              <type name="gpointer" c:type="gpointer*"/>
            </parameter>
            <parameter name="size" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="playback_stop">
        <callback name="playback_stop">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="PlaybackChannelPrivate"
            c:type="SpicePlaybackChannelPrivate"
            disguised="1">
    </record>
    <class name="PortChannel"
           c:symbol-prefix="port_channel"
           c:type="SpicePortChannel"
           parent="Channel"
           glib:type-name="SpicePortChannel"
           glib:get-type="spice_port_channel_get_type"
           glib:type-struct="PortChannelClass">
      <doc xml:space="preserve">The #SpicePortChannel struct is opaque and should not be accessed directly.</doc>
      <property name="port-name" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="port-opened" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="PortChannelPrivate" c:type="SpicePortChannelPrivate*"/>
      </field>
      <glib:signal name="port-data" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="p0" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="port-event" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="PortChannelClass"
            c:type="SpicePortChannelClass"
            glib:is-gtype-struct-for="PortChannel">
      <doc xml:space="preserve">Class structure for #SpicePortChannel.</doc>
      <field name="parent_class">
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
    </record>
    <record name="PortChannelPrivate"
            c:type="SpicePortChannelPrivate"
            disguised="1">
    </record>
    <class name="RecordChannel"
           c:symbol-prefix="record_channel"
           c:type="SpiceRecordChannel"
           parent="Channel"
           glib:type-name="SpiceRecordChannel"
           glib:get-type="spice_record_channel_get_type"
           glib:type-struct="RecordChannelClass">
      <doc xml:space="preserve">The #SpiceRecordChannel struct is opaque and should not be accessed directly.</doc>
      <virtual-method name="record_data">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
          </instance-parameter>
          <parameter name="data" transfer-ownership="none">
            <type name="gpointer" c:type="gpointer*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="record_start">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
          </instance-parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="channels" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="freq" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="record_stop">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <property name="mute" writable="1" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="nchannels" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="volume" writable="1" transfer-ownership="none">
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="RecordChannelPrivate" c:type="SpiceRecordChannelPrivate*"/>
      </field>
      <glib:signal name="record-start" when="first">
        <doc xml:space="preserve">Notify when the recording should start, and provide audio format
characteristics.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <doc xml:space="preserve">a #SPICE_AUDIO_FMT</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="channels" transfer-ownership="none">
            <doc xml:space="preserve">number of channels</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="rate" transfer-ownership="none">
            <doc xml:space="preserve">audio rate</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="record-stop" when="first">
        <doc xml:space="preserve">Notify when the recording should stop.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="RecordChannelClass"
            c:type="SpiceRecordChannelClass"
            glib:is-gtype-struct-for="RecordChannel">
      <doc xml:space="preserve">Class structure for #SpiceRecordChannel.</doc>
      <field name="parent_class">
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
      <field name="record_start">
        <callback name="record_start">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
            </parameter>
            <parameter name="format" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="channels" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="freq" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="record_data">
        <callback name="record_data">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
            </parameter>
            <parameter name="data" transfer-ownership="none">
              <type name="gpointer" c:type="gpointer*"/>
            </parameter>
            <parameter name="size" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="record_stop">
        <callback name="record_stop">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="RecordChannelPrivate"
            c:type="SpiceRecordChannelPrivate"
            disguised="1">
    </record>
    <class name="Session"
           c:symbol-prefix="session"
           c:type="SpiceSession"
           parent="GObject.Object"
           glib:type-name="SpiceSession"
           glib:get-type="spice_session_get_type"
           glib:type-struct="SessionClass">
      <constructor name="new" c:identifier="spice_session_new">
        <doc xml:space="preserve">Creates a new Spice session.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #SpiceSession</doc>
          <type name="Session" c:type="SpiceSession*"/>
        </return-value>
      </constructor>
      <virtual-method name="channel_destroy">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
          <parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="channel_new">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
          <parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="connect" c:identifier="spice_session_connect">
        <doc xml:space="preserve">Open the session using the #SpiceSession:host and
#SpiceSession:port.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%FALSE if the connection failed.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="disconnect" c:identifier="spice_session_disconnect">
        <doc xml:space="preserve">Disconnect the @session, and destroy all channels.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_channels" c:identifier="spice_session_get_channels">
        <doc xml:space="preserve">Get the list of current channels associated with this @session.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">a #GList of unowned #SpiceChannel channels.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="Channel"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSession</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_read_only" c:identifier="spice_session_get_read_only">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">wether the @session is in read-only mode.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSession</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="has_channel_type"
              c:identifier="spice_session_has_channel_type">
        <doc xml:space="preserve">See if there is a @type channel in the channels associated with this
@session.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if a @type channel is available otherwise FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSession</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
          <parameter name="type" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="open_fd" c:identifier="spice_session_open_fd">
        <doc xml:space="preserve">Open the session using the provided @fd socket file
descriptor. This is useful if you create the fd yourself, for
example to setup a SSH tunnel.

If @fd is -1, a valid fd will be requested later via the
SpiceChannel::open-fd signal.</doc>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
          <parameter name="fd" transfer-ownership="none">
            <doc xml:space="preserve">a file descriptor (socket) or -1</doc>
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </method>
      <property name="ca"
                version="0.15"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">CA certificates in PEM format. The text data can contain
several CA certificates identified by:

 -----BEGIN CERTIFICATE-----
 ... (CA certificate in base64 encoding) ...
 -----END CERTIFICATE-----</doc>
        <array name="GLib.ByteArray">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </property>
      <property name="ca-file" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">File holding the CA certificates for the host the client is
connecting to</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="cache-size"
                version="0.9"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Images cache size. If 0, don't set.</doc>
        <type name="gint" c:type="gint"/>
      </property>
      <property name="cert-subject" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="ciphers" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="client-sockets" writable="1" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="color-depth"
                version="0.7"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Display color depth to set on new display channels. If 0, don't set.</doc>
        <type name="gint" c:type="gint"/>
      </property>
      <property name="disable-effects"
                version="0.7"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">A string array of effects to disable. The settings will
be applied on new display channels. The following effets can be
disabled "wallpaper", "font-smooth", "animation", and "all",
which will disable all the effects. If NULL, don't apply changes.</doc>
        <array>
          <type name="utf8"/>
        </array>
      </property>
      <property name="enable-audio"
                version="0.8"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">If set to TRUE, the audio channels will be enabled for
playback and recording.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="enable-smartcard"
                version="0.7"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">If set to TRUE, the smartcard channel will be enabled and smartcard
events will be forwarded to the guest</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="enable-usbredir"
                version="0.8"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">If set to TRUE, the usbredir channel will be enabled and USB devices
can be redirected to the guest</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="glz-window-size"
                version="0.9"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Glz window size. If 0, don't set.</doc>
        <type name="gint" c:type="gint"/>
      </property>
      <property name="host"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">URL of the SPICE host to connect to</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="inhibit-keyboard-grab"
                writable="1"
                transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="migration-state" transfer-ownership="none">
        <doc xml:space="preserve">#SpiceSessionMigration bit field indicating if a migration is in
progress</doc>
        <type name="SessionMigration"/>
      </property>
      <property name="name" version="0.11" transfer-ownership="none">
        <doc xml:space="preserve">Spice server name.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="password" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">TLS password to use</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="port" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">Port to connect to for unencrypted sessions</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="protocol"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Version of the SPICE protocol to use</doc>
        <type name="gint" c:type="gint"/>
      </property>
      <property name="proxy"
                version="0.17"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">URI to the proxy server to use when doing network connection.
of the form &lt;![CDATA[ [protocol://]&lt;host&gt;[:port] ]]&gt;</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="pubkey" writable="1" transfer-ownership="none">
        <array name="GLib.ByteArray">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </property>
      <property name="read-only"
                version="0.8"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Whether this connection is read-only mode.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="secure-channels"
                version="0.20"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">A string array of channel types to be secured.</doc>
        <array>
          <type name="utf8"/>
        </array>
      </property>
      <property name="smartcard-certificates"
                version="0.7"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">This property is used when one wants to simulate a smartcard with no
hardware smartcard reader. If it's set to a NULL-terminated string
array containing the names of 3 valid certificates, these will be
used to simulate a smartcard in the guest
See also spice_smartcard_manager_insert_card()</doc>
        <array>
          <type name="utf8"/>
        </array>
      </property>
      <property name="smartcard-db"
                version="0.7"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Path to the NSS certificate database containing the certificates to
use to simulate a software smartcard</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="tls-port" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">Port to connect to for TLS sessions</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="uri" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">URI of the SPICE host to connect to. The URI is of the form
spice://hostname?port=XXX or spice://hostname?tls_port=XXX</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="uuid" version="0.11" transfer-ownership="none">
        <doc xml:space="preserve">Spice server uuid.</doc>
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <property name="verify"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">#SpiceSessionVerify bit field indicating which parts of the peer
certificate should be checked</doc>
        <type name="SessionVerify"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="SessionPrivate" c:type="SpiceSessionPrivate*"/>
      </field>
      <glib:signal name="channel-destroy" when="first">
        <doc xml:space="preserve">The #SpiceSession::channel-destroy signal is emitted each time a #SpiceChannel is destroyed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">the destroyed #SpiceChannel</doc>
            <type name="Channel"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="channel-new" when="first">
        <doc xml:space="preserve">The #SpiceSession::channel-new signal is emitted each time a #SpiceChannel is created.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">the new #SpiceChannel</doc>
            <type name="Channel"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="mm-time-reset" when="first">
        <doc xml:space="preserve">The #SpiceSession::mm-time-reset is emitted when we identify discontinuity in mm-time

Since 0.20</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="SessionClass"
            c:type="SpiceSessionClass"
            glib:is-gtype-struct-for="Session">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="channel_new">
        <callback name="channel_new">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="session" transfer-ownership="none">
              <type name="Session" c:type="SpiceSession*"/>
            </parameter>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="channel_destroy">
        <callback name="channel_destroy">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="session" transfer-ownership="none">
              <type name="Session" c:type="SpiceSession*"/>
            </parameter>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_spice_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gchar" fixed-size="0">
          <type name="gchar" c:type="gchar"/>
        </array>
      </field>
    </record>
    <enumeration name="SessionMigration"
                 glib:type-name="SpiceSessionMigration"
                 glib:get-type="spice_session_migration_get_type"
                 c:type="SpiceSessionMigration">
      <doc xml:space="preserve">Session migration state.</doc>
      <member name="none"
              value="0"
              c:identifier="SPICE_SESSION_MIGRATION_NONE"
              glib:nick="none">
        <doc xml:space="preserve">no migration going on</doc>
      </member>
      <member name="switching"
              value="1"
              c:identifier="SPICE_SESSION_MIGRATION_SWITCHING"
              glib:nick="switching">
        <doc xml:space="preserve">the session is switching host (destroy and reconnect)</doc>
      </member>
      <member name="migrating"
              value="2"
              c:identifier="SPICE_SESSION_MIGRATION_MIGRATING"
              glib:nick="migrating">
        <doc xml:space="preserve">the session is migrating seamlessly (reconnect)</doc>
      </member>
    </enumeration>
    <record name="SessionPrivate" c:type="SpiceSessionPrivate" disguised="1">
    </record>
    <bitfield name="SessionVerify"
              glib:type-name="SpiceSessionVerify"
              glib:get-type="spice_session_verify_get_type"
              c:type="SpiceSessionVerify">
      <doc xml:space="preserve">Peer certificate verification parameters flags.</doc>
      <member name="pubkey"
              value="1"
              c:identifier="SPICE_SESSION_VERIFY_PUBKEY"
              glib:nick="pubkey">
        <doc xml:space="preserve">verify certificate public key matching</doc>
      </member>
      <member name="hostname"
              value="2"
              c:identifier="SPICE_SESSION_VERIFY_HOSTNAME"
              glib:nick="hostname">
        <doc xml:space="preserve">verify certificate hostname matching</doc>
      </member>
      <member name="subject"
              value="4"
              c:identifier="SPICE_SESSION_VERIFY_SUBJECT"
              glib:nick="subject">
        <doc xml:space="preserve">verify certificate subject matching</doc>
      </member>
    </bitfield>
    <class name="SmartcardChannel"
           c:symbol-prefix="smartcard_channel"
           c:type="SpiceSmartcardChannel"
           parent="Channel"
           glib:type-name="SpiceSmartcardChannel"
           glib:get-type="spice_smartcard_channel_get_type"
           glib:type-struct="SmartcardChannelClass">
      <doc xml:space="preserve">The #SpiceSmartcardChannel struct is opaque and should not be accessed directly.</doc>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="SmartcardChannelPrivate"
              c:type="SpiceSmartcardChannelPrivate*"/>
      </field>
    </class>
    <record name="SmartcardChannelClass"
            c:type="SpiceSmartcardChannelClass"
            glib:is-gtype-struct-for="SmartcardChannel">
      <doc xml:space="preserve">Class structure for #SpiceSmartcardChannel.</doc>
      <field name="parent_class">
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
    </record>
    <record name="SmartcardChannelPrivate"
            c:type="SpiceSmartcardChannelPrivate"
            disguised="1">
    </record>
    <class name="SmartcardManager"
           c:symbol-prefix="smartcard_manager"
           c:type="SpiceSmartcardManager"
           parent="GObject.Object"
           glib:type-name="SpiceSmartcardManager"
           glib:get-type="spice_smartcard_manager_get_type"
           glib:type-struct="SmartcardManagerClass">
      <function name="get" c:identifier="spice_smartcard_manager_get">
        <doc xml:space="preserve">#SpiceSmartcardManager is a singleton, use this function to get a pointer
to it. A new SpiceSmartcardManager instance will be created the first
time this function is called</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a weak reference to the #SpiceSmartcardManager</doc>
          <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
        </return-value>
      </function>
      <virtual-method name="card_inserted">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
          <parameter name="reader" transfer-ownership="none">
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="card_removed">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
          <parameter name="reader" transfer-ownership="none">
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="reader_added">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
          <parameter name="reader" transfer-ownership="none">
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="reader_removed">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
          <parameter name="reader" transfer-ownership="none">
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_readers"
              c:identifier="spice_smartcard_manager_get_readers"
              version="0.20">
        <doc xml:space="preserve">manager: a #SpiceSmartcardManager

Gets the list of smartcard readers that are currently available, they
can be either software (emulated) readers, or hardware ones.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated list of SpiceSmartcardReader instances, or NULL if none were found. When no longer needed, the list must be freed after unreferencing its elements with g_boxed_free()</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="SmartcardReader"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="insert_card"
              c:identifier="spice_smartcard_manager_insert_card"
              version="0.20">
        <doc xml:space="preserve">Simulates the insertion of a smartcard in the guest. Valid certificates
must have been set in #SpiceSession:smartcard-certificates for software
smartcard support to work. At the moment, only one software smartcard
reader is supported, that's why there is no parameter to indicate which
reader to insert the card in.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if smartcard insertion was successfully simulated, FALSE if this failed, or if software smartcard support isn't enabled.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSmartcardManager</doc>
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="remove_card"
              c:identifier="spice_smartcard_manager_remove_card"
              version="0.20">
        <doc xml:space="preserve">Simulates the removal of a smartcard in the guest. At the moment, only
one software smartcard reader is supported, that's why there is no
parameter to indicate which reader to insert the card in.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if smartcard removal was successfully simulated, FALSE if this failed, or if software smartcard support isn't enabled.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSmartcardManager</doc>
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="SmartcardManagerPrivate"
              c:type="SpiceSmartcardManagerPrivate*"/>
      </field>
      <glib:signal name="card-inserted" when="first">
        <doc xml:space="preserve">The #SpiceSmartcardManager::card-inserted signal is emitted whenever
a smartcard is inserted in a reader</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="vreader" transfer-ownership="none">
            <doc xml:space="preserve">#VReader boxed object corresponding to the reader a new card was inserted in</doc>
            <type name="VReader"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="card-removed" when="first">
        <doc xml:space="preserve">The #SpiceSmartcardManager::card-removed signal is emitted whenever
a smartcard was removed from a reader.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="vreader" transfer-ownership="none">
            <doc xml:space="preserve">#VReader boxed object corresponding to the reader a card was removed from</doc>
            <type name="VReader"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="reader-added" when="first">
        <doc xml:space="preserve">The #SpiceSmartcardManager::reader-added signal is emitted whenever
a new smartcard reader (software or hardware) has been plugged in.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="vreader" transfer-ownership="none">
            <doc xml:space="preserve">#VReader boxed object corresponding to the added reader</doc>
            <type name="VReader"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="reader-removed" when="first">
        <doc xml:space="preserve">The #SpiceSmartcardManager::reader-removed signal is emitted whenever
a smartcard reader (software or hardware) has been removed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="vreader" transfer-ownership="none">
            <doc xml:space="preserve">#VReader boxed object corresponding to the removed reader</doc>
            <type name="VReader"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="SmartcardManagerClass"
            c:type="SpiceSmartcardManagerClass"
            glib:is-gtype-struct-for="SmartcardManager">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="reader_added">
        <callback name="reader_added">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
            </parameter>
            <parameter name="reader" transfer-ownership="none">
              <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reader_removed">
        <callback name="reader_removed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
            </parameter>
            <parameter name="reader" transfer-ownership="none">
              <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="card_inserted">
        <callback name="card_inserted">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
            </parameter>
            <parameter name="reader" transfer-ownership="none">
              <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="card_removed">
        <callback name="card_removed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
            </parameter>
            <parameter name="reader" transfer-ownership="none">
              <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_spice_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gchar" fixed-size="0">
          <type name="gchar" c:type="gchar"/>
        </array>
      </field>
    </record>
    <record name="SmartcardManagerPrivate"
            c:type="SpiceSmartcardManagerPrivate"
            disguised="1">
    </record>
    <record name="SmartcardReader" c:type="SpiceSmartcardReader" disguised="1">
      <method name="insert_card"
              c:identifier="spice_smartcard_reader_insert_card">
        <doc xml:space="preserve">Simulates insertion of a smartcard in the software smartcard reader
@reader. If @reader is not a software smartcard reader, FALSE will be
returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if insertion of a card was successfully simulated, FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="reader" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSmartcardReader</doc>
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_software"
              c:identifier="spice_smartcard_reader_is_software">
        <doc xml:space="preserve">Tests if @reader is a software (emulated) smartcard reader.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if @reader is a software (emulated) smartcard reader, FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="reader" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSmartcardReader</doc>
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="remove_card"
              c:identifier="spice_smartcard_reader_remove_card">
        <doc xml:space="preserve">Simulates removal of a smartcard from the software smartcard reader
@reader. If @reader is not a software smartcard reader, FALSE will be
returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if removal of a card was successfully simulated, FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="reader" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSmartcardReader</doc>
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <record name="UsbDevice"
            c:type="SpiceUsbDevice"
            glib:type-name="SpiceUsbDevice"
            glib:get-type="spice_usb_device_get_type"
            c:symbol-prefix="usb_device">
      <method name="get_description"
              c:identifier="spice_usb_device_get_description">
        <doc xml:space="preserve">Get a string describing the device which is suitable as a description of
the device for the end user. The returned string should be freed with
g_free() when no longer needed.

The @format positional parameters are the following:
- '%%1$s' manufacturer
- '%%2$s' product
- '%%3$s' descriptor (a [vendor_id:product_id] string)
- '%%4$d' bus
- '%%5$d' address

(the default format string is "%%s %%s %%s at %%d-%%d")</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly-allocated string holding the description, or %NULL if failed</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceUsbDevice to get the description of</doc>
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </instance-parameter>
          <parameter name="format" transfer-ownership="none">
            <doc xml:space="preserve">an optionnal printf() format string with positional parameters</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <class name="UsbDeviceManager"
           c:symbol-prefix="usb_device_manager"
           c:type="SpiceUsbDeviceManager"
           parent="GObject.Object"
           glib:type-name="SpiceUsbDeviceManager"
           glib:get-type="spice_usb_device_manager_get_type"
           glib:type-struct="UsbDeviceManagerClass">
      <doc xml:space="preserve">The #SpiceUsbDeviceManager struct is opaque and should not be accessed directly.</doc>
      <implements name="Gio.Initable"/>
      <function name="get"
                c:identifier="spice_usb_device_manager_get"
                throws="1">
        <doc xml:space="preserve">Gets the #SpiceUsbDeviceManager associated with the passed in #SpiceSession.
A new #SpiceUsbDeviceManager instance will be created the first time this
function is called for a certain #SpiceSession.

Note that this function returns a weak reference, which should not be used
after the #SpiceSession itself has been unref-ed by the caller.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a weak reference to the #SpiceUsbDeviceManager associated with the passed in #SpiceSession</doc>
          <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
        </return-value>
        <parameters>
          <parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceSession for which to get the #SpiceUsbDeviceManager</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="auto_connect_failed">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="device_added">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="device_error">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="device_removed">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="can_redirect_device"
              c:identifier="spice_usb_device_manager_can_redirect_device"
              throws="1">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
        </parameters>
      </method>
      <method name="connect_device_async"
              c:identifier="spice_usb_device_manager_connect_device_async">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceUsbDeviceManager manager</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceUsbDevice to redirect</doc>
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     allow-none="1">
            <doc xml:space="preserve">a #GCancellable or NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     allow-none="1"
                     scope="async"
                     closure="3">
            <doc xml:space="preserve">a #GAsyncReadyCallback to call when the request is satisfied</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <doc xml:space="preserve">data to pass to callback</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="connect_device_finish"
              c:identifier="spice_usb_device_manager_connect_device_finish"
              throws="1">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="res" transfer-ownership="none">
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="disconnect_device"
              c:identifier="spice_usb_device_manager_disconnect_device">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @device has an associated USB redirection channel</doc>
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceUsbDeviceManager manager</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceUsbDevice to disconnect</doc>
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_devices"
              c:identifier="spice_usb_device_manager_get_devices">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a %GPtrArray array of %SpiceUsbDevice</doc>
          <array name="GLib.PtrArray" c:type="GPtrArray*">
            <type name="UsbDevice"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceUsbDeviceManager manager</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_devices_with_filter"
              c:identifier="spice_usb_device_manager_get_devices_with_filter"
              version="0.20">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a %GPtrArray array of %SpiceUsbDevice</doc>
          <array name="GLib.PtrArray" c:type="GPtrArray*">
            <type name="UsbDevice"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceUsbDeviceManager manager</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="filter" transfer-ownership="none">
            <doc xml:space="preserve">filter string for selecting which devices to return, see #SpiceUsbDeviceManager:auto-connect-filter for the filter string format</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_device_connected"
              c:identifier="spice_usb_device_manager_is_device_connected">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @device has an associated USB redirection channel</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceUsbDeviceManager manager</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceUsbDevice</doc>
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
        </parameters>
      </method>
      <property name="auto-connect" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">Set this to TRUE to automatically redirect newly plugged in device.

Note when #SpiceGtkSession's auto-usbredir property is TRUE, this
property is controlled by #SpiceGtkSession.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="auto-connect-filter"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Set a string specifying a filter to use to determine which USB devices
to autoconnect when plugged in, a filter consists of one or more rules.
Where each rule has the form of:

@class,@vendor,@product,@version,@allow

Use -1 for @class/@vendor/@product/@version to accept any value.

And the rules are themselves are concatonated like this:

@rule1|@rule2|@rule3

The default setting filters out HID (class 0x03) USB devices from auto
connect and auto connects anything else. Note the explicit allow rule at
the end, this is necessary since by default all devices without a
matching filter rule will not auto-connect.

Filter strings in this format can be easily created with the RHEV-M
USB filter editor tool.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="redirect-on-connect"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Set a string specifying a filter selecting USB devices to automatically
redirect after a Spice connection has been established.

See #SpiceUsbDeviceManager:auto-connect-filter for the filter string
format.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="session"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:space="preserve">#SpiceSession this #SpiceUsbDeviceManager is associated with</doc>
        <type name="Session"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="UsbDeviceManagerPrivate"
              c:type="SpiceUsbDeviceManagerPrivate*"/>
      </field>
      <glib:signal name="auto-connect-failed" when="first">
        <doc xml:space="preserve">The #SpiceUsbDeviceManager::auto-connect-failed signal is emitted
whenever the auto-connect property is true, and a newly plugged in
device could not be auto-connected.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceUsbDevice boxed object corresponding to the device which failed to auto connect</doc>
            <type name="UsbDevice"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve">#GError describing the reason why the autoconnect failed</doc>
            <type name="GLib.Error"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="device-added" when="first">
        <doc xml:space="preserve">The #SpiceUsbDeviceManager::device-added signal is emitted whenever
a new USB device has been plugged in.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceUsbDevice boxed object corresponding to the added device</doc>
            <type name="UsbDevice"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="device-error" when="first">
        <doc xml:space="preserve">The #SpiceUsbDeviceManager::device-error signal is emitted whenever an
error happens which causes a device to no longer be available to the
guest.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceUsbDevice boxed object corresponding to the device which has an error</doc>
            <type name="UsbDevice"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve">#GError describing the error</doc>
            <type name="GLib.Error"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="device-removed" when="first">
        <doc xml:space="preserve">The #SpiceUsbDeviceManager::device-removed signal is emitted whenever
an USB device has been removed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceUsbDevice boxed object corresponding to the removed device</doc>
            <type name="UsbDevice"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="UsbDeviceManagerClass"
            c:type="SpiceUsbDeviceManagerClass"
            glib:is-gtype-struct-for="UsbDeviceManager">
      <doc xml:space="preserve">Class structure for #SpiceUsbDeviceManager.</doc>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="device_added">
        <callback name="device_added">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
            </parameter>
            <parameter name="device" transfer-ownership="none">
              <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="device_removed">
        <callback name="device_removed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
            </parameter>
            <parameter name="device" transfer-ownership="none">
              <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="auto_connect_failed">
        <callback name="auto_connect_failed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
            </parameter>
            <parameter name="device" transfer-ownership="none">
              <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
            </parameter>
            <parameter name="error" transfer-ownership="none">
              <type name="GLib.Error" c:type="GError*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="device_error">
        <callback name="device_error">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
            </parameter>
            <parameter name="device" transfer-ownership="none">
              <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
            </parameter>
            <parameter name="error" transfer-ownership="none">
              <type name="GLib.Error" c:type="GError*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_spice_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gchar" fixed-size="0">
          <type name="gchar" c:type="gchar"/>
        </array>
      </field>
    </record>
    <record name="UsbDeviceManagerPrivate"
            c:type="SpiceUsbDeviceManagerPrivate"
            disguised="1">
    </record>
    <class name="UsbredirChannel"
           c:symbol-prefix="usbredir_channel"
           c:type="SpiceUsbredirChannel"
           parent="Channel"
           glib:type-name="SpiceUsbredirChannel"
           glib:get-type="spice_usbredir_channel_get_type"
           glib:type-struct="UsbredirChannelClass">
      <doc xml:space="preserve">The #SpiceUsbredirChannel struct is opaque and should not be accessed directly.</doc>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="UsbredirChannelPrivate"
              c:type="SpiceUsbredirChannelPrivate*"/>
      </field>
    </class>
    <record name="UsbredirChannelClass"
            c:type="SpiceUsbredirChannelClass"
            glib:is-gtype-struct-for="UsbredirChannel">
      <doc xml:space="preserve">Class structure for #SpiceUsbredirChannel.</doc>
      <field name="parent_class">
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
    </record>
    <record name="UsbredirChannelPrivate"
            c:type="SpiceUsbredirChannelPrivate"
            disguised="1">
    </record>
    <glib:boxed glib:name="VReader"
                c:symbol-prefix="smartcard_reader"
                glib:type-name="VReader"
                glib:get-type="spice_smartcard_reader_get_type">
    </glib:boxed>
    <function name="client_error_quark"
              c:identifier="spice_client_error_quark">
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="display_get_primary"
              c:identifier="spice_display_get_primary">
      <doc xml:space="preserve">Retrieve primary display surface @surface_id.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if the primary surface was found and its details collected in @primary.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="Channel" c:type="SpiceChannel*"/>
        </parameter>
        <parameter name="surface_id" transfer-ownership="none">
          <type name="guint32" c:type="guint32"/>
        </parameter>
        <parameter name="primary" transfer-ownership="none">
          <type name="DisplayPrimary" c:type="SpiceDisplayPrimary*"/>
        </parameter>
      </parameters>
    </function>
    <function name="g_signal_connect_object"
              c:identifier="spice_g_signal_connect_object"
              introspectable="0">
      <doc xml:space="preserve">Similar to g_signal_connect_object() but will delete connection
when any of the objects is destroyed.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">the handler id.</doc>
        <type name="gulong" c:type="gulong"/>
      </return-value>
      <parameters>
        <parameter name="instance" transfer-ownership="none">
          <doc xml:space="preserve">the instance to connect to.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="detailed_signal" transfer-ownership="none">
          <doc xml:space="preserve">a string of the form "signal-name::detail".</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="c_handler" transfer-ownership="none">
          <doc xml:space="preserve">the #GCallback to connect.</doc>
          <type name="GObject.Callback" c:type="GCallback"/>
        </parameter>
        <parameter name="gobject" transfer-ownership="none">
          <doc xml:space="preserve">the object to pass as data to @c_handler.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="connect_flags" transfer-ownership="none">
          <doc xml:space="preserve">a combination of #GConnectFlags.</doc>
          <type name="GObject.ConnectFlags" c:type="GConnectFlags"/>
        </parameter>
      </parameters>
    </function>
    <function name="get_option_group"
              c:identifier="spice_get_option_group"
              introspectable="0">
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">a #GOptionGroup for the commandline arguments specific to Spice.  You have to call spice_set_session_option() after to set the options on a #SpiceSession.</doc>
        <type name="GLib.OptionGroup" c:type="GOptionGroup*"/>
      </return-value>
    </function>
    <function name="inputs_button_press"
              c:identifier="spice_inputs_button_press">
      <doc xml:space="preserve">Press a mouse button.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="button" transfer-ownership="none">
          <doc xml:space="preserve">a SPICE_MOUSE_BUTTON</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="button_state" transfer-ownership="none">
          <doc xml:space="preserve">SPICE_MOUSE_BUTTON_MASK flags</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_button_release"
              c:identifier="spice_inputs_button_release">
      <doc xml:space="preserve">Release a button.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="button" transfer-ownership="none">
          <doc xml:space="preserve">a SPICE_MOUSE_BUTTON</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="button_state" transfer-ownership="none">
          <doc xml:space="preserve">SPICE_MOUSE_BUTTON_MASK flags</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_key_press" c:identifier="spice_inputs_key_press">
      <doc xml:space="preserve">Press a key.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="scancode" transfer-ownership="none">
          <doc xml:space="preserve">a PC AT key scancode</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_key_press_and_release"
              c:identifier="spice_inputs_key_press_and_release"
              version="0.13">
      <doc xml:space="preserve">Press and release a key event atomically (in the same message).</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="scancode" transfer-ownership="none">
          <doc xml:space="preserve">a PC AT key scancode</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_key_release"
              c:identifier="spice_inputs_key_release">
      <doc xml:space="preserve">Release a key.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="scancode" transfer-ownership="none">
          <doc xml:space="preserve">a PC AT key scancode</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_motion" c:identifier="spice_inputs_motion">
      <doc xml:space="preserve">Change mouse position (used in SPICE_MOUSE_MODE_CLIENT).</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="dx" transfer-ownership="none">
          <doc xml:space="preserve">delta X mouse coordinates</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="dy" transfer-ownership="none">
          <doc xml:space="preserve">delta Y mouse coordinates</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="button_state" transfer-ownership="none">
          <doc xml:space="preserve">SPICE_MOUSE_BUTTON_MASK flags</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_position" c:identifier="spice_inputs_position">
      <doc xml:space="preserve">Change mouse position (used in SPICE_MOUSE_MODE_CLIENT).</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="x" transfer-ownership="none">
          <doc xml:space="preserve">X mouse coordinates</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <doc xml:space="preserve">Y mouse coordinates</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="display" transfer-ownership="none">
          <doc xml:space="preserve">display channel id</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="button_state" transfer-ownership="none">
          <doc xml:space="preserve">SPICE_MOUSE_BUTTON_MASK flags</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_set_key_locks"
              c:identifier="spice_inputs_set_key_locks">
      <doc xml:space="preserve">Set the keyboard locks on the guest (Caps, Num, Scroll..)</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="locks" transfer-ownership="none">
          <doc xml:space="preserve">#SpiceInputsLock modifiers flags</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_agent_test_capability"
              c:identifier="spice_main_agent_test_capability">
      <doc xml:space="preserve">Test capability of a remote agent.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if @cap (channel kind capability) is available.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="cap" transfer-ownership="none">
          <doc xml:space="preserve">an agent capability identifier</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_grab"
              c:identifier="spice_main_clipboard_grab"
              deprecated="use spice_main_clipboard_selection_grab() instead."
              deprecated-version="0.6">
      <doc xml:space="preserve">Grab the guest clipboard, with #VD_AGENT_CLIPBOARD @types.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="types" transfer-ownership="none">
          <doc xml:space="preserve">an array of #VD_AGENT_CLIPBOARD types available in the clipboard</doc>
          <type name="guint32" c:type="guint32*"/>
        </parameter>
        <parameter name="ntypes" transfer-ownership="none">
          <doc xml:space="preserve">the number of @types</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_notify"
              c:identifier="spice_main_clipboard_notify"
              deprecated="use spice_main_clipboard_selection_notify() instead."
              deprecated-version="0.6">
      <doc xml:space="preserve">Send the clipboard data to the guest.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="type" transfer-ownership="none">
          <doc xml:space="preserve">a #VD_AGENT_CLIPBOARD type</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <doc xml:space="preserve">clipboard data</doc>
          <type name="guint8" c:type="const guchar*"/>
        </parameter>
        <parameter name="size" transfer-ownership="none">
          <doc xml:space="preserve">data length in bytes</doc>
          <type name="gulong" c:type="size_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_release"
              c:identifier="spice_main_clipboard_release"
              deprecated="use spice_main_clipboard_selection_release() instead."
              deprecated-version="0.6">
      <doc xml:space="preserve">Release the clipboard (for example, when the client looses the
clipboard grab): Inform the guest no clipboard data is available.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_request"
              c:identifier="spice_main_clipboard_request"
              deprecated="use spice_main_clipboard_selection_request() instead."
              deprecated-version="0.6">
      <doc xml:space="preserve">Request clipboard data of @type from the guest. The reply is sent
through the #SpiceMainChannel::main-clipboard signal.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="type" transfer-ownership="none">
          <doc xml:space="preserve">a #VD_AGENT_CLIPBOARD type</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_selection_grab"
              c:identifier="spice_main_clipboard_selection_grab"
              version="0.6">
      <doc xml:space="preserve">Grab the guest clipboard, with #VD_AGENT_CLIPBOARD @types.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="selection" transfer-ownership="none">
          <doc xml:space="preserve">one of the clipboard #VD_AGENT_CLIPBOARD_SELECTION_*</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="types" transfer-ownership="none">
          <doc xml:space="preserve">an array of #VD_AGENT_CLIPBOARD types available in the clipboard</doc>
          <type name="guint32" c:type="guint32*"/>
        </parameter>
        <parameter name="ntypes" transfer-ownership="none">
          <doc xml:space="preserve">the number of @types</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_selection_notify"
              c:identifier="spice_main_clipboard_selection_notify"
              version="0.6">
      <doc xml:space="preserve">Send the clipboard data to the guest.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="selection" transfer-ownership="none">
          <doc xml:space="preserve">one of the clipboard #VD_AGENT_CLIPBOARD_SELECTION_*</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="type" transfer-ownership="none">
          <doc xml:space="preserve">a #VD_AGENT_CLIPBOARD type</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <doc xml:space="preserve">clipboard data</doc>
          <type name="guint8" c:type="const guchar*"/>
        </parameter>
        <parameter name="size" transfer-ownership="none">
          <doc xml:space="preserve">data length in bytes</doc>
          <type name="gulong" c:type="size_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_selection_release"
              c:identifier="spice_main_clipboard_selection_release"
              version="0.6">
      <doc xml:space="preserve">Release the clipboard (for example, when the client looses the
clipboard grab): Inform the guest no clipboard data is available.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="selection" transfer-ownership="none">
          <doc xml:space="preserve">one of the clipboard #VD_AGENT_CLIPBOARD_SELECTION_*</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_selection_request"
              c:identifier="spice_main_clipboard_selection_request"
              version="0.6">
      <doc xml:space="preserve">Request clipboard data of @type from the guest. The reply is sent
through the #SpiceMainChannel::main-clipboard signal.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="selection" transfer-ownership="none">
          <doc xml:space="preserve">one of the clipboard #VD_AGENT_CLIPBOARD_SELECTION_*</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="type" transfer-ownership="none">
          <doc xml:space="preserve">a #VD_AGENT_CLIPBOARD type</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_file_copy_async"
              c:identifier="spice_main_file_copy_async">
      <doc xml:space="preserve">Copies the file @sources to guest

If @cancellable is not %NULL, then the operation can be cancelled by
triggering the cancellable object from another thread. If the operation
was cancelled, the error %G_IO_ERROR_CANCELLED will be returned.

If @progress_callback is not %NULL, then the operation can be monitored by
setting this to a #GFileProgressCallback function. @progress_callback_data
will be passed to this function. It is guaranteed that this callback will
be called after all data has been transferred with the total number of bytes
copied during the operation.

When the operation is finished, callback will be called. You can then call
spice_main_file_copy_finish() to get the result of the operation.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="sources" transfer-ownership="none">
          <doc xml:space="preserve">#GFile to be transfer</doc>
          <type name="Gio.File" c:type="GFile**"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <doc xml:space="preserve">set of #GFileCopyFlags</doc>
          <type name="Gio.FileCopyFlags" c:type="GFileCopyFlags"/>
        </parameter>
        <parameter name="cancellable" transfer-ownership="none" allow-none="1">
          <doc xml:space="preserve">optional #GCancellable object, %NULL to ignore</doc>
          <type name="Gio.Cancellable" c:type="GCancellable*"/>
        </parameter>
        <parameter name="progress_callback"
                   transfer-ownership="none"
                   allow-none="1"
                   scope="call"
                   closure="5">
          <doc xml:space="preserve">function to callback with progress information, or %NULL if progress information is not needed</doc>
          <type name="Gio.FileProgressCallback"
                c:type="GFileProgressCallback"/>
        </parameter>
        <parameter name="progress_callback_data" transfer-ownership="none">
          <doc xml:space="preserve">user data to pass to @progress_callback</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="callback"
                   transfer-ownership="none"
                   allow-none="1"
                   scope="async"
                   closure="7">
          <doc xml:space="preserve">a #GAsyncReadyCallback to call when the request is satisfied</doc>
          <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <doc xml:space="preserve">the data to pass to callback function</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_file_copy_finish"
              c:identifier="spice_main_file_copy_finish"
              throws="1">
      <doc xml:space="preserve">Finishes copying the file started with
spice_main_file_copy_async().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">a %TRUE on success, %FALSE on error.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="result" transfer-ownership="none">
          <doc xml:space="preserve">a #GAsyncResult.</doc>
          <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_send_monitor_config"
              c:identifier="spice_main_send_monitor_config">
      <doc xml:space="preserve">Send monitors configuration previously set with
spice_main_set_display() and spice_main_set_display_enabled()</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE on success.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_set_display" c:identifier="spice_main_set_display">
      <doc xml:space="preserve">Notify the guest of screen resolution change. The notification is
sent 1 second later, if no further changes happen.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="id" transfer-ownership="none">
          <doc xml:space="preserve">display ID</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="x" transfer-ownership="none">
          <doc xml:space="preserve">x position</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <doc xml:space="preserve">y position</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="width" transfer-ownership="none">
          <doc xml:space="preserve">display width</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="height" transfer-ownership="none">
          <doc xml:space="preserve">display height</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_set_display_enabled"
              c:identifier="spice_main_set_display_enabled"
              version="0.6">
      <doc xml:space="preserve">When sending monitor configuration to agent guest, don't set
display @id, which the agent translates to disabling the display
id. Note: this will take effect next time the monitor
configuration is sent.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="id" transfer-ownership="none">
          <doc xml:space="preserve">display ID (if -1: set all displays)</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="enabled" transfer-ownership="none">
          <doc xml:space="preserve">wether display @id is enabled</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_update_display"
              c:identifier="spice_main_update_display">
      <doc xml:space="preserve">Update the display @id resolution.

If @update is %TRUE, the remote configuration will be updated too
after 1 second without further changes. You can send when you want
without delay the new configuration to the remote with
spice_main_send_monitor_config()</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="id" transfer-ownership="none">
          <doc xml:space="preserve">display ID</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="x" transfer-ownership="none">
          <doc xml:space="preserve">x position</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <doc xml:space="preserve">y position</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="width" transfer-ownership="none">
          <doc xml:space="preserve">display width</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="height" transfer-ownership="none">
          <doc xml:space="preserve">display height</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="update" transfer-ownership="none">
          <doc xml:space="preserve">if %TRUE, update guest resolution after 1sec.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
    <callback name="msg_handler" c:type="spice_msg_handler">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="Channel" c:type="SpiceChannel*"/>
        </parameter>
        <parameter name="in" transfer-ownership="none">
          <type name="MsgIn" c:type="SpiceMsgIn*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="port_event" c:identifier="spice_port_event" version="0.15">
      <doc xml:space="preserve">Send an event to the port.

Note: The values SPICE_PORT_EVENT_CLOSED and
SPICE_PORT_EVENT_OPENED are managed by the channel connection
state.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="port" transfer-ownership="none">
          <doc xml:space="preserve">a #SpicePortChannel</doc>
          <type name="PortChannel" c:type="SpicePortChannel*"/>
        </parameter>
        <parameter name="event" transfer-ownership="none">
          <doc xml:space="preserve">a SPICE_PORT_EVENT value</doc>
          <type name="guint8" c:type="guint8"/>
        </parameter>
      </parameters>
    </function>
    <function name="port_write_async"
              c:identifier="spice_port_write_async"
              version="0.15">
      <doc xml:space="preserve">Request an asynchronous write of count bytes from @buffer into the
@port. When the operation is finished @callback will be called. You
can then call spice_port_write_finish() to get the result of
the operation.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="port" transfer-ownership="none">
          <doc xml:space="preserve">A #SpicePortChannel</doc>
          <type name="PortChannel" c:type="SpicePortChannel*"/>
        </parameter>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">the buffer containing the data to write</doc>
          <array length="2" zero-terminated="0" c:type="void*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="count" transfer-ownership="none">
          <doc xml:space="preserve">the number of bytes to write</doc>
          <type name="gsize" c:type="gsize"/>
        </parameter>
        <parameter name="cancellable" transfer-ownership="none" allow-none="1">
          <doc xml:space="preserve">optional GCancellable object, NULL to ignore</doc>
          <type name="Gio.Cancellable" c:type="GCancellable*"/>
        </parameter>
        <parameter name="callback"
                   transfer-ownership="none"
                   allow-none="1"
                   scope="async"
                   closure="5">
          <doc xml:space="preserve">callback to call when the request is satisfied</doc>
          <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <doc xml:space="preserve">the data to pass to callback function</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="port_write_finish"
              c:identifier="spice_port_write_finish"
              version="0.15"
              throws="1">
      <doc xml:space="preserve">Finishes a port write operation.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">a #gssize containing the number of bytes written to the stream.</doc>
        <type name="gssize" c:type="gssize"/>
      </return-value>
      <parameters>
        <parameter name="port" transfer-ownership="none">
          <doc xml:space="preserve">a #SpicePortChannel</doc>
          <type name="PortChannel" c:type="SpicePortChannel*"/>
        </parameter>
        <parameter name="result" transfer-ownership="none">
          <doc xml:space="preserve">a #GAsyncResult</doc>
          <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
        </parameter>
      </parameters>
    </function>
    <function name="record_send_data" c:identifier="spice_record_send_data">
      <doc xml:space="preserve">Send recorded PCM data to the guest.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <doc xml:space="preserve">PCM data</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="bytes" transfer-ownership="none">
          <doc xml:space="preserve">size of @data</doc>
          <type name="gsize" c:type="gsize"/>
        </parameter>
        <parameter name="time" transfer-ownership="none">
          <doc xml:space="preserve">stream timestamp</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_session_option"
              c:identifier="spice_set_session_option">
      <doc xml:space="preserve">Set various properties on @session, according to the commandline
arguments given to spice_get_option_group() option group.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="session" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceSession to set option upon</doc>
          <type name="Session" c:type="SpiceSession*"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_get_debug" c:identifier="spice_util_get_debug">
      <return-value transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
    </function>
    <function name="util_get_version_string"
              c:identifier="spice_util_get_version_string">
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">Spice-GTK version as a const string.</doc>
        <type name="utf8" c:type="const gchar*"/>
      </return-value>
    </function>
    <function name="util_set_debug" c:identifier="spice_util_set_debug">
      <doc xml:space="preserve">Enable or disable Spice-GTK debugging messages.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="enabled" transfer-ownership="none">
          <doc xml:space="preserve">%TRUE or %FALSE</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
  </namespace>
</repository>
