summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2010-11-18 13:46:06 +0000
committerMikhail Zabaluev <mikhail.zabaluev@nokia.com>2011-01-28 20:49:35 +0200
commit91e347eaf9e1a75b81943286c7308164663c9010 (patch)
tree56c32b3e6bfdcae0b123e481ec5e3da41da69d6c
parent9486db40a0f0836b65d46ea925216126c6fe2709 (diff)
fd.o #31720: use TpDBusDaemon to export media sessions
-rw-r--r--src/sip-media-channel.c2
-rw-r--r--src/sip-media-session.c27
2 files changed, 24 insertions, 5 deletions
diff --git a/src/sip-media-channel.c b/src/sip-media-channel.c
index 5d4f663..71b7110 100644
--- a/src/sip-media-channel.c
+++ b/src/sip-media-channel.c
@@ -1622,6 +1622,8 @@ priv_create_session (TpsipMediaChannel *channel,
NULL);
session = g_object_new (TPSIP_TYPE_MEDIA_SESSION,
+ "dbus-daemon",
+ tp_base_connection_get_dbus_daemon (conn),
"media-channel", channel,
"object-path", object_path,
"nua-handle", nh,
diff --git a/src/sip-media-session.c b/src/sip-media-session.c
index 73b7482..8159f18 100644
--- a/src/sip-media-session.c
+++ b/src/sip-media-session.c
@@ -72,6 +72,7 @@ enum
enum
{
PROP_MEDIA_CHANNEL = 1,
+ PROP_DBUS_DAEMON,
PROP_OBJECT_PATH,
PROP_NUA_OP,
PROP_PEER,
@@ -122,6 +123,7 @@ typedef struct _TpsipMediaSessionPrivate TpsipMediaSessionPrivate;
struct _TpsipMediaSessionPrivate
{
+ TpDBusDaemon *dbus_daemon;
TpsipMediaChannel *channel; /* see gobj. prop. 'media-channel' */
gchar *object_path; /* see gobj. prop. 'object-path' */
nua_handle_t *nua_op; /* see gobj. prop. 'nua-handle' */
@@ -192,14 +194,13 @@ tpsip_media_session_constructor (GType type, guint n_props,
{
GObject *obj;
TpsipMediaSessionPrivate *priv;
- DBusGConnection *bus;
obj = G_OBJECT_CLASS (tpsip_media_session_parent_class)->
constructor (type, n_props, props);
priv = TPSIP_MEDIA_SESSION_GET_PRIVATE (TPSIP_MEDIA_SESSION (obj));
- bus = tp_get_bus ();
- dbus_g_connection_register_g_object (bus, priv->object_path, obj);
+ g_assert (TP_IS_DBUS_DAEMON (priv->dbus_daemon));
+ tp_dbus_daemon_register_object (priv->dbus_daemon, priv->object_path, obj);
return obj;
}
@@ -212,7 +213,11 @@ static void tpsip_media_session_get_property (GObject *object,
TpsipMediaSession *session = TPSIP_MEDIA_SESSION (object);
TpsipMediaSessionPrivate *priv = TPSIP_MEDIA_SESSION_GET_PRIVATE (session);
- switch (property_id) {
+ switch (property_id)
+ {
+ case PROP_DBUS_DAEMON:
+ g_value_set_object (value, priv->dbus_daemon);
+ break;
case PROP_MEDIA_CHANNEL:
g_value_set_object (value, priv->channel);
break;
@@ -296,7 +301,12 @@ static void tpsip_media_session_set_property (GObject *object,
TpsipMediaSession *session = TPSIP_MEDIA_SESSION (object);
TpsipMediaSessionPrivate *priv = TPSIP_MEDIA_SESSION_GET_PRIVATE (session);
- switch (property_id) {
+ switch (property_id)
+ {
+ case PROP_DBUS_DAEMON:
+ g_assert (priv->dbus_daemon == NULL); /* construct-only */
+ priv->dbus_daemon = g_value_dup_object (value);
+ break;
case PROP_MEDIA_CHANNEL:
priv->channel = TPSIP_MEDIA_CHANNEL (g_value_get_object (value));
break;
@@ -343,6 +353,11 @@ tpsip_media_session_class_init (TpsipMediaSessionClass *klass)
object_class->dispose = tpsip_media_session_dispose;
object_class->finalize = tpsip_media_session_finalize;
+ param_spec = g_param_spec_object ("dbus-daemon", "TpDBusDaemon",
+ "Connection to D-Bus.", TP_TYPE_DBUS_DAEMON,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (object_class, PROP_DBUS_DAEMON, param_spec);
+
param_spec = g_param_spec_object ("media-channel", "TpsipMediaChannel object",
"SIP media channel object that owns this media session object"
" (not reference counted).",
@@ -442,6 +457,8 @@ tpsip_media_session_dispose (GObject *object)
if (priv->glare_timer_id)
g_source_remove (priv->glare_timer_id);
+ tp_clear_object (&priv->dbus_daemon);
+
if (G_OBJECT_CLASS (tpsip_media_session_parent_class)->dispose)
G_OBJECT_CLASS (tpsip_media_session_parent_class)->dispose (object);