diff options
author | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2012-01-19 16:53:50 +0000 |
---|---|---|
committer | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2012-01-19 16:53:50 +0000 |
commit | dcb445bcf3e9ec2efd56550263052aca70beb08e (patch) | |
tree | 9a0d2260f2bbfdc8a6aa561c138baca1a58f8228 /notifier | |
parent | 9c80ffa289171a48b10cbda2098289ed0c7b96cc (diff) | |
download | cups-dcb445bcf3e9ec2efd56550263052aca70beb08e.tar.gz |
Merge changes from CUPS 1.6svn-r10188, including changes for <rdar://problem/10127258> CUPS 1.6: New printer/printing APIs
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@3618 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'notifier')
-rw-r--r-- | notifier/dbus.c | 122 |
1 files changed, 94 insertions, 28 deletions
diff --git a/notifier/dbus.c b/notifier/dbus.c index 4f5b48c55..99efbd859 100644 --- a/notifier/dbus.c +++ b/notifier/dbus.c @@ -3,7 +3,7 @@ * * D-Bus notifier for CUPS. * - * Copyright 2008-2010 by Apple Inc. + * Copyright 2008-2011 by Apple Inc. * Copyright (C) 2011 Red Hat, Inc. * Copyright (C) 2007 Tim Waugh <twaugh@redhat.com> * Copyright 1997-2005 by Easy Software Products. @@ -220,6 +220,8 @@ main(int argc, /* I - Number of command-line args */ const char *signame = NULL;/* DBUS signal name */ char *printer_reasons = NULL; /* Printer reasons string */ + char *job_reasons = NULL; + /* Job reasons string */ const char *nul = ""; /* Empty string value */ int no = 0; /* Boolean "no" value */ int params = PARAMS_NONE; @@ -281,11 +283,11 @@ main(int argc, /* I - Number of command-line args */ continue; attr = ippFindAttribute(msg, "notify-subscribed-event", - IPP_TAG_KEYWORD); + IPP_TAG_KEYWORD); if (!attr) continue; - event = attr->values[0].string.text; + event = ippGetString(attr, 0, NULL); if (!strncmp(event, "server-", 7)) { const char *word2 = event + 7; /* Second word */ @@ -361,9 +363,14 @@ main(int argc, /* I - Number of command-line args */ dbus_message_append_iter_init(message, &iter); attr = ippFindAttribute(msg, "notify-text", IPP_TAG_TEXT); - if (!attr) + if (attr) + { + const char *val = ippGetString(attr, 0, NULL); + if (!dbus_message_iter_append_string(&iter, &val)) + goto bail; + } + else goto bail; - dbus_message_iter_append_string(&iter, &(attr->values[0].string.text)); if (params >= PARAMS_PRINTER) { @@ -375,7 +382,11 @@ main(int argc, /* I - Number of command-line args */ /* STRING printer-uri or "" */ attr = ippFindAttribute(msg, "notify-printer-uri", IPP_TAG_URI); if (attr) - dbus_message_iter_append_string(&iter, &(attr->values[0].string.text)); + { + const char *val = ippGetString(attr, 0, NULL); + if (!dbus_message_iter_append_string(&iter, &val)) + goto bail; + } else { have_printer_params = 0; @@ -386,11 +397,14 @@ main(int argc, /* I - Number of command-line args */ if (have_printer_params) { attr = ippFindAttribute(msg, "printer-name", IPP_TAG_NAME); - if (attr) - dbus_message_iter_append_string(&iter, - &(attr->values[0].string.text)); - else - goto bail; + if (attr) + { + const char *val = ippGetString(attr, 0, NULL); + if (!dbus_message_iter_append_string(&iter, &val)) + goto bail; + } + else + goto bail; } else dbus_message_iter_append_string(&iter, &nul); @@ -400,7 +414,10 @@ main(int argc, /* I - Number of command-line args */ { attr = ippFindAttribute(msg, "printer-state", IPP_TAG_ENUM); if (attr) - dbus_message_iter_append_uint32(&iter, &(attr->values[0].integer)); + { + dbus_uint32_t val = ippGetInteger(attr, 0); + dbus_message_iter_append_uint32(&iter, &val); + } else goto bail; } @@ -414,22 +431,24 @@ main(int argc, /* I - Number of command-line args */ IPP_TAG_KEYWORD); if (attr) { - for (reasons_length = 0, i = 0; i < attr->num_values; i++) + int num_values = ippGetCount(attr); + for (reasons_length = 0, i = 0; i < num_values; i++) /* All need commas except the last, which needs a nul byte. */ - reasons_length += 1 + strlen(attr->values[i].string.text); + reasons_length += 1 + strlen(ippGetString(attr, i, NULL)); printer_reasons = malloc(reasons_length); if (!printer_reasons) goto bail; p = printer_reasons; - for (i = 0; i < attr->num_values; i++) + for (i = 0; i < num_values; i++) { if (i) *p++ = ','; - strcpy(p, attr->values[i].string.text); + strcpy(p, ippGetString(attr, i, NULL)); p += strlen(p); } - dbus_message_iter_append_string(&iter, &printer_reasons); + if (!dbus_message_iter_append_string(&iter, &printer_reasons)) + goto bail; } else goto bail; @@ -443,7 +462,10 @@ main(int argc, /* I - Number of command-line args */ attr = ippFindAttribute(msg, "printer-is-accepting-jobs", IPP_TAG_BOOLEAN); if (attr) - dbus_message_iter_append_boolean(&iter, &(attr->values[0].boolean)); + { + dbus_bool_t val = ippGetBoolean(attr, 0); + dbus_message_iter_append_boolean(&iter, &val); + } else goto bail; } @@ -453,37 +475,77 @@ main(int argc, /* I - Number of command-line args */ if (params >= PARAMS_JOB) { + char *p; /* Pointer into job_reasons */ + size_t reasons_length; /* Required size of job_reasons */ + int i; /* Looping var */ + /* UINT32 job-id */ attr = ippFindAttribute(msg, "notify-job-id", IPP_TAG_INTEGER); - if (!attr) + if (attr) + { + dbus_uint32_t val = ippGetInteger(attr, 0); + dbus_message_iter_append_uint32(&iter, &val); + } + else goto bail; - dbus_message_iter_append_uint32(&iter, &(attr->values[0].integer)); /* UINT32 job-state */ attr = ippFindAttribute(msg, "job-state", IPP_TAG_ENUM); - if (!attr) + if (attr) + { + dbus_uint32_t val = ippGetInteger(attr, 0); + dbus_message_iter_append_uint32(&iter, &val); + } + else goto bail; - dbus_message_iter_append_uint32(&iter, &(attr->values[0].integer)); /* STRING job-state-reasons */ attr = ippFindAttribute(msg, "job-state-reasons", IPP_TAG_KEYWORD); - if (!attr) + if (attr) + { + int num_values = ippGetCount(attr); + for (reasons_length = 0, i = 0; i < num_values; i++) + /* All need commas except the last, which needs a nul byte. */ + reasons_length += 1 + strlen(ippGetString(attr, i, NULL)); + job_reasons = malloc(reasons_length); + if (!job_reasons) + goto bail; + p = job_reasons; + for (i = 0; i < num_values; i++) + { + if (i) + *p++ = ','; + + strcpy(p, ippGetString(attr, i, NULL)); + p += strlen(p); + } + if (!dbus_message_iter_append_string(&iter, &job_reasons)) + goto bail; + } + else goto bail; - dbus_message_iter_append_string(&iter, &(attr->values[0].string.text)); /* STRING job-name or "" */ attr = ippFindAttribute(msg, "job-name", IPP_TAG_NAME); if (attr) - dbus_message_iter_append_string(&iter, &(attr->values[0].string.text)); + { + const char *val = ippGetString(attr, 0, NULL); + if (!dbus_message_iter_append_string(&iter, &val)) + goto bail; + } else dbus_message_iter_append_string(&iter, &nul); /* UINT32 job-impressions-completed */ attr = ippFindAttribute(msg, "job-impressions-completed", IPP_TAG_INTEGER); - if (!attr) + if (attr) + { + dbus_uint32_t val = ippGetInteger(attr, 0); + dbus_message_iter_append_uint32(&iter, &val); + } + else goto bail; - dbus_message_iter_append_uint32(&iter, &(attr->values[0].integer)); } dbus_connection_send(con, message, NULL); @@ -495,10 +557,14 @@ main(int argc, /* I - Number of command-line args */ bail: + dbus_message_unref(message); + if (printer_reasons) free(printer_reasons); - dbus_message_unref(message); + if (job_reasons) + free(job_reasons); + ippDelete(msg); } |