1 #include "msgport-service.h"
2 #include "msgport-utils.h"
3 #include "common/dbus-service-glue.h"
4 #include "common/log.h"
12 MsgPortDbusGlueService *proxy;
13 guint on_messge_signal_id;
14 messageport_message_cb client_cb;
17 G_DEFINE_TYPE(MsgPortService, msgport_service, G_TYPE_OBJECT)
20 _service_dispose (GObject *self)
22 MsgPortService *service = MSGPORT_SERVICE (self);
24 g_clear_object (&service->proxy);
26 G_OBJECT_CLASS(msgport_service_parent_class)->dispose (self);
30 msgport_service_class_init (MsgPortServiceClass *klass)
32 GObjectClass *g_klass = G_OBJECT_CLASS(klass);
34 g_klass->dispose = _service_dispose;
38 msgport_service_init (MsgPortService *service)
40 service->proxy = NULL;
41 service->client_cb = NULL;
42 service->on_messge_signal_id = 0;
46 _on_got_message (MsgPortService *service, GVariant *data, const gchar *remote_app_id, const gchar *remote_port, gboolean remote_is_trusted, gpointer userdata)
49 gchar *str_data = g_variant_print (data, TRUE);
50 DBG ("Message received : %s(%"G_GSIZE_FORMAT")", str_data, g_variant_n_children (data));
53 bundle *b = bundle_from_variant_map (data);
55 service->client_cb (msgport_dbus_glue_service_get_id (service->proxy), remote_app_id, remote_port, remote_is_trusted, b);
61 msgport_service_new (GDBusConnection *connection, const gchar *path, messageport_message_cb message_cb)
65 MsgPortService *service = g_object_new (MSGPORT_TYPE_SERVICE, NULL);
70 service->proxy = msgport_dbus_glue_service_proxy_new_sync (connection,
71 G_DBUS_PROXY_FLAGS_NONE, NULL, path, NULL, &error);
72 if (!service->proxy) {
73 g_object_unref (service);
74 WARN ("failed create servie proxy for path '%s' : %s", path, error->message);
79 service->client_cb = message_cb;
80 service->on_messge_signal_id = g_signal_connect_swapped (service->proxy, "on-message", G_CALLBACK (_on_got_message), service);
86 msgport_service_id (MsgPortService *service)
88 g_return_val_if_fail (service && MSGPORT_IS_SERVICE (service), 0);
89 g_return_val_if_fail (service->proxy && MSGPORT_DBUS_GLUE_IS_SERVICE (service->proxy), 0);
91 return msgport_dbus_glue_service_get_id (service->proxy);
95 msgport_service_name (MsgPortService *service)
97 g_return_val_if_fail (service && MSGPORT_IS_SERVICE (service), NULL);
98 g_return_val_if_fail (service->proxy && MSGPORT_DBUS_GLUE_IS_SERVICE (service->proxy), NULL);
100 return msgport_dbus_glue_service_get_port_name (service->proxy);
104 msgport_service_is_trusted (MsgPortService *service)
106 g_return_val_if_fail (service && MSGPORT_IS_SERVICE (service), FALSE);
107 g_return_val_if_fail (service->proxy && MSGPORT_DBUS_GLUE_IS_SERVICE (service->proxy), FALSE);
109 return msgport_dbus_glue_service_get_is_trusted (service->proxy);
113 msgport_service_unregister (MsgPortService *service)
115 g_return_val_if_fail (service && MSGPORT_IS_SERVICE (service), FALSE);
116 g_return_val_if_fail (service->proxy, FALSE);
118 /* fire and forget */
119 return msgport_dbus_glue_service_call_unregister_sync (service->proxy, NULL, NULL);
123 msgport_service_send_message (MsgPortService *service, guint remote_service_id, GVariant *message)
125 GError *error = NULL;
126 g_return_val_if_fail (service && MSGPORT_IS_SERVICE (service), MESSAGEPORT_ERROR_IO_ERROR);
127 g_return_val_if_fail (service->proxy, MESSAGEPORT_ERROR_IO_ERROR);
128 g_return_val_if_fail (message, MESSAGEPORT_ERROR_INVALID_PARAMETER);
130 msgport_dbus_glue_service_call_send_message_sync (service->proxy, remote_service_id, message, NULL, &error);
133 messageport_error_e err = msgport_daemon_error_to_error (error);
134 WARN ("Fail to send message on service %p to %d : %s", service, remote_service_id, error->message);
135 g_error_free (error);
139 return MESSAGEPORT_ERROR_NONE;