OpenSolaris_b135/lib/print/libipp-core/common/strings.c

Compare this file to the similar file:
Show the results in this format:

/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */

/*
 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 *
 */

/* $Id: strings.c 151 2006-04-25 16:55:34Z njacobs $ */

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "ipp.h"

static char *tag_strings[] = {
	/* delimiter tags */
	"reserved-delimiter-00",
	"operational-attributes-group",
	"job-attributes-group",
	"end-of-attributes-group",
	"printer-attributes-group",
	"unsupported-attributes-group",
	"subscription-attributes-group",
	"event-notification-attributes-group",
	"reserved-delimiter-08",
	"reserved-delimiter-09",
	"reserved-delimiter-0a",
	"reserved-delimiter-0b",
	"reserved-delimiter-0c",
	"reserved-delimiter-0d",
	"reserved-delimiter-0e",
	"reserved-delimiter-0f",
	/* value tags */
	"unsupported",
	"reserved-default",
	"unknown",
	"no-value",
	"reserved-out-of-band-14",
	"not-settable",
	"delete-attribute",
	"admin-define",
	"reserved-out-of-band-18",
	"reserved-out-of-band-19",
	"reserved-out-of-band-1a",
	"reserved-out-of-band-1b",
	"reserved-out-of-band-1c",
	"reserved-out-of-band-1d",
	"reserved-out-of-band-1e",
	"reserved-out-of-band-1f",
	"reserved",
	"integer",
	"boolean",
	"enum",
	"reserved-integer-type-24",
	"reserved-integer-type-25",
	"reserved-integer-type-26",
	"reserved-integer-type-27",
	"reserved-integer-type-28",
	"reserved-integer-type-29",
	"reserved-integer-type-2a",
	"reserved-integer-type-2b",
	"reserved-integer-type-2c",
	"reserved-integer-type-2d",
	"reserved-integer-type-2e",
	"reserved-integer-type-2f",
	"octetString",
	"dateTime",
	"resolution",
	"rangeOfInteger",
	"begCollection",
	"textWithLanguage",
	"nameWithLanguage",
	"endCollection",
	"reserved-octetString-38",
	"reserved-octetString-39",
	"reserved-octetString-3a",
	"reserved-octetString-3b",
	"reserved-octetString-3c",
	"reserved-octetString-3d",
	"reserved-octetString-3e",
	"reserved-octetString-3f",
	"reserved",
	"textWithoutLanguage",
	"nameWithoutLanguage",
	"reserved",
	"keyword",
	"uri",
	"uriScheme",
	"charset",
	"naturalLanguage",
	"mimeMediaType",
	"memberAttrName",
	"reserved-charString-4b",
	"reserved-charString-4c",
	"reserved-charString-4d",
	"reserved-charString-4e",
	"reserved-charString-4f",
	"reserved-charString-50",
	"reserved-charString-51",
	"reserved-charString-52",
	"reserved-charString-53",
	"reserved-charString-54",
	"reserved-charString-55",
	"reserved-charString-56",
	"reserved-charString-57",
	"reserved-charString-58",
	"reserved-charString-59",
	"reserved-charString-5a",
	"reserved-charString-5b",
	"reserved-charString-5c",
	"reserved-charString-5d",
	"reserved-charString-5e",
	"reserved-charString-5f",
};

static char *opid_strings[] = {
	"reserved-0x0000",
	"reserved-0x0001",
	"Print-Job",
	"Print-URI",
	"Validate-Job",
	"Create-Job",
	"Send-Document",
	"Send-URI",
	"Cancel-Job",
	"Get-Job-Attributes",
	"Get-Jobs",
	"Get-Printer-Attributes",
	"Hold-Job",
	"Release-Job",
	"Restart-Job",
	"reserved-0x000f",
	"Pause-Printer",
	"Resume-Printer",
	"Purge-Jobs",
	"Set-Printer-Attributes",
	"Set-Job-Attributes",
	"Get-Printer-Supported-Values",
	"Create-Printer-Subscription",
	"Create-Job-Subscription",
	"Get-Subscription-Attributes",
	"Get-Subscriptions",
	"Renew-Subscription",
	"Cancel-Subscription",
	"Get-Notifications",
	"Send-Notifications",
	"Get-Resource-Attributes-deleted",
	"Get-Resource-Data-deleted",
	"Get-Resources-deleted",
	"Get-Print-Support-Files",
	"Disable-Printer",
	"Pause-Printer-After-Current-Job",
	"Hold-New-Jobs",
	"Release-Held-New-Jobs",
	"Deactivate-Printer",
	"Activate-Printer",
	"Restart-Printer",
	"Shutdown-Printer",
	"Startup-Printer",
	"Reprocess-Job",
	"Cancel-Current-Job",
	"Suspend-Current-Job",
	"Resume-Job",
	"Promote-Job",
	"Schedule-Job-After",
	NULL
};

static char *res_opid_strings[] = {
	"Microsoft-0x4000",
	"CUPS-Get-Default",
	"CUPS-Get-Printers",
	"CUPS-Add-Printer",
	"CUPS-Delete-Printer",
	"CUPS-Get-Classes",
	"CUPS-Add-Class",
	"CUPS-Delete-Class",
	"CUPS-Accept-Jobs",
	"CUPS-Reject-Jobs",
	"CUPS-Set-Default",
	"CUPS-Get-Devices",
	"CUPS-Get-PPDs",
	"CUPS-Move-Job",
	"CUPS-0x400e",
	"CUPS-0x400f",
	"Peerless-0x4010",
	NULL
};
#define	KNOWN_RESERVED_MIN 0x4000
#define	KNOWN_RESERVED_MAX 0x4010

static char *ok_status_strings[] = {
	"successful-ok",
	"successful-ok-ignored-or-substituted-attributes",
	"successful-ok-conflicting-attributes",
	"successful-ok-ignored-subscriptions",
	"successful-ok-ignored-notifications",
	"successful-ok-too-many-events",
	"successful-ok-but-cancel-subscription"
};

static char *redir_status_strings[] = {
	"redirection-other-site"
};

static char *client_error_status_strings[] = {
	"client-error-bad-request",
	"client-error-forbidden",
	"client-error-not-authenticated",
	"client-error-not-authorized",
	"client-error-not-possible",
	"client-error-timeout",
	"client-error-not-found",
	"client-error-gone",
	"client-error-request-entity-too-large",
	"client-error-request-value-too-long",
	"client-error-document-format-not-supported",
	"client-error-attributes-or-values-not-supported",
	"client-error-uri-scheme-not-supported",
	"client-error-charset-not-supported",
	"client-error-conflicting-attributes",
	"client-error-compression-not-supported",
	"client-error-compression-error",
	"client-error-document-format-error",
	"client-error-document-access-error",
	"client-error-attributes-not-settable",
	"client-error-ignored-all-subscriptions",
	"client-error-too-many-subscriptions",
	"client-error-ignored-all-notifications",
	"client-error-print-support-file-not-found"
};

static char *server_error_status_strings[] = {
	"server-error-internal-error",
	"server-error-operation-not-supported",
	"server-error-service-unavailable",
	"server-error-version-not-supported",
	"server-error-device-error",
	"server-error-temporary-error",
	"server-error-not-accepting-jobs",
	"server-error-busy",
	"server-error-job-canceled",
	"server-error-multiple-document-jobs-not-supported",
	"server-error-printer-is-deactivated"
};

char *
ipp_tag_string(int8_t id, char *ret, size_t len)
{
	if (id < VTAG_MAX)
		(void) strlcpy(ret, tag_strings[id], len);
	else if (id == VTAG_EXTEND)
		(void) strlcpy(ret, "extension", len);
	else
		(void) snprintf(ret, len, "bogus-0x%.2x", id);

	return (ret);
}

char *
ipp_opid_string(int16_t id, char *ret, size_t len)
{
	if (id < OPID_RESERVED_MIN)
		(void) strlcpy(ret, opid_strings[id], len);
	else if (id < OPID_RESERVED_VENDOR_MIN)
		(void) snprintf(ret, len, "reserved-0x%.4x", id);
	else if (id <= KNOWN_RESERVED_MAX)
		(void) strlcpy(ret,
				res_opid_strings[id - KNOWN_RESERVED_MIN], len);
	else /* if (id <= OPID_RESERVED_VENDOR_MAX) */
		(void) snprintf(ret, len, "reserved-vendor-0x%.4x", id);

	return (ret);
}

int16_t
ipp_string_opid(char *string)
{
	int i;

	for (i = 0; opid_strings[i] != NULL; i++)
		if (strcasecmp(opid_strings[i], string) == 0)
			return (i);

	for (i = 0; res_opid_strings[i] != NULL; i++)
		if (strcasecmp(res_opid_strings[i], string) == 0)
			return (0x4000 + i);

	return (-1);
}

char *
ipp_status_string(int16_t id, char *ret, size_t len)
{
	if (id <= IPP_OK_MAX)
		(void) strlcpy(ret, ok_status_strings[id], len);
	else if (id >= IPP_REDIR_MIN && id <= IPP_REDIR_MAX)
		(void) strlcpy(ret,
			redir_status_strings[id - IPP_REDIR_MIN], len);
	else if (id >= IPP_CERR_MIN && id <= IPP_CERR_MAX)
		(void) strlcpy(ret,
			client_error_status_strings[id - IPP_CERR_MIN], len);
	else if (id >= IPP_SERR_MIN && id <= IPP_SERR_MAX)
		(void) strlcpy(ret,
			server_error_status_strings[id - IPP_SERR_MIN], len);
	else
		(void) snprintf(ret, len, "bogus-0x%.4hx", id);

	return (ret);
}



/*
 * attribute template handling routines
 */
char *job_template[] = {
	"copies",
	"finishing",
	"job-hold-until",
	"job-priority",
	"job-sheets",
	"media",
	"multiple-document-handling",
	"number-up",
	"page-ranges-supported",
	"print-quality",
	"printer-resoultion",
	"sides",
	NULL
};

char *job_description[] = {
	"copies-default", "copies-supported",
	"finishing-default", "finishing-supported",
	"job-hold-until-default", "job-hold-until-supported",
	"job-priority-default", "job-priority-supported",
	"job-sheets-default", "job-sheets-supported",
	"media-default", "media-supported",
	"multiple-document-handling-default",
	"multiple-document-handling-supported",
	"number-up-default", "number-up-supported",
	"page-ranges-supported",
	"print-quality-default", "print-quality-supported",
	"printer-resoultion-default", "printer-resoultion-supported",
	"sides-default", "sides-supported",
	NULL
};

char *printer_description[] = {
	"printer-uri-supported",
	"uri-security-supported",
	"uri-authentication-supported",
	"printer-name",
	"printer-location",
	"printer-info",
	"printer-more-info",
	"printer-driver-installer",
	"printer-make-and-model",
	"printer-more-info-manufacturer",
	"printer-state",
	"printer-state-reasons",
	"printer-state-message",
	"ipp-versions-supported",
	"multiple-document-jobs-supported",
	"charset-configured",
	"charset-supported",
	"natural-language-configured",
	"generated-natural-language-supported",
	"document-format-default",
	"document-format-supported",
	"printer-is-accepting-jobs",
	"queued-job-count",
	"printer-message-from-operator",
	"color-supported",
	"reference-uri-schemes-supported",
	"pdl-override-supported",
	"printer-up-time",
	"printer-current-time",
	"multiple-operation-time-out",
	"compression-supported",
	"job-k-octets-supported",
	"job-impressions-supported",
	"job-media-sheets-supported",
	"pages-per-minute",
	"pages-per-minute-color",
	NULL
};