1 /* 2 * "$Id: ipp.h 9357 2010-11-11 17:40:35Z mike $" 3 * 4 * Internet Printing Protocol definitions for CUPS. 5 * 6 * Copyright 2007-2010 by Apple Inc. 7 * Copyright 1997-2006 by Easy Software Products. 8 * 9 * These coded instructions, statements, and computer programs are the 10 * property of Apple Inc. and are protected by Federal copyright 11 * law. Distribution and use rights are outlined in the file "LICENSE.txt" 12 * which should have been included with this file. If this file is 13 * file is missing or damaged, see the license at "http://www.cups.org/". 14 * 15 * This file is subject to the Apple OS-Developed Software exception. 16 */ 17 18 #ifndef _CUPS_IPP_H_ 19 # define _CUPS_IPP_H_ 20 21 /* 22 * Include necessary headers... 23 */ 24 25 # include "http.h" 26 27 28 /* 29 * C++ magic... 30 */ 31 32 # ifdef __cplusplus 33 extern "C" { 34 # endif /* __cplusplus */ 35 36 37 /* 38 * IPP version string... 39 */ 40 41 # define IPP_VERSION "\001\001" 42 43 /* 44 * IPP registered port number... 45 * 46 * Note: Applications should never use IPP_PORT, but instead use the 47 * ippPort() function to allow overrides via the IPP_PORT environment 48 * variable and services file if needed! 49 */ 50 51 # define IPP_PORT 631 52 53 /* 54 * Common limits... 55 */ 56 57 # define IPP_MAX_LENGTH 32767 /* Maximum size of any single value */ 58 # define IPP_MAX_NAME 256 /* Maximum length of common name values */ 59 # define IPP_MAX_VALUES 8 /* Power-of-2 allocation increment */ 60 61 62 /* 63 * Types and structures... 64 */ 65 66 typedef enum ipp_tag_e /**** Format tags for attributes ****/ 67 { 68 IPP_TAG_ZERO = 0x00, /* Zero tag - used for separators */ 69 IPP_TAG_OPERATION, /* Operation group */ 70 IPP_TAG_JOB, /* Job group */ 71 IPP_TAG_END, /* End-of-attributes */ 72 IPP_TAG_PRINTER, /* Printer group */ 73 IPP_TAG_UNSUPPORTED_GROUP, /* Unsupported attributes group */ 74 IPP_TAG_SUBSCRIPTION, /* Subscription group */ 75 IPP_TAG_EVENT_NOTIFICATION, /* Event group */ 76 IPP_TAG_UNSUPPORTED_VALUE = 0x10, /* Unsupported value */ 77 IPP_TAG_DEFAULT, /* Default value */ 78 IPP_TAG_UNKNOWN, /* Unknown value */ 79 IPP_TAG_NOVALUE, /* No-value value */ 80 IPP_TAG_NOTSETTABLE = 0x15, /* Not-settable value */ 81 IPP_TAG_DELETEATTR, /* Delete-attribute value */ 82 IPP_TAG_ADMINDEFINE, /* Admin-defined value */ 83 IPP_TAG_INTEGER = 0x21, /* Integer value */ 84 IPP_TAG_BOOLEAN, /* Boolean value */ 85 IPP_TAG_ENUM, /* Enumeration value */ 86 IPP_TAG_STRING = 0x30, /* Octet string value */ 87 IPP_TAG_DATE, /* Date/time value */ 88 IPP_TAG_RESOLUTION, /* Resolution value */ 89 IPP_TAG_RANGE, /* Range value */ 90 IPP_TAG_BEGIN_COLLECTION, /* Beginning of collection value */ 91 IPP_TAG_TEXTLANG, /* Text-with-language value */ 92 IPP_TAG_NAMELANG, /* Name-with-language value */ 93 IPP_TAG_END_COLLECTION, /* End of collection value */ 94 IPP_TAG_TEXT = 0x41, /* Text value */ 95 IPP_TAG_NAME, /* Name value */ 96 IPP_TAG_RESERVED_STRING, /* Reserved for future string value @private@ */ 97 IPP_TAG_KEYWORD, /* Keyword value */ 98 IPP_TAG_URI, /* URI value */ 99 IPP_TAG_URISCHEME, /* URI scheme value */ 100 IPP_TAG_CHARSET, /* Character set value */ 101 IPP_TAG_LANGUAGE, /* Language value */ 102 IPP_TAG_MIMETYPE, /* MIME media type value */ 103 IPP_TAG_MEMBERNAME, /* Collection member name value */ 104 IPP_TAG_MASK = 0x7fffffff, /* Mask for copied attribute values */ 105 IPP_TAG_COPY = -0x7fffffff-1 /* Bitflag for copied attribute values */ 106 } ipp_tag_t; 107 108 typedef enum ipp_res_e /**** Resolution units ****/ 109 { 110 IPP_RES_PER_INCH = 3, /* Pixels per inch */ 111 IPP_RES_PER_CM /* Pixels per centimeter */ 112 } ipp_res_t; 113 114 typedef enum ipp_finish_e /**** Finishings ****/ 115 { 116 IPP_FINISHINGS_NONE = 3, /* No finishing */ 117 IPP_FINISHINGS_STAPLE, /* Staple (any location) */ 118 IPP_FINISHINGS_PUNCH, /* Punch (any location/count) */ 119 IPP_FINISHINGS_COVER, /* Add cover */ 120 IPP_FINISHINGS_BIND, /* Bind */ 121 IPP_FINISHINGS_SADDLE_STITCH, /* Staple interior */ 122 IPP_FINISHINGS_EDGE_STITCH, /* Stitch along any side */ 123 IPP_FINISHINGS_FOLD, /* Fold (any type) */ 124 IPP_FINISHINGS_TRIM, /* Trim (any type) */ 125 IPP_FINISHINGS_BALE, /* Bale (any type) */ 126 IPP_FINISHINGS_BOOKLET_MAKER, /* Fold to make booklet */ 127 IPP_FINISHINGS_JOB_OFFSET, /* Offset for binding (any type) */ 128 IPP_FINISHINGS_STAPLE_TOP_LEFT = 20, /* Staple top left corner */ 129 IPP_FINISHINGS_STAPLE_BOTTOM_LEFT, /* Staple bottom left corner */ 130 IPP_FINISHINGS_STAPLE_TOP_RIGHT, /* Staple top right corner */ 131 IPP_FINISHINGS_STAPLE_BOTTOM_RIGHT, /* Staple bottom right corner */ 132 IPP_FINISHINGS_EDGE_STITCH_LEFT, /* Stitch along left side */ 133 IPP_FINISHINGS_EDGE_STITCH_TOP, /* Stitch along top edge */ 134 IPP_FINISHINGS_EDGE_STITCH_RIGHT, /* Stitch along right side */ 135 IPP_FINISHINGS_EDGE_STITCH_BOTTOM, /* Stitch along bottom edge */ 136 IPP_FINISHINGS_STAPLE_DUAL_LEFT, /* Two staples on left */ 137 IPP_FINISHINGS_STAPLE_DUAL_TOP, /* Two staples on top */ 138 IPP_FINISHINGS_STAPLE_DUAL_RIGHT, /* Two staples on right */ 139 IPP_FINISHINGS_STAPLE_DUAL_BOTTOM, /* Two staples on bottom */ 140 IPP_FINISHINGS_BIND_LEFT = 50, /* Bind on left */ 141 IPP_FINISHINGS_BIND_TOP, /* Bind on top */ 142 IPP_FINISHINGS_BIND_RIGHT, /* Bind on right */ 143 IPP_FINISHINGS_BIND_BOTTOM /* Bind on bottom */ 144 } ipp_finish_t; 145 146 typedef enum ipp_orient_e /**** Orientation values ****/ 147 { 148 IPP_PORTRAIT = 3, /* No rotation */ 149 IPP_LANDSCAPE, /* 90 degrees counter-clockwise */ 150 IPP_REVERSE_LANDSCAPE, /* 90 degrees clockwise */ 151 IPP_REVERSE_PORTRAIT /* 180 degrees */ 152 } ipp_orient_t; 153 154 typedef enum ipp_quality_e /**** Qualities ****/ 155 { 156 IPP_QUALITY_DRAFT = 3, /* Draft quality */ 157 IPP_QUALITY_NORMAL, /* Normal quality */ 158 IPP_QUALITY_HIGH /* High quality */ 159 } ipp_quality_t; 160 161 typedef enum ipp_jstate_e /**** Job states ****/ 162 { 163 IPP_JOB_PENDING = 3, /* Job is waiting to be printed */ 164 IPP_JOB_HELD, /* Job is held for printing */ 165 IPP_JOB_PROCESSING, /* Job is currently printing */ 166 IPP_JOB_STOPPED, /* Job has been stopped */ 167 IPP_JOB_CANCELED, /* Job has been canceled */ 168 IPP_JOB_ABORTED, /* Job has aborted due to error */ 169 IPP_JOB_COMPLETED /* Job has completed successfully */ 170 } ipp_jstate_t; 171 #define IPP_JOB_CANCELLED IPP_JOB_CANCELED 172 173 typedef enum ipp_pstate_e /**** Printer states ****/ 174 { 175 IPP_PRINTER_IDLE = 3, /* Printer is idle */ 176 IPP_PRINTER_PROCESSING, /* Printer is working */ 177 IPP_PRINTER_STOPPED /* Printer is stopped */ 178 } ipp_pstate_t; 179 180 typedef enum ipp_state_e /**** IPP states ****/ 181 { 182 IPP_ERROR = -1, /* An error occurred */ 183 IPP_IDLE, /* Nothing is happening/request completed */ 184 IPP_HEADER, /* The request header needs to be sent/received */ 185 IPP_ATTRIBUTE, /* One or more attributes need to be sent/received */ 186 IPP_DATA /* IPP request data needs to be sent/received */ 187 } ipp_state_t; 188 189 typedef enum ipp_op_e /**** IPP operations ****/ 190 { 191 IPP_PRINT_JOB = 0x0002, /* Print a single file */ 192 IPP_PRINT_URI, /* Print a single URL @private@ */ 193 IPP_VALIDATE_JOB, /* Validate job options */ 194 IPP_CREATE_JOB, /* Create an empty print job */ 195 IPP_SEND_DOCUMENT, /* Add a file to a job */ 196 IPP_SEND_URI, /* Add a URL to a job @private@ */ 197 IPP_CANCEL_JOB, /* Cancel a job */ 198 IPP_GET_JOB_ATTRIBUTES, /* Get job attributes */ 199 IPP_GET_JOBS, /* Get a list of jobs */ 200 IPP_GET_PRINTER_ATTRIBUTES, /* Get printer attributes */ 201 IPP_HOLD_JOB, /* Hold a job for printing */ 202 IPP_RELEASE_JOB, /* Release a job for printing */ 203 IPP_RESTART_JOB, /* Reprint a job */ 204 IPP_PAUSE_PRINTER = 0x0010, /* Stop a printer */ 205 IPP_RESUME_PRINTER, /* Start a printer */ 206 IPP_PURGE_JOBS, /* Cancel all jobs */ 207 IPP_SET_PRINTER_ATTRIBUTES, /* Set printer attributes @private@ */ 208 IPP_SET_JOB_ATTRIBUTES, /* Set job attributes */ 209 IPP_GET_PRINTER_SUPPORTED_VALUES, /* Get supported attribute values */ 210 IPP_CREATE_PRINTER_SUBSCRIPTION, /* Create a printer subscription @since CUPS 1.2/Mac OS X 10.5@ */ 211 IPP_CREATE_JOB_SUBSCRIPTION, /* Create a job subscription @since CUPS 1.2/Mac OS X 10.5@ */ 212 IPP_GET_SUBSCRIPTION_ATTRIBUTES, /* Get subscription attributes @since CUPS 1.2/Mac OS X 10.5@ */ 213 IPP_GET_SUBSCRIPTIONS, /* Get list of subscriptions @since CUPS 1.2/Mac OS X 10.5@ */ 214 IPP_RENEW_SUBSCRIPTION, /* Renew a printer subscription @since CUPS 1.2/Mac OS X 10.5@ */ 215 IPP_CANCEL_SUBSCRIPTION, /* Cancel a subscription @since CUPS 1.2/Mac OS X 10.5@ */ 216 IPP_GET_NOTIFICATIONS, /* Get notification events @since CUPS 1.2/Mac OS X 10.5@ */ 217 IPP_SEND_NOTIFICATIONS, /* Send notification events @private@ */ 218 IPP_GET_PRINT_SUPPORT_FILES = 0x0021, /* Get printer support files @private@ */ 219 IPP_ENABLE_PRINTER, /* Start a printer */ 220 IPP_DISABLE_PRINTER, /* Stop a printer */ 221 IPP_PAUSE_PRINTER_AFTER_CURRENT_JOB, /* Stop printer after the current job @private@ */ 222 IPP_HOLD_NEW_JOBS, /* Hold new jobs @private@ */ 223 IPP_RELEASE_HELD_NEW_JOBS, /* Release new jobs @private@ */ 224 IPP_DEACTIVATE_PRINTER, /* Stop a printer @private@ */ 225 IPP_ACTIVATE_PRINTER, /* Start a printer @private@ */ 226 IPP_RESTART_PRINTER, /* Restart a printer @private@ */ 227 IPP_SHUTDOWN_PRINTER, /* Turn a printer off @private@ */ 228 IPP_STARTUP_PRINTER, /* Turn a printer on @private@ */ 229 IPP_REPROCESS_JOB, /* Reprint a job @private@ */ 230 IPP_CANCEL_CURRENT_JOB, /* Cancel the current job @private@ */ 231 IPP_SUSPEND_CURRENT_JOB, /* Suspend the current job @private@ */ 232 IPP_RESUME_JOB, /* Resume the current job @private@ */ 233 IPP_PROMOTE_JOB, /* Promote a job to print sooner @private@ */ 234 IPP_SCHEDULE_JOB_AFTER, /* Schedule a job to print after another @private@ */ 235 IPP_PRIVATE = 0x4000, /* Reserved @private@ */ 236 CUPS_GET_DEFAULT, /* Get the default printer */ 237 CUPS_GET_PRINTERS, /* Get a list of printers and/or classes */ 238 CUPS_ADD_MODIFY_PRINTER, /* Add or modify a printer */ 239 CUPS_DELETE_PRINTER, /* Delete a printer */ 240 CUPS_GET_CLASSES, /* Get a list of classes @deprecated@ */ 241 CUPS_ADD_MODIFY_CLASS, /* Add or modify a class */ 242 CUPS_DELETE_CLASS, /* Delete a class */ 243 CUPS_ACCEPT_JOBS, /* Accept new jobs on a printer */ 244 CUPS_REJECT_JOBS, /* Reject new jobs on a printer */ 245 CUPS_SET_DEFAULT, /* Set the default printer */ 246 CUPS_GET_DEVICES, /* Get a list of supported devices */ 247 CUPS_GET_PPDS, /* Get a list of supported drivers */ 248 CUPS_MOVE_JOB, /* Move a job to a different printer */ 249 CUPS_AUTHENTICATE_JOB, /* Authenticate a job @since CUPS 1.2/Mac OS X 10.5@ */ 250 CUPS_GET_PPD, /* Get a PPD file @since CUPS 1.3/Mac OS X 10.5@ */ 251 CUPS_GET_DOCUMENT = 0x4027 /* Get a document file @since CUPS 1.4/Mac OS X 10.6@ */ 252 } ipp_op_t; 253 254 /* Old names for the operations */ 255 #define CUPS_ADD_PRINTER CUPS_ADD_MODIFY_PRINTER 256 #define CUPS_ADD_CLASS CUPS_ADD_MODIFY_CLASS 257 258 typedef enum ipp_status_e /**** IPP status codes ****/ 259 { 260 IPP_OK = 0x0000, /* successful-ok */ 261 IPP_OK_SUBST, /* successful-ok-ignored-or-substituted-attributes */ 262 IPP_OK_CONFLICT, /* successful-ok-conflicting-attributes */ 263 IPP_OK_IGNORED_SUBSCRIPTIONS, /* successful-ok-ignored-subscriptions */ 264 IPP_OK_IGNORED_NOTIFICATIONS, /* successful-ok-ignored-notifications */ 265 IPP_OK_TOO_MANY_EVENTS, /* successful-ok-too-many-events */ 266 IPP_OK_BUT_CANCEL_SUBSCRIPTION, /* successful-ok-but-cancel-subscription */ 267 IPP_OK_EVENTS_COMPLETE, /* successful-ok-events-complete */ 268 IPP_REDIRECTION_OTHER_SITE = 0x200, /* redirection-other-site @private@ */ 269 CUPS_SEE_OTHER = 0x280, /* cups-see-other */ 270 IPP_BAD_REQUEST = 0x0400, /* client-error-bad-request */ 271 IPP_FORBIDDEN, /* client-error-forbidden */ 272 IPP_NOT_AUTHENTICATED, /* client-error-not-authenticated */ 273 IPP_NOT_AUTHORIZED, /* client-error-not-authorized */ 274 IPP_NOT_POSSIBLE, /* client-error-not-possible */ 275 IPP_TIMEOUT, /* client-error-timeout */ 276 IPP_NOT_FOUND, /* client-error-not-found */ 277 IPP_GONE, /* client-error-gone */ 278 IPP_REQUEST_ENTITY, /* client-error-request-entity-too-large */ 279 IPP_REQUEST_VALUE, /* client-error-request-value-too-long */ 280 IPP_DOCUMENT_FORMAT, /* client-error-document-format-not-supported */ 281 IPP_ATTRIBUTES, /* client-error-attributes-or-values-not-supported */ 282 IPP_URI_SCHEME, /* client-error-uri-scheme-not-supported */ 283 IPP_CHARSET, /* client-error-charset-not-supported */ 284 IPP_CONFLICT, /* client-error-conflicting-attributes */ 285 IPP_COMPRESSION_NOT_SUPPORTED, /* client-error-compression-not-supported */ 286 IPP_COMPRESSION_ERROR, /* client-error-compression-error */ 287 IPP_DOCUMENT_FORMAT_ERROR, /* client-error-document-format-error */ 288 IPP_DOCUMENT_ACCESS_ERROR, /* client-error-document-access-error */ 289 IPP_ATTRIBUTES_NOT_SETTABLE, /* client-error-attributes-not-settable */ 290 IPP_IGNORED_ALL_SUBSCRIPTIONS, /* client-error-ignored-all-subscriptions */ 291 IPP_TOO_MANY_SUBSCRIPTIONS, /* client-error-too-many-subscriptions */ 292 IPP_IGNORED_ALL_NOTIFICATIONS, /* client-error-ignored-all-notifications */ 293 IPP_PRINT_SUPPORT_FILE_NOT_FOUND, /* client-error-print-support-file-not-found */ 294 295 IPP_INTERNAL_ERROR = 0x0500, /* server-error-internal-error */ 296 IPP_OPERATION_NOT_SUPPORTED, /* server-error-operation-not-supported */ 297 IPP_SERVICE_UNAVAILABLE, /* server-error-service-unavailable */ 298 IPP_VERSION_NOT_SUPPORTED, /* server-error-version-not-supported */ 299 IPP_DEVICE_ERROR, /* server-error-device-error */ 300 IPP_TEMPORARY_ERROR, /* server-error-temporary-error */ 301 IPP_NOT_ACCEPTING, /* server-error-not-accepting-jobs */ 302 IPP_PRINTER_BUSY, /* server-error-busy */ 303 IPP_ERROR_JOB_CANCELED, /* server-error-job-canceled */ 304 IPP_MULTIPLE_JOBS_NOT_SUPPORTED, /* server-error-multiple-document-jobs-not-supported */ 305 IPP_PRINTER_IS_DEACTIVATED /* server-error-printer-is-deactivated */ 306 } ipp_status_t; 307 #define IPP_ERROR_JOB_CANCELLED IPP_ERROR_JOB_CANCELED 308 309 typedef unsigned char ipp_uchar_t; /**** Unsigned 8-bit integer/character ****/ 310 311 /**** New in CUPS 1.2 ****/ 312 typedef ssize_t (*ipp_iocb_t)(void *, ipp_uchar_t *, size_t); 313 /**** IPP IO Callback Function @since CUPS 1.2/Mac OS X 10.5@ ****/ 314 315 typedef union ipp_request_u /**** Request Header ****/ 316 { 317 struct /* Any Header */ 318 { 319 ipp_uchar_t version[2]; /* Protocol version number */ 320 int op_status; /* Operation ID or status code*/ 321 int request_id; /* Request ID */ 322 } any; 323 324 struct /* Operation Header */ 325 { 326 ipp_uchar_t version[2]; /* Protocol version number */ 327 ipp_op_t operation_id; /* Operation ID */ 328 int request_id; /* Request ID */ 329 } op; 330 331 struct /* Status Header */ 332 { 333 ipp_uchar_t version[2]; /* Protocol version number */ 334 ipp_status_t status_code; /* Status code */ 335 int request_id; /* Request ID */ 336 } status; 337 338 /**** New in CUPS 1.1.19 ****/ 339 struct /* Event Header @since CUPS 1.1.19/Mac OS X 10.3@ */ 340 { 341 ipp_uchar_t version[2]; /* Protocol version number */ 342 ipp_status_t status_code; /* Status code */ 343 int request_id; /* Request ID */ 344 } event; 345 } ipp_request_t; 346 347 /**** New in CUPS 1.1.19 ****/ 348 typedef struct ipp_s ipp_t; 349 350 typedef union ipp_value_u /**** Attribute Value ****/ 351 { 352 int integer; /* Integer/enumerated value */ 353 354 char boolean; /* Boolean value */ 355 356 ipp_uchar_t date[11]; /* Date/time value */ 357 358 struct 359 { 360 int xres, /* Horizontal resolution */ 361 yres; /* Vertical resolution */ 362 ipp_res_t units; /* Resolution units */ 363 } resolution; /* Resolution value */ 364 365 struct 366 { 367 int lower, /* Lower value */ 368 upper; /* Upper value */ 369 } range; /* Range of integers value */ 370 371 struct 372 { 373 char *charset; /* Character set */ 374 char *text; /* String */ 375 } string; /* String with language value */ 376 377 struct 378 { 379 int length; /* Length of attribute */ 380 void *data; /* Data in attribute */ 381 } unknown; /* Unknown attribute type */ 382 383 /**** New in CUPS 1.1.19 ****/ 384 ipp_t *collection; /* Collection value @since CUPS 1.1.19/Mac OS X 10.3@ */ 385 } ipp_value_t; 386 387 typedef struct ipp_attribute_s /**** Attribute ****/ 388 { 389 struct ipp_attribute_s *next; /* Next attribute in list */ 390 ipp_tag_t group_tag, /* Job/Printer/Operation group tag */ 391 value_tag; /* What type of value is it? */ 392 char *name; /* Name of attribute */ 393 int num_values; /* Number of values */ 394 ipp_value_t values[1]; /* Values */ 395 } ipp_attribute_t; 396 397 struct ipp_s /**** IPP Request/Response/Notification ****/ 398 { 399 ipp_state_t state; /* State of request */ 400 ipp_request_t request; /* Request header */ 401 ipp_attribute_t *attrs; /* Attributes */ 402 ipp_attribute_t *last; /* Last attribute in list */ 403 ipp_attribute_t *current; /* Current attribute (for read/write) */ 404 ipp_tag_t curtag; /* Current attribute group tag */ 405 406 /**** New in CUPS 1.2 ****/ 407 ipp_attribute_t *prev; /* Previous attribute (for read) @since CUPS 1.2/Mac OS X 10.5@ */ 408 409 /**** New in CUPS 1.5 ****/ 410 int use; /* Use count */ 411 }; 412 413 414 /* 415 * Prototypes... 416 */ 417 418 extern ipp_attribute_t *ippAddBoolean(ipp_t *ipp, ipp_tag_t group, 419 const char *name, char value); 420 extern ipp_attribute_t *ippAddBooleans(ipp_t *ipp, ipp_tag_t group, 421 const char *name, int num_values, 422 const char *values); 423 extern ipp_attribute_t *ippAddDate(ipp_t *ipp, ipp_tag_t group, 424 const char *name, const ipp_uchar_t *value); 425 extern ipp_attribute_t *ippAddInteger(ipp_t *ipp, ipp_tag_t group, 426 ipp_tag_t type, const char *name, 427 int value); 428 extern ipp_attribute_t *ippAddIntegers(ipp_t *ipp, ipp_tag_t group, 429 ipp_tag_t type, const char *name, 430 int num_values, const int *values); 431 extern ipp_attribute_t *ippAddRange(ipp_t *ipp, ipp_tag_t group, 432 const char *name, int lower, int upper); 433 extern ipp_attribute_t *ippAddRanges(ipp_t *ipp, ipp_tag_t group, 434 const char *name, int num_values, 435 const int *lower, const int *upper); 436 extern ipp_attribute_t *ippAddResolution(ipp_t *ipp, ipp_tag_t group, 437 const char *name, ipp_res_t units, 438 int xres, int yres); 439 extern ipp_attribute_t *ippAddResolutions(ipp_t *ipp, ipp_tag_t group, 440 const char *name, int num_values, 441 ipp_res_t units, const int *xres, 442 const int *yres); 443 extern ipp_attribute_t *ippAddSeparator(ipp_t *ipp); 444 extern ipp_attribute_t *ippAddString(ipp_t *ipp, ipp_tag_t group, 445 ipp_tag_t type, const char *name, 446 const char *charset, const char *value); 447 extern ipp_attribute_t *ippAddStrings(ipp_t *ipp, ipp_tag_t group, 448 ipp_tag_t type, const char *name, 449 int num_values, const char *charset, 450 const char * const *values); 451 extern time_t ippDateToTime(const ipp_uchar_t *date); 452 extern void ippDelete(ipp_t *ipp); 453 extern const char *ippErrorString(ipp_status_t error); 454 extern ipp_attribute_t *ippFindAttribute(ipp_t *ipp, const char *name, 455 ipp_tag_t type); 456 extern ipp_attribute_t *ippFindNextAttribute(ipp_t *ipp, const char *name, 457 ipp_tag_t type); 458 extern size_t ippLength(ipp_t *ipp); 459 extern ipp_t *ippNew(void); 460 extern ipp_state_t ippRead(http_t *http, ipp_t *ipp); 461 extern const ipp_uchar_t *ippTimeToDate(time_t t); 462 extern ipp_state_t ippWrite(http_t *http, ipp_t *ipp); 463 extern int ippPort(void); 464 extern void ippSetPort(int p); 465 466 /**** New in CUPS 1.1.19 ****/ 467 extern ipp_attribute_t *ippAddCollection(ipp_t *ipp, ipp_tag_t group, 468 const char *name, ipp_t *value) _CUPS_API_1_1_19; 469 extern ipp_attribute_t *ippAddCollections(ipp_t *ipp, ipp_tag_t group, 470 const char *name, int num_values, 471 const ipp_t **values) _CUPS_API_1_1_19; 472 extern void ippDeleteAttribute(ipp_t *ipp, ipp_attribute_t *attr) _CUPS_API_1_1_19; 473 extern ipp_state_t ippReadFile(int fd, ipp_t *ipp) _CUPS_API_1_1_19; 474 extern ipp_state_t ippWriteFile(int fd, ipp_t *ipp) _CUPS_API_1_1_19; 475 476 /**** New in CUPS 1.2 ****/ 477 extern ipp_attribute_t *ippAddOctetString(ipp_t *ipp, ipp_tag_t group, 478 const char *name, 479 const void *data, int datalen) _CUPS_API_1_2; 480 extern ipp_status_t ippErrorValue(const char *name) _CUPS_API_1_2; 481 extern ipp_t *ippNewRequest(ipp_op_t op) _CUPS_API_1_2; 482 extern const char *ippOpString(ipp_op_t op) _CUPS_API_1_2; 483 extern ipp_op_t ippOpValue(const char *name) _CUPS_API_1_2; 484 extern ipp_state_t ippReadIO(void *src, ipp_iocb_t cb, int blocking, 485 ipp_t *parent, ipp_t *ipp) _CUPS_API_1_2; 486 extern ipp_state_t ippWriteIO(void *dst, ipp_iocb_t cb, int blocking, 487 ipp_t *parent, ipp_t *ipp) _CUPS_API_1_2; 488 489 /**** New in CUPS 1.4 ****/ 490 extern const char *ippTagString(ipp_tag_t tag) _CUPS_API_1_4; 491 extern ipp_tag_t ippTagValue(const char *name) _CUPS_API_1_4; 492 493 494 /* 495 * C++ magic... 496 */ 497 498 # ifdef __cplusplus 499 } 500 # endif /* __cplusplus */ 501 #endif /* !_CUPS_IPP_H_ */ 502 503 /* 504 * End of "$Id: ipp.h 9357 2010-11-11 17:40:35Z mike $". 505 */ 506