summaryrefslogtreecommitdiff
path: root/notifier
diff options
context:
space:
mode:
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2012-01-19 16:53:50 +0000
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2012-01-19 16:53:50 +0000
commitdcb445bcf3e9ec2efd56550263052aca70beb08e (patch)
tree9a0d2260f2bbfdc8a6aa561c138baca1a58f8228 /notifier
parent9c80ffa289171a48b10cbda2098289ed0c7b96cc (diff)
downloadcups-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.c122
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);
}