summaryrefslogtreecommitdiff
path: root/src/browser-service/channel-proxy.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/browser-service/channel-proxy.c')
-rw-r--r--src/browser-service/channel-proxy.c88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/browser-service/channel-proxy.c b/src/browser-service/channel-proxy.c
new file mode 100644
index 0000000..3ff9fac
--- /dev/null
+++ b/src/browser-service/channel-proxy.c
@@ -0,0 +1,88 @@
+#include "config.h"
+#include "channel-proxy.h"
+#include "marshallers.h"
+
+struct _GruschlerChannelProxy
+{
+ DBusGProxy parent;
+};
+
+struct _GruschlerChannelProxyClass
+{
+ DBusGProxyClass parent_class;
+};
+
+G_DEFINE_TYPE (GruschlerChannelProxy,
+ gruschler_channel_proxy,
+ DBUS_TYPE_G_PROXY);
+
+static void
+gruschler_channel_proxy_init (GruschlerChannelProxy *proxy)
+{
+}
+
+static void
+gruschler_channel_proxy_constructed (GObject *object)
+{
+ GObjectClass *parent_class;
+ DBusGProxy *proxy;
+
+ parent_class = G_OBJECT_CLASS (gruschler_channel_proxy_parent_class);
+
+ if (parent_class->constructed)
+ parent_class->constructed (object);
+
+ proxy = DBUS_G_PROXY (object);
+
+ dbus_g_proxy_add_signal (proxy, "RequestStarted",
+ G_TYPE_STRING, G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (proxy, "RequestStopped",
+ G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (proxy, "DataAvailable",
+ G_TYPE_STRING, DBUS_TYPE_G_UCHAR_ARRAY,
+ G_TYPE_INVALID);
+}
+
+static void
+gruschler_channel_proxy_class_init (GruschlerChannelProxyClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+ object_class->constructed = gruschler_channel_proxy_constructed;
+
+ dbus_g_object_register_marshaller (gruschler_cclosure_marshal_VOID__STRING_UINT,
+ G_TYPE_NONE, G_TYPE_STRING, G_TYPE_UINT,
+ G_TYPE_INVALID);
+ dbus_g_object_register_marshaller (gruschler_cclosure_marshal_VOID__STRING_BOXED,
+ G_TYPE_NONE, G_TYPE_STRING, DBUS_TYPE_G_UCHAR_ARRAY,
+ G_TYPE_INVALID);
+}
+
+DBusGProxy *
+gruschler_channel_proxy_new (DBusGProxy *browser_service,
+ const char *object_path)
+{
+ DBusGConnection *connection;
+
+ g_return_val_if_fail (DBUS_IS_G_PROXY (browser_service), NULL);
+ g_return_val_if_fail (NULL != object_path, NULL);
+
+ g_object_get (browser_service, "connection", &connection, NULL);
+
+ return g_object_new (GRUSCHLER_TYPE_CHANNEL_PROXY,
+ "connection", connection, "path", object_path,
+ "name", dbus_g_proxy_get_bus_name (browser_service),
+ "interface", GRUSCHLER_CHANNEL_PROXY_DBUS_INTERFACE,
+ NULL);
+}
+
+gboolean
+gruschler_channel_proxy_open (DBusGProxy *channel,
+ GError **error)
+{
+ g_return_val_if_fail (GRUSCHLER_IS_CHANNEL_PROXY (channel), FALSE);
+
+ return dbus_g_proxy_call (channel, "Open", error,
+ G_TYPE_INVALID, G_TYPE_INVALID);
+}
+