/* * 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. * */ #ifndef _IPP_H #define _IPP_H /* $Id: ipp.h 146 2006-03-24 00:26:54Z njacobs $ */ #ifdef __cplusplus extern "C" { #endif #include #include #include #include typedef ssize_t (*ipp_reader_t)(void *fd, void *buffer, size_t buffer_size); typedef ssize_t (*ipp_writer_t)(void *fd, void *buffer, size_t buffer_size); enum { IPP_TYPE_UNKNOWN = 0, IPP_TYPE_REQUEST = 1, IPP_TYPE_RESPONSE = 2 }; /* * How closely do we conform to the spec when parsing? Do we * a) Stop parsing only when we encounter an error that prevents us from * continuing parsing (a server error or ridiculously malformed request)? * b) Stop parsing when we know the server wouldn't be able to act on the * response correctly, even if we can make sense of some of the data? * c) Jawohl, Mein IPP Spec! * The answer will usually be b, though a will be useful for debugging. */ enum { IPP_PARSE_CONFORMANCE_RASH = 0, IPP_PARSE_CONFORMANCE_LOOSE = 1, IPP_PARSE_CONFORMANCE_STRICT = 2 }; /* Operation IDs */ enum { OPID_MIN = 0x0000, /* 0x0000 */ OPID_RESERVED_0000 = 0x0000, /* 0x0000 */ OPID_RESERVED_0001, /* 0x0001 */ OPID_PRINT_JOB, /* 0x0002 */ OPID_PRINT_URI, /* 0x0003 */ OPID_VALIDATE_JOB, /* 0x0004 */ OPID_CREATE_JOB, /* 0x0005 */ OPID_SEND_DOCUMENT, /* 0x0006 */ OPID_SEND_URI, /* 0x0007 */ OPID_CANCEL_JOB, /* 0x0008 */ OPID_GET_JOB_ATTRIBUTES, /* 0x0009 */ OPID_GET_JOBS, /* 0x000a */ OPID_GET_PRINTER_ATTRIBUTES, /* 0x000b */ OPID_HOLD_JOB, /* 0x000c */ OPID_RELEASE_JOB, /* 0x000d */ OPID_RESTART_JOB, /* 0x000e */ OPID_RESERVED_000F, /* 0x000f */ OPID_PAUSE_PRINTER, /* 0x0010 */ OPID_RESUME_PRINTER, /* 0x0011 */ OPID_PURGE_JOBS, /* 0x0012 */ OPID_SET_PRINTER_ATTRIBUTES, /* 0x0013 */ OPID_SET_JOB_ATTRIBUTES, /* 0x0014 */ OPID_GET_PRINTER_SUPPORTED_VALUES, /* 0x0015 */ OPID_CREATE_PRINTER_SUBSCRIPTION, /* 0x0016 */ OPID_CREATE_JOB_SUBSCRIPTION, /* 0x0017 */ OPID_GET_SUBSCRIPTION_ATTRIBUTES, /* 0x0018 */ OPID_GET_SUBSCRIPTIONS, /* 0x0019 */ OPID_RENEW_SUBSCRIPTION, /* 0x001a */ OPID_CANCEL_SUBSCRIPTION, /* 0x001b */ OPID_GET_NOTIFICATIONS, /* 0x001c */ OPID_SEND_NOTIFICATIONS, /* 0x001d */ OPID_GET_RESOURCE_ATTRIBUTES, /* 0x001e */ OPID_GET_RESOURCE_DATA, /* 0x001f */ OPID_GET_RESOURCES, /* 0x0020 */ OPID_GET_PRINT_SUPPORT_FILES, /* 0x0021 */ OPID_ENABLE_PRINTER, /* 0x0022 */ OPID_DISABLE_PRINTER, /* 0x0023 */ OPID_PAUSE_PRINTER_AFTER_CURRENT_JOB, /* 0x0024 */ OPID_HOLD_NEW_JOBS, /* 0x0025 */ OPID_RELEASE_HELD_NEW_JOBS, /* 0x0026 */ OPID_DEACTIVATE_PRINTER, /* 0x0027 */ OPID_ACTIVATE_PRINTER, /* 0x0028 */ OPID_RESTART_PRINTER, /* 0x0029 */ OPID_SHUTDOWN_PRINTER, /* 0x002a */ OPID_STARTUP_PRINTER, /* 0x002b */ OPID_REPROCESS_JOB, /* 0x002c */ OPID_CANCEL_CURRENT_JOB, /* 0x002d */ OPID_SUSPEND_CURRENT_JOB, /* 0x002e */ OPID_RESUME_JOB, /* 0x002f */ OPID_PROMOTE_JOB, /* 0x0030 */ OPID_SCHEDULE_JOB_AFTER, /* 0x0031 */ OPID_RESERVED_MIN, /* 0x0032 */ OPID_RESERVED_0032 = 0x0032, /* 0x0032 */ /* ... */ OPID_RESERVED_3FFF = 0x3fff, /* 0x3fff */ OPID_RESERVED_MAX = 0x3fff, /* 0x3fff */ OPID_RESERVED_VENDOR_MIN = 0x4000, /* 0x4000 */ OPID_RESERVED_VENDOR_4000 = 0x4000, /* 0x4000 */ /* ... */ OPID_RESERVED_VENDOR_8FFF = 0x8fff, /* 0x8fff */ OPID_RESERVED_VENDOR_MAX = 0x8fff, /* 0x8fff */ OPID_MAX = 0x8fff /* 0x8fff */ }; enum { /* Delimiter Tags */ DTAG_MIN = 0x00, /* 0x00 */ DTAG_RESERVED_DELIMITER_00 = 0x00, /* 0x00 */ DTAG_OPERATION_ATTRIBUTES, /* 0x01 */ DTAG_JOB_ATTRIBUTES, /* 0x02 */ DTAG_END_OF_ATTRIBUTES, /* 0x03 */ DTAG_PRINTER_ATTRIBUTES, /* 0x04 */ DTAG_UNSUPPORTED_ATTRIBUTES, /* 0x05 */ DTAG_SUBSCRIPTION_ATTRIBUTES, /* 0x06 */ DTAG_EVENT_NOTIFICATION_ATTRIBUTES, /* 0x07 */ DTAG_RESERVED_DELIMITER_08, /* 0x08 */ DTAG_RESERVED_DELIMITER_09, /* 0x09 */ DTAG_RESERVED_DELIMITER_0A, /* 0x0a */ DTAG_RESERVED_DELIMITER_0B, /* 0x0b */ DTAG_RESERVED_DELIMITER_0C, /* 0x0c */ DTAG_RESERVED_DELIMITER_0D, /* 0x0d */ DTAG_RESERVED_DELIMITER_0E, /* 0x0e */ DTAG_RESERVED_DELIMITER_0F, /* 0x0f */ DTAG_MAX = 0x0f, /* 0x0f */ /* Value Tags */ VTAG_MIN = 0x10, /* 0x10 */ VTAG_UNSUPPORTED = 0x10, /* 0x10 */ VTAG_RESERVED_DEFAULT, /* 0x11 */ VTAG_UNKNOWN, /* 0x12 */ VTAG_NOVALUE, /* 0x13 */ VTAG_RESERVED_OOB_14, /* 0x14 */ VTAG_NOT_SETTABLE, /* 0x15 */ VTAG_DELETE_ATTRIBUTE, /* 0x16 */ VTAG_ADMIN_DEFINE, /* 0x17 */ VTAG_RESERVED_OOB_18, /* 0x18 */ VTAG_RESERVED_OOB_19, /* 0x19 */ VTAG_RESERVED_OOB_1A, /* 0x1a */ VTAG_RESERVED_OOB_1B, /* 0x1b */ VTAG_RESERVED_OOB_1C, /* 0x1c */ VTAG_RESERVED_OOB_1D, /* 0x1d */ VTAG_RESERVED_OOB_1E, /* 0x1e */ VTAG_RESERVED_OOB_1F, /* 0x1f */ VTAG_RESERVED_INT_GEN, /* 0x20 */ VTAG_INTEGER, /* 0x21 */ VTAG_BOOLEAN, /* 0x22 */ VTAG_ENUM, /* 0x23 */ VTAG_RESERVED_INT_24, /* 0x24 */ VTAG_RESERVED_INT_25, /* 0x25 */ VTAG_RESERVED_INT_26, /* 0x26 */ VTAG_RESERVED_INT_27, /* 0x27 */ VTAG_RESERVED_INT_28, /* 0x28 */ VTAG_RESERVED_INT_29, /* 0x29 */ VTAG_RESERVED_INT_2A, /* 0x2a */ VTAG_RESERVED_INT_2B, /* 0x2b */ VTAG_RESERVED_INT_2C, /* 0x2c */ VTAG_RESERVED_INT_2D, /* 0x2d */ VTAG_RESERVED_INT_2E, /* 0x2e */ VTAG_RESERVED_INT_2F, /* 0x2f */ VTAG_OCTET_STRING, /* 0x30 */ VTAG_DATE_TIME, /* 0x31 */ VTAG_RESOLUTION, /* 0x32 */ VTAG_RANGE_OF_INTEGER, /* 0x33 */ VTAG_BEGIN_COLLECTION, /* 0x34 */ VTAG_TEXT_WITH_LANGUAGE, /* 0x35 */ VTAG_NAME_WITH_LANGUAGE, /* 0x36 */ VTAG_END_COLLECTION, /* 0x37 */ VTAG_RESERVED_STRING_38, /* 0x38 */ VTAG_RESERVED_STRING_39, /* 0x39 */ VTAG_RESERVED_STRING_3A, /* 0x3a */ VTAG_RESERVED_STRING_3B, /* 0x3b */ VTAG_RESERVED_STRING_3C, /* 0x3c */ VTAG_RESERVED_STRING_3D, /* 0x3d */ VTAG_RESERVED_STRING_3E, /* 0x3e */ VTAG_RESERVED_STRING_3F, /* 0x3f */ VTAG_RESERVED_CHAR_GEN, /* 0x40 */ VTAG_TEXT_WITHOUT_LANGUAGE, /* 0x41 */ VTAG_NAME_WITHOUT_LANGUAGE, /* 0x42 */ VTAG_RESERVED_43, /* 0x43 */ VTAG_KEYWORD, /* 0x44 */ VTAG_URI, /* 0x45 */ VTAG_URI_SCHEME, /* 0x46 */ VTAG_CHARSET, /* 0x47 */ VTAG_NATURAL_LANGUAGE, /* 0x48 */ VTAG_MIME_MEDIA_TYPE, /* 0x49 */ VTAG_MEMBER_ATTR_NAME, /* 0x4a */ VTAG_RESERVED_STRING_4B, /* 0x4b */ VTAG_RESERVED_STRING_4C, /* 0x4c */ VTAG_RESERVED_STRING_4D, /* 0x4d */ VTAG_RESERVED_STRING_4E, /* 0x4e */ VTAG_RESERVED_STRING_4F, /* 0x4f */ VTAG_RESERVED_STRING_50, /* 0x50 */ VTAG_RESERVED_STRING_51, /* 0x51 */ VTAG_RESERVED_STRING_52, /* 0x52 */ VTAG_RESERVED_STRING_53, /* 0x53 */ VTAG_RESERVED_STRING_54, /* 0x54 */ VTAG_RESERVED_STRING_55, /* 0x55 */ VTAG_RESERVED_STRING_56, /* 0x56 */ VTAG_RESERVED_STRING_57, /* 0x57 */ VTAG_RESERVED_STRING_58, /* 0x58 */ VTAG_RESERVED_STRING_59, /* 0x59 */ VTAG_RESERVED_STRING_5A, /* 0x5a */ VTAG_RESERVED_STRING_5B, /* 0x5b */ VTAG_RESERVED_STRING_5C, /* 0x5c */ VTAG_RESERVED_STRING_5D, /* 0x5d */ VTAG_RESERVED_STRING_5E, /* 0x5e */ VTAG_RESERVED_STRING_5F, /* 0x5f */ VTAG_RESERVED_MAX = 0x5f, /* 0x5f */ VTAG_MAX = 0x5f, /* 0x5f */ VTAG_EXTEND = 0x7f /* 0x7f */ }; /* Response codes */ enum { IPP_OK_MIN = 0x0000, IPP_OK = 0x0000, /* 0x0000 */ IPP_OK_IGNORED_ATTRIBUTES, /* 0x0001 */ IPP_OK_CONFLICTING_ATTRIBUTES, /* 0x0002 */ IPP_OK_IGNORED_SUBSCRIPTIONS, /* 0x0003 */ IPP_OK_IGNORED_NOTIFICATIONS, /* 0x0004 */ IPP_OK_TOO_MANY_EVENTS, /* 0x0005 */ IPP_OK_BUT_CANCEL_SUBSCRIPTION, /* 0x0006 */ IPP_OK_MAX = IPP_OK_BUT_CANCEL_SUBSCRIPTION, IPP_REDIR_MIN = 0x0300, IPP_REDIR_OTHER_SIZE = 0x0300, /* 0x0300 */ IPP_REDIR_MAX = 0x0300, IPP_CERR_MIN = 0x0400, IPP_CERR_BAD_REQUEST = 0x0400, /* 0x0400 */ IPP_CERR_FORBIDDEN, /* 0x0401 */ IPP_CERR_NOT_AUTHENTICATED, /* 0x0402 */ IPP_CERR_NOT_AUTHORIZED, /* 0x0403 */ IPP_CERR_NOT_POSSIBLE, /* 0x0404 */ IPP_CERR_TIMEOUT, /* 0x0405 */ IPP_CERR_NOT_FOUND, /* 0x0406 */ IPP_CERR_GONE, /* 0x0407 */ IPP_CERR_REQUEST_ENTITY, /* 0x0408 */ IPP_CERR_REQUEST_VALUE, /* 0x0409 */ IPP_CERR_DOCUMENT_FORMAT, /* 0x040a */ IPP_CERR_ATTRIBUTES, /* 0x040b */ IPP_CERR_URI_SCHEME, /* 0x040c */ IPP_CERR_CHARSET, /* 0x040d */ IPP_CERR_CONFLICT, /* 0x040e */ IPP_CERR_COMPRESSION_NOT_SUPPORTED, /* 0x040f */ IPP_CERR_COMPRESSION_ERROR, /* 0x0410 */ IPP_CERR_DOCUMENT_FORMAT_ERROR, /* 0x0411 */ IPP_CERR_DOCUMENT_ACCESS_ERROR, /* 0x0412 */ IPP_CERR_ATTRIBUTES_NOT_SETTABLE, /* 0x0413 */ IPP_CERR_IGNORED_ALL_SUBSCRIPTIONS, /* 0x0414 */ IPP_CERR_TOO_MANY_SUBSCRIPTIONS, /* 0x0415 */ IPP_CERR_IGNORED_ALL_NOTIFICATIONS, /* 0x0416 */ IPP_CERR_PRINT_SUPPORT_FILE_NOT_FOUND, /* 0x0417 */ IPP_CERR_MAX = IPP_CERR_PRINT_SUPPORT_FILE_NOT_FOUND, IPP_SERR_MIN = 0x0500, IPP_SERR_INTERNAL = 0x0500, /* 0x0500 */ IPP_SERR_OPERATION_NOT_SUPPORTED, /* 0x0501 */ IPP_SERR_SERVICE_UNAVAILABLE, /* 0x0502 */ IPP_SERR_VERSION_NOT_SUPPORTED, /* 0x0503 */ IPP_SERR_DEVICE_ERROR, /* 0x0504 */ IPP_SERR_TEMPORARY_ERROR, /* 0x0505 */ IPP_SERR_NOT_ACCEPTING, /* 0x0506 */ IPP_SERR_BUSY, /* 0x0507 */ IPP_SERR_CANCELLED, /* 0x0508 */ IPP_SERR_MULTIPLE_DOCS_NOT_SUPPORTED, /* 0x0509 */ IPP_SERR_PRINTER_IS_DEACTIVATED, /* 0x050a */ IPP_SERR_MAX = IPP_SERR_PRINTER_IS_DEACTIVATED }; /* Job state codes */ enum { IPP_JOB_STATE_PENDING = 3, IPP_JOB_STATE_PENDING_HELD = 4, IPP_JOB_STATE_PROCESSING = 5, IPP_JOB_STATE_PROCESSING_STOPPED = 6, IPP_JOB_STATE_CANCELED = 7, IPP_JOB_STATE_ABORTED = 8, IPP_JOB_STATE_COMPLETED = 9 }; /* exported functions */ extern papi_status_t ipp_read_message(ipp_reader_t iread, void *fd, papi_attribute_t ***message, char type); extern papi_status_t ipp_write_message(ipp_writer_t iwrite, void *fd, papi_attribute_t **message); /* internal functions shared between modules */ extern void ipp_set_status(papi_attribute_t ***message, papi_status_t status, char *format, ...); extern papi_status_t ipp_validate_request(papi_attribute_t **request, papi_attribute_t ***response); extern int ipp_severity(int16_t status); extern int16_t ipp_charset_supported(char *charset); extern void *string_to_ipp_attr_value(int8_t type, char *value); extern char *ipp_uri_to_printer(char *uri); extern void *papi_attribute_to_ipp_attr(int8_t type, papi_attribute_t *attr); extern int8_t name_to_ipp_type(char *name); extern char *job_template[]; extern char *job_description[]; extern char *printer_description[]; extern char *ipp_tag_string(int8_t tag, char *buf, size_t bufsiz); extern size_t min_val_len(int8_t type, char *name); extern size_t max_val_len(int8_t type, char *name); extern int is_keyword(char *value); #ifdef __cplusplus } #endif #endif /* _IPP_H */