diff --git a/src/modules/connman/E_Connman.h b/src/modules/connman/E_Connman.h index 204f2be89..757d24ca1 100644 --- a/src/modules/connman/E_Connman.h +++ b/src/modules/connman/E_Connman.h @@ -54,6 +54,7 @@ struct Connman_Manager { DBusPendingCall *get_services; DBusPendingCall *get_properties; + DBusPendingCall *register_agent; } pending; }; diff --git a/src/modules/connman/agent.c b/src/modules/connman/agent.c index b94ec23a0..ad327c932 100644 --- a/src/modules/connman/agent.c +++ b/src/modules/connman/agent.c @@ -13,7 +13,6 @@ static unsigned int init_count; static E_DBus_Connection *conn; static E_DBus_Object *agent_obj; -#define AGENT_PATH "/org/enlightenment/connman/agent" #define AGENT_IFACE "net.connman.Agent" static DBusMessage *_agent_release(E_DBus_Object *obj, DBusMessage *msg) diff --git a/src/modules/connman/agent.h b/src/modules/connman/agent.h index 9eac425cd..8b7931952 100644 --- a/src/modules/connman/agent.h +++ b/src/modules/connman/agent.h @@ -3,6 +3,8 @@ #include "E_Connman.h" +#define AGENT_PATH "/org/enlightenment/connman/agent" + unsigned int econnman_agent_init(E_DBus_Connection *edbus_conn) EINA_ARG_NONNULL(1); unsigned int econnman_agent_shutdown(void); diff --git a/src/modules/connman/e_connman.c b/src/modules/connman/e_connman.c index ef2335873..ade89ae4b 100644 --- a/src/modules/connman/e_connman.c +++ b/src/modules/connman/e_connman.c @@ -672,6 +672,49 @@ static void _manager_get_prop_cb(void *data, DBusMessage *reply, } } +static void +_manager_agent_register_cb(void *data, DBusMessage *reply, DBusError *err) +{ + struct Connman_Manager *cm = data; + + cm->pending.register_agent = NULL; + + if (dbus_error_is_set(err)) + { + WRN("Could not register agent. %s: %s", err->name, err->message); + return; + } + + INF("Agent registered"); +} + +static void +_manager_agent_register(struct Connman_Manager *cm) +{ + const char *path = AGENT_PATH; + DBusMessageIter itr; + DBusMessage *msg; + + if (!cm) + return; + + msg = dbus_message_new_method_call(CONNMAN_BUS_NAME, "/", + CONNMAN_MANAGER_IFACE, "RegisterAgent"); + + if (!msg) + { + ERR("Could not create D-Bus message"); + return; + } + + dbus_message_iter_init_append(msg, &itr); + dbus_message_iter_append_basic(&itr, DBUS_TYPE_OBJECT_PATH, &path); + + cm->pending.register_agent = e_dbus_message_send(conn, msg, + _manager_agent_register_cb, + -1, cm); +} + static void _manager_free(struct Connman_Manager *cm) { if (!cm) @@ -697,6 +740,12 @@ static void _manager_free(struct Connman_Manager *cm) cm->pending.get_properties = NULL; } + if (cm->pending.register_agent) + { + dbus_pending_call_cancel(cm->pending.register_agent); + cm->pending.register_agent = NULL; + } + _connman_object_clear(&cm->obj); free(cm); } @@ -764,6 +813,7 @@ static inline void _e_connman_system_name_owner_enter(const char *owner) { bus_owner = strdup(owner); connman_manager = _manager_new(); + _manager_agent_register(connman_manager); ecore_event_add(E_CONNMAN_EVENT_MANAGER_IN, NULL, NULL, NULL); econnman_mod_manager_inout(connman_manager); }