X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=cups%2Fipp-private.h;h=fa5e4355030f097e3a4180e75f67b183a36dfe42;hb=3894a8854421f2e246b47bccec2c66de727da9e0;hp=5475652eafb3331cdf1ca1d1d68105e3b13a5fd9;hpb=e310189747c161ac6e737eedadf8f45d11bf2253;p=thirdparty%2Fcups.git diff --git a/cups/ipp-private.h b/cups/ipp-private.h index 5475652ea..fa5e43550 100644 --- a/cups/ipp-private.h +++ b/cups/ipp-private.h @@ -1,10 +1,11 @@ /* * Private IPP definitions for CUPS. * - * Copyright 2007-2014 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products. + * 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. + * Licensed under Apache License v2.0. See the file "LICENSE" for more + * information. */ #ifndef _CUPS_IPP_PRIVATE_H_ @@ -14,7 +15,7 @@ * Include necessary headers... */ -# include +# include /* @@ -38,7 +39,105 @@ extern "C" { * Structures... */ -typedef struct /**** Attribute mapping data ****/ +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 */ @@ -49,15 +148,66 @@ typedef struct /**** Attribute mapping data ****/ 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); +extern const char *_ippCheckOptions(void) _CUPS_PRIVATE; #endif /* DEBUG */ -extern _ipp_option_t *_ippFindOption(const char *name); +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...