<?xml version="1.0" ?><tp:spec xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0" xmlns:xi="http://www.w3.org/2001/XInclude">

<tp:title>Gabble-specific extensions to the Telepathy interfaces</tp:title>

<tp:copyright>Copyright (C) 2007 Collabora Limited</tp:copyright>

<tp:license xmlns="http://www.w3.org/1999/xhtml">
<p>This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.</p>

<p>This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.</p>

<p>You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA</p>
</tp:license>

<tp:generic-types>
  <tp:external-type from="Telepathy specification" name="Room_Handle" type="u"/>
  <tp:external-type from="Telepathy specification" name="Handle_Type" type="u"/>
  <tp:external-type from="Telepathy specification" name="Contact_Handle" type="u"/>
  <tp:external-type from="Telepathy specification" name="DBus_Unique_Name" type="s"/>
</tp:generic-types>

<node name="/Connection_Interface_Addressing">
  <tp:copyright> Copyright (C) 2010 Collabora Limited </tp:copyright>
  <tp:license xmlns="http://www.w3.org/1999/xhtml">
    <p>This library is free software; you can redistribute it and/or modify it
      under the terms of the GNU Lesser General Public License as published by
      the Free Software Foundation; either version 2.1 of the License, or (at
      your option) any later version.</p>

    <p>This library is distributed in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
      General Public License for more details.</p>

    <p>You should have received a copy of the GNU Lesser General Public License
      along with this library; if not, write to the Free Software Foundation,
      Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
  </tp:license>
  <interface name="org.freedesktop.Telepathy.Connection.Interface.Addressing1" tp:causes-havoc="experimental">
    <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
    <tp:requires interface="org.freedesktop.Telepathy.Connection.Interface.Contacts"/>
    <tp:added version="0.19.12">(as draft)</tp:added>
    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
      <p>This interface deals with the multiple address types that can
      refer to the same contact, such as vCard fields and URIs.</p>

      <p>It can be used to retrieve contacts with a specific addresses
        through <tp:member-ref>GetContactsByVCardField</tp:member-ref> and
        <tp:member-ref>GetContactsByURI</tp:member-ref>, as well as
        defining the various addressing methods for a given contact
        through this interface's contact attributes.</p>
    </tp:docstring>

    <method name="GetContactsByVCardField" tp:name-for-bindings="Get_Contacts_By_VCard_Field">
      <arg direction="in" name="Field" type="s">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>The vCard field of the addresses we are requesting. The
            field name SHOULD be in lower case. Supported
            fields can be found in
            <tp:dbus-ref namespace="org.freedesktop.Telepathy.Protocol.Interface.Addressing">AddressableVCardFields</tp:dbus-ref>.</p>

          <p>The <code>url</code> vCard field MUST NOT appear here; see
            <tp:member-ref>GetContactsByURI</tp:member-ref> instead.</p>

          <tp:rationale>
            <p>In practice, protocols have a limited set of URI
              schemes that make sense to resolve as a contact.</p>
          </tp:rationale>

        </tp:docstring>
      </arg>
      <arg direction="in" name="Addresses" type="as">
        <tp:docstring>
          The addresses to get contact handles for. The address types
          should match the given vCard field.
        </tp:docstring>
      </arg>
      <arg direction="in" name="Interfaces" tp:type="DBus_Interface[]" type="as">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>A list of strings indicating which D-Bus interfaces the calling
            process is interested in. All supported attributes from these
            interfaces, whose values can be obtained without additional network
            activity, will be in the reply.</p>

          <p>Attributes from this interface and from
            <tp:dbus-ref>org.freedesktop.Telepathy.Connection</tp:dbus-ref>
            are always returned, and need not be requested
            explicitly.</p>

          <p>The behavior of this parameter is similar to the same
            parameter in
            <tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection.Interface">Contacts.GetContactAttributes</tp:dbus-ref>.</p>
          </tp:docstring>
      </arg>

      <arg direction="out" name="Requested" tp:type="Addressing_Normalization_Map" type="a{su}">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>A mapping from requested vCard addresses to the corresponding
            contact handles.</p>

          <p>Requested addresses that are not valid or understood for this protocol
            MUST be omitted from the mapping.</p>
        </tp:docstring>
      </arg>

      <arg direction="out" name="Attributes" tp:type="Contact_Attributes_Map" type="a{ua{sv}}">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>A dictionary mapping the contact handles to contact attributes.
            If any of the requested addresses are in fact invalid, they are
            simply omitted from this mapping. If contact attributes are not
            immediately known, the behaviour is defined by the interface;
            the attribute should either be omitted from the result or
            replaced with a default value.</p>

          <p>Requested addresses that are not valid or understood for this protocol
            MUST be omitted from the mapping.</p>

          <p>Each contact's attributes will always include at least the
            identifier that would be obtained by inspecting the handle
            (<code>org.freedesktop.Telepathy.Connection/contact-id</code>).
          </p>
        </tp:docstring>
      </arg>

      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>Request contacts and retrieve their attributes using a given field
          in their vCards.</p>

        <p>The connection manager should record that these handles are in
          use by the client who invokes this method, and must not
          deallocate the handles until the client disconnects from the
          bus or calls the
          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.ReleaseHandles</tp:dbus-ref>
          method.</p>
      </tp:docstring>

      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
      </tp:possible-errors>
    </method>

    <method name="GetContactsByURI" tp:name-for-bindings="Get_Contacts_By_URI">
      <arg direction="in" name="URIs" type="as">
        <tp:docstring>
          The URI addresses to get contact handles for. Supported
          schemes can be found in
          <tp:dbus-ref namespace="org.freedesktop.Telepathy.Protocol.Interface.Addressing">AddressableURISchemes</tp:dbus-ref>.
        </tp:docstring>
      </arg>
      <arg direction="in" name="Interfaces" tp:type="DBus_Interface[]" type="as">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>A list of strings indicating which D-Bus interfaces the calling
            process is interested in. All supported attributes from these
            interfaces, whose values can be obtained without additional network
            activity, will be in the reply.</p>

          <p>Attributes from this interface and from
            <tp:dbus-ref>org.freedesktop.Telepathy.Connection</tp:dbus-ref>
            are always returned, and need not be requested
            explicitly.</p>

          <p>The behavior of this parameter is similar to the same
            parameter in
            <tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection.Interface">Contacts.GetContactAttributes</tp:dbus-ref>.</p>
          </tp:docstring>
      </arg>

      <arg direction="out" name="Requested" tp:type="Addressing_Normalization_Map" type="a{su}">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>A mapping of requested URIs to the corresponding contact handles.</p>

          <p>Requested URIs that are not valid or understood for this protocol
            MUST be omitted from the mapping.</p>
        </tp:docstring>
      </arg>

      <arg direction="out" name="Attributes" tp:type="Contact_Attributes_Map" type="a{ua{sv}}">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>A dictionary mapping the contact handles to contact attributes.
            If any of the requested addresses are in fact invalid, they are
            simply omitted from this mapping. If contact attributes are not
            immediately known, the behaviour is defined by the interface;
            the attribute should either be omitted from the result or
            replaced with a default value.</p>

          <p>Requested URIs that are not valid or understood for this protocol
            MUST be omitted from the mapping.</p>

          <p>Each contact's attributes will always include at least the
            identifier that would be obtained by inspecting the handle
            (<code>org.freedesktop.Telepathy.Connection/contact-id</code>).
          </p>
        </tp:docstring>
      </arg>

      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>Request contacts and retrieve their attributes using URI addresses.</p>

        <p>The connection manager should record that these handles are in
          use by the client who invokes this method, and must not
          deallocate the handles until the client disconnects from the
          bus or calls the
          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.ReleaseHandles</tp:dbus-ref>
          method.</p>
      </tp:docstring>

      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
      </tp:possible-errors>
    </method>

    <tp:mapping array-name="" name="VCard_Field_Address_Map">
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>A mapping of vCard fields and addresses that repreent
          the given contact.</p>
      </tp:docstring>
      <tp:member name="VCard_Field" type="s"/>
      <tp:member name="Address" type="s"/>
    </tp:mapping>

    <tp:contact-attribute name="addresses" tp:type="VCard_Field_Address_Map" type="a{ss}">
      <tp:docstring>
        The various vCard addresses that identify this contact.
      </tp:docstring>
    </tp:contact-attribute>

    <tp:contact-attribute name="uris" type="as">
      <tp:docstring>
        The various URI addresses that identify this contact.
      </tp:docstring>
    </tp:contact-attribute>

    <tp:mapping name="Addressing_Normalization_Map">
      <tp:docstring>
        A map from URIs/vCard addresses to the corresponding handle.
      </tp:docstring>
      <tp:added version="0.25.UNRELEASED"/>

      <tp:member name="Requested_String" type="s">
        <tp:docstring>
        The URI or vCard address that has been requested by
        <tp:member-ref>GetContactsByVCardField</tp:member-ref> or
        <tp:member-ref>GetContactsByURI</tp:member-ref>.
        </tp:docstring>
      </tp:member>
      <tp:member name="Handle" tp:type="Contact_Handle" type="u">
        <tp:docstring>
          A nonzero handle.
        </tp:docstring>
      </tp:member>
    </tp:mapping>

  </interface>
</node>

<node name="/OLPC_Buddy_Info">
  <tp:copyright> Copyright (C) 2007 Collabora Limited </tp:copyright>
  <tp:license xmlns="http://www.w3.org/1999/xhtml">
    <p>This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.</p>

<p>This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.</p>

<p>You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA</p>
  </tp:license>
  <interface name="org.laptop.Telepathy.BuddyInfo">
    <tp:requires interface="org.freedesktop.Telepathy.Connection"/>

    <method name="SetProperties" tp:name-for-bindings="Set_Properties">
      <arg direction="in" name="properties" type="a{sv}">
        <tp:docstring>
          A dictionary mapping information names to the desired values.
          This replaces any existing buddy properties completely: any keys
          which were previously present, but are not present in this dictionary,
          are deleted.
        </tp:docstring>
      </arg>
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>Set the information of the local user for this connection.</p>
        <p>This method may be called before Connect(), in which case the given
        properties will be advertised as soon as possible after connection
        (possibly immediately).</p>
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
      </tp:possible-errors>
    </method>

    <method name="GetProperties" tp:name-for-bindings="Get_Properties">
      <arg direction="in" name="contact" type="u">
        <tp:docstring>
          An integer handle for the contact to request his properties for
        </tp:docstring>
      </arg>
      <arg direction="out" name="properties" type="a{sv}">
        <tp:docstring>
          A dictionary mapping information names to their values
        </tp:docstring>
      </arg>
      <tp:docstring>
        Get the properties of a particular contact.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
      </tp:possible-errors>
    </method>

    <signal name="PropertiesChanged" tp:name-for-bindings="Properties_Changed">
      <arg name="contact" type="u">
        <tp:docstring>
          An integer handle representing the contact
        </tp:docstring>
      </arg>
      <arg name="properties" type="a{sv}">
        <tp:docstring>
          A dictionary mapping property names to their new values. All
          properties are included, not just those that have changed.
        </tp:docstring>
      </arg>
      <tp:docstring>
        Signal emitted when the properties of a contact from your 'subscribe'
        contact list are changed.
      </tp:docstring>
    </signal>


   <tp:struct array-name="Activity_List" name="Activity">
      <tp:docstring>A struct containing:
          <ul>
            <li>the identifier of the activity</li>
            <li>the room handle of the activity channel</li>
          </ul>
        </tp:docstring>
      <tp:member name="id" type="s"/>
      <tp:member name="room" tp:type="Room_Handle" type="u"/>
    </tp:struct>

    <method name="SetActivities" tp:name-for-bindings="Set_Activities">
      <arg direction="in" name="activities" tp:type="Activity[]" type="a(su)">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          An array of structs containing:
          <ul>
            <li>the identifier of the activity</li>
            <li>the room handle of the activity channel</li>
          </ul>
        </tp:docstring>
      </arg>
      <tp:docstring>
        Set the activities of the local user for this connection.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
      </tp:possible-errors>
    </method>

    <method name="AddActivity" tp:name-for-bindings="Add_Activity">
      <arg direction="in" name="id" type="s">
        <tp:docstring>
          An activity id
        </tp:docstring>
      </arg>
      <arg direction="in" name="handle" type="u">
        <tp:docstring>
          A room handle
        </tp:docstring>
      </arg>
      <tp:docstring>
        Advertise an activity associated to a muc room
        <tp:rationale>
          <p>Once an activity shares itself, needs to be advertised if it's not
             private. SetActivities could be used for this but it would mean that
             the activity would need to call GetActivities then add itself.</p>
        </tp:rationale>
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
      </tp:possible-errors>
    </method>

    <method name="GetActivities" tp:name-for-bindings="Get_Activities">
      <arg direction="in" name="contact" type="u">
        <tp:docstring>
          An integer handle for the contact whose activities are to be returned
        </tp:docstring>
      </arg>
      <arg direction="out" name="activities" tp:type="Activity[]" type="a(su)">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          An array of structs containing:
          <ul>
            <li>the identifier of the activity</li>
            <li>the room handle of the activity channel</li>
          </ul>
        </tp:docstring>
      </arg>
      <tp:docstring>
        Get the activities of a particular contact.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
      </tp:possible-errors>
    </method>

    <signal name="ActivitiesChanged" tp:name-for-bindings="Activities_Changed">
      <arg name="contact" type="u">
        <tp:docstring>
          An integer handle representing the contact
        </tp:docstring>
      </arg>
      <arg name="activities" tp:type="Activity[]" type="a(su)">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          An array of structs containing:
          <ul>
            <li>the identifier of the activity</li>
            <li>the handle of the activity channel</li>
          </ul>
        </tp:docstring>
      </arg>
      <tp:docstring>
        Signal emitted when the activities of a contact from your 'subscribe'
        contact list are changed.
      </tp:docstring>
    </signal>

    <method name="SetCurrentActivity" tp:name-for-bindings="Set_Current_Activity">
      <arg direction="in" name="activity" type="s">
        <tp:docstring>
          The identifier of the activity, or the empty string if there is no
          current activity
        </tp:docstring>
      </arg>
      <arg direction="in" name="channel" type="u">
        <tp:docstring>
          The room handle of the activity channel, or 0 if there is no current
          activity
        </tp:docstring>
      </arg>
      <tp:docstring>
        Set the current activity of the local user for this connection.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
      </tp:possible-errors>
    </method>

    <method name="GetCurrentActivity" tp:name-for-bindings="Get_Current_Activity">
      <arg direction="in" name="contact" type="u">
        <tp:docstring>
          An integer handle for the contact whose current activity is to be
          returned
        </tp:docstring>
      </arg>
      <arg direction="out" name="activity" type="s">
        <tp:docstring>
          The identifier of the activity, or &quot;&quot; if there is no current activity
        </tp:docstring>
      </arg>
      <arg direction="out" name="channel" type="u">
        <tp:docstring>
          The room handle of the activity, or 0 if there is no current activity
        </tp:docstring>
      </arg>
      <tp:docstring>
        Get the current activity of a particular contact.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
      </tp:possible-errors>
    </method>

    <signal name="CurrentActivityChanged" tp:name-for-bindings="Current_Activity_Changed">
      <arg name="contact" type="u">
        <tp:docstring>
          An integer handle representing the contact
        </tp:docstring>
      </arg>
      <arg name="activity" type="s">
        <tp:docstring>
          The identifier of the activity, or &quot;&quot; if there is no current activity
        </tp:docstring>
      </arg>
      <arg name="channel" type="u">
        <tp:docstring>
          The room handle of the activity channel, or 0 if there is no current
          activity
        </tp:docstring>
      </arg>
      <tp:docstring>
        Signal emitted when the current activity of a contact from your 'subscribe'
        contact list is changed.
      </tp:docstring>
    </signal>

    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
      <p>An interface on connections to associate OLPC buddy information
        with contacts, providing methods for the user to set their own
        information and retrieve information of contacts.
        The user is automatically notified when information of contacts that
        are in his 'subscribe' contact list change.</p>

      <p>The following types and names are used to request and set information
        (except for activities):</p>
      <dl>
        <dt>s:color</dt>
        <dd>The color name of the buddy. Format used is #RRGGBB,#RRGGBB
          (stroke,fill).
        </dd>

        <dt>ay:key</dt>
        <dd>The public key of the buddy.</dd>

        <dt>s:jid</dt>
        <dd>For link-local connections, the JID of the buddy's server account.</dd>
      </dl>

      <p>Activities are represented by a struct containing:</p>
      <ul>
        <li>the identifier of the activity</li>
        <li>the handle of the activity channel</li>
      </ul>
    </tp:docstring>
  </interface>
</node>
<node name="/OLPC_Activity_Properties">
  <tp:copyright> Copyright (C) 2007 Collabora Limited </tp:copyright>
  <tp:license xmlns="http://www.w3.org/1999/xhtml">
    <p>This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.</p>

<p>This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.</p>

<p>You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA</p>
  </tp:license>
  <interface name="org.laptop.Telepathy.ActivityProperties">
    <tp:requires interface="org.freedesktop.Telepathy.Connection"/>

    <method name="SetProperties" tp:name-for-bindings="Set_Properties">
      <arg direction="in" name="room" type="u">
        <tp:docstring>
          An integer handle representing the room of the activity
        </tp:docstring>
      </arg>
      <arg direction="in" name="properties" type="a{sv}">
        <tp:docstring>
          A dictionary mapping properties names to the desired values
        </tp:docstring>
      </arg>
      <tp:docstring>
        Set the properties of the activity associated to the given room for this connection.
        You have to be the owner of this activity.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
        <tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
      </tp:possible-errors>
    </method>

    <method name="GetProperties" tp:name-for-bindings="Get_Properties">
      <arg direction="in" name="room" type="u">
        <tp:docstring>
          An integer handle for the activity's room to request his properties for
        </tp:docstring>
      </arg>
      <arg direction="out" name="properties" type="a{sv}">
        <tp:docstring>
          A dictionary mapping properties names to their values
        </tp:docstring>
      </arg>
      <tp:docstring>
        Get the properties of a particular activity.
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
      </tp:possible-errors>
    </method>

    <method name="GetActivity" tp:name-for-bindings="Get_Activity">
      <arg direction="in" name="activity_id" type="s">
        <tp:docstring>
          An activity id
        </tp:docstring>
      </arg>
      <arg direction="out" name="room" type="u">
        <tp:docstring>
          A room handle
        </tp:docstring>
      </arg>
      <tp:docstring>
        Returns the handle of the room associated with this activity
        <tp:rationale>
          <p>When an activity starts up, it knows its activity_id but doesn't
             know yet if it's shared or not, much less the room.</p>
        </tp:rationale>
      </tp:docstring>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
      </tp:possible-errors>
    </method>

    <signal name="ActivityPropertiesChanged" tp:name-for-bindings="Activity_Properties_Changed">
      <arg name="room" type="u">
        <tp:docstring>
          An integer handle representing the room of the activity
        </tp:docstring>
      </arg>
      <arg name="properties" type="a{sv}">
        <tp:docstring>
          A dictionary mapping properties names to their new values
        </tp:docstring>
      </arg>
      <tp:docstring>
        Signal emitted when the properties of an activity are changed.
      </tp:docstring>
    </signal>

    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
      <p>An interface on connections to associate OLPC activity properties
    with rooms.</p>

    <p>The following types and names are used to request and set properties:</p>
      <dl>
        <dt>s:color</dt>
        <dd>The color of the activity. Format used is #RRGGBB,#RRGGBB (stroke,fill).</dd>

        <dt>s:name</dt>
        <dd>The name of the activity.</dd>

        <dt>s:type</dt>
        <dd>The type of the activity.</dd>
      </dl>

    </tp:docstring>
  </interface>
</node>

<node name="/Channel_Type_FileTransfer_Future">
  <tp:copyright>Copyright (C) 2010 Collabora Ltd.</tp:copyright>
  <tp:license xmlns="http://www.w3.org/1999/xhtml">
    <p>This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.</p>

<p>This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.</p>

<p>You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
  </tp:license>
  <interface name="org.freedesktop.Telepathy.Channel.Type.FileTransfer.FUTURE" tp:causes-havoc="a staging area for future File Transfer Channel functionality">

    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
      <p>This interface contains functionality which we intend to incorporate
        into the File Transfer Channel interface in future.
	It should be considered to be conceptually part of the core
	File Transfer Channel interface, but without API or ABI guarantees.</p>

      <tp:rationale>
        <p>If we add new functionality to the Channel interface, libraries
          that use generated code (notably telepathy-glib) will have it as
          part of their ABI forever, meaning we can't make incompatible
          changes. By using this interface as a staging area for future
          Channel functionality, we can try out new properties, signals
          and methods as application-specific extensions, then merge them
          into the core Channel interface when we have enough implementation
          experience to declare them to be stable.</p>

        <p>The name is by analogy to Python's <code>__future__</code>
          pseudo-module.</p>
      </tp:rationale>
    </tp:docstring>

    <property access="read" name="FileCollection" tp:name-for-bindings="FileCollection" type="s">
      <tp:added version="0.19.2">(in Channel.Type.FileTransfer.FUTURE
        pseudo-interface)</tp:added>
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>The FileCollection to which this channel belongs.</p>

        <p>A channel's FileCollection property can never change.</p>

        <p>At least on GTalk and apparently also on iChat the user can
	  send a set of files to a contact and that contact can then
	  pick and choose which files to actually receive.

	  The CM should emit all new FT channels belonging to one collection
	  at the same time, UIs supporting this feature can then
	  bundle all these channels together in some way and show a
	  nice UI. UIs not supporting it will treat them as seperate
	  transfers, which is not great but a reasonable fallback</p>
      </tp:docstring>
    </property>

  </interface>
</node>
<node name="/Connection_Interface_Gabble_Decloak">
  <tp:copyright>Copyright © 2010 Collabora Ltd.</tp:copyright>
  <tp:license xmlns="http://www.w3.org/1999/xhtml">
    <p>This library is free software; you can redistribute it and/or
      modify it under the terms of the GNU Lesser General Public
      License as published by the Free Software Foundation; either
      version 2.1 of the License, or (at your option) any later version.</p>

    <p>This library is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Lesser General Public License for more details.</p>

    <p>You should have received a copy of the GNU Lesser General Public
      License along with this library; if not, write to the Free Software
      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
      USA.</p>
  </tp:license>

  <interface name="org.freedesktop.Telepathy.Connection.Interface.Gabble.Decloak" tp:causes-havoc="experimental">
    <tp:added version="Gabble 0.9.4">(Gabble-specific)</tp:added>
    <tp:requires interface="org.freedesktop.Telepathy.Connection"/>

    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
      A simple D-Bus API for <a href="http://xmpp.org/extensions/xep-0276.html">XEP-0276 Temporary
        Presence Sharing</a>. See the XEP for more details.
    </tp:docstring>

    <property access="readwrite" name="DecloakAutomatically" tp:name-for-bindings="Decloak_Automatically" type="b">
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>If true, the connection manager will automatically disclose the
          local user's capabilities (and hence the fact that they are online,
          but no further presence information) on request from any remote XMPP
          user.</p>

        <tp:rationale>
          <p>This is necessary to allow incoming calls from arbitrary
            users.</p>
        </tp:rationale>

        <p>This property SHOULD also be available as a connection manager
          parameter, with the DBus_Property flag. The default SHOULD be false
          since this constitutes a deliberate presence leak.</p>
      </tp:docstring>
    </property>

    <signal name="DecloakRequested" tp:name-for-bindings="Decloak_Requested">
      <tp:docstring>
        Emitted when a remote contact asks for the local user's capabilities
        and basic presence to be disclosed.
      </tp:docstring>

      <arg name="Contact" tp:type="Contact_Handle" type="u">
        <tp:docstring>
          The contact asking for presence disclosure
        </tp:docstring>
      </arg>

      <arg name="Reason" type="s">
        <tp:docstring>
          A code indicating the reason that decloaking is requested, or the
          empty string if no reason code was given. As per the proto-XEP,
          well-known values are 'media' (remote contact wants to call local
          user), 'text' (remote contact wants to establish a text messaging
          session, perhaps end-to-end encrypted), and 'file' (remote contact
          wants to send the local user a file).
        </tp:docstring>
      </arg>

      <arg name="Decloaked" type="b">
        <tp:docstring>
          If true, the connection manager automatically disclosed the local user's
          capabilities and basic presence in response to the request, and this
          signal is merely for information. If false, presence was not
          automatically disclosed; a user interface MAY respond by calling
          <tp:member-ref>SendDirectedPresence</tp:member-ref>.
        </tp:docstring>
      </arg>
    </signal>

    <method name="SendDirectedPresence" tp:name-for-bindings="Send_Directed_Presence">
      <tp:docstring>
        Send directed presence to a contact. This MAY be called at any time,
        but will typically be used as a response to
        <tp:member-ref>DecloakRequested</tp:member-ref>
      </tp:docstring>

      <arg direction="in" name="Contact" tp:type="Contact_Handle" type="u">
        <tp:docstring>
          The contact to send directed presence to.
        </tp:docstring>
      </arg>

      <arg direction="in" name="Full" type="b">
        <tp:docstring>
          If true, full presence (status, message, avatar hash etc.) will be
          directed to the specified contact. If false, only capabilities and
          the fact that the user is online at all will be directed to the
          specified contact (the local user will appear to that contact as
          being in 'available' status).
        </tp:docstring>
      </arg>
    </method>

  </interface>
</node>
<node name="/Connection_FUTURE">
  <tp:copyright>Copyright © 2009 Collabora Limited</tp:copyright>
  <tp:copyright>Copyright © 2009 Nokia Corporation</tp:copyright>
  <tp:license xmlns="http://www.w3.org/1999/xhtml">
<p>This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.</p>

<p>This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.</p>

<p>You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
USA.</p>
  </tp:license>
  <interface name="org.freedesktop.Telepathy.Connection.FUTURE" tp:causes-havoc="experimental">
    <tp:requires interface="org.freedesktop.Telepathy.Connection"/>

    <method name="EnsureSidecar" tp:name-for-bindings="Ensure_Sidecar">
      <tp:added version="0.19.UNRELEASED"/>

      <arg direction="in" name="Main_Interface" tp:type="DBus_Interface" type="s">
        <tp:docstring>
          The &quot;primary&quot; interface implemented by an object attached
          to a connection. For example, a Gabble plugin implementing
          fine-grained control of XEP-0016 privacy lists might expose an object
          implementing <tt>com.example.PrivacyLists</tt>.
        </tp:docstring>
      </arg>

      <arg direction="out" name="Path" type="o">
        <tp:docstring>The object path of the sidecar, exported by the same bus
          name as the Connection to which it is attached.</tp:docstring>
      </arg>
      <arg direction="out" name="Properties" tp:type="Qualified_Property_Value_Map" type="a{sv}">
        <tp:docstring>Immutable properties of the sidecar.</tp:docstring>
      </arg>

      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>Request an object with a particular interface providing additional
          connection-specific functionality, together with its immutable
          properties. These will often be implemented by plug-ins to the
          connection managers; for example, support for an XMPP XEP for which
          no generic Telepathy interface exists might be implemented by a
          Gabble plugin exposing a sidecar with a particular interface.</p>

        <p>This method may be called at any point during the lifetime of a
          connection, even before its <tp:type>Connection_Status</tp:type>
          changes to Connected. It MAY take a long time to
          return—perhaps it needs to wait for a connection to be established
          and for all the services supported by the server to be discovered
          before determining whether necessary server-side support is
          available—so callers SHOULD override the default method timeout (25
          seconds) with a much higher value (perhaps even MAX_INT32, meaning
          “no timeout” in recent versions of libdbus).</p>

        <tp:rationale>
          <p>There is an implicit assumption that any connection
            manager plugin will only want to export one “primary” object per
            feature it implements, since there is a one-to-one mapping between
            interface and object. This is reasonable since Sidecars are
            (intended to be) analogous to extra interfaces on the connection,
            providing once-per-connection shared functionality; it also makes
            client code straightforward (look up the interface you care about
            in a dictionary, build a proxy object from the value). More
            “plural” plugins are likely to want to implement new types of
            <tp:dbus-ref namespace="org.freedesktop.Telepathy">Channel</tp:dbus-ref>
            instead.</p>
        </tp:rationale>
      </tp:docstring>

      <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
        <tp:docstring>
          The requested sidecar is not implemented by this connection manager,
          or a necessary server-side component does not exist. (FIXME: split
          these two errors out? Then again, once we list the guaranteed and
          possible sidecars on a Protocol object, clients can tell the
          difference themselves, because they shouldn't be calling this in the
          first case.)
        </tp:docstring>
      </tp:error>

      <tp:error name="org.freedesktop.Telepathy.Error.ServiceBusy">
        <tp:docstring>
          A server-side component needed by the requested sidecar reported it
          is currently too busy, or did not respond for some
          implementation-defined time. The caller may wish to try again later.
        </tp:docstring>
      </tp:error>

      <tp:error name="org.freedesktop.Telepathy.Error.Cancelled">
        <tp:docstring>
          The connection was disconnected while the sidecar was being set up.
        </tp:docstring>
      </tp:error>
    </method>

  </interface>
</node>

<node name="/Gabble_Plugin_Console">
  <tp:copyright>Copyright © 2011 Collabora Ltd.</tp:copyright>
  <tp:license xmlns="http://www.w3.org/1999/xhtml">
    <p>This library is free software; you can redistribute it and/or
      modify it under the terms of the GNU Lesser General Public
      License as published by the Free Software Foundation; either
      version 2.1 of the License, or (at your option) any later version.</p>

    <p>This library is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Lesser General Public License for more details.</p>

    <p>You should have received a copy of the GNU Lesser General Public
      License along with this library; if not, write to the Free Software
      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
      USA.</p>
  </tp:license>

  <interface name="org.freedesktop.Telepathy.Gabble.Plugin.Console">
    <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="true"/>
    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
      <p>A sidecar interface providing an XMPP console.</p>
    </tp:docstring>

    <method name="SendIQ" tp:name-for-bindings="Send_IQ">
      <arg direction="in" name="Type" type="s">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          The type of IQ request to send; either <code>&quot;get&quot;</code> or
          <code>&quot;set&quot;</code>.
        </tp:docstring>
      </arg>
      <arg direction="in" name="To" type="s">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          The recipient for the IQ; or the empty string to send an IQ to the
          server (with no recipient specified).
        </tp:docstring>
      </arg>
      <arg direction="in" name="Body" type="s">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          An XML fragment for the body of the IQ, which MUST have exactly one
          top-level element.
        </tp:docstring>
      </arg>
      <arg direction="out" name="Reply_Type" type="s">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          The type of IQ reply; either <code>&quot;result&quot;</code> or
          <code>&quot;error&quot;</code>.
        </tp:docstring>
      </arg>
      <arg direction="out" name="Body" type="s">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          An XML fragment for the body of the response, which MUST have between
          zero and two top-level elements (the query element, an error element,
          both, or neither).
        </tp:docstring>
      </arg>
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        Hai.
      </tp:docstring>
    </method>

    <method name="SendStanza" tp:name-for-bindings="Send_Stanza">
      <arg direction="in" name="Stanza" type="s">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          A complete stanza.
        </tp:docstring>
      </arg>

      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        Sends a stanza, yo.
      </tp:docstring>
    </method>

    <signal name="StanzaSent" tp:name-for-bindings="Stanza_Sent">
      <arg name="Stanza" type="s">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          The stanza, in glorious XML.
        </tp:docstring>
      </arg>

      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        Emitted whenever a stanza is sent and
        <tp:member-ref>SpewStanzas</tp:member-ref> is
        <code>True</code>.
      </tp:docstring>
    </signal>

    <signal name="StanzaReceived" tp:name-for-bindings="Stanza_Received">
      <arg name="Stanza" type="s">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          The stanza, in glorious XML.
        </tp:docstring>
      </arg>

      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        Emitted whenever a stanza is received and
        <tp:member-ref>SpewStanzas</tp:member-ref> is
        <code>True</code>.
      </tp:docstring>
    </signal>

    <property access="readwrite" name="SpewStanzas" tp:name-for-bindings="Spew_Stanzas" type="b">
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        If <code>True</code>, <tp:member-ref>StanzaReceived</tp:member-ref> and
        <tp:member-ref>StanzaSent</tp:member-ref> will be emitted, drowning
        your session bus in a sea of XML.
      </tp:docstring>
    </property>

  </interface>
</node>
<node name="/Gabble_Plugin_Gateways">
  <tp:copyright>Copyright © 2010 Collabora Ltd.</tp:copyright>
  <tp:license xmlns="http://www.w3.org/1999/xhtml">
    <p>This library is free software; you can redistribute it and/or
      modify it under the terms of the GNU Lesser General Public
      License as published by the Free Software Foundation; either
      version 2.1 of the License, or (at your option) any later version.</p>

    <p>This library is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Lesser General Public License for more details.</p>

    <p>You should have received a copy of the GNU Lesser General Public
      License along with this library; if not, write to the Free Software
      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
      USA.</p>
  </tp:license>

  <interface name="org.freedesktop.Telepathy.Gabble.Plugin.Gateways">
    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
      <p>A sidecar interface to register with XEP-0100 gateways.</p>
    </tp:docstring>

    <method name="Register" tp:name-for-bindings="Register">
      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
        <p>Register with a gateway, as per XEP-0100 §4.1. This method
          does not allow for all the parameters that gateways can potentially
          have, and indeed doesn't even allow the required or allowed
          parameters to be discovered, but it should work in practice for
          nearly all gateways to other IM protocols.</p>

        <tp:rationale>
          <p>Username and password are enough information to sign in to
            many IM protocols, and this method has a high &quot;return on
            investment&quot; in terms of being easy to implement and easy to
            write UI for.</p>
        </tp:rationale>
      </tp:docstring>

      <arg direction="in" name="Gateway" type="s">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>The gateway (XMPP component) with which to register, e.g.
            &quot;sip-transport.example.com&quot;.</p>
        </tp:docstring>
      </arg>

      <arg direction="in" name="Username" type="s">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>The username with which to register, in whatever format is
            required by the specified gateway; for instance, this might be
            a number, the username part of a SIP URI, a complete SIP URI,
            etc.</p>
        </tp:docstring>
      </arg>

      <arg direction="in" name="Password" type="s">
        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
          <p>The password with which to register.</p>
        </tp:docstring>
      </arg>

      <tp:possible-errors>
        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
        <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented"/>
        <tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
      </tp:possible-errors>
    </method>

  </interface>
</node>
<node name="/Gabble_Plugin_Test">
  <tp:copyright>Copyright © 2009 Collabora Ltd.</tp:copyright>
  <tp:license xmlns="http://www.w3.org/1999/xhtml">
    <p>This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.</p>

<p>This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.</p>

<p>You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
  </tp:license>
  <interface name="org.freedesktop.Telepathy.Gabble.Plugin.Test">
    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
      <p>A sidecar interface implemented by a plugin used by the test
        suite.</p>
    </tp:docstring>
  </interface>
</node>

<tp:generic-types>
  <tp:external-type from="Telepathy specification" name="Contact_Handle" type="u"/>
  <tp:external-type from="Telepathy specification" name="DBus_Interface" type="s"/>
  <tp:external-type from="Telepathy specification" name="DBus_Qualified_Member" type="s"/>
  <tp:external-type from="Telepathy specification" name="Qualified_Property_Value_Map" type="a{sv}"/>
  <tp:external-type from="Telepathy specification" name="DBus_Error_Name" type="s"/>
  <tp:external-type from="Telepathy specification" name="DBus_Well_Known_Name" type="s"/>
  <tp:external-type from="Telepathy specification" name="Handler_Capability_Token" type="s"/>
  <tp:external-type from="Telepathy specification" name="VCard_Field" type="s"/>
  <tp:external-type from="Telepathy specification" name="VCard_Type_Parameter" type="s"/>
  <tp:external-type from="Telepathy specification" name="Contact_Info_Field" type="(sasas)"/>

  <!-- for localisation -->
  <tp:external-type from="Telepathy specification" name="Rich_Presence_Access_Control_Type" type="u"/>
  <tp:external-type from="Telepathy specification" name="Rich_Presence_Access_Control" type="(uv)"/>
  <tp:external-type from="Telepathy specification" name="Unix_Timestamp64" type="x"/>
  <tp:external-type from="Telepathy specification" name="Unix_Timestamp" type="u"/>
  <tp:external-type from="Telepathy specification" name="String_String_Map" type="a{ss}"/>

  <tp:external-type from="Telepathy specification" name="String_Variant_Map" type="a{sv}"/>

  <!-- use types from Connection_Interface_Contacts -->
  <tp:external-type from="Telepathy specification" name="Contact_Attributes_Map" type="a{ua{sv}}"/>

  <!-- use types from Connection_Interface_Requests -->
  <tp:external-type from="Telepathy specification" name="Channel_Class" type="a{sv}"/>

  <!-- use types from Channel_Type_Tubes -->
  <tp:external-type from="Telepathy specification" name="Socket_Address_Type" type="u"/>
  <tp:external-type from="Telepathy specification" name="Socket_Access_Control" type="u"/>
  <tp:external-type from="Telepathy specification" name="Supported_Socket_Map" type="a{uau}"/>
  <tp:external-type from="Telepathy specification" name="DBus_Tube_Member" type="(us)"/>

  <!-- use types from Connection_Interface_Contact_Capabilities -->
  <tp:external-type from="Telepathy specification" name="Requestable_Channel_Class" type="(a{sv}as)"/>

  <tp:external-type from="Telepathy specification" name="Connection_Status" type="u"/>

  <!-- use types from Channel_Type_Streamed_Media.xml -->
  <tp:enum array-name="Media_Stream_Type_List" name="Media_Stream_Type" type="u">
    <tp:enumvalue suffix="Audio" value="0">
      <tp:docstring>An audio stream</tp:docstring>
    </tp:enumvalue>
    <tp:enumvalue suffix="Video" value="1">
      <tp:docstring>A video stream</tp:docstring>
    </tp:enumvalue>
  </tp:enum>

  <!-- use types from generic-types.xml -->
  <tp:struct array-name="Socket_Address_IP_List" name="Socket_Address_IP">
    <tp:docstring>An IP address and port.</tp:docstring>
    <tp:member name="Address" type="s">
      <tp:docstring>Either a dotted-quad IPv4 address literal as for
        <tp:type>Socket_Address_IPv4</tp:type>, or an RFC2373 IPv6 address
        as for <tp:type>Socket_Address_IPv6</tp:type>.
      </tp:docstring>
    </tp:member>
    <tp:member name="Port" type="q">
      <tp:docstring>The TCP or UDP port number.</tp:docstring>
    </tp:member>
  </tp:struct>

  <tp:struct name="Socket_Address_IPv4">
    <tp:docstring>An IPv4 address and port.</tp:docstring>
    <tp:member name="Address" type="s">
      <tp:docstring>A dotted-quad IPv4 address literal: four ASCII decimal
        numbers, each between 0 and 255 inclusive, e.g.
        &quot;192.168.0.1&quot;.</tp:docstring>
    </tp:member>
    <tp:member name="Port" type="q">
      <tp:docstring>The TCP or UDP port number.</tp:docstring>
    </tp:member>
  </tp:struct>

  <tp:struct name="Socket_Address_IPv6">
    <tp:docstring>An IPv6 address and port.</tp:docstring>
    <tp:member name="Address" type="s">
      <tp:docstring>An IPv6 address literal as specified by RFC2373
        section 2.2, e.g. &quot;2001:DB8::8:800:200C:4171&quot;.</tp:docstring>
    </tp:member>
    <tp:member name="Port" type="q">
      <tp:docstring>The TCP or UDP port number.</tp:docstring>
    </tp:member>
  </tp:struct>

  <tp:enum name="Media_Stream_State" type="u">
    <tp:enumvalue suffix="Disconnected" value="0">
      <tp:docstring>The stream is disconnected.</tp:docstring>
    </tp:enumvalue>
    <tp:enumvalue suffix="Connecting" value="1">
      <tp:docstring>The stream is trying to connect.</tp:docstring>
    </tp:enumvalue>
    <tp:enumvalue suffix="Connected" value="2">
      <tp:docstring>The stream is connected.</tp:docstring>
    </tp:enumvalue>
  </tp:enum>

  <tp:simple-type array-name="Handle_List" name="Handle" type="u">
    <tp:docstring>An unsigned 32-bit integer representing a
      handle</tp:docstring>
  </tp:simple-type>
</tp:generic-types>

</tp:spec>
