#ifndef _IPP_H
#define _IPP_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdarg.h>
#include <sys/time.h>
#include <papi.h>
#include <inttypes.h>
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
};
enum {
IPP_PARSE_CONFORMANCE_RASH = 0,
IPP_PARSE_CONFORMANCE_LOOSE = 1,
IPP_PARSE_CONFORMANCE_STRICT = 2
};
enum {
OPID_MIN = 0x0000,
OPID_RESERVED_0000 = 0x0000,
OPID_RESERVED_0001,
OPID_PRINT_JOB,
OPID_PRINT_URI,
OPID_VALIDATE_JOB,
OPID_CREATE_JOB,
OPID_SEND_DOCUMENT,
OPID_SEND_URI,
OPID_CANCEL_JOB,
OPID_GET_JOB_ATTRIBUTES,
OPID_GET_JOBS,
OPID_GET_PRINTER_ATTRIBUTES,
OPID_HOLD_JOB,
OPID_RELEASE_JOB,
OPID_RESTART_JOB,
OPID_RESERVED_000F,
OPID_PAUSE_PRINTER,
OPID_RESUME_PRINTER,
OPID_PURGE_JOBS,
OPID_SET_PRINTER_ATTRIBUTES,
OPID_SET_JOB_ATTRIBUTES,
OPID_GET_PRINTER_SUPPORTED_VALUES,
OPID_CREATE_PRINTER_SUBSCRIPTION,
OPID_CREATE_JOB_SUBSCRIPTION,
OPID_GET_SUBSCRIPTION_ATTRIBUTES,
OPID_GET_SUBSCRIPTIONS,
OPID_RENEW_SUBSCRIPTION,
OPID_CANCEL_SUBSCRIPTION,
OPID_GET_NOTIFICATIONS,
OPID_SEND_NOTIFICATIONS,
OPID_GET_RESOURCE_ATTRIBUTES,
OPID_GET_RESOURCE_DATA,
OPID_GET_RESOURCES,
OPID_GET_PRINT_SUPPORT_FILES,
OPID_ENABLE_PRINTER,
OPID_DISABLE_PRINTER,
OPID_PAUSE_PRINTER_AFTER_CURRENT_JOB,
OPID_HOLD_NEW_JOBS,
OPID_RELEASE_HELD_NEW_JOBS,
OPID_DEACTIVATE_PRINTER,
OPID_ACTIVATE_PRINTER,
OPID_RESTART_PRINTER,
OPID_SHUTDOWN_PRINTER,
OPID_STARTUP_PRINTER,
OPID_REPROCESS_JOB,
OPID_CANCEL_CURRENT_JOB,
OPID_SUSPEND_CURRENT_JOB,
OPID_RESUME_JOB,
OPID_PROMOTE_JOB,
OPID_SCHEDULE_JOB_AFTER,
OPID_RESERVED_MIN,
OPID_RESERVED_0032 = 0x0032,
OPID_RESERVED_3FFF = 0x3fff,
OPID_RESERVED_MAX = 0x3fff,
OPID_RESERVED_VENDOR_MIN = 0x4000,
OPID_RESERVED_VENDOR_4000 = 0x4000,
OPID_RESERVED_VENDOR_8FFF = 0x8fff,
OPID_RESERVED_VENDOR_MAX = 0x8fff,
OPID_MAX = 0x8fff
};
enum {
DTAG_MIN = 0x00,
DTAG_RESERVED_DELIMITER_00 = 0x00,
DTAG_OPERATION_ATTRIBUTES,
DTAG_JOB_ATTRIBUTES,
DTAG_END_OF_ATTRIBUTES,
DTAG_PRINTER_ATTRIBUTES,
DTAG_UNSUPPORTED_ATTRIBUTES,
DTAG_SUBSCRIPTION_ATTRIBUTES,
DTAG_EVENT_NOTIFICATION_ATTRIBUTES,
DTAG_RESERVED_DELIMITER_08,
DTAG_RESERVED_DELIMITER_09,
DTAG_RESERVED_DELIMITER_0A,
DTAG_RESERVED_DELIMITER_0B,
DTAG_RESERVED_DELIMITER_0C,
DTAG_RESERVED_DELIMITER_0D,
DTAG_RESERVED_DELIMITER_0E,
DTAG_RESERVED_DELIMITER_0F,
DTAG_MAX = 0x0f,
VTAG_MIN = 0x10,
VTAG_UNSUPPORTED = 0x10,
VTAG_RESERVED_DEFAULT,
VTAG_UNKNOWN,
VTAG_NOVALUE,
VTAG_RESERVED_OOB_14,
VTAG_NOT_SETTABLE,
VTAG_DELETE_ATTRIBUTE,
VTAG_ADMIN_DEFINE,
VTAG_RESERVED_OOB_18,
VTAG_RESERVED_OOB_19,
VTAG_RESERVED_OOB_1A,
VTAG_RESERVED_OOB_1B,
VTAG_RESERVED_OOB_1C,
VTAG_RESERVED_OOB_1D,
VTAG_RESERVED_OOB_1E,
VTAG_RESERVED_OOB_1F,
VTAG_RESERVED_INT_GEN,
VTAG_INTEGER,
VTAG_BOOLEAN,
VTAG_ENUM,
VTAG_RESERVED_INT_24,
VTAG_RESERVED_INT_25,
VTAG_RESERVED_INT_26,
VTAG_RESERVED_INT_27,
VTAG_RESERVED_INT_28,
VTAG_RESERVED_INT_29,
VTAG_RESERVED_INT_2A,
VTAG_RESERVED_INT_2B,
VTAG_RESERVED_INT_2C,
VTAG_RESERVED_INT_2D,
VTAG_RESERVED_INT_2E,
VTAG_RESERVED_INT_2F,
VTAG_OCTET_STRING,
VTAG_DATE_TIME,
VTAG_RESOLUTION,
VTAG_RANGE_OF_INTEGER,
VTAG_BEGIN_COLLECTION,
VTAG_TEXT_WITH_LANGUAGE,
VTAG_NAME_WITH_LANGUAGE,
VTAG_END_COLLECTION,
VTAG_RESERVED_STRING_38,
VTAG_RESERVED_STRING_39,
VTAG_RESERVED_STRING_3A,
VTAG_RESERVED_STRING_3B,
VTAG_RESERVED_STRING_3C,
VTAG_RESERVED_STRING_3D,
VTAG_RESERVED_STRING_3E,
VTAG_RESERVED_STRING_3F,
VTAG_RESERVED_CHAR_GEN,
VTAG_TEXT_WITHOUT_LANGUAGE,
VTAG_NAME_WITHOUT_LANGUAGE,
VTAG_RESERVED_43,
VTAG_KEYWORD,
VTAG_URI,
VTAG_URI_SCHEME,
VTAG_CHARSET,
VTAG_NATURAL_LANGUAGE,
VTAG_MIME_MEDIA_TYPE,
VTAG_MEMBER_ATTR_NAME,
VTAG_RESERVED_STRING_4B,
VTAG_RESERVED_STRING_4C,
VTAG_RESERVED_STRING_4D,
VTAG_RESERVED_STRING_4E,
VTAG_RESERVED_STRING_4F,
VTAG_RESERVED_STRING_50,
VTAG_RESERVED_STRING_51,
VTAG_RESERVED_STRING_52,
VTAG_RESERVED_STRING_53,
VTAG_RESERVED_STRING_54,
VTAG_RESERVED_STRING_55,
VTAG_RESERVED_STRING_56,
VTAG_RESERVED_STRING_57,
VTAG_RESERVED_STRING_58,
VTAG_RESERVED_STRING_59,
VTAG_RESERVED_STRING_5A,
VTAG_RESERVED_STRING_5B,
VTAG_RESERVED_STRING_5C,
VTAG_RESERVED_STRING_5D,
VTAG_RESERVED_STRING_5E,
VTAG_RESERVED_STRING_5F,
VTAG_RESERVED_MAX = 0x5f,
VTAG_MAX = 0x5f,
VTAG_EXTEND = 0x7f
};
enum {
IPP_OK_MIN = 0x0000,
IPP_OK = 0x0000,
IPP_OK_IGNORED_ATTRIBUTES,
IPP_OK_CONFLICTING_ATTRIBUTES,
IPP_OK_IGNORED_SUBSCRIPTIONS,
IPP_OK_IGNORED_NOTIFICATIONS,
IPP_OK_TOO_MANY_EVENTS,
IPP_OK_BUT_CANCEL_SUBSCRIPTION,
IPP_OK_MAX = IPP_OK_BUT_CANCEL_SUBSCRIPTION,
IPP_REDIR_MIN = 0x0300,
IPP_REDIR_OTHER_SIZE = 0x0300,
IPP_REDIR_MAX = 0x0300,
IPP_CERR_MIN = 0x0400,
IPP_CERR_BAD_REQUEST = 0x0400,
IPP_CERR_FORBIDDEN,
IPP_CERR_NOT_AUTHENTICATED,
IPP_CERR_NOT_AUTHORIZED,
IPP_CERR_NOT_POSSIBLE,
IPP_CERR_TIMEOUT,
IPP_CERR_NOT_FOUND,
IPP_CERR_GONE,
IPP_CERR_REQUEST_ENTITY,
IPP_CERR_REQUEST_VALUE,
IPP_CERR_DOCUMENT_FORMAT,
IPP_CERR_ATTRIBUTES,
IPP_CERR_URI_SCHEME,
IPP_CERR_CHARSET,
IPP_CERR_CONFLICT,
IPP_CERR_COMPRESSION_NOT_SUPPORTED,
IPP_CERR_COMPRESSION_ERROR,
IPP_CERR_DOCUMENT_FORMAT_ERROR,
IPP_CERR_DOCUMENT_ACCESS_ERROR,
IPP_CERR_ATTRIBUTES_NOT_SETTABLE,
IPP_CERR_IGNORED_ALL_SUBSCRIPTIONS,
IPP_CERR_TOO_MANY_SUBSCRIPTIONS,
IPP_CERR_IGNORED_ALL_NOTIFICATIONS,
IPP_CERR_PRINT_SUPPORT_FILE_NOT_FOUND,
IPP_CERR_MAX = IPP_CERR_PRINT_SUPPORT_FILE_NOT_FOUND,
IPP_SERR_MIN = 0x0500,
IPP_SERR_INTERNAL = 0x0500,
IPP_SERR_OPERATION_NOT_SUPPORTED,
IPP_SERR_SERVICE_UNAVAILABLE,
IPP_SERR_VERSION_NOT_SUPPORTED,
IPP_SERR_DEVICE_ERROR,
IPP_SERR_TEMPORARY_ERROR,
IPP_SERR_NOT_ACCEPTING,
IPP_SERR_BUSY,
IPP_SERR_CANCELLED,
IPP_SERR_MULTIPLE_DOCS_NOT_SUPPORTED,
IPP_SERR_PRINTER_IS_DEACTIVATED,
IPP_SERR_MAX = IPP_SERR_PRINTER_IS_DEACTIVATED
};
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
};
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);
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