]> git.ipfire.org Git - thirdparty/cups.git/blame - cups/notify.c
Fix issue with HTTP Digest authentication, add unit tests (rdar://41709086)
[thirdparty/cups.git] / cups / notify.c
CommitLineData
fa73b229 1/*
503b54c9 2 * Notification routines for CUPS.
fa73b229 3 *
503b54c9
MS
4 * Copyright 2007-2013 by Apple Inc.
5 * Copyright 2005-2006 by Easy Software Products.
fa73b229 6 *
e3101897 7 * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
fa73b229 8 */
9
10/*
11 * Include necessary headers...
12 */
13
71e16022 14#include "cups-private.h"
fa73b229 15
16
17/*
18 * 'cupsNotifySubject()' - Return the subject for the given notification message.
19 *
568fa3fa 20 * The returned string must be freed by the caller using @code free@.
fa73b229 21 *
8072030b 22 * @since CUPS 1.2/macOS 10.5@
fa73b229 23 */
24
5a738aea 25char * /* O - Subject string or @code NULL@ */
fa73b229 26cupsNotifySubject(cups_lang_t *lang, /* I - Language data */
27 ipp_t *event) /* I - Event data */
28{
29 char buffer[1024]; /* Subject buffer */
30 const char *prefix, /* Prefix on subject */
31 *state; /* Printer/job state string */
32 ipp_attribute_t *job_id, /* notify-job-id */
33 *job_name, /* job-name */
34 *job_state, /* job-state */
35 *printer_name, /* printer-name */
36 *printer_state, /* printer-state */
37 *printer_uri, /* notify-printer-uri */
38 *subscribed; /* notify-subscribed-event */
39
40
41 /*
42 * Range check input...
43 */
44
45 if (!event || !lang)
46 return (NULL);
47
48 /*
49 * Get the required attributes...
50 */
51
52 job_id = ippFindAttribute(event, "notify-job-id", IPP_TAG_INTEGER);
53 job_name = ippFindAttribute(event, "job-name", IPP_TAG_NAME);
54 job_state = ippFindAttribute(event, "job-state", IPP_TAG_ENUM);
55 printer_name = ippFindAttribute(event, "printer-name", IPP_TAG_NAME);
56 printer_state = ippFindAttribute(event, "printer-state", IPP_TAG_ENUM);
57 printer_uri = ippFindAttribute(event, "notify-printer-uri", IPP_TAG_URI);
58 subscribed = ippFindAttribute(event, "notify-subscribed-event",
59 IPP_TAG_KEYWORD);
60
61
62 if (job_id && printer_name && printer_uri && job_state)
63 {
64 /*
65 * Job event...
66 */
67
68 prefix = _cupsLangString(lang, _("Print Job:"));
69
70 switch (job_state->values[0].integer)
71 {
cb7f98ee 72 case IPP_JSTATE_PENDING :
fa73b229 73 state = _cupsLangString(lang, _("pending"));
74 break;
cb7f98ee 75 case IPP_JSTATE_HELD :
fa73b229 76 state = _cupsLangString(lang, _("held"));
77 break;
cb7f98ee 78 case IPP_JSTATE_PROCESSING :
fa73b229 79 state = _cupsLangString(lang, _("processing"));
80 break;
cb7f98ee 81 case IPP_JSTATE_STOPPED :
fa73b229 82 state = _cupsLangString(lang, _("stopped"));
83 break;
cb7f98ee 84 case IPP_JSTATE_CANCELED :
fa73b229 85 state = _cupsLangString(lang, _("canceled"));
86 break;
cb7f98ee 87 case IPP_JSTATE_ABORTED :
fa73b229 88 state = _cupsLangString(lang, _("aborted"));
89 break;
cb7f98ee 90 case IPP_JSTATE_COMPLETED :
fa73b229 91 state = _cupsLangString(lang, _("completed"));
92 break;
93 default :
94 state = _cupsLangString(lang, _("unknown"));
95 break;
96 }
97
98 snprintf(buffer, sizeof(buffer), "%s %s-%d (%s) %s",
99 prefix,
100 printer_name->values[0].string.text,
101 job_id->values[0].integer,
102 job_name ? job_name->values[0].string.text :
103 _cupsLangString(lang, _("untitled")),
104 state);
105 }
106 else if (printer_uri && printer_name && printer_state)
107 {
108 /*
109 * Printer event...
110 */
111
112 prefix = _cupsLangString(lang, _("Printer:"));
113
114 switch (printer_state->values[0].integer)
115 {
cb7f98ee 116 case IPP_PSTATE_IDLE :
fa73b229 117 state = _cupsLangString(lang, _("idle"));
118 break;
cb7f98ee 119 case IPP_PSTATE_PROCESSING :
fa73b229 120 state = _cupsLangString(lang, _("processing"));
121 break;
cb7f98ee 122 case IPP_PSTATE_STOPPED :
fa73b229 123 state = _cupsLangString(lang, _("stopped"));
124 break;
125 default :
126 state = _cupsLangString(lang, _("unknown"));
127 break;
128 }
129
130 snprintf(buffer, sizeof(buffer), "%s %s %s",
131 prefix,
132 printer_name->values[0].string.text,
133 state);
134 }
135 else if (subscribed)
136 strlcpy(buffer, subscribed->values[0].string.text, sizeof(buffer));
137 else
138 return (NULL);
139
140 /*
141 * Duplicate and return the subject string...
142 */
143
144 return (strdup(buffer));
145}
146
147
148/*
149 * 'cupsNotifyText()' - Return the text for the given notification message.
150 *
5a738aea 151 * The returned string must be freed by the caller using @code free@.
fa73b229 152 *
8072030b 153 * @since CUPS 1.2/macOS 10.5@
fa73b229 154 */
155
5a738aea 156char * /* O - Message text or @code NULL@ */
fa73b229 157cupsNotifyText(cups_lang_t *lang, /* I - Language data */
158 ipp_t *event) /* I - Event data */
159{
160 ipp_attribute_t *notify_text; /* notify-text */
161
162
163 /*
164 * Range check input...
165 */
166
167 if (!event || !lang)
168 return (NULL);
169
170 /*
171 * Get the notify-text attribute from the server...
172 */
173
174 if ((notify_text = ippFindAttribute(event, "notify-text",
175 IPP_TAG_TEXT)) == NULL)
176 return (NULL);
177
178 /*
179 * Return a copy...
180 */
181
182 return (strdup(notify_text->values[0].string.text));
183}