8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / man / man3papi / papiJobSubmit.3papi
blob17ce4e7f08a324ea245a82be61692512d7993004
1 '\" te
2 .\" Copyright (c) 2007, Sun Microsystems, Inc.  All Rights Reserved.
3 .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
4 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
5 .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
6 .TH PAPIJOBSUBMIT 3PAPI "Sep 10, 2013"
7 .SH NAME
8 papiJobSubmit, papiJobSubmitByReference, papiJobValidate, papiJobStreamOpen,
9 papiJobStreamWrite, papiJobStreamClose, papiJobQuery, papiJobModify,
10 papiJobMove, papiJobCancel, papiJobHold, papiJobRelease, papiJobRestart,
11 papiJobPromote, papiJobGetAttributeList, papiJobGetPrinterName, papiJobGetId,
12 papiJobGetJobTicket, papiJobFree, papiJobListFree \- job object manipulation
13 .SH SYNOPSIS
14 .LP
15 .nf
16 cc [ \fIflag\fR\&.\|.\|. ] \fIfile\fR\&.\|.\|. \fB-lpapi\fR [ \fIlibrary\fR\&.\|.\|. ]
17 #include <papi.h>
19 \fBpapi_status_t\fR \fBpapiJobSubmit\fR(\fBpapi_service_t\fR \fIhandle\fR,
20      \fBchar *\fR\fIprinter\fR, \fBpapi_attribute_t **\fR\fIjob_attributes\fR,
21      \fBpapi_job_ticket_t *\fR\fIjob_ticket\fR, \fBchar **\fR\fIfiles\fR,
22      \fBpapi_job_t *\fR\fIjob\fR);
23 .fi
25 .LP
26 .nf
27 \fBpapi_status_t\fR \fBpapiJobSubmitByReference\fR(\fBpapi_service_t\fR \fIhandle\fR,
28      \fBchar *\fR\fIprinter\fR, \fBpapi_attribute_t **\fR\fIjob_attributes\fR,
29      \fBpapi_job_ticket_t *\fR\fIjob_ticket\fR, \fBchar **\fR\fIfiles\fR,
30      \fBpapi_job_t *\fR\fIjob\fR);
31 .fi
33 .LP
34 .nf
35 \fBpapi_status_t\fR \fBpapiJobValidate\fR(\fBpapi_service_t\fR \fIhandle\fR,
36      \fBchar *\fR\fIprinter\fR, \fBpapi_attribute_t **\fR\fIjob_attributes\fR,
37      \fBpapi_job_ticket_t *\fR\fIjob_ticket\fR, \fBchar **\fR\fIfiles\fR,
38      \fBpapi_job_t *\fR\fIjob\fR);
39 .fi
41 .LP
42 .nf
43 \fBpapi_status_t\fR \fBpapiJobStreamOpen\fR(\fBpapi_service_t\fR \fIhandle\fR,
44      \fBchar *\fR\fIprinter\fR, \fBpapi_attribute_t **\fR\fIjob_attributes\fR,
45      \fBpapi_job_ticket_t *\fR\fIjob_ticket\fR, \fBpapi_stream_t *\fR\fIstream\fR);
46 .fi
48 .LP
49 .nf
50 \fBpapi_status_t\fR \fBpapiJobStreamWrite\fR(\fBpapi_service_t\fR \fIhandle\fR,
51      \fBpapi_stream_t\fR \fIstream\fR, \fBvoid *\fR\fIbuffer\fR, \fBsize_t\fR \fIbuflen\fR);
52 .fi
54 .LP
55 .nf
56 \fBpapi_status_t\fR \fBpapiJobStreamClose\fR(\fBpapi_service_t\fR \fIhandle\fR,
57      \fBpapi_stream_t\fR \fIstream\fR, \fBpapi_job_t *\fR\fIjob\fR);
58 .fi
60 .LP
61 .nf
62 \fBpapi_status_t\fR \fBpapiJobQuery\fR(\fBpapi_service_t\fR \fIhandle\fR,
63      \fBchar *\fR\fIprinter\fR, \fBint32_t\fR \fIjob_id\fR, \fBchar **\fR\fIrequested_attrs\fR,
64      \fBpapi_job_t *\fR\fIjob\fR);
65 .fi
67 .LP
68 .nf
69 \fBpapi_status_t\fR \fBpapiJobModify\fR(\fBpapi_service_t\fR \fIhandle\fR,
70      \fBchar *\fR\fIprinter\fR, \fBint32_t\fR \fIjob_id\fR,
71      \fBpapi_attribute_t **\fR\fIattributes\fR, \fBpapi_job_t *\fR\fIjob\fR);
72 .fi
74 .LP
75 .nf
76 \fBpapi_status_t\fR \fBpapiJobMove\fR(\fBpapi_service_t\fR \fIhandle\fR,
77      \fBchar *\fR\fIprinter\fR, \fBint32_t\fR \fIjob_id\fR, \fBchar *\fR\fIdestination\fR);
78 .fi
80 .LP
81 .nf
82 \fBpapi_status_t\fR \fBpapiJobCancel\fR(\fBpapi_service_t\fR \fIhandle\fR,
83      \fBchar *\fR\fIprinter\fR, \fBint32_t\fR \fIjob_id\fR);
84 .fi
86 .LP
87 .nf
88 \fBpapi_status_t\fR \fBpapiJobHold\fR(\fBpapi_service_t\fR \fIhandle\fR,
89      \fBchar *\fR\fIprinter\fR, \fBint32_t\fR \fIjob_id\fR);
90 .fi
92 .LP
93 .nf
94 \fBpapi_status_t\fR \fBpapiJobRelease\fR(\fBpapi_service_t\fR \fIhandle\fR,
95      \fBchar *\fR\fIprinter\fR, \fBint32_t\fR \fIjob_id\fR);
96 .fi
98 .LP
99 .nf
100 \fBpapi_status_t\fR \fBpapiJobRestart\fR(\fBpapi_service_t\fR \fIhandle\fR,
101      \fBchar *\fR\fIprinter\fR, \fBint32_t\fR \fIjob_id\fR);
106 \fBpapi_status_t\fR \fBpapiJobPromote\fR(\fBpapi_service_t\fR \fIhandle\fR,
107      \fBchar *\fR\fIprinter\fR, \fBint32_t\fR \fIjob_id\fR);
112 \fBpapi_attribute_t **\fR\fBpapiJobGetAttributeList\fR(\fBpapi_job_t\fR \fIjob\fR);
117 \fBchar *\fR\fBpapiJobGetPrinterName\fR(\fBpapi_job_t\fR \fIjob\fR);
122 \fBint32_t\fR \fBpapiJobGetId\fR(\fBpapi_job_t\fR \fIjob\fR);
127 \fBpapi_job_ticket_t *\fR\fBpapiJobGetJobTicket\fR(\fBpapi_job_t\fR \fIjob\fR);
132 \fBvoid\fR \fBpapiJobFree\fR(\fBpapi_job_t\fR \fIjob\fR);
137 \fBvoid\fR \fBpapiJobListFree\fR(\fBpapi_job_t *\fR\fIjobs\fR);
140 .SH PARAMETERS
142 .ne 2
144 \fB\fIattributes\fR\fR
146 .RS 19n
147 a set of attributes to be applied to a printer object
151 .ne 2
153 \fB\fIbuffer\fR\fR
155 .RS 19n
156 a buffer of data to be written to the job stream
160 .ne 2
162 \fB\fIbufflen\fR\fR
164 .RS 19n
165 the size of the supplied buffer
169 .ne 2
171 \fB\fIdestination\fR\fR
173 .RS 19n
174 the name of the printer where a print job should be relocated, which must
175 reside within the same print services as the job is currently queued
179 .ne 2
181 \fB\fIfiles\fR\fR
183 .RS 19n
184 files to use during job submission
188 .ne 2
190 \fB\fIhandle\fR\fR
192 .RS 19n
193 a pointer to a handle to be used for all PAPI operations that is created by
194 calling \fBpapiServiceCreate()\fR
198 .ne 2
200 \fB\fIjob\fR\fR
202 .RS 19n
203 a pointer to a printer object (initialized to NULL) to be filled in by
204 \fBpapiJobQuery()\fR, \fBpapiJobSubmit()\fR, \fBpapiJobSubmitByReference()\fR,
205 \fBpapiJobValidate()\fR, \fBpapiJobStreamClose()\fR, and \fBpapiJobModify()\fR
209 .ne 2
211 \fB\fIjob_attributes\fR\fR
213 .RS 19n
214 attributes to apply during job creation or modification
218 .ne 2
220 \fB\fIjob_id\fR\fR
222 .RS 19n
223 ID number of the job reported on or manipulated
227 .ne 2
229 \fB\fIjob_ticket\fR\fR
231 .RS 19n
232 unused
236 .ne 2
238 \fB\fIjobs\fR\fR
240 .RS 19n
241 a list of job objects returned by \fBpapiPrinterListJobs()\fR or
242 \fBpapiPrinterPurgeJobs()\fR
246 .ne 2
248 \fB\fIprinter\fR\fR
250 .RS 19n
251 name of the printer where the job is or should reside
255 .ne 2
257 \fB\fIrequested_attrs\fR\fR
259 .RS 19n
260 a null-terminated array of pointers to attribute names requested during job
261 enumeration (\fBpapiPrinterListJobs()\fR) or job query (\fBpapiJobQuery()\fR)
265 .ne 2
267 \fB\fIstream\fR\fR
269 .RS 19n
270 a communication endpoint for sending print job data
273 .SH DESCRIPTION
276 The \fBpapiJobSubmit()\fR function creates a print job containing the passed in
277 files with the supplied attributes.  When the function returns, the data in the
278 passed files will have been copied by the print service. A job object is
279 returned that reflects the state of the job.
282 The \fBpapiJobSubmitByReference()\fR function creates a print job containing
283 the passed in files with the supplied attributes.  When the function returns,
284 the data in the passed files might have been copied by the print service. A job
285 object is returned that reflects the state of the job.
288 The \fBpapiJobStreamOpen()\fR, \fBpapiJobStreamWrite()\fR,
289 \fBpapiJobStreamClose()\fR functions create a print job by opening a stream,
290 writing to the stream, and closing it.
293 The \fBpapiJobValidate()\fR function validates that the supplied attributes and
294 files will result in a valid print job.
297 The \fBpapiJobQuery()\fR function retrieves job information from the print
298 service.
301 The \fBpapiJobModify()\fR function modifies a queued job according to the
302 attribute list passed into the call.  A job object is returned that reflects
303 the state of the job after the modification has been applied.
306 The \fBpapiJobMove()\fR function moves a job from its current queue to the
307 named destination within the same print service.
310 The \fBpapiJobCancel()\fR function removes a job from the queue.
313 The \fBpapiJobHold()\fR and \fBpapiJobRelease()\fR functions set the job state
314 to "held" or "idle" to indicate whether the job is eligible for processing.
317 The \fBpapiJobRestart()\fR function restarts processing of a currently queued
318 print job.
321 The \fBpapiJobGetAttributeList()\fR function returns a list of attributes
322 describing the job. This list can be searched and/or enumerated using
323 \fBpapiAttributeList*()\fR calls. See \fBpapiAttributeListAddValue\fR(3PAPI).
326 The \fBpapiJobGetPrinterName()\fR function returns the name of the queue where
327 the job is currently queued.
330 The \fBpapiJobGetId()\fR function returns a job identifier number from the job
331 object passed in.
334 The \fBpapiJobPromote()\fR function moves a job to the head of the print queue.
337 The \fBpapiJobGetJobTicket()\fR function retrieves a pointer to a job ticket
338 associated with the job object.
341 The \fBpapiJobFree()\fR and \fBpapiJobListFree()\fR functions deallocate memory
342 allocated for the return of printer object(s) from functions that return
343 printer objects.
344 .SH RETURN VALUES
347 Upon successful completion, all \fBpapiJob*()\fR functions that return a value
348 return \fBPAPI_OK\fR. Otherwise, they return an appropriate \fBpapi_status_t\fR
349 indicating the type of failure.
352 Upon successful completion, \fBpapiJobGetAttributeList()\fR returns a pointer
353 to the requested data. Otherwise, it returns \fINULL\fR.
354 .SH EXAMPLES
356 \fBExample 1 \fREnumerate all jobs in a queue
358 .in +2
361  * program to enumerate queued jobs using PAPI interfaces.
362  */
363 #include <stdio.h>
364 #include <stdlib.h>
365 #include <unistd.h>
366 #include <libintl.h>
367 #include <pwd.h>
368 #include <papi.h>
370 static int
371 authCB(papi_service_t svc, void *app_data)
373     char prompt[BUFSIZ];
374     char *user, *svc_name, *passphrase;
376     /* get the name of the service we are contacting */
377     if ((svc_name = papiServiceGetServiceName(svc)) == NULL)
378             return (-1);
380     /* find out who we are supposed to be */
381     if ((user = papiServiceGetUserName(svc)) == NULL) {
382             struct passwd *pw;
384             if ((pw = getpwuid(getuid())) != NULL)
385                     user = pw->pw_name;
386             else
387                     user = "nobody";
388     }
390     /* build the prompt string */
391     snprintf(prompt, sizeof (prompt),
392             gettext("passphrase for %s to access %s: "), user,
393                   svc_name);
395     /* ask for the passphrase */
396     if ((passphrase = getpassphrase(prompt)) != NULL)
397             papiServiceSetPassword(svc, passphrase);
399     return (0);
402 /*ARGSUSED*/
404 main(int ac, char *av[])
406     papi_status_t status;
407     papi_service_t svc = NULL;
408     papi_job_t *jobs = NULL;
409     char *svc_name = NULL;
410     char *pname = "unknown";
411     int c;
413     while ((c = getopt(ac, av, "s:p:")) != EOF)
414         switch (c) {
415         case 's':
416             svc_name = optarg;
417             break;
418         case 'p':
419             pname = optarg;
420             break;
421         }
423     status = papiServiceCreate(&svc, svc_name, NULL, NULL, authCB,
424                             PAPI_ENCRYPT_NEVER, NULL);
426     if (status != PAPI_OK) {
427         printf("papiServiceCreate(%s): %s\en", svc_name ? svc_name :
428                      "NULL", papiStatusString(status));
429         papiServiceDestroy(svc);
430         exit(1);
431     }
433     status = papiPrinterListJobs(svc, pname, NULL, 0, 0, &jobs);
434     if (status != PAPI_OK) {
435         printf("papiPrinterListJobs(%s): %s\en", pname,
436                     papiStatusString(status));
437         papiServiceDestroy(svc);
438         exit(1);
439     }
441     if (jobs != NULL) {
442         int i;
444         for (i = 0; jobs[i] != NULL; i++) {
445             papi_attribute_t **list = papiJobGetAttributeList(jobs[i]);
447             if (list != NULL) {
448                 char *name = "unknown";
449                             int32_t id = 0;
450                 char *buffer = NULL;
451                 size_t size = 0;
453                (void) papiAttributeListGetString(list, NULL,
454                                     "printer-name", &name);
455                (void) papiAttributeListGetInteger(list, NULL,
456                                     "job-id", &id);
457                 while (papiAttributeListToString(list, "\n\t", buffer,
458                             size) != PAPI_OK)
459                     buffer = realloc(buffer, size += BUFSIZ);
461                 printf("%s-%d:\en\t%s\en", name, id, buffer);
462                 free(buffer);
463             }
464         }
465         papiJobListFree(jobs);
466     }
468     papiServiceDestroy(svc);
470     exit(0);
473 .in -2
476 \fBExample 2 \fRDump all job attributes.
478 .in +2
481  * program to dump a queued job's attributes using PAPI interfaces.
482  */
483 #include <stdio.h>
484 #include <stdlib.h>
485 #include <unistd.h>
486 #include <libintl.h>
487 #include <pwd.h>
488 #include <papi.h>
490 static int
491 authCB(papi_service_t svc, void *app_data)
493     char prompt[BUFSIZ];
494     char *user, *svc_name, *passphrase;
496     /* get the name of the service we are contacting */
497     if ((svc_name = papiServiceGetServiceName(svc)) == NULL)
498             return (-1);
500     /* find out who we are supposed to be */
501     if ((user = papiServiceGetUserName(svc)) == NULL) {
502             struct passwd *pw;
504             if ((pw = getpwuid(getuid())) != NULL)
505                     user = pw->pw_name;
506             else
507                     user = "nobody";
508     }
510     /* build the prompt string */
511     snprintf(prompt, sizeof (prompt),
512             gettext("passphrase for %s to access %s: "), user,
513                      svc_name);
515     /* ask for the passphrase */
516     if ((passphrase = getpassphrase(prompt)) != NULL)
517             papiServiceSetPassword(svc, passphrase);
519     return (0);
522 /*ARGSUSED*/
524 main(int ac, char *av[])
526     papi_status_t status;
527     papi_service_t svc = NULL;
528     papi_job_t job = NULL;
529     char *svc_name = NULL;
530     char *pname = "unknown";
531     int id = 0;
532     int c;
534     while ((c = getopt(ac, av, "s:p:j:")) != EOF)
535         switch (c) {
536         case 's':
537             svc_name = optarg;
538             break;
539         case 'p':
540             pname = optarg;
541             break;
542         case 'j':
543             id = atoi(optarg);
544             break;
545         }
547     status = papiServiceCreate(&svc, svc_name, NULL, NULL, authCB,
548                             PAPI_ENCRYPT_NEVER, NULL);
550     if (status != PAPI_OK) {
551         printf("papiServiceCreate(%s): %s\en", svc_name ? svc_name :
552                      "NULL", papiStatusString(status));
553         papiServiceDestroy(svc);
554         exit(1);
555     }
557     status = papiJobQuery(svc, pname, id, NULL, &job);
558     if ((status == PAPI_OK) && (job != NULL)) {
559         papi_attribute_t **list = papiJobGetAttributeList(job);
561         if (list != NULL) {
562             char *name = "unknown";
563             int32_t id = 0;
564             char *buffer = NULL;
565             size_t size = 0;
567             (void) papiAttributeListGetString(list, NULL,
568                                     "printer-name", &name);
569             (void) papiAttributeListGetInteger(list, NULL,
570                                     "job-id", &id);
571             while (papiAttributeListToString(list, "\en\et", buffer, size)
572                             != PAPI_OK)
573                 buffer = realloc(buffer, size += BUFSIZ);
575             printf("%s-%d:\en\et%s\n", name, id, buffer);
576             free(buffer);
577         }
578     } else
579         printf("papiJobQuery(%s-%d): %s\en", pname, id,
580                     papiStatusString(status));
582     papiJobFree(job);
583     papiServiceDestroy(svc);
585     exit(0);
588 .in -2
591 \fBExample 3 \fRSubmit a job (stream).
593 .in +2
596  * program to submit a job from standard input.
597  */
598 #include <stdio.h>
599 #include <stdlib.h>
600 #include <unistd.h>
601 #include <libintl.h>
602 #include <pwd.h>
603 #include <papi.h>
605 static int
606 authCB(papi_service_t svc, void *app_data)
608     char prompt[BUFSIZ];
609     char *user, *svc_name, *passphrase;
611     /* get the name of the service we are contacting */
612     if ((svc_name = papiServiceGetServiceName(svc)) == NULL)
613             return (-1);
615     /* find out who we are supposed to be */
616     if ((user = papiServiceGetUserName(svc)) == NULL) {
617             struct passwd *pw;
619             if ((pw = getpwuid(getuid())) != NULL)
620                     user = pw->pw_name;
621             else
622                     user = "nobody";
623     }
625     /* build the prompt string */
626     snprintf(prompt, sizeof (prompt),
627             gettext("passphrase for %s to access %s: "), user,
628                     svc_name);
630     /* ask for the passphrase */
631     if ((passphrase = getpassphrase(prompt)) != NULL)
632             papiServiceSetPassword(svc, passphrase);
634     return (0);
637 /*ARGSUSED*/
639 main(int ac, char *av[])
641     papi_status_t status;
642     papi_service_t svc = NULL;
643     papi_stream_t stream = NULL;
644     papi_job_t job = NULL;
645     papi_attribute_t **attrs = NULL;
646     char *svc_name = NULL;
647     char *pname = "unknown";
648     int id = 0;
649     int c;
650     int rc;
651     char buf[BUFSIZ];
653     while ((c = getopt(ac, av, "s:p:")) != EOF)
654         switch (c) {
655         case 's':
656             svc_name = optarg;
657             break;
658         case 'p':
659             pname = optarg;
660             break;
661         }
663     status = papiServiceCreate(&svc, svc_name, NULL, NULL, authCB,
664                             PAPI_ENCRYPT_NEVER, NULL);
666     if (status != PAPI_OK) {
667         printf("papiServiceCreate(%s): %s\en", svc_name ? svc_name :
668                     "NULL", papiStatusString(status));
669         papiServiceDestroy(svc);
670         exit(1);
671     }
673     papiAttributeListAddInteger(&attrs, PAPI_ATTR_EXCL, "copies", 1);
674     papiAttributeListAddString(&attrs, PAPI_ATTR_EXCL,
675                 "document-format", "application/octet-stream");
676     papiAttributeListAddString(&attrs, PAPI_ATTR_EXCL,
677                 "job-title", "Standard Input");
679     status = papiJobStreamOpen(svc, pname, attrs, NULL, &stream);
680     while ((status == PAPI_OK) && ((rc = read(0, buf,
681                      sizeof (buf))) > 0))
682             status = papiJobStreamWrite(svc, stream, buf, rc);
684     if (status == PAPI_OK)
685             status = papiJobStreamClose(svc, stream, &job);
688     if ((status == PAPI_OK) && (job != NULL)) {
689         papi_attribute_t **list = papiJobGetAttributeList(job);
691         if (list != NULL) {
692             char *name = "unknown";
693             int32_t id = 0;
694             char *buffer = NULL;
695             size_t size = 0;
697             (void) papiAttributeListGetString(list, NULL,
698                                     "printer-name", &name);
699             (void) papiAttributeListGetInteger(list, NULL,
700                                     "job-id", &id);
701             while (papiAttributeListToString(list, "\n\t", buffer, size)
702                             != PAPI_OK)
703                 buffer = realloc(buffer, size += BUFSIZ);
705             printf("%s-%d:\en\t%s\en", name, id, buffer);
706             free(buffer);
707         }
708     } else
709         printf("papiJobStream*(%s-%d): %s\en", pname, id,
710                     papiStatusString(status));
712     papiJobFree(job);
713     papiServiceDestroy(svc);
715     exit(0);
718 .in -2
720 .SH ATTRIBUTES
723 See \fBattributes\fR(5) for descriptions of the following attributes:
728 box;
729 c | c
730 l | l .
731 ATTRIBUTE TYPE  ATTRIBUTE VALUE
733 Interface Stability     Volatile
735 MT-Level        Safe
738 .SH SEE ALSO
741 \fBlibpapi\fR(3LIB), \fBpapiAttributeListAddValue\fR(3PAPI),
742 \fBattributes\fR(5)