#include <stdlib.h>
#include <string.h>
+#include <stdio.h>
#include "droute.h"
#include "droute-pairhash.h"
prop_funcs = (PropertyPair *) g_hash_table_lookup (path->properties, &pair);
if (!prop_funcs)
+#ifdef DBUS_ERROR_UNKNOWN_PROPERTY
+ return dbus_message_new_error (message, DBUS_ERROR_UNKNOWN_PROPERTY, "Property unavailable");
+#else
return dbus_message_new_error (message, DBUS_ERROR_FAILED, "Property unavailable");
+#endif
datum = path_get_datum (path, pathstr);
if (!datum)
reply = dbus_message_new_method_return (message);
}
+#ifdef DBUS_ERROR_PROPERTY_READ_ONLY
+ else if (!get)
+ {
+ reply = dbus_message_new_error (message, DBUS_ERROR_PROPERTY_READ_ONLY, "Property is read-only");
+ }
+#endif
else
{
reply = dbus_message_new_error (message, DBUS_ERROR_FAILED, "Getter or setter unavailable");
char *id_str = (char *) g_malloc(40);
DBusMessage *reply;
- if (strcmp (iface, DBUS_INTERFACE_DBUS) != 0 ||
- strcmp (member, "Hello") != 0)
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ if (strcmp (iface, DBUS_INTERFACE_DBUS) != 0 ||
+ strcmp (member, "Hello") != 0)
+ {
+ g_free (id_str);
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ }
/* TODO: Fix this hack (we don't handle wrap-around, for instance) */
sprintf (id_str, ":1.%d", id++);
const gchar *member,
const gchar *pathstr)
{
- DBusMessage *reply;
+ DBusMessage *reply = NULL;
DBusHandlerResult result = DBUS_HANDLER_RESULT_HANDLED;
if (!g_strcmp0(member, "GetAll"))
dbus_message_get_signature (message),
dbus_message_get_interface (message),
dbus_message_get_path (message));
+#ifdef DBUS_ERROR_UNKNOWN_OBJECT
+ reply = dbus_message_new_error (message,
+ DBUS_ERROR_UNKNOWN_OBJECT,
+ errmsg);
+#else
reply = dbus_message_new_error (message,
DBUS_ERROR_FAILED,
errmsg);
+#endif
g_free (errmsg);
return reply;
}
}
void
+droute_path_unregister (DRoutePath *path, DBusConnection *bus)
+{
+ dbus_connection_unregister_object_path (bus, path->path);
+}
+
+void
droute_context_register (DRouteContext *cnx, DBusConnection *bus)
{
g_ptr_array_foreach (cnx->registered_paths, (GFunc) droute_path_register,
}
void
+droute_context_unregister (DRouteContext *cnx, DBusConnection *bus)
+{
+ g_ptr_array_foreach (cnx->registered_paths, (GFunc) droute_path_unregister,
+ bus);
+}
+
+void
+droute_context_deregister (DRouteContext *cnx, DBusConnection *bus)
+{
+ g_ptr_array_foreach (cnx->registered_paths, (GFunc) droute_path_unregister,
+ bus);
+}
+
+void
droute_intercept_dbus (DBusConnection *bus)
{
dbus_connection_register_object_path (bus, DBUS_PATH_DBUS,
&droute_vtable, NULL);
}
+
+void
+droute_unintercept_dbus (DBusConnection *bus)
+{
+ dbus_connection_unregister_object_path (bus, DBUS_PATH_DBUS);
+}
+
/*END------------------------------------------------------------------------*/