#include <errno.h>
static void
+_method_success_check(void *data, DBusMessage *msg, DBusError *error)
+{
+ const char *name = data;
+
+ if ((!error) || (!dbus_error_is_set(error)))
+ {
+ printf("SUCCESS: method %s() finished successfully.\n", name);
+ return;
+ }
+
+ printf("FAILURE: method %s() finished with error: %s %s\n",
+ name, error->name, error->message);
+ dbus_error_free(error);
+}
+
+static void
_elements_print(E_Bluez_Element **elements, unsigned int count)
{
unsigned int i;
}
static int
+_on_cmd_adapter_register_agent(char *cmd, char *args)
+{
+ char *next_args, *path, *cap;
+ E_Bluez_Element *element = _element_from_args(args, &next_args);
+
+ if (!element)
+ return 1;
+
+ if (!next_args) {
+ fputs("ERROR: missing parameters name, type and value.\n", stderr);
+ return 1;
+ }
+
+ path = next_args;
+ cap = _tok(path);
+ if (!cap) {
+ fputs("ERROR: missing parameters name, type and value.\n", stderr);
+ return 1;
+ }
+
+ if (e_bluez_adapter_agent_register(element,
+ path, cap, _method_success_check, "adapter_register_agent"))
+ printf(":::Registering agent %s (%s)...\n", path, cap);
+ else
+ fprintf(stderr, "ERROR: can't register agent %s\n", path);
+
+ return 1;
+}
+
+static int
+_on_cmd_adapter_unregister_agent(char *cmd, char *args)
+{
+ char *path, *next_args;
+ E_Bluez_Element *element = _element_from_args(args, &next_args);
+
+ if (!element)
+ return 1;
+
+ if (!args)
+ {
+ fputs("ERROR: missing the object path\n", stderr);
+ return 1;
+ }
+
+ path = next_args;
+ if (e_bluez_adapter_agent_unregister(element,
+ path, _method_success_check, "adapter_unregister_agent"))
+ printf(":::Unregistering agent %s...\n", path);
+ else
+ fprintf(stderr, "ERROR: can't unregister agent %s\n", path);
+
+ return 1;
+}
+static int
_on_input(void *data, Ecore_Fd_Handler *fd_handler)
{
char buf[256];
{"get_properties", _on_cmd_get_properties},
{"set_property", _on_cmd_property_set},
{"manager_get", _on_cmd_manager_get},
+ {"adapter_register_agent", _on_cmd_adapter_register_agent},
+ {"adapter_unregister_agent", _on_cmd_adapter_unregister_agent},
{NULL, NULL}
};
/* Manager Methods */
EAPI E_Bluez_Element *e_bluez_manager_get(void) EINA_WARN_UNUSED_RESULT;
+ /* Adapter Methods */
+ EAPI bool e_bluez_adapter_agent_register(E_Bluez_Element *element, const char *object_path, const char *capability, E_DBus_Method_Return_Cb cb, const void *data) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+ EAPI bool e_bluez_adapter_agent_unregister(E_Bluez_Element *element, const char *object_path, E_DBus_Method_Return_Cb cb, const void *data) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+
/* Low-Level API:
*
* Should just be used to work around problems until proper solution
e_bluez_private.h \
e_bluez.c \
e_bluez_element.c \
-e_bluez_manager.c
+e_bluez_manager.c \
+e_bluez_adapter.c
libebluez_la_LIBADD = \
@EDBUS_LIBS@ @EVAS_LIBS@ \
--- /dev/null
+#include "e_bluez_private.h"
+
+/**
+ * Register new agent for handling user requests.
+ *
+ * Call method RegisterAgent(object) on server in order to
+ * register new agent for handling user requests.
+ *
+ * @param element adapter's element
+ * @param object_path object to be registered.
+ * @param capability input/output agent capabilities
+ * @param cb function to call when server replies or some error happens.
+ * @param data data to give to cb when it is called.
+ *
+ * @return 1 on success, 0 otherwise.
+ */
+bool
+e_bluez_adapter_agent_register(E_Bluez_Element *element, const char *object_path, const char *capability, E_DBus_Method_Return_Cb cb, const void *data)
+{
+ const char name[] = "RegisterAgent";
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(object_path, 0);
+
+ return e_bluez_element_call_with_path_and_string
+ (element, name, object_path, capability, NULL,
+ &element->_pending.agent_register, cb, data);
+}
+
+/**
+ * Unregister an existing agent.
+ *
+ * Call method UnregisterAgent(object) on server in order to
+ * unregister an existing agent.
+ *
+ * @param element adapter's element
+ * @param object_path agent to be unregistered.
+ * @param cb function to call when server replies or some error happens.
+ * @param data data to give to cb when it is called.
+ *
+ * @return 1 on success, 0 otherwise.
+ */
+bool
+e_bluez_adapter_agent_unregister(E_Bluez_Element *element, const char *object_path, E_DBus_Method_Return_Cb cb, const void *data)
+{
+ const char name[] = "UnregisterAgent";
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(object_path, 0);
+
+ return e_bluez_element_call_with_path
+ (element, name, object_path, NULL,
+ &element->_pending.agent_unregister, cb, data);
+}
(element, method_name, cb, msg, pending, user_cb, user_data);
}
+bool
+e_bluez_element_call_with_path_and_string(E_Bluez_Element *element, const char *method_name, const char *path, const char *string, E_DBus_Method_Return_Cb cb, Eina_Inlist **pending, E_DBus_Method_Return_Cb user_cb, const void *user_data)
+{
+ DBusMessageIter itr;
+ DBusMessage *msg;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(element, 0);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(method_name, 0);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(path, 0);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(string, 0);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pending, 0);
+
+ msg = dbus_message_new_method_call
+ (e_bluez_system_bus_name_get(), element->path, element->interface,
+ method_name);
+
+ if (!msg)
+ return 0;
+
+ dbus_message_iter_init_append(msg, &itr);
+ dbus_message_iter_append_basic(&itr, DBUS_TYPE_OBJECT_PATH, &path);
+ dbus_message_iter_append_basic(&itr, DBUS_TYPE_STRING, &string);
+
+ return e_bluez_element_message_send
+ (element, method_name, cb, msg, pending, user_cb, user_data);
+}
+
/**
* Get property type.
*
bool e_bluez_element_call_full(E_Bluez_Element *element, const char *method_name, E_DBus_Method_Return_Cb cb, Eina_Inlist **pending, E_DBus_Method_Return_Cb user_cb, const void *user_data);
bool e_bluez_element_call_with_path(E_Bluez_Element *element, const char *method_name, const char *string, E_DBus_Method_Return_Cb cb, Eina_Inlist **pending, E_DBus_Method_Return_Cb user_cb, const void *user_data);
bool e_bluez_element_call_with_string(E_Bluez_Element *element, const char *method_name, const char *string, E_DBus_Method_Return_Cb cb, Eina_Inlist **pending, E_DBus_Method_Return_Cb user_cb, const void *user_data);
+bool e_bluez_element_call_with_path_and_string(E_Bluez_Element *element, const char *method_name, const char *path, const char *string, E_DBus_Method_Return_Cb cb, Eina_Inlist **pending, E_DBus_Method_Return_Cb user_cb, const void *user_data);