[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