From 9f092f3bd37d5f67eeb909bfb3dc68b8ac2bc1f1 Mon Sep 17 00:00:00 2001 From: mkasik Date: Aug 13 2009 14:02:25 +0000 Subject: - Add parameters to DevicesGet method. --- diff --git a/cups-pk-helper.spec b/cups-pk-helper.spec index c848169..73ae799 100644 --- a/cups-pk-helper.spec +++ b/cups-pk-helper.spec @@ -1,6 +1,6 @@ Name: cups-pk-helper Version: 0.0.4 -Release: 4%{?dist} +Release: 5%{?dist} Summary: A helper that makes system-config-printer use PolicyKit Group: System Environment/Base @@ -70,6 +70,9 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Thu Aug 13 2009 Marek Kasik - 0.0.4-5 +- Add parameters to DevicesGet method. + * Fri Jul 24 2009 Fedora Release Engineering - 0.0.4-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild diff --git a/get_devices.patch b/get_devices.patch index b7a6107..3b14707 100644 --- a/get_devices.patch +++ b/get_devices.patch @@ -1,5 +1,5 @@ --- cups-pk-helper-0.0.4/src/cups.c 2009-03-04 13:41:53.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups.c 2009-07-16 12:49:46.000000000 +0200 ++++ cups-pk-helper-0.0.4/src/cups.c 2009-08-13 12:15:47.000000000 +0200 @@ -58,7 +58,7 @@ getPPDs getServerPPD @@ -9,116 +9,225 @@ getJobs getJobAttributes ~!+* cancelJob -@@ -1807,6 +1807,89 @@ cph_cups_job_get_status (CphCups *cup +@@ -1807,6 +1807,192 @@ cph_cups_job_get_status (CphCups *cup return status; } -+void get_devices_cb (const char *device_class, -+ const char *device_id, -+ const char *device_info, -+ const char *device_make_and_model, -+ const char *device_uri, -+ const char *device_location, -+ void *user_data) -+{ -+ GHashTable *hash = (GHashTable*) user_data; ++struct _CphCupsGetDevices { + int iter; ++ GHashTable *hash; ++}; + -+ g_return_if_fail (hash != NULL); ++static void ++_cph_cups_get_devices_cb (const char *device_class, ++ const char *device_id, ++ const char *device_info, ++ const char *device_make_and_model, ++ const char *device_uri, ++ const char *device_location, ++ void *user_data) ++{ ++ struct _CphCupsGetDevices *data = user_data; + -+ iter = atoi (g_hash_table_lookup (hash, "iter")); -+ iter++; ++ g_return_if_fail (data != NULL); + -+ if (device_class && strlen (device_class) > 0) -+ g_hash_table_replace (hash, -+ g_strdup_printf ("device-class:%d", iter), ++ if (device_class && device_class[0] != '\0') ++ g_hash_table_replace (data->hash, ++ g_strdup_printf ("device-class:%d", ++ data->iter), + g_strdup (device_class)); -+ if (device_id && strlen (device_id) > 0) -+ g_hash_table_replace (hash, -+ g_strdup_printf ("device-id:%d", iter), ++ if (device_id && device_id[0] != '\0') ++ g_hash_table_replace (data->hash, ++ g_strdup_printf ("device-id:%d", ++ data->iter), + g_strdup (device_id)); -+ if (device_info && strlen (device_info) > 0) -+ g_hash_table_replace (hash, -+ g_strdup_printf ("device-info:%d", iter), ++ if (device_info && device_info[0] != '\0') ++ g_hash_table_replace (data->hash, ++ g_strdup_printf ("device-info:%d", ++ data->iter), + g_strdup (device_info)); -+ if (device_make_and_model && strlen (device_make_and_model) > 0) -+ g_hash_table_replace (hash, -+ g_strdup_printf ("device-make-and-model:%d", iter), ++ if (device_make_and_model && device_make_and_model[0] != '\0') ++ g_hash_table_replace (data->hash, ++ g_strdup_printf ("device-make-and-model:%d", ++ data->iter), + g_strdup (device_make_and_model)); -+ if (device_uri && strlen (device_uri) > 0) -+ g_hash_table_replace (hash, -+ g_strdup_printf ("device-uri:%d", iter), ++ if (device_uri && device_uri[0] != '\0') ++ g_hash_table_replace (data->hash, ++ g_strdup_printf ("device-uri:%d", ++ data->iter), + g_strdup (device_uri)); -+ if (device_location && strlen (device_location) > 0) -+ g_hash_table_replace (hash, -+ g_strdup_printf ("device-location:%d ", iter), ++ if (device_location && device_location[0] != '\0') ++ g_hash_table_replace (data->hash, ++ g_strdup_printf ("device-location:%d ", ++ data->iter), + g_strdup (device_location)); -+ g_hash_table_replace (hash, -+ g_strdup ("iter"), -+ g_strdup_printf ("%d", iter)); ++ ++ data->iter++; +} + -+GHashTable *cph_cups_devices_get (CphCups *cups) ++GHashTable * ++cph_cups_devices_get (CphCups *cups, ++ int timeout, ++ const char *include_schemes, ++ const char *exclude_schemes) +{ -+ int retval; -+ GHashTable *hash; -+ cups_option_t *settings; -+ int num_settings, i; ++ struct _CphCupsGetDevices data; ++ char *error_str; + + g_return_val_if_fail (CPH_IS_CUPS (cups), NULL); + -+ hash = g_hash_table_new_full (g_str_hash, g_str_equal, -+ g_free, g_free); ++ data.iter = 0; ++ data.hash = g_hash_table_new_full (g_str_hash, g_str_equal, ++ g_free, g_free); ++ ++#if (CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR >= 4) || CUPS_VERSION_MAJOR > 1 ++ ipp_status_t retval; ++ int timeout_param = CUPS_TIMEOUT_DEFAULT; ++ char *include_schemes_param = (char *) CUPS_INCLUDE_ALL; ++ char *exclude_schemes_param = (char *) CUPS_EXCLUDE_NONE; + -+ g_hash_table_replace (hash, -+ g_strdup ("iter"), -+ g_strdup ("-1")); ++ if (timeout > 0) ++ timeout_param = timeout; ++ ++ if (include_schemes && strlen (include_schemes) > 0) ++ include_schemes_param = g_strdup (include_schemes); ++ ++ if (exclude_schemes && strlen (exclude_schemes) > 0) ++ exclude_schemes_param = g_strdup (exclude_schemes); + + retval = cupsGetDevices (cups->priv->connection, -+ CUPS_TIMEOUT_DEFAULT, -+ CUPS_INCLUDE_ALL, -+ CUPS_EXCLUDE_NONE, -+ get_devices_cb, -+ hash); ++ timeout_param, ++ include_schemes_param, ++ exclude_schemes_param, ++ _cph_cups_get_devices_cb, ++ &data); ++ ++ g_free (include_schemes_param); ++ g_free (exclude_schemes_param); ++ ++ if (retval != IPP_OK) ++ goto error; ++#else ++ ipp_t *request; ++ const char *resource_char; ++ ipp_t *reply; ++ ipp_attribute_t *attr; ++ const char *device_class; ++ const char *device_id; ++ const char *device_info; ++ const char *device_location; ++ const char *device_make_and_model; ++ const char *device_uri; + -+ if (retval != IPP_OK) { -+ char *error; ++ request = ippNewRequest (CUPS_GET_DEVICES); ++ resource_char = _cph_cups_get_resource (CPH_RESOURCE_ROOT); ++ reply = cupsDoRequest (cups->priv->connection, ++ request, resource_char); + -+ error = g_strdup_printf ("Can not get devices."); -+ _cph_cups_set_internal_status (cups, error); -+ g_free (error); ++ if (!reply) ++ goto error; + -+ return NULL; ++ for (attr = reply->attrs; attr; attr = attr->next) { ++ while (attr && attr->group_tag != IPP_TAG_PRINTER) ++ attr = attr->next; ++ ++ if (attr == NULL) ++ break; ++ ++ device_class = NULL; ++ device_id = NULL; ++ device_info = NULL; ++ device_location = ""; ++ device_make_and_model = NULL; ++ device_uri = NULL; ++ ++ while (attr && attr->group_tag == IPP_TAG_PRINTER) { ++ g_message ("name: %s", attr->name); ++ if (attr->name && ++ strcmp (attr->name, "device-class") == 0 && ++ attr->value_tag == IPP_TAG_KEYWORD) ++ device_class = g_strdup (attr->values[0].string.text); ++ else if (attr->name && ++ strcmp (attr->name, "device-id") == 0 && ++ attr->value_tag == IPP_TAG_TEXT) ++ device_id = g_strdup (attr->values[0].string.text); ++ else if (attr->name && ++ strcmp (attr->name, "device-info") == 0 && ++ attr->value_tag == IPP_TAG_TEXT) ++ device_info = g_strdup (attr->values[0].string.text); ++ else if (attr->name && ++ strcmp (attr->name, "device-location") == 0 && ++ attr->value_tag == IPP_TAG_TEXT) ++ device_location = g_strdup (attr->values[0].string.text); ++ else if (attr->name && ++ strcmp (attr->name, "device-make-and-model") == 0 && ++ attr->value_tag == IPP_TAG_TEXT) ++ device_make_and_model = g_strdup (attr->values[0].string.text); ++ else if (attr->name && ++ strcmp (attr->name, "device-uri") == 0 && ++ attr->value_tag == IPP_TAG_URI) ++ device_uri = g_strdup (attr->values[0].string.text); ++ ++ attr = attr->next; ++ } ++ ++ if (device_class && device_id && device_info && device_make_and_model && ++ device_uri) ++ _cph_cups_get_devices_cb (device_class, ++ device_id, ++ device_info, ++ device_make_and_model, ++ device_uri, ++ device_location, ++ &data); ++ ++ if (attr == NULL) ++ break; + } + -+ g_hash_table_remove (hash, "iter"); ++ ippDelete (reply); ++#endif ++ ++ return data.hash; ++ ++error: ++ error_str = g_strdup ("Can not get devices."); ++ _cph_cups_set_internal_status (cups, error_str); ++ g_hash_table_destroy (data.hash); ++ g_free (error_str); + -+ return hash; ++ return NULL; +} + /****************************************************** * Non-object functions ******************************************************/ --- cups-pk-helper-0.0.4/src/cups.h 2009-02-28 03:38:13.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups.h 2009-07-16 12:50:44.000000000 +0200 -@@ -184,6 +184,8 @@ CphJobStatus cph_cups_job_get_status (Cp ++++ cups-pk-helper-0.0.4/src/cups.h 2009-08-13 12:16:08.000000000 +0200 +@@ -184,6 +184,11 @@ CphJobStatus cph_cups_job_get_status (Cp int job_id, const char *user); -+GHashTable *cph_cups_devices_get (CphCups *cups); ++GHashTable *cph_cups_devices_get (CphCups *cups, ++ int timeout, ++ const char *include_schemes, ++ const char *exclude_schemes); + G_END_DECLS #endif /* CPH_CUPS_H */ ---- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-07-16 12:46:03.000000000 +0200 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-07-16 12:52:02.000000000 +0200 -@@ -1103,3 +1103,21 @@ cph_mechanism_job_set_hold_until (CphMec +--- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-08-13 12:14:09.000000000 +0200 ++++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-08-13 12:16:48.000000000 +0200 +@@ -1103,3 +1103,27 @@ cph_mechanism_job_set_hold_until (CphMec return TRUE; } + +gboolean +cph_mechanism_devices_get (CphMechanism *mechanism, ++ int timeout, ++ const char *include_schemes, ++ const char *exclude_schemes, + DBusGMethodInvocation *context) +{ + GHashTable *devices; @@ -128,41 +237,50 @@ + if (!_check_polkit_for_action (mechanism, context, "devices-get")) + return FALSE; + -+ devices = cph_cups_devices_get (mechanism->priv->cups); ++ devices = cph_cups_devices_get (mechanism->priv->cups, ++ timeout, ++ include_schemes, ++ exclude_schemes); + _cph_mechanism_return_error_and_value (mechanism, context, + devices == NULL, devices); + + return TRUE; +} --- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.h 2009-02-28 03:38:13.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.h 2009-07-16 12:52:37.000000000 +0200 -@@ -236,6 +236,10 @@ cph_mechanism_job_set_hold_until (CphMec ++++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.h 2009-08-13 12:17:10.000000000 +0200 +@@ -236,6 +236,13 @@ cph_mechanism_job_set_hold_until (CphMec const char *job_hold_until, DBusGMethodInvocation *context); +gboolean +cph_mechanism_devices_get (CphMechanism *mechanism, ++ int timeout, ++ const char *include_schemes, ++ const char *exclude_schemes, + DBusGMethodInvocation *context); + G_END_DECLS #endif /* CPH_MECHANISM_H */ --- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.xml 2009-02-28 03:38:13.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.xml 2009-07-16 12:53:27.000000000 +0200 -@@ -192,5 +192,11 @@ ++++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.xml 2009-08-13 12:17:36.000000000 +0200 +@@ -192,5 +192,14 @@ + + + ++ ++ ++ + + + ---- cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-07-16 12:46:03.000000000 +0200 -+++ cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-07-16 12:53:57.000000000 +0200 +--- cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-08-13 12:14:09.000000000 +0200 ++++ cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-08-13 12:18:24.000000000 +0200 @@ -86,6 +86,15 @@