[rygel-grilo] Add ms2_client_new() function



commit aef93829e4e9206dd2350fad08786f2e92616c53
Author: Juan A. Suarez Romero <jasuarez igalia com>
Date:   Mon Apr 12 16:05:25 2010 +0200

    Add ms2_client_new() function

 lib/media-server2-client.c |   38 +++++++++++++++++++++++++++++++++++---
 lib/media-server2-server.c |   12 +++++++-----
 src/test-client.c          |    8 ++++++++
 3 files changed, 50 insertions(+), 8 deletions(-)
---
diff --git a/lib/media-server2-client.c b/lib/media-server2-client.c
index f0ed037..a2323b1 100644
--- a/lib/media-server2-client.c
+++ b/lib/media-server2-client.c
@@ -27,6 +27,10 @@
 #include "media-server2-client-glue.h"
 #include "media-server2-client.h"
 
+#define MS2_DBUS_SERVICE_PREFIX "org.gnome.UPnP.MediaServer2."
+#define MS2_DBUS_OBJECT         "/org/gnome/UPnP/MediaServer2"
+#define MS2_DBUS_IFACE          "org.gnome.UPnP.MediaServer2"
+
 #define ENTRY_POINT_IFACE "/org/gnome/UPnP/MediaServer2/"
 #define ENTRY_POINT_NAME  "org.gnome.UPnP.MediaServer2."
 
@@ -37,7 +41,7 @@
   G_TYPE_INSTANCE_GET_PRIVATE((o), MS2_TYPE_CLIENT, MS2ClientPrivate)
 
 struct _MS2ClientPrivate {
-  gpointer *reserved;
+  DBusGProxy *proxy_provider;
 };
 
 G_DEFINE_TYPE (MS2Client, ms2_client, G_TYPE_OBJECT);
@@ -66,7 +70,7 @@ ms2_client_get_providers ()
   gchar **list_providers;
   gchar **p;
   gint i;
-  gint prefix_size = strlen (ENTRY_POINT_NAME);
+  gint prefix_size = strlen (MS2_DBUS_SERVICE_PREFIX);
 
   connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
   if (!connection) {
@@ -95,7 +99,7 @@ ms2_client_get_providers ()
 
   providers = g_ptr_array_new ();
   for (p = dbus_names; *p; p++) {
-    if (g_str_has_prefix (*p, ENTRY_POINT_NAME)) {
+    if (g_str_has_prefix (*p, MS2_DBUS_SERVICE_PREFIX)) {
       g_ptr_array_add (providers, *p);
     }
   }
@@ -116,9 +120,37 @@ ms2_client_get_providers ()
 
 MS2Client *ms2_client_new (const gchar *provider)
 {
+  DBusGConnection *connection;
+  DBusGProxy *gproxy;
+  GError *error = NULL;
   MS2Client *client;
+  gchar *dbus_provider;
+
+  connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+  if (!connection) {
+    g_printerr ("Could not connect to session bus, %s\n", error->message);
+    g_clear_error (&error);
+    return NULL;
+  }
+
+  dbus_provider = g_strconcat (MS2_DBUS_SERVICE_PREFIX, provider, NULL);
+
+  gproxy = dbus_g_proxy_new_for_name_owner (connection,
+                                            dbus_provider,
+                                            MS2_DBUS_OBJECT,
+                                            MS2_DBUS_IFACE,
+                                            &error);
+
+  if (!gproxy) {
+    g_printerr ("Could not connect to %s provider, %s\n",
+                provider,
+                error->message);
+    g_clear_error (&error);
+    return NULL;
+  }
 
   client = g_object_new (MS2_TYPE_CLIENT, NULL);
+  client->priv->proxy_provider = gproxy;
 
   return client;
 }
diff --git a/lib/media-server2-server.c b/lib/media-server2-server.c
index 0d21006..43cde74 100644
--- a/lib/media-server2-server.c
+++ b/lib/media-server2-server.c
@@ -28,8 +28,8 @@
 #include "media-server2-server-glue.h"
 #include "media-server2-server.h"
 
-#define ENTRY_POINT_IFACE "/org/gnome/UPnP/MediaServer2/"
-#define ENTRY_POINT_NAME  "org.gnome.UPnP.MediaServer2."
+#define MS2_DBUS_SERVICE_PREFIX "org.gnome.UPnP.MediaServer2."
+#define MS2_DBUS_PATH_PREFIX    "/org/gnome/UPnP/MediaServer2/"
 
 #define DBUS_TYPE_G_ARRAY_OF_STRING                             \
   (dbus_g_type_get_collection ("GPtrArray", G_TYPE_STRING))
@@ -76,19 +76,21 @@ ms2_server_dbus_register (MS2Server *server,
                                       DBUS_INTERFACE_DBUS);
 
   /* Request name */
-  dbus_name = g_strconcat (ENTRY_POINT_NAME, name, NULL);
+  dbus_name = g_strconcat (MS2_DBUS_SERVICE_PREFIX, name, NULL);
   if (!org_freedesktop_DBus_request_name (gproxy,
                                           dbus_name,
                                           DBUS_NAME_FLAG_DO_NOT_QUEUE,
                                           &request_name_result,
                                           NULL))  {
-      return FALSE;
+    g_free (dbus_name);
+    return FALSE;
   }
   g_free (dbus_name);
   g_object_unref (gproxy);
 
+  dbus_path = g_strconcat (MS2_DBUS_PATH_PREFIX, name, NULL);
+
   /* Register object */
-  dbus_path = g_strconcat (ENTRY_POINT_IFACE, name, NULL);
   dbus_g_connection_register_g_object (connection,
                                        dbus_path,
                                        G_OBJECT (server));
diff --git a/src/test-client.c b/src/test-client.c
index 5ce1dd3..bf5484f 100644
--- a/src/test-client.c
+++ b/src/test-client.c
@@ -1,11 +1,19 @@
 #include <media-server2-client.h>
 #include <glib.h>
+#include <string.h>
 
 int main (int argc, char **argv)
 {
   gchar **providers;
+  MS2Client *client;
 
   g_type_init ();
 
   providers = ms2_client_get_providers ();
+  if (!providers) {
+    g_print ("There is no MediaServer2 provider\n");
+    return 0;
+  }
+
+  client = ms2_client_new (providers[0]);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]