1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 *
26 */
27
28 /* $Id: strings.c 151 2006-04-25 16:55:34Z njacobs $ */
29
30 #pragma ident "%Z%%M% %I% %E% SMI"
31
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <string.h>
35
36 #include "ipp.h"
37
38 static char *tag_strings[] = {
39 /* delimiter tags */
40 "reserved-delimiter-00",
41 "operational-attributes-group",
42 "job-attributes-group",
43 "end-of-attributes-group",
44 "printer-attributes-group",
45 "unsupported-attributes-group",
46 "subscription-attributes-group",
47 "event-notification-attributes-group",
48 "reserved-delimiter-08",
49 "reserved-delimiter-09",
50 "reserved-delimiter-0a",
51 "reserved-delimiter-0b",
52 "reserved-delimiter-0c",
53 "reserved-delimiter-0d",
54 "reserved-delimiter-0e",
55 "reserved-delimiter-0f",
56 /* value tags */
57 "unsupported",
58 "reserved-default",
59 "unknown",
60 "no-value",
61 "reserved-out-of-band-14",
62 "not-settable",
63 "delete-attribute",
64 "admin-define",
65 "reserved-out-of-band-18",
66 "reserved-out-of-band-19",
67 "reserved-out-of-band-1a",
68 "reserved-out-of-band-1b",
69 "reserved-out-of-band-1c",
70 "reserved-out-of-band-1d",
71 "reserved-out-of-band-1e",
72 "reserved-out-of-band-1f",
73 "reserved",
74 "integer",
75 "boolean",
76 "enum",
77 "reserved-integer-type-24",
78 "reserved-integer-type-25",
79 "reserved-integer-type-26",
80 "reserved-integer-type-27",
81 "reserved-integer-type-28",
82 "reserved-integer-type-29",
83 "reserved-integer-type-2a",
84 "reserved-integer-type-2b",
85 "reserved-integer-type-2c",
86 "reserved-integer-type-2d",
87 "reserved-integer-type-2e",
88 "reserved-integer-type-2f",
89 "octetString",
90 "dateTime",
91 "resolution",
92 "rangeOfInteger",
93 "begCollection",
94 "textWithLanguage",
95 "nameWithLanguage",
96 "endCollection",
97 "reserved-octetString-38",
98 "reserved-octetString-39",
99 "reserved-octetString-3a",
100 "reserved-octetString-3b",
101 "reserved-octetString-3c",
102 "reserved-octetString-3d",
103 "reserved-octetString-3e",
104 "reserved-octetString-3f",
105 "reserved",
106 "textWithoutLanguage",
107 "nameWithoutLanguage",
108 "reserved",
109 "keyword",
110 "uri",
111 "uriScheme",
112 "charset",
113 "naturalLanguage",
114 "mimeMediaType",
115 "memberAttrName",
116 "reserved-charString-4b",
117 "reserved-charString-4c",
118 "reserved-charString-4d",
119 "reserved-charString-4e",
120 "reserved-charString-4f",
121 "reserved-charString-50",
122 "reserved-charString-51",
123 "reserved-charString-52",
124 "reserved-charString-53",
125 "reserved-charString-54",
126 "reserved-charString-55",
127 "reserved-charString-56",
128 "reserved-charString-57",
129 "reserved-charString-58",
130 "reserved-charString-59",
131 "reserved-charString-5a",
132 "reserved-charString-5b",
133 "reserved-charString-5c",
134 "reserved-charString-5d",
135 "reserved-charString-5e",
136 "reserved-charString-5f",
137 };
138
139 static char *opid_strings[] = {
140 "reserved-0x0000",
141 "reserved-0x0001",
142 "Print-Job",
143 "Print-URI",
144 "Validate-Job",
145 "Create-Job",
146 "Send-Document",
147 "Send-URI",
148 "Cancel-Job",
149 "Get-Job-Attributes",
150 "Get-Jobs",
151 "Get-Printer-Attributes",
152 "Hold-Job",
153 "Release-Job",
154 "Restart-Job",
155 "reserved-0x000f",
156 "Pause-Printer",
157 "Resume-Printer",
158 "Purge-Jobs",
159 "Set-Printer-Attributes",
160 "Set-Job-Attributes",
161 "Get-Printer-Supported-Values",
162 "Create-Printer-Subscription",
163 "Create-Job-Subscription",
164 "Get-Subscription-Attributes",
165 "Get-Subscriptions",
166 "Renew-Subscription",
167 "Cancel-Subscription",
168 "Get-Notifications",
169 "Send-Notifications",
170 "Get-Resource-Attributes-deleted",
171 "Get-Resource-Data-deleted",
172 "Get-Resources-deleted",
173 "Get-Print-Support-Files",
174 "Disable-Printer",
175 "Pause-Printer-After-Current-Job",
176 "Hold-New-Jobs",
177 "Release-Held-New-Jobs",
178 "Deactivate-Printer",
179 "Activate-Printer",
180 "Restart-Printer",
181 "Shutdown-Printer",
182 "Startup-Printer",
183 "Reprocess-Job",
184 "Cancel-Current-Job",
185 "Suspend-Current-Job",
186 "Resume-Job",
187 "Promote-Job",
188 "Schedule-Job-After",
189 NULL
190 };
191
192 static char *res_opid_strings[] = {
193 "Microsoft-0x4000",
194 "CUPS-Get-Default",
195 "CUPS-Get-Printers",
196 "CUPS-Add-Printer",
197 "CUPS-Delete-Printer",
198 "CUPS-Get-Classes",
199 "CUPS-Add-Class",
200 "CUPS-Delete-Class",
201 "CUPS-Accept-Jobs",
202 "CUPS-Reject-Jobs",
203 "CUPS-Set-Default",
204 "CUPS-Get-Devices",
205 "CUPS-Get-PPDs",
206 "CUPS-Move-Job",
207 "CUPS-0x400e",
208 "CUPS-0x400f",
209 "Peerless-0x4010",
210 NULL
211 };
212 #define KNOWN_RESERVED_MIN 0x4000
213 #define KNOWN_RESERVED_MAX 0x4010
214
215 static char *ok_status_strings[] = {
216 "successful-ok",
217 "successful-ok-ignored-or-substituted-attributes",
218 "successful-ok-conflicting-attributes",
219 "successful-ok-ignored-subscriptions",
220 "successful-ok-ignored-notifications",
221 "successful-ok-too-many-events",
222 "successful-ok-but-cancel-subscription"
223 };
224
225 static char *redir_status_strings[] = {
226 "redirection-other-site"
227 };
228
229 static char *client_error_status_strings[] = {
230 "client-error-bad-request",
231 "client-error-forbidden",
232 "client-error-not-authenticated",
233 "client-error-not-authorized",
234 "client-error-not-possible",
235 "client-error-timeout",
236 "client-error-not-found",
237 "client-error-gone",
238 "client-error-request-entity-too-large",
239 "client-error-request-value-too-long",
240 "client-error-document-format-not-supported",
241 "client-error-attributes-or-values-not-supported",
242 "client-error-uri-scheme-not-supported",
243 "client-error-charset-not-supported",
244 "client-error-conflicting-attributes",
245 "client-error-compression-not-supported",
246 "client-error-compression-error",
247 "client-error-document-format-error",
248 "client-error-document-access-error",
249 "client-error-attributes-not-settable",
250 "client-error-ignored-all-subscriptions",
251 "client-error-too-many-subscriptions",
252 "client-error-ignored-all-notifications",
253 "client-error-print-support-file-not-found"
254 };
255
256 static char *server_error_status_strings[] = {
257 "server-error-internal-error",
258 "server-error-operation-not-supported",
259 "server-error-service-unavailable",
260 "server-error-version-not-supported",
261 "server-error-device-error",
262 "server-error-temporary-error",
263 "server-error-not-accepting-jobs",
264 "server-error-busy",
265 "server-error-job-canceled",
266 "server-error-multiple-document-jobs-not-supported",
267 "server-error-printer-is-deactivated"
268 };
269
270 char *
ipp_tag_string(int8_t id,char * ret,size_t len)271 ipp_tag_string(int8_t id, char *ret, size_t len)
272 {
273 if (id < VTAG_MAX)
274 (void) strlcpy(ret, tag_strings[id], len);
275 else if (id == VTAG_EXTEND)
276 (void) strlcpy(ret, "extension", len);
277 else
278 (void) snprintf(ret, len, "bogus-0x%.2x", id);
279
280 return (ret);
281 }
282
283 char *
ipp_opid_string(int16_t id,char * ret,size_t len)284 ipp_opid_string(int16_t id, char *ret, size_t len)
285 {
286 if (id < OPID_RESERVED_MIN)
287 (void) strlcpy(ret, opid_strings[id], len);
288 else if (id < OPID_RESERVED_VENDOR_MIN)
289 (void) snprintf(ret, len, "reserved-0x%.4x", id);
290 else if (id <= KNOWN_RESERVED_MAX)
291 (void) strlcpy(ret,
292 res_opid_strings[id - KNOWN_RESERVED_MIN], len);
293 else /* if (id <= OPID_RESERVED_VENDOR_MAX) */
294 (void) snprintf(ret, len, "reserved-vendor-0x%.4x", id);
295
296 return (ret);
297 }
298
299 int16_t
ipp_string_opid(char * string)300 ipp_string_opid(char *string)
301 {
302 int i;
303
304 for (i = 0; opid_strings[i] != NULL; i++)
305 if (strcasecmp(opid_strings[i], string) == 0)
306 return (i);
307
308 for (i = 0; res_opid_strings[i] != NULL; i++)
309 if (strcasecmp(res_opid_strings[i], string) == 0)
310 return (0x4000 + i);
311
312 return (-1);
313 }
314
315 char *
ipp_status_string(int16_t id,char * ret,size_t len)316 ipp_status_string(int16_t id, char *ret, size_t len)
317 {
318 if (id <= IPP_OK_MAX)
319 (void) strlcpy(ret, ok_status_strings[id], len);
320 else if (id >= IPP_REDIR_MIN && id <= IPP_REDIR_MAX)
321 (void) strlcpy(ret,
322 redir_status_strings[id - IPP_REDIR_MIN], len);
323 else if (id >= IPP_CERR_MIN && id <= IPP_CERR_MAX)
324 (void) strlcpy(ret,
325 client_error_status_strings[id - IPP_CERR_MIN], len);
326 else if (id >= IPP_SERR_MIN && id <= IPP_SERR_MAX)
327 (void) strlcpy(ret,
328 server_error_status_strings[id - IPP_SERR_MIN], len);
329 else
330 (void) snprintf(ret, len, "bogus-0x%.4hx", id);
331
332 return (ret);
333 }
334
335
336
337 /*
338 * attribute template handling routines
339 */
340 char *job_template[] = {
341 "copies",
342 "finishing",
343 "job-hold-until",
344 "job-priority",
345 "job-sheets",
346 "media",
347 "multiple-document-handling",
348 "number-up",
349 "page-ranges-supported",
350 "print-quality",
351 "printer-resoultion",
352 "sides",
353 NULL
354 };
355
356 char *job_description[] = {
357 "copies-default", "copies-supported",
358 "finishing-default", "finishing-supported",
359 "job-hold-until-default", "job-hold-until-supported",
360 "job-priority-default", "job-priority-supported",
361 "job-sheets-default", "job-sheets-supported",
362 "media-default", "media-supported",
363 "multiple-document-handling-default",
364 "multiple-document-handling-supported",
365 "number-up-default", "number-up-supported",
366 "page-ranges-supported",
367 "print-quality-default", "print-quality-supported",
368 "printer-resoultion-default", "printer-resoultion-supported",
369 "sides-default", "sides-supported",
370 NULL
371 };
372
373 char *printer_description[] = {
374 "printer-uri-supported",
375 "uri-security-supported",
376 "uri-authentication-supported",
377 "printer-name",
378 "printer-location",
379 "printer-info",
380 "printer-more-info",
381 "printer-driver-installer",
382 "printer-make-and-model",
383 "printer-more-info-manufacturer",
384 "printer-state",
385 "printer-state-reasons",
386 "printer-state-message",
387 "ipp-versions-supported",
388 "multiple-document-jobs-supported",
389 "charset-configured",
390 "charset-supported",
391 "natural-language-configured",
392 "generated-natural-language-supported",
393 "document-format-default",
394 "document-format-supported",
395 "printer-is-accepting-jobs",
396 "queued-job-count",
397 "printer-message-from-operator",
398 "color-supported",
399 "reference-uri-schemes-supported",
400 "pdl-override-supported",
401 "printer-up-time",
402 "printer-current-time",
403 "multiple-operation-time-out",
404 "compression-supported",
405 "job-k-octets-supported",
406 "job-impressions-supported",
407 "job-media-sheets-supported",
408 "pages-per-minute",
409 "pages-per-minute-color",
410 NULL
411 };
412