| /* |
| * Private IPP definitions for CUPS. |
| * |
| * Copyright © 2007-2018 by Apple Inc. |
| * Copyright © 1997-2006 by Easy Software Products. |
| * |
| * Licensed under Apache License v2.0. See the file "LICENSE" for more |
| * information. |
| */ |
| |
| #ifndef _CUPS_IPP_PRIVATE_H_ |
| # define _CUPS_IPP_PRIVATE_H_ |
| |
| /* |
| * Include necessary headers... |
| */ |
| |
| # include <cups/cups.h> |
| |
| |
| /* |
| * C++ magic... |
| */ |
| |
| # ifdef __cplusplus |
| extern "C" { |
| # endif /* __cplusplus */ |
| |
| |
| /* |
| * Constants... |
| */ |
| |
| # define IPP_BUF_SIZE (IPP_MAX_LENGTH + 2) |
| /* Size of buffer */ |
| |
| |
| /* |
| * Structures... |
| */ |
| |
| typedef union _ipp_request_u /**** Request Header ****/ |
| { |
| struct /* Any Header */ |
| { |
| ipp_uchar_t version[2]; /* Protocol version number */ |
| int op_status; /* Operation ID or status code*/ |
| int request_id; /* Request ID */ |
| } any; |
| |
| struct /* Operation Header */ |
| { |
| ipp_uchar_t version[2]; /* Protocol version number */ |
| ipp_op_t operation_id; /* Operation ID */ |
| int request_id; /* Request ID */ |
| } op; |
| |
| struct /* Status Header */ |
| { |
| ipp_uchar_t version[2]; /* Protocol version number */ |
| ipp_status_t status_code; /* Status code */ |
| int request_id; /* Request ID */ |
| } status; |
| |
| /**** New in CUPS 1.1.19 ****/ |
| struct /* Event Header @since CUPS 1.1.19/macOS 10.3@ */ |
| { |
| ipp_uchar_t version[2]; /* Protocol version number */ |
| ipp_status_t status_code; /* Status code */ |
| int request_id; /* Request ID */ |
| } event; |
| } _ipp_request_t; |
| |
| typedef union _ipp_value_u /**** Attribute Value ****/ |
| { |
| int integer; /* Integer/enumerated value */ |
| |
| char boolean; /* Boolean value */ |
| |
| ipp_uchar_t date[11]; /* Date/time value */ |
| |
| struct |
| { |
| int xres, /* Horizontal resolution */ |
| yres; /* Vertical resolution */ |
| ipp_res_t units; /* Resolution units */ |
| } resolution; /* Resolution value */ |
| |
| struct |
| { |
| int lower, /* Lower value */ |
| upper; /* Upper value */ |
| } range; /* Range of integers value */ |
| |
| struct |
| { |
| char *language; /* Language code */ |
| char *text; /* String */ |
| } string; /* String with language value */ |
| |
| struct |
| { |
| int length; /* Length of attribute */ |
| void *data; /* Data in attribute */ |
| } unknown; /* Unknown attribute type */ |
| |
| /**** New in CUPS 1.1.19 ****/ |
| ipp_t *collection; /* Collection value @since CUPS 1.1.19/macOS 10.3@ */ |
| } _ipp_value_t; |
| |
| struct _ipp_attribute_s /**** IPP attribute ****/ |
| { |
| ipp_attribute_t *next; /* Next attribute in list */ |
| ipp_tag_t group_tag, /* Job/Printer/Operation group tag */ |
| value_tag; /* What type of value is it? */ |
| char *name; /* Name of attribute */ |
| int num_values; /* Number of values */ |
| _ipp_value_t values[1]; /* Values */ |
| }; |
| |
| struct _ipp_s /**** IPP Request/Response/Notification ****/ |
| { |
| ipp_state_t state; /* State of request */ |
| _ipp_request_t request; /* Request header */ |
| ipp_attribute_t *attrs; /* Attributes */ |
| ipp_attribute_t *last; /* Last attribute in list */ |
| ipp_attribute_t *current; /* Current attribute (for read/write) */ |
| ipp_tag_t curtag; /* Current attribute group tag */ |
| |
| /**** New in CUPS 1.2 ****/ |
| ipp_attribute_t *prev; /* Previous attribute (for read) @since CUPS 1.2/macOS 10.5@ */ |
| |
| /**** New in CUPS 1.4.4 ****/ |
| int use; /* Use count @since CUPS 1.4.4/macOS 10.6.?@ */ |
| /**** New in CUPS 2.0 ****/ |
| int atend, /* At end of list? */ |
| curindex; /* Current attribute index for hierarchical search */ |
| }; |
| |
| typedef struct _ipp_option_s /**** Attribute mapping data ****/ |
| { |
| int multivalue; /* Option has multiple values? */ |
| const char *name; /* Option/attribute name */ |
| ipp_tag_t value_tag; /* Value tag for this attribute */ |
| ipp_tag_t group_tag; /* Group tag for this attribute */ |
| ipp_tag_t alt_group_tag; /* Alternate group tag for this |
| * attribute */ |
| const ipp_op_t *operations; /* Allowed operations for this attr */ |
| } _ipp_option_t; |
| |
| typedef struct _ipp_file_s _ipp_file_t;/**** File Parser ****/ |
| typedef struct _ipp_vars_s _ipp_vars_t;/**** Variables ****/ |
| |
| typedef int (*_ipp_fattr_cb_t)(_ipp_file_t *f, void *user_data, const char *attr); |
| /**** File Attribute (Filter) Callback ****/ |
| typedef int (*_ipp_ferror_cb_t)(_ipp_file_t *f, void *user_data, const char *error); |
| /**** File Parser Error Callback ****/ |
| typedef int (*_ipp_ftoken_cb_t)(_ipp_file_t *f, _ipp_vars_t *v, void *user_data, const char *token); |
| /**** File Parser Token Callback ****/ |
| |
| struct _ipp_vars_s /**** Variables ****/ |
| { |
| char *uri, /* URI for printer */ |
| scheme[64], /* Scheme from URI */ |
| username[256], /* Username from URI */ |
| *password, /* Password from URI (if any) */ |
| host[256], /* Hostname from URI */ |
| portstr[32], /* Port number string */ |
| resource[1024]; /* Resource path from URI */ |
| int port; /* Port number from URI */ |
| int num_vars; /* Number of variables */ |
| cups_option_t *vars; /* Array of variables */ |
| int password_tries; /* Number of retries for password */ |
| _ipp_fattr_cb_t attrcb; /* Attribute (filter) callback */ |
| _ipp_ferror_cb_t errorcb; /* Error callback */ |
| _ipp_ftoken_cb_t tokencb; /* Token callback */ |
| }; |
| |
| struct _ipp_file_s /**** File Parser */ |
| { |
| const char *filename; /* Filename */ |
| cups_file_t *fp; /* File pointer */ |
| int linenum; /* Current line number */ |
| ipp_t *attrs; /* Attributes */ |
| ipp_tag_t group_tag; /* Current group for new attributes */ |
| }; |
| |
| |
| /* |
| * Prototypes for private functions... |
| */ |
| |
| /* encode.c */ |
| #ifdef DEBUG |
| extern const char *_ippCheckOptions(void) _CUPS_PRIVATE; |
| #endif /* DEBUG */ |
| extern _ipp_option_t *_ippFindOption(const char *name) _CUPS_PRIVATE; |
| |
| /* ipp-file.c */ |
| extern ipp_t *_ippFileParse(_ipp_vars_t *v, const char *filename, void *user_data) _CUPS_PRIVATE; |
| extern int _ippFileReadToken(_ipp_file_t *f, char *token, size_t tokensize) _CUPS_PRIVATE; |
| |
| /* ipp-vars.c */ |
| extern void _ippVarsDeinit(_ipp_vars_t *v) _CUPS_PRIVATE; |
| extern void _ippVarsExpand(_ipp_vars_t *v, char *dst, const char *src, size_t dstsize) _CUPS_NONNULL(1,2,3) _CUPS_PRIVATE; |
| extern const char *_ippVarsGet(_ipp_vars_t *v, const char *name) _CUPS_PRIVATE; |
| extern void _ippVarsInit(_ipp_vars_t *v, _ipp_fattr_cb_t attrcb, _ipp_ferror_cb_t errorcb, _ipp_ftoken_cb_t tokencb) _CUPS_PRIVATE; |
| extern const char *_ippVarsPasswordCB(const char *prompt, http_t *http, const char *method, const char *resource, void *user_data) _CUPS_PRIVATE; |
| extern int _ippVarsSet(_ipp_vars_t *v, const char *name, const char *value) _CUPS_PRIVATE; |
| |
| |
| /* |
| * C++ magic... |
| */ |
| |
| # ifdef __cplusplus |
| } |
| # endif /* __cplusplus */ |
| #endif /* !_CUPS_IPP_H_ */ |