[telepathy-mission-control/master] Generate code for ContactCapabilities (draft 2) and do basic setup for it

Simon McVittie simon.mcvittie at collabora.co.uk
Fri Sep 11 11:17:21 PDT 2009


---
 src/Makefile.am                                    |    2 +
 src/mcd-connection.c                               |   26 ++-
 src/mcd.xml                                        |    1 +
 ...ction_Interface_Contact_Capabilities_Draft2.xml |  247 ++++++++++++++++++++
 xml/all.xml                                        |    2 +
 xml/nmc5.xml                                       |    1 +
 6 files changed, 276 insertions(+), 3 deletions(-)
 create mode 100644 xml/Connection_Interface_Contact_Capabilities_Draft2.xml

diff --git a/src/Makefile.am b/src/Makefile.am
index 2cae9d2..f3139ad 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -32,6 +32,7 @@ mc_headers = \
 
 mc_gen_headers = \
 	_gen/cli-Connection_Interface_Contact_Capabilities_Draft1.h \
+	_gen/cli-Connection_Interface_Contact_Capabilities_Draft2.h \
 	_gen/enums.h \
 	_gen/svc-Account_Interface_ChannelRequests.h \
 	_gen/svc-Account_Interface_Compat.h \
@@ -42,6 +43,7 @@ mc_gen_headers = \
 
 nodist_libmcd_convenience_la_SOURCES = \
 	_gen/cli-Connection_Interface_Contact_Capabilities_Draft1-body.h \
+	_gen/cli-Connection_Interface_Contact_Capabilities_Draft2-body.h \
 	_gen/register-dbus-glib-marshallers-body.h \
 	_gen/signals-marshal.c \
 	_gen/signals-marshal.h \
diff --git a/src/mcd-connection.c b/src/mcd-connection.c
index c1e4a37..ae1d63f 100644
--- a/src/mcd-connection.c
+++ b/src/mcd-connection.c
@@ -71,7 +71,9 @@
 
 #include "mcd-signals-marshal.h"
 #include "_gen/cli-Connection_Interface_Contact_Capabilities_Draft1.h"
+#include "_gen/cli-Connection_Interface_Contact_Capabilities_Draft2.h"
 #include "_gen/cli-Connection_Interface_Contact_Capabilities_Draft1-body.h"
+#include "_gen/cli-Connection_Interface_Contact_Capabilities_Draft2-body.h"
 
 #define INITIAL_RECONNECTION_TIME   1 /* 1 second */
 
@@ -114,6 +116,7 @@ struct _McdConnectionPrivate
     guint has_alias_if : 1;
     guint has_capabilities_if : 1;
     guint has_contact_capabilities_draft1_if : 1;
+    guint has_contact_capabilities_draft2_if : 1;
     guint has_requests_if : 1;
 
     /* FALSE until the dispatcher has said it's ready for us */
@@ -1378,6 +1381,8 @@ on_connection_ready (TpConnection *tp_conn, const GError *error,
 							      TP_IFACE_QUARK_CONNECTION_INTERFACE_CAPABILITIES);
     priv->has_contact_capabilities_draft1_if = tp_proxy_has_interface_by_id (tp_conn,
         MC_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_CAPABILITIES_DRAFT1);
+    priv->has_contact_capabilities_draft2_if = tp_proxy_has_interface_by_id (tp_conn,
+        MC_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_CAPABILITIES_DRAFT2);
     priv->has_requests_if = tp_proxy_has_interface_by_id (tp_conn,
         TP_IFACE_QUARK_CONNECTION_INTERFACE_REQUESTS);
 
@@ -1757,6 +1762,22 @@ _mcd_connection_request_channel (McdConnection *connection,
 }
 
 static void
+mcd_connection_add_signals (TpProxy *self,
+                            guint quark,
+                            DBusGProxy *proxy,
+                            gpointer data)
+{
+    mc_cli_Connection_Interface_Contact_Capabilities_Draft1_add_signals (self,
+                                                                         quark,
+                                                                         proxy,
+                                                                         data);
+    mc_cli_Connection_Interface_Contact_Capabilities_Draft2_add_signals (self,
+                                                                         quark,
+                                                                         proxy,
+                                                                         data);
+}
+
+static void
 mcd_connection_class_init (McdConnectionClass * klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -1773,9 +1794,8 @@ mcd_connection_class_init (McdConnectionClass * klass)
     _mc_ext_register_dbus_glib_marshallers ();
 
     tp_connection_init_known_interfaces ();
-    tp_proxy_or_subclass_hook_on_interface_add
-        (TP_TYPE_CONNECTION,
-         mc_cli_Connection_Interface_Contact_Capabilities_Draft1_add_signals);
+    tp_proxy_or_subclass_hook_on_interface_add (TP_TYPE_CONNECTION,
+                                                mcd_connection_add_signals);
 
     /* Properties */
     g_object_class_install_property
diff --git a/src/mcd.xml b/src/mcd.xml
index 4951f88..d1dddbe 100644
--- a/src/mcd.xml
+++ b/src/mcd.xml
@@ -13,5 +13,6 @@
 <xi:include href="../xml/Account_Manager_Interface_Creation.xml"/>
 
 <xi:include href="../xml/Connection_Interface_Contact_Capabilities_Draft1.xml"/>
+<xi:include href="../xml/Connection_Interface_Contact_Capabilities_Draft2.xml"/>
 
 </tp:spec>
diff --git a/xml/Connection_Interface_Contact_Capabilities_Draft2.xml b/xml/Connection_Interface_Contact_Capabilities_Draft2.xml
new file mode 100644
index 0000000..e028e40
--- /dev/null
+++ b/xml/Connection_Interface_Contact_Capabilities_Draft2.xml
@@ -0,0 +1,247 @@
+<?xml version="1.0" ?>
+<node name="/Connection_Interface_Contact_Capabilities_Draft2" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+  <tp:copyright> Copyright (C) 2005, 2006, 2008 Collabora Limited </tp:copyright>
+  <tp:copyright> Copyright (C) 2005, 2006, 2008 Nokia Corporation </tp:copyright>
+  <tp:copyright> Copyright (C) 2006 INdT </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.ContactCapabilities.DRAFT2"
+    tp:causes-havoc="experimental">
+    <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
+    <tp:added version="0.17.16">(as a draft)</tp:added>
+    <tp:changed version="0.17.27">(draft 2)</tp:changed>
+
+    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+      <p>Contact capabilities describe the channel classes which may be
+        created with a given contact in advance of attempting to create a
+        channel. Each capability represents a commitment by the
+        connection manager that it will ordinarily be able to create a channel
+        with a contact when given a request with the properties defined by the
+        channel class.</p>
+
+      <p>Capabilities pertain to particular contact handles, and represent
+        activities such as having a text chat, a voice call with the user or a
+        stream tube of a defined type.</p>
+
+      <p>This interface also enables user interfaces to notify the connection
+        manager what capabilities to advertise for the user to other contacts.
+        This is done by using the
+        <tp:member-ref>UpdateCapabilities</tp:member-ref> method.</p>
+
+      <tp:rationale>
+        <p>XMPP is a major user of this interface: XMPP contacts will not,
+          in general, be callable using VoIP unless they advertise suitable
+          Jingle capabilities.</p>
+
+        <p>Many other protocols also have some concept of capability flags,
+          which this interface exposes in a protocol-independent way.</p>
+      </tp:rationale>
+    </tp:docstring>
+
+    <tp:struct name="Handler_Capabilities"
+      array-name="Handler_Capabilities_List">
+      <tp:docstring>
+        A structure representing the capabilities of a single client.
+      </tp:docstring>
+
+      <tp:member name="Well_Known_Name" type="s" tp:type="DBus_Well_Known_Name">
+        <tp:docstring>
+          For implementations of the <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">Client</tp:dbus-ref>
+          interface, the well-known bus name name of the client; for any other
+          process, any other reversed domain name that uniquely identifies it.
+        </tp:docstring>
+      </tp:member>
+
+      <tp:member name="Channel_Classes" type="aa{sv}"
+           tp:type="String_Variant_Map[]">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          An array of channel classes that can be handled by this client.
+          This will usually be a copy of the client's <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy.Client.Handler">HandlerChannelFilter</tp:dbus-ref>
+          property.
+        </tp:docstring>
+      </tp:member>
+
+      <tp:member name="Capabilities"
+        type="as" tp:type="Handler_Capability_Token[]">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          An array of client capabilities supported by this client, to be
+          used by the connection manager to determine what capabilities to
+          advertise. This will usually be a copy of the client's <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy.Client.Handler">Capabilities</tp:dbus-ref>
+          property.
+        </tp:docstring>
+      </tp:member>
+    </tp:struct>
+
+    <method name="UpdateCapabilities" tp:name-for-bindings="Update_Capabilities">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Alter the connection's advertised capabilities to include
+          the intersection of the given clients' capabilities with what the
+          connection manager is able to implement.</p>
+
+        <p>On connections managed by the ChannelDispatcher, processes other
+          than the ChannelDispatcher SHOULD NOT call this method, and the
+          ChannelDispatcher SHOULD use this method to advertise the
+          capabilities of all the registered <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">Client.Handler</tp:dbus-ref>
+          implementations.On connections not managed by the ChannelDispatcher,
+          clients MAY use this method directly, to indicate the channels they
+          will handle and the extra capabilities they have.</p>
+
+        <p>Upon a successful invocation of this method, the connection manager
+          will only emit the
+          <tp:member-ref>ContactCapabilitiesChanged</tp:member-ref> signal
+          for the user's <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy.Connection">SelfHandle</tp:dbus-ref>
+          if, in the underlying protocol, the new capabilities are distinct
+          from the previous state.</p>
+
+        <tp:rationale>
+          <p>The connection manager will essentially intersect the provided
+            capabilities and the channel classes it implements. Therefore,
+            certain properties which are never fixed for a channel class
+            (such as the target handle, or the Parameters property of a tube
+            channel) will almost certainly not be advertised.</p>
+        </tp:rationale>
+
+        <p>This method MAY be called on a newly-created connection while it
+          is still in the DISCONNECTED state, to request that when the
+          connection connects, it will do so with the appropriate
+          capabilities. Doing so MUST NOT fail.</p>
+      </tp:docstring>
+
+      <arg direction="in" name="Handler_Capabilities" type="a(saa{sv}as)"
+        tp:type="Handler_Capabilities[]">
+        <tp:docstring>
+          <p>The capabilities of one or more clients.</p>
+
+          <p>For each client in the given list, any capabilities previously
+            advertised for the same client name are discarded, then replaced by
+            the capabilities indicated.</p>
+
+          <p>As a result, if a client becomes unavailable, this method SHOULD
+            be called with a <tp:type>Handler_Capabilities</tp:type> structure
+            containing its name, an empty list of channel classes, and an
+            empty list of capabilities. When this is done, the connection
+            manager SHOULD free all memory associated with that client name.</p>
+
+          <tp:rationale>
+            <p>This method takes a list of clients so that
+              when the channel dispatcher first calls it (with a list of all
+              the Handlers that are initially available), the changes can be
+              made atomically, with only one transmission of updated
+              capabilities to the network. Afterwards, the channel dispatcher
+              will call this method with a single-element list every time
+              a Handler becomes available or unavailable.</p>
+          </tp:rationale>
+
+          <p>The connection manager MUST ignore any channel classes and client
+            capabilities for which there is no representation in the protocol
+            or no support in the connection manager.</p>
+        </tp:docstring>
+      </arg>
+
+      <tp:possible-errors>
+        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
+      </tp:possible-errors>
+    </method>
+
+    <method name="GetContactCapabilities"
+            tp:name-for-bindings="Get_Contact_Capabilities">
+      <arg direction="in" name="handles" type="au" tp:type="Contact_Handle[]">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>An array of contact handles for this connection.</p>
+
+          <p>The handle zero MUST NOT be included in the request.</p>
+        </tp:docstring>
+      </arg>
+      <arg direction="out" type="a{ua(a{sv}as)}"
+           tp:type="Contact_Capabilities_Map" name="Contact_Capabilities">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          An array of structures containing:
+          <ul>
+            <li>a dictionary mapping the channel properties to their values.</li>
+            <li>an array of additional allowed properties</li>
+          </ul>
+        </tp:docstring>
+      </arg>
+      <tp:docstring>
+        Returns an array of enhanced capabilities for the given contact handles.
+      </tp:docstring>
+      <tp:possible-errors>
+        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
+        <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle">
+          <tp:docstring>
+            The handle does not represent a contact. Zero is always invalid.
+          </tp:docstring>
+        </tp:error>
+      </tp:possible-errors>
+    </method>
+
+    <signal name="ContactCapabilitiesChanged"
+            tp:name-for-bindings="Contact_Capabilities_Changed">
+      <arg name="caps" type="a{ua(a{sv}as)}"
+           tp:type="Contact_Capabilities_Map">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          All the capabilities of the contacts
+        </tp:docstring>
+      </arg>
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Announce that there has been a change of capabilities on the
+          given handles. A single signal can be emitted for several
+        contacts.</p>
+
+        <tp:rationale>
+          <p>The underlying protocol can get several contacts' capabilities at
+            the same time.</p>
+        </tp:rationale>
+
+      </tp:docstring>
+    </signal>
+
+  <tp:mapping name="Contact_Capabilities_Map"
+              array-name="Contact_Capabilities_Map_List">
+    <tp:docstring>A mapping from contact handle to their capabilities.
+    </tp:docstring>
+    <tp:member type="u" name="Key" tp:type="Contact_Handle">
+      <tp:docstring>
+        A contact handle.
+      </tp:docstring>
+    </tp:member>
+    <tp:member type="a(a{sv}as)" name="Value"
+               tp:type="Requestable_Channel_Class[]">
+      <tp:docstring>
+        The contact capabilities.
+      </tp:docstring>
+    </tp:member>
+  </tp:mapping>
+
+    <tp:contact-attribute name="capabilities"
+      type="a(a{sv}as)" tp:type="Requestable_Channel_Class[]">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>The same structs that would be returned by
+          <tp:member-ref>GetContactCapabilities</tp:member-ref>.
+          Omitted from the result if the contact's capabilities
+          are not known; present in the result as an empty array if the
+          contact is known to have no capabilities at all.</p>
+      </tp:docstring>
+    </tp:contact-attribute>
+
+  </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/xml/all.xml b/xml/all.xml
index 96dc6c4..cb7661f 100644
--- a/xml/all.xml
+++ b/xml/all.xml
@@ -25,6 +25,8 @@
 	from="Telepathy specification (ConnectionManager)"/>
     <tp:external-type name="Requestable_Channel_Class" type="(a{sv}as)"
       from="Telepathy specification (Requests)"/>
+    <tp:external-type name="Handler_Capability_Token" type="s"
+	from="Telepathy specification (Handler)"/>
 </tp:generic-types>
 
 <xi:include href="generic-types.xml"/>
diff --git a/xml/nmc5.xml b/xml/nmc5.xml
index c4838df..4d1b47f 100644
--- a/xml/nmc5.xml
+++ b/xml/nmc5.xml
@@ -26,5 +26,6 @@
 <xi:include href="Channel_Dispatch_Operation.xml"/>
 
 <xi:include href="Connection_Interface_Contact_Capabilities_Draft1.xml"/>
+<xi:include href="Connection_Interface_Contact_Capabilities_Draft2.xml"/>
 
 </tp:spec>
-- 
1.5.6.5




More information about the telepathy-commits mailing list