Commit 924e08d2 authored by Bastien Nocera's avatar Bastien Nocera Committed by Daniel Drake

Add device name property

Add GetProperties method, with a single "Name" properties into
the hashtable.
Use the device name property in the PAM module, and in the list test.
parent 69c131f7
......@@ -10,9 +10,6 @@ Enforce command sequences:
only allow VerifyStop during a verification
etc
Add Device Properties:
- device name
Rethink enums and results passed, should be strings and D-Bus errors
Verify PAM messages fit with GDM/gnome-screensaver
......
......@@ -236,6 +236,8 @@ typedef struct {
gboolean timed_out;
pam_handle_t *pamh;
GMainLoop *loop;
char *driver;
} verify_data;
static void verify_result(GObject *object, int result, gpointer user_data)
......@@ -255,13 +257,11 @@ static void verify_finger_selected(GObject *object, int finger, gpointer user_da
{
verify_data *data = user_data;
char *msg;
//FIXME
const char *driver_name = "Fingerprint reader";
if (finger == -1) {
msg = g_strdup_printf ("Scan finger on %s", driver_name);
msg = g_strdup_printf ("Scan finger on %s", data->driver);
} else {
msg = g_strdup_printf ("Scan %s finger on %s", fingerstr(finger), driver_name);
msg = g_strdup_printf ("Scan %s finger on %s", fingerstr(finger), data->driver);
}
D(g_message ("verify_finger_selected %s", msg));
send_info_msg (data->pamh, msg);
......@@ -285,6 +285,7 @@ static gboolean verify_timeout_cb (gpointer user_data)
static int do_verify(DBusGConnection *connection, GMainLoop *loop, pam_handle_t *pamh, DBusGProxy *dev)
{
GError *error;
GHashTable *props;
verify_data *data;
int ret;
......@@ -293,6 +294,14 @@ static int do_verify(DBusGConnection *connection, GMainLoop *loop, pam_handle_t
data->pamh = pamh;
data->loop = loop;
if (dbus_g_proxy_call (dev, "GetProperties", &error, G_TYPE_INVALID,
dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_STRING), &props, G_TYPE_INVALID)) {
data->driver = g_strdup (g_hash_table_lookup (props, "Name"));
g_hash_table_destroy (props);
}
if (!data->driver)
data->driver = g_strdup ("Fingerprint reader");
dbus_g_proxy_add_signal(dev, "VerifyStatus", G_TYPE_INT, NULL);
dbus_g_proxy_add_signal(dev, "VerifyFingerSelected", G_TYPE_INT, NULL);
dbus_g_proxy_connect_signal(dev, "VerifyStatus", G_CALLBACK(verify_result),
......@@ -355,6 +364,7 @@ static int do_verify(DBusGConnection *connection, GMainLoop *loop, pam_handle_t
dbus_g_proxy_disconnect_signal(dev, "VerifyStatus", G_CALLBACK(verify_result), data);
dbus_g_proxy_disconnect_signal(dev, "VerifyFingerSelected", G_CALLBACK(verify_finger_selected), data);
g_free (data->driver);
g_free (data);
return ret;
......
......@@ -54,6 +54,9 @@ static void fprint_device_list_enrolled_fingers(FprintDevice *rdev,
static void fprint_device_delete_enrolled_fingers(FprintDevice *rdev,
const char *username,
DBusGMethodInvocation *context);
static void fprint_device_get_properties (FprintDevice *rdev,
GHashTable **props,
DBusGMethodInvocation *context);
#include "device-dbus-glue.h"
......@@ -1034,3 +1037,22 @@ static void fprint_device_delete_enrolled_fingers(FprintDevice *rdev,
dbus_g_method_return(context);
}
static void
fprint_device_get_properties (FprintDevice *rdev,
GHashTable **props,
DBusGMethodInvocation *context)
{
FprintDevicePrivate *priv = DEVICE_GET_PRIVATE(rdev);
GHashTable *table;
struct fp_driver *driver;
const char *driver_name;
table = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
driver = fp_dscv_dev_get_driver (priv->ddev);
driver_name = fp_driver_get_full_name (driver);
g_hash_table_insert (table, "Name", g_strdup (driver_name));
*props = table;
}
......@@ -54,6 +54,10 @@
<arg type="i" name="result" />
</signal>
<method name="GetProperties">
<arg type="a{ss}" name="properties" direction="out" />
</method>
</interface>
</node>
......@@ -119,6 +119,7 @@ static void list_fingerprints(DBusGProxy *dev, const char *username)
{
GError *error = NULL;
GArray *fingers;
GHashTable *props;
guint i;
int fingernum;
......@@ -130,7 +131,10 @@ static void list_fingerprints(DBusGProxy *dev, const char *username)
return;
}
g_print("Fingerprints for user %s:\n", username);
if (!net_reactivated_Fprint_Device_get_properties(dev, &props, &error))
g_error("GetProperties failed: %s", error->message);
g_print("Fingerprints for user %s on %s:\n", username, (char *) g_hash_table_lookup (props, "Name"));
for (i = 0; i < fingers->len; i++) {
fingernum = g_array_index(fingers, guint32, i);
g_print(" - #%d: %s\n", fingernum, fingerstr(fingernum));
......@@ -138,6 +142,7 @@ static void list_fingerprints(DBusGProxy *dev, const char *username)
fingernum = g_array_index(fingers, guint32, 0);
g_array_free(fingers, TRUE);
g_hash_table_destroy (props);
}
int main(int argc, char **argv)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment