You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
4.6 KiB
185 lines
4.6 KiB
/*
|
|
* Notification routines for CUPS.
|
|
*
|
|
* Copyright 2007-2013 by Apple Inc.
|
|
* Copyright 2005-2006 by Easy Software Products.
|
|
*
|
|
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
|
|
*/
|
|
|
|
/*
|
|
* Include necessary headers...
|
|
*/
|
|
|
|
#include "cups-private.h"
|
|
#include "debug-internal.h"
|
|
|
|
|
|
/*
|
|
* 'cupsNotifySubject()' - Return the subject for the given notification message.
|
|
*
|
|
* The returned string must be freed by the caller using @code free@.
|
|
*
|
|
* @since CUPS 1.2/macOS 10.5@
|
|
*/
|
|
|
|
char * /* O - Subject string or @code NULL@ */
|
|
cupsNotifySubject(cups_lang_t *lang, /* I - Language data */
|
|
ipp_t *event) /* I - Event data */
|
|
{
|
|
char buffer[1024]; /* Subject buffer */
|
|
const char *prefix, /* Prefix on subject */
|
|
*state; /* Printer/job state string */
|
|
ipp_attribute_t *job_id, /* notify-job-id */
|
|
*job_name, /* job-name */
|
|
*job_state, /* job-state */
|
|
*printer_name, /* printer-name */
|
|
*printer_state, /* printer-state */
|
|
*printer_uri, /* notify-printer-uri */
|
|
*subscribed; /* notify-subscribed-event */
|
|
|
|
|
|
/*
|
|
* Range check input...
|
|
*/
|
|
|
|
if (!event || !lang)
|
|
return (NULL);
|
|
|
|
/*
|
|
* Get the required attributes...
|
|
*/
|
|
|
|
job_id = ippFindAttribute(event, "notify-job-id", IPP_TAG_INTEGER);
|
|
job_name = ippFindAttribute(event, "job-name", IPP_TAG_NAME);
|
|
job_state = ippFindAttribute(event, "job-state", IPP_TAG_ENUM);
|
|
printer_name = ippFindAttribute(event, "printer-name", IPP_TAG_NAME);
|
|
printer_state = ippFindAttribute(event, "printer-state", IPP_TAG_ENUM);
|
|
printer_uri = ippFindAttribute(event, "notify-printer-uri", IPP_TAG_URI);
|
|
subscribed = ippFindAttribute(event, "notify-subscribed-event",
|
|
IPP_TAG_KEYWORD);
|
|
|
|
|
|
if (job_id && printer_name && printer_uri && job_state)
|
|
{
|
|
/*
|
|
* Job event...
|
|
*/
|
|
|
|
prefix = _cupsLangString(lang, _("Print Job:"));
|
|
|
|
switch (job_state->values[0].integer)
|
|
{
|
|
case IPP_JSTATE_PENDING :
|
|
state = _cupsLangString(lang, _("pending"));
|
|
break;
|
|
case IPP_JSTATE_HELD :
|
|
state = _cupsLangString(lang, _("held"));
|
|
break;
|
|
case IPP_JSTATE_PROCESSING :
|
|
state = _cupsLangString(lang, _("processing"));
|
|
break;
|
|
case IPP_JSTATE_STOPPED :
|
|
state = _cupsLangString(lang, _("stopped"));
|
|
break;
|
|
case IPP_JSTATE_CANCELED :
|
|
state = _cupsLangString(lang, _("canceled"));
|
|
break;
|
|
case IPP_JSTATE_ABORTED :
|
|
state = _cupsLangString(lang, _("aborted"));
|
|
break;
|
|
case IPP_JSTATE_COMPLETED :
|
|
state = _cupsLangString(lang, _("completed"));
|
|
break;
|
|
default :
|
|
state = _cupsLangString(lang, _("unknown"));
|
|
break;
|
|
}
|
|
|
|
snprintf(buffer, sizeof(buffer), "%s %s-%d (%s) %s",
|
|
prefix,
|
|
printer_name->values[0].string.text,
|
|
job_id->values[0].integer,
|
|
job_name ? job_name->values[0].string.text :
|
|
_cupsLangString(lang, _("untitled")),
|
|
state);
|
|
}
|
|
else if (printer_uri && printer_name && printer_state)
|
|
{
|
|
/*
|
|
* Printer event...
|
|
*/
|
|
|
|
prefix = _cupsLangString(lang, _("Printer:"));
|
|
|
|
switch (printer_state->values[0].integer)
|
|
{
|
|
case IPP_PSTATE_IDLE :
|
|
state = _cupsLangString(lang, _("idle"));
|
|
break;
|
|
case IPP_PSTATE_PROCESSING :
|
|
state = _cupsLangString(lang, _("processing"));
|
|
break;
|
|
case IPP_PSTATE_STOPPED :
|
|
state = _cupsLangString(lang, _("stopped"));
|
|
break;
|
|
default :
|
|
state = _cupsLangString(lang, _("unknown"));
|
|
break;
|
|
}
|
|
|
|
snprintf(buffer, sizeof(buffer), "%s %s %s",
|
|
prefix,
|
|
printer_name->values[0].string.text,
|
|
state);
|
|
}
|
|
else if (subscribed)
|
|
strlcpy(buffer, subscribed->values[0].string.text, sizeof(buffer));
|
|
else
|
|
return (NULL);
|
|
|
|
/*
|
|
* Duplicate and return the subject string...
|
|
*/
|
|
|
|
return (strdup(buffer));
|
|
}
|
|
|
|
|
|
/*
|
|
* 'cupsNotifyText()' - Return the text for the given notification message.
|
|
*
|
|
* The returned string must be freed by the caller using @code free@.
|
|
*
|
|
* @since CUPS 1.2/macOS 10.5@
|
|
*/
|
|
|
|
char * /* O - Message text or @code NULL@ */
|
|
cupsNotifyText(cups_lang_t *lang, /* I - Language data */
|
|
ipp_t *event) /* I - Event data */
|
|
{
|
|
ipp_attribute_t *notify_text; /* notify-text */
|
|
|
|
|
|
/*
|
|
* Range check input...
|
|
*/
|
|
|
|
if (!event || !lang)
|
|
return (NULL);
|
|
|
|
/*
|
|
* Get the notify-text attribute from the server...
|
|
*/
|
|
|
|
if ((notify_text = ippFindAttribute(event, "notify-text",
|
|
IPP_TAG_TEXT)) == NULL)
|
|
return (NULL);
|
|
|
|
/*
|
|
* Return a copy...
|
|
*/
|
|
|
|
return (strdup(notify_text->values[0].string.text));
|
|
}
|