1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 * 26 */ 27 28 #ifndef _PAPI_H 29 #define _PAPI_H 30 31 /* $Id: papi.h 161 2006-05-03 04:32:59Z njacobs $ */ 32 33 #pragma ident "%Z%%M% %I% %E% SMI" 34 35 #include <sys/types.h> 36 #include <time.h> 37 #include <stdio.h> 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif 42 43 /* 44 * Types 45 */ 46 47 /* service related types */ 48 typedef void *papi_service_t; 49 typedef void *papi_printer_t; 50 typedef void *papi_job_t; 51 typedef void *papi_stream_t; 52 53 typedef enum { 54 PAPI_ENCRYPT_IF_REQUESTED, /* Encrypt if requested (TLS upgrade) */ 55 PAPI_ENCRYPT_NEVER, /* Never encrypt */ 56 PAPI_ENCRYPT_REQUIRED, /* Encryption required (TLS upgrade) */ 57 PAPI_ENCRYPT_ALWAYS /* Always encrypt (SSL) */ 58 } papi_encryption_t; 59 60 /* attribute related types */ 61 typedef enum { 62 PAPI_STRING, 63 PAPI_INTEGER, 64 PAPI_BOOLEAN, 65 PAPI_RANGE, 66 PAPI_RESOLUTION, 67 PAPI_DATETIME, 68 PAPI_COLLECTION, 69 PAPI_METADATA 70 } papi_attribute_value_type_t; 71 72 typedef enum { 73 PAPI_RES_PER_INCH = 3, 74 PAPI_RES_PER_CM 75 } papi_resolution_unit_t; 76 77 enum { /* for boolean values */ 78 PAPI_FALSE = 0, 79 PAPI_TRUE = 1 80 }; 81 82 typedef enum { 83 PAPI_UNSUPPORTED = 0x10, 84 PAPI_DEFAULT = 0x11, 85 PAPI_UNKNOWN, 86 PAPI_NO_VALUE, 87 PAPI_NOT_SETTABLE = 0x15, 88 PAPI_DELETE = 0x16 89 } papi_metadata_t; 90 91 #define PAPI_LIST_JOBS_OTHERS 0x0001 92 #define PAPI_LIST_JOBS_COMPLETED 0x0002 93 #define PAPI_LIST_JOBS_NOT_COMPLETED 0x0004 94 #define PAPI_LIST_JOBS_ALL 0xFFFF 95 96 typedef struct papi_attribute_s papi_attribute_t; 97 98 typedef union { 99 char *string; /* PAPI_STRING value */ 100 int integer; /* PAPI_INTEGER value */ 101 char boolean; /* PAPI_BOOLEAN value */ 102 struct { /* PAPI_RANGE value */ 103 int lower; 104 int upper; 105 } range; 106 struct { /* PAPI_RESOLUTION value */ 107 int xres; 108 int yres; 109 papi_resolution_unit_t units; 110 } resolution; 111 time_t datetime; /* PAPI_DATETIME value */ 112 papi_attribute_t **collection; /* PAPI_COLLECTION value */ 113 papi_metadata_t metadata; /* PAPI_METADATA value */ 114 } papi_attribute_value_t; 115 116 struct papi_attribute_s { 117 char *name; /* attribute name */ 118 papi_attribute_value_type_t type; /* type of values */ 119 papi_attribute_value_t **values; /* list of values */ 120 }; 121 122 #define PAPI_ATTR_APPEND 0x0001 /* Add values to attr */ 123 #define PAPI_ATTR_REPLACE 0x0002 /* Delete existing values, then add */ 124 #define PAPI_ATTR_EXCL 0x0004 /* Fail if attr exists */ 125 126 /* job related types */ 127 typedef enum { 128 PAPI_JT_FORMAT_JDF = 0, 129 PAPI_JT_FORMAT_PWG = 1 130 } papi_jt_format_t; 131 132 typedef struct { 133 papi_jt_format_t format; 134 char *ticket_data; 135 char *file_name; 136 } papi_job_ticket_t; 137 138 /* status related types */ 139 typedef enum { 140 PAPI_OK = 0x0000, 141 PAPI_OK_SUBST, 142 PAPI_OK_CONFLICT, 143 PAPI_OK_IGNORED_SUBSCRIPTIONS, 144 PAPI_OK_IGNORED_NOTIFICATIONS, 145 PAPI_OK_TOO_MANY_EVENTS, 146 PAPI_OK_BUT_CANCEL_SUBSCRIPTION, 147 PAPI_REDIRECTION_OTHER_SITE = 0x0300, 148 PAPI_BAD_REQUEST = 0x0400, 149 PAPI_FORBIDDEN, 150 PAPI_NOT_AUTHENTICATED, 151 PAPI_NOT_AUTHORIZED, 152 PAPI_NOT_POSSIBLE, 153 PAPI_TIMEOUT, 154 PAPI_NOT_FOUND, 155 PAPI_GONE, 156 PAPI_REQUEST_ENTITY, 157 PAPI_REQUEST_VALUE, 158 PAPI_DOCUMENT_FORMAT, 159 PAPI_ATTRIBUTES, 160 PAPI_URI_SCHEME, 161 PAPI_CHARSET, 162 PAPI_CONFLICT, 163 PAPI_COMPRESSION_NOT_SUPPORTED, 164 PAPI_COMPRESSION_ERROR, 165 PAPI_DOCUMENT_FORMAT_ERROR, 166 PAPI_DOCUMENT_ACCESS_ERROR, 167 PAPI_ATTRIBUTES_NOT_SETTABLE, 168 PAPI_IGNORED_ALL_SUBSCRIPTIONS, 169 PAPI_TOO_MANY_SUBSCRIPTIONS, 170 PAPI_IGNORED_ALL_NOTIFICATIONS, 171 PAPI_PRINT_SUPPORT_FILE_NOT_FOUND, 172 PAPI_INTERNAL_ERROR = 0x0500, 173 PAPI_OPERATION_NOT_SUPPORTED, 174 PAPI_SERVICE_UNAVAILABLE, 175 PAPI_VERSION_NOT_SUPPORTED, 176 PAPI_DEVICE_ERROR, 177 PAPI_TEMPORARY_ERROR, 178 PAPI_NOT_ACCEPTING, 179 PAPI_PRINTER_BUSY, 180 PAPI_ERROR_JOB_CANCELLED, 181 PAPI_MULTIPLE_JOBS_NOT_SUPPORTED, 182 PAPI_PRINTER_IS_DEACTIVATED, 183 PAPI_BAD_ARGUMENT, 184 PAPI_JOB_TICKET_NOT_SUPPORTED 185 } papi_status_t; 186 187 /* list filter related */ 188 typedef enum { 189 PAPI_FILTER_BITMASK = 0 190 } papi_filter_type_t; 191 192 typedef struct { 193 papi_filter_type_t type; 194 union { 195 struct { /* PAPI_FILTER_BITMASK */ 196 unsigned int mask; 197 unsigned int value; 198 } bitmask; 199 } filter; 200 } papi_filter_t; 201 202 enum { 203 PAPI_PRINTER_LOCAL = 0x0000, /* Local destination */ 204 PAPI_PRINTER_CLASS = 0x0001, /* Printer class */ 205 PAPI_PRINTER_REMOTE = 0x0002, /* Remote destination */ 206 PAPI_PRINTER_BW = 0x0004, /* Can do B&W printing */ 207 PAPI_PRINTER_COLOR = 0x0008, /* Can do color printing */ 208 PAPI_PRINTER_DUPLEX = 0x0010, /* Can do duplex printing */ 209 PAPI_PRINTER_STAPLE = 0x0020, /* Can do stapling */ 210 PAPI_PRINTER_COPIES = 0x0040, /* Can do copies */ 211 PAPI_PRINTER_COLLATE = 0x0080, /* Can collate copies */ 212 PAPI_PRINTER_PUNCH = 0x0100, /* Can punch output */ 213 PAPI_PRINTER_COVER = 0x0200, /* Can cover output */ 214 PAPI_PRINTER_BIND = 0x0400, /* Can bind output */ 215 PAPI_PRINTER_SORT = 0x0800, /* Can sort output */ 216 PAPI_PRINTER_SMALL = 0x1000, /* Can do letter/legal/a4 */ 217 PAPI_PRINTER_MEDIUM = 0x2000, /* Can do tabloid/B/C/A3/A2 */ 218 PAPI_PRINTER_LARGE = 0x4000, /* Can do D/E/A1/A0 */ 219 PAPI_PRINTER_VARIABLE = 0x8000, /* Can do variable sizes */ 220 PAPI_PRINTER_IMPLICIT = 0x10000, /* implicit class */ 221 PAPI_PRINTER_DEFAULT = 0x20000, /* Default printer on network */ 222 PAPI_PRINTER_OPTIONS = 0xfffc /* ~ (CLASS | REMOTE | IMPLICIT) */ 223 }; 224 225 /* 226 * Functions 227 */ 228 229 /* Service related */ 230 extern papi_status_t papiServiceCreate(papi_service_t *handle, 231 char *service_name, char *user_name, 232 char *password, 233 int (*authCB)(papi_service_t svc, 234 void *app_data), 235 papi_encryption_t encryption, 236 void *app_data); 237 extern void papiServiceDestroy(papi_service_t handle); 238 extern papi_status_t papiServiceSetUserName(papi_service_t handle, 239 char *user_name); 240 extern papi_status_t papiServiceSetPassword(papi_service_t handle, 241 char *password); 242 extern papi_status_t papiServiceSetEncryption(papi_service_t handle, 243 papi_encryption_t encryption); 244 extern papi_status_t papiServiceSetAuthCB(papi_service_t handle, 245 int (*authCB)(papi_service_t s, 246 void *app_data)); 247 extern papi_status_t papiServiceSetAppData(papi_service_t handle, 248 void *app_data); 249 extern char *papiServiceGetServiceName(papi_service_t handle); 250 extern char *papiServiceGetUserName(papi_service_t handle); 251 extern char *papiServiceGetPassword(papi_service_t handle); 252 extern papi_encryption_t papiServiceGetEncryption(papi_service_t handle); 253 extern void *papiServiceGetAppData(papi_service_t handle); 254 extern papi_attribute_t **papiServiceGetAttributeList(papi_service_t handle); 255 extern char *papiServiceGetStatusMessage(papi_service_t handle); 256 257 /* Attribute related */ 258 extern papi_status_t papiAttributeListAddValue(papi_attribute_t ***attrs, 259 int flags, char *name, 260 papi_attribute_value_type_t type, 261 papi_attribute_value_t *value); 262 extern papi_status_t papiAttributeListAddString(papi_attribute_t ***attrs, 263 int flags, char *name, char *string); 264 extern papi_status_t papiAttributeListAddInteger(papi_attribute_t ***attrs, 265 int flags, char *name, int integer); 266 extern papi_status_t papiAttributeListAddBoolean(papi_attribute_t ***attrs, 267 int flags, char *name, char boolean); 268 extern papi_status_t papiAttributeListAddRange(papi_attribute_t ***attrs, 269 int flags, char *name, 270 int lower, int upper); 271 extern papi_status_t papiAttributeListAddResolution(papi_attribute_t ***attrs, 272 int flags, char *name, 273 int xres, int yres, 274 papi_resolution_unit_t units); 275 extern papi_status_t papiAttributeListAddDatetime(papi_attribute_t ***attrs, 276 int flags, char *name, time_t datetime); 277 extern papi_status_t papiAttributeListAddCollection(papi_attribute_t ***attrs, 278 int flags, char *name, 279 papi_attribute_t **collection); 280 extern papi_status_t papiAttributeListAddMetadata(papi_attribute_t ***attrs, 281 int flags, char *name, 282 papi_metadata_t metadata); 283 extern papi_status_t papiAttributeListDelete(papi_attribute_t ***attributes, 284 char *name); 285 extern papi_status_t papiAttributeListGetValue(papi_attribute_t **list, 286 void **iterator, char *name, 287 papi_attribute_value_type_t type, 288 papi_attribute_value_t **value); 289 extern papi_status_t papiAttributeListGetString(papi_attribute_t **list, 290 void **iterator, char *name, 291 char **vptr); 292 extern papi_status_t papiAttributeListGetInteger(papi_attribute_t **list, 293 void **iterator, char *name, int *vptr); 294 extern papi_status_t papiAttributeListGetBoolean(papi_attribute_t **list, 295 void **iterator, char *name, 296 char *vptr); 297 extern papi_status_t papiAttributeListGetRange(papi_attribute_t **list, 298 void **iterator, char *name, 299 int *min, int *max); 300 extern papi_status_t papiAttributeListGetResolution(papi_attribute_t **list, 301 void **iterator, char *name, 302 int *x, int *y, 303 papi_resolution_unit_t *units); 304 extern papi_status_t papiAttributeListGetDatetime(papi_attribute_t **list, 305 void **iterator, char *name, 306 time_t *dt); 307 extern papi_status_t papiAttributeListGetCollection(papi_attribute_t **list, 308 void **iterator, char *name, 309 papi_attribute_t ***collection); 310 extern papi_status_t papiAttributeListGetMetadata(papi_attribute_t **list, 311 void **iterator, char *name, 312 papi_metadata_t *vptr); 313 extern papi_attribute_t *papiAttributeListFind(papi_attribute_t **list, 314 char *name); 315 extern papi_attribute_t *papiAttributeListGetNext(papi_attribute_t **list, 316 void **iterator); 317 extern void papiAttributeListFree(papi_attribute_t **attributes); 318 319 extern papi_status_t papiAttributeListFromString(papi_attribute_t ***attrs, 320 int flags, char *string); 321 extern papi_status_t papiAttributeListToString(papi_attribute_t **attrs, 322 char *delim, 323 char *buffer, size_t buflen); 324 extern void papiAttributeListPrint(FILE *fp, papi_attribute_t **list, 325 char *prefix_fmt, ...); 326 327 /* Printer related */ 328 extern papi_status_t papiPrintersList(papi_service_t handle, 329 char **requested_attrs, 330 papi_filter_t *filter, 331 papi_printer_t **printers); 332 extern papi_status_t papiPrinterQuery(papi_service_t handle, char *name, 333 char **requested_attrs, 334 papi_attribute_t **job_attributes, 335 papi_printer_t *printer); 336 extern papi_status_t papiPrinterAdd(papi_service_t handle, char *name, 337 papi_attribute_t **attributes, 338 papi_printer_t *printer); 339 extern papi_status_t papiPrinterModify(papi_service_t handle, char *name, 340 papi_attribute_t **attributes, 341 papi_printer_t *printer); 342 extern papi_status_t papiPrinterRemove(papi_service_t handle, char *name); 343 extern papi_status_t papiPrinterDisable(papi_service_t handle, char *name, 344 char *message); 345 extern papi_status_t papiPrinterEnable(papi_service_t handle, char *name); 346 extern papi_status_t papiPrinterPause(papi_service_t handle, char *name, 347 char *message); 348 extern papi_status_t papiPrinterResume(papi_service_t handle, char *name); 349 extern papi_status_t papiPrinterPurgeJobs(papi_service_t handle, 350 char *name, papi_job_t **jobs); 351 extern papi_status_t papiPrinterListJobs(papi_service_t handle, 352 char *name, char **requested_attrs, 353 int type_mask, int max_num_jobs, 354 papi_job_t **jobs); 355 extern papi_attribute_t **papiPrinterGetAttributeList(papi_printer_t printer); 356 extern void papiPrinterFree(papi_printer_t printer); 357 extern void papiPrinterListFree(papi_printer_t *printers); 358 359 /* Job related */ 360 extern papi_status_t papiJobSubmit(papi_service_t handle, char *printer, 361 papi_attribute_t **job_attributes, 362 papi_job_ticket_t *job_ticket, 363 char **files, papi_job_t *job); 364 extern papi_status_t papiJobSubmitByReference(papi_service_t handle, 365 char *printer, 366 papi_attribute_t **job_attributes, 367 papi_job_ticket_t *job_ticket, 368 char **files, papi_job_t *job); 369 extern papi_status_t papiJobValidate(papi_service_t handle, char *printer, 370 papi_attribute_t **job_attributes, 371 papi_job_ticket_t *job_ticket, 372 char **files, papi_job_t *job); 373 extern papi_status_t papiJobStreamOpen(papi_service_t handle, 374 char *printer, 375 papi_attribute_t **job_attributes, 376 papi_job_ticket_t *job_ticket, 377 papi_stream_t *stream); 378 extern papi_status_t papiJobStreamWrite(papi_service_t handle, 379 papi_stream_t stream, 380 void *buffer, size_t buflen); 381 extern papi_status_t papiJobStreamClose(papi_service_t handle, 382 papi_stream_t stream, 383 papi_job_t *job); 384 extern papi_status_t papiJobQuery(papi_service_t handle, char *printer, 385 int32_t job_id, char **requested_attrs, 386 papi_job_t *job); 387 extern papi_status_t papiJobModify(papi_service_t handle, char *printer, 388 int32_t job_id, 389 papi_attribute_t **attributes, 390 papi_job_t *job); 391 extern papi_status_t papiJobMove(papi_service_t handle, char *printer, 392 int32_t job_id, char *destination); 393 extern papi_status_t papiJobCancel(papi_service_t handle, char *printer, 394 int32_t job_id); 395 extern papi_status_t papiJobHold(papi_service_t handle, char *printer, 396 int32_t job_id); 397 extern papi_status_t papiJobRelease(papi_service_t handle, char *printer, 398 int32_t job_id); 399 extern papi_status_t papiJobRestart(papi_service_t handle, char *printer, 400 int32_t job_id); 401 extern papi_status_t papiJobPromote(papi_service_t handle, char *printer, 402 int32_t job_id); 403 extern papi_attribute_t **papiJobGetAttributeList(papi_job_t printer); 404 extern char *papiJobGetPrinterName(papi_job_t printer); 405 extern int32_t papiJobGetId(papi_job_t printer); 406 extern papi_job_ticket_t *papiJobGetJobTicket(papi_job_t printer); 407 extern void papiJobFree(papi_job_t job); 408 extern void papiJobListFree(papi_job_t *jobs); 409 410 #ifdef SOLARIS_PRIVATE_POST_0_9 411 /* 412 * These have been added to support IPP create-job/send-document with PAPI v0.9 413 * in an IPP listener using PAPI as it's spooler interface. A future version 414 * of the API is expected to support this type of functionality 415 */ 416 extern papi_status_t papiJobCreate(papi_service_t handle, char *printer, 417 papi_attribute_t **job_attributes, 418 papi_job_ticket_t *job_ticket, 419 papi_job_t *job); 420 extern papi_status_t papiJobStreamAdd(papi_service_t handle, char *printer, 421 int32_t id, papi_stream_t *stream); 422 extern papi_status_t papiJobCommit(papi_service_t handle, char *printer, 423 int32_t id); 424 extern papi_status_t papiServiceSetPeer(papi_service_t handle, int peerfd); 425 #endif /* SOLARIS_PRIVATE_POST_0_9 */ 426 427 extern char *papiStatusString(papi_status_t status); 428 429 /* 430 * Internal functions that aren't in the API, but are shared across 431 * protocol support implementations(psms) and the tightly bound 432 * listener library. Do not use these in your applications. 433 */ 434 extern void list_append(); 435 extern void list_concatenate(); 436 extern void list_remove(); 437 extern void copy_attributes(papi_attribute_t ***result, 438 papi_attribute_t **list); 439 extern void split_and_copy_attributes(char **list, 440 papi_attribute_t **attributes, 441 papi_attribute_t ***in, 442 papi_attribute_t ***out); 443 444 extern papi_attribute_t **getprinterbyname(char *name, char *ns); 445 446 extern int is_localhost(char *hostname); 447 448 #ifdef __cplusplus 449 } 450 #endif 451 452 #endif /* _PAPI_H */ 453