From f11ea67a8115a9d1851bf6aa41263f41656853c6 Mon Sep 17 00:00:00 2001 From: englebass Date: Sun, 23 Nov 2008 19:56:39 +0000 Subject: [PATCH] e_nms_connection_secrets_get_secrets git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/e_dbus@37778 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/bin/nm.c | 14 ++++++++++- src/lib/nm/E_Nm.h | 2 ++ src/lib/nm/e_nm_private.h | 2 ++ src/lib/nm/e_nms_connection.c | 58 +++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 73 insertions(+), 3 deletions(-) diff --git a/src/bin/nm.c b/src/bin/nm.c index 6fdb00a..ecf6e0b 100644 --- a/src/bin/nm.c +++ b/src/bin/nm.c @@ -66,7 +66,18 @@ dump_settings(void *value, void *data) static int cb_nms_connection_settings(void *data, Ecore_Hash *settings) { - ecore_hash_for_each_node(settings, dump_settings, NULL); + printf("Secrets:\n"); + if (settings) + ecore_hash_for_each_node(settings, dump_settings, NULL); + return 1; +} + +static int +cb_nms_connection_secrets(void *data, Ecore_Hash *secrets) +{ + printf("Secrets:\n"); + if (secrets) + ecore_hash_for_each_node(secrets, dump_settings, NULL); return 1; } @@ -82,6 +93,7 @@ cb_nms_connections(void *data, Ecore_List *list) { e_nms_connection_dump(conn); e_nms_connection_get_settings(conn, cb_nms_connection_settings, NULL); + e_nms_connection_secrets_get_secrets(conn, "802-11-wireless-security", NULL, 0, cb_nms_connection_secrets, NULL); } ecore_list_destroy(list); } diff --git a/src/lib/nm/E_Nm.h b/src/lib/nm/E_Nm.h index 9fa5372..c625b15 100644 --- a/src/lib/nm/E_Nm.h +++ b/src/lib/nm/E_Nm.h @@ -352,6 +352,8 @@ extern "C" { /* TODO: e_nms_connection_update */ /* TODO: e_nms_connection_delete */ EAPI int e_nms_connection_get_settings(E_NMS_Connection *conn, int (*cb_func)(void *data, Ecore_Hash *settings), void *data); + EAPI int e_nms_connection_secrets_get_secrets(E_NMS_Connection *connection, const char *setting_name, Ecore_List *hints, int request_new, int (*cb_func)(void *data, Ecore_Hash *secrets), void *data); + /* TODO: e_nms_connection_secrets_get_secrets */ EAPI void e_nms_connection_callback_updated_set(E_NMS_Connection *connection, int (*cb_func)(E_NMS_Connection *conn, Ecore_Hash *settings)); diff --git a/src/lib/nm/e_nm_private.h b/src/lib/nm/e_nm_private.h index cd8e395..99279b3 100644 --- a/src/lib/nm/e_nm_private.h +++ b/src/lib/nm/e_nm_private.h @@ -15,11 +15,13 @@ #define E_NMS_SERVICE_USER "org.freedesktop.NetworkManagerUserSettings" #define _E_NMS_INTERFACE "org.freedesktop.NetworkManagerSettings" #define _E_NMS_INTERFACE_CONNECTION "org.freedesktop.NetworkManagerSettings.Connection" +#define _E_NMS_INTERFACE_CONNECTION_SECRETS "org.freedesktop.NetworkManagerSettings.Connection.Secrets" #define e_nm_call_new(member) dbus_message_new_method_call(_E_NM_SERVICE, E_NM_PATH, _E_NM_INTERFACE, member) #define e_nm_device_wireless_call_new(device, member) dbus_message_new_method_call(_E_NM_SERVICE, device, _E_NM_INTERFACE_DEVICE_WIRELESS, member) #define e_nms_call_new(service, member) dbus_message_new_method_call(service, _E_NMS_PATH, _E_NMS_INTERFACE, member) #define e_nms_connection_call_new(service, conn, member) dbus_message_new_method_call(service, conn, _E_NMS_INTERFACE_CONNECTION, member) +#define e_nms_connection_secrets_call_new(service, conn, member) dbus_message_new_method_call(service, conn, _E_NMS_INTERFACE_CONNECTION_SECRETS, member) #define e_nm_properties_get(con, prop, cb, data) e_dbus_properties_get(con, _E_NM_SERVICE, E_NM_PATH, _E_NM_INTERFACE, prop, (E_DBus_Method_Return_Cb) cb, data) #define e_nm_properties_set(con, prop, type, value, cb, data) e_dbus_properties_set(con, _E_NM_SERVICE, E_NM_PATH, _E_NM_INTERFACE, prop, type, value, (E_DBus_Method_Return_Cb) cb, data) diff --git a/src/lib/nm/e_nms_connection.c b/src/lib/nm/e_nms_connection.c index 3c5c072..f25db2d 100644 --- a/src/lib/nm/e_nms_connection.c +++ b/src/lib/nm/e_nms_connection.c @@ -18,7 +18,7 @@ cb_updated(void *data, DBusMessage *msg) } static void -cb_nms_settings(void *data, DBusMessage *msg, DBusError *err) +cb_settings(void *data, DBusMessage *msg, DBusError *err) { Reply_Data *d; Ecore_Hash *settings; @@ -37,6 +37,26 @@ cb_nms_settings(void *data, DBusMessage *msg, DBusError *err) free(d); } +static void +cb_secrets(void *data, DBusMessage *msg, DBusError *err) +{ + Reply_Data *d; + Ecore_Hash *secrets; + + d = data; + if (dbus_error_is_set(err)) + { + printf("Error: %s - %s\n", err->name, err->message); + d->cb_func(d->data, NULL); + free(d); + return; + } + + secrets = parse_settings(msg); + d->cb_func(d->data, secrets); + free(d); +} + EAPI E_NMS_Connection * e_nms_connection_get(E_NMS *nms, const char *service_name, const char *connection) { @@ -102,7 +122,41 @@ e_nms_connection_get_settings(E_NMS_Connection *connection, int (*cb_func)(void msg = e_nms_connection_call_new(conn->conn.service_name, conn->conn.path, "GetSettings"); - ret = e_dbus_message_send(conn->nmi->conn, msg, cb_nms_settings, -1, d) ? 1 : 0; + ret = e_dbus_message_send(conn->nmi->conn, msg, cb_settings, -1, d) ? 1 : 0; + dbus_message_unref(msg); + return ret; +} + +EAPI int +e_nms_connection_secrets_get_secrets(E_NMS_Connection *connection, const char *setting_name, Ecore_List *hints, int request_new, int (*cb_func)(void *data, Ecore_Hash *secrets), void *data) +{ + DBusMessage *msg; + DBusMessageIter iter, a_iter; + Reply_Data *d; + E_NMS_Connection_Internal *conn; + int ret; + + conn = (E_NMS_Connection_Internal *)connection; + d = calloc(1, sizeof(Reply_Data)); + d->object = conn; + d->cb_func = OBJECT_CB(cb_func); + d->data = data; + + msg = e_nms_connection_secrets_call_new(conn->conn.service_name, conn->conn.path, "GetSecrets"); + dbus_message_iter_init_append(msg, &iter); + dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &setting_name); + dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "s", &a_iter); + if (hints) + { + const char *hint; + ecore_list_first_goto(hints); + while ((hint = ecore_list_next(hints))) + dbus_message_iter_append_basic(&a_iter, DBUS_TYPE_STRING, &hint); + } + dbus_message_iter_close_container(&iter, &a_iter); + dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &request_new); + + ret = e_dbus_message_send(conn->nmi->conn, msg, cb_secrets, -1, d) ? 1 : 0; dbus_message_unref(msg); return ret; } -- 2.7.4