xref: /aosp_15_r20/external/libcups/scheduler/job.h (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker  * Print job definitions for the CUPS scheduler.
3*5e7646d2SAndroid Build Coastguard Worker  *
4*5e7646d2SAndroid Build Coastguard Worker  * Copyright 2007-2015 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
6*5e7646d2SAndroid Build Coastguard Worker  *
7*5e7646d2SAndroid Build Coastguard Worker  * Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
8*5e7646d2SAndroid Build Coastguard Worker  */
9*5e7646d2SAndroid Build Coastguard Worker 
10*5e7646d2SAndroid Build Coastguard Worker /*
11*5e7646d2SAndroid Build Coastguard Worker  * Constants...
12*5e7646d2SAndroid Build Coastguard Worker  */
13*5e7646d2SAndroid Build Coastguard Worker 
14*5e7646d2SAndroid Build Coastguard Worker typedef enum cupsd_jobaction_e		/**** Actions for state changes ****/
15*5e7646d2SAndroid Build Coastguard Worker {
16*5e7646d2SAndroid Build Coastguard Worker   CUPSD_JOB_DEFAULT,			/* Use default action */
17*5e7646d2SAndroid Build Coastguard Worker   CUPSD_JOB_FORCE,			/* Force the change */
18*5e7646d2SAndroid Build Coastguard Worker   CUPSD_JOB_PURGE			/* Force the change and purge */
19*5e7646d2SAndroid Build Coastguard Worker } cupsd_jobaction_t;
20*5e7646d2SAndroid Build Coastguard Worker 
21*5e7646d2SAndroid Build Coastguard Worker 
22*5e7646d2SAndroid Build Coastguard Worker /*
23*5e7646d2SAndroid Build Coastguard Worker  * Job request structure...
24*5e7646d2SAndroid Build Coastguard Worker  */
25*5e7646d2SAndroid Build Coastguard Worker 
26*5e7646d2SAndroid Build Coastguard Worker struct cupsd_job_s			/**** Job request ****/
27*5e7646d2SAndroid Build Coastguard Worker {
28*5e7646d2SAndroid Build Coastguard Worker   int			id,		/* Job ID */
29*5e7646d2SAndroid Build Coastguard Worker 			priority,	/* Job priority */
30*5e7646d2SAndroid Build Coastguard Worker 			dirty;		/* Do we need to write the "c" file? */
31*5e7646d2SAndroid Build Coastguard Worker   ipp_jstate_t		state_value;	/* Cached job-state */
32*5e7646d2SAndroid Build Coastguard Worker   int			pending_timeout;/* Non-zero if the job was created and
33*5e7646d2SAndroid Build Coastguard Worker 					 * waiting on files */
34*5e7646d2SAndroid Build Coastguard Worker   char			*username;	/* Printing user */
35*5e7646d2SAndroid Build Coastguard Worker   char			*dest;		/* Destination printer or class */
36*5e7646d2SAndroid Build Coastguard Worker   char			*name;		/* Job name/title */
37*5e7646d2SAndroid Build Coastguard Worker   int			koctets;	/* job-k-octets */
38*5e7646d2SAndroid Build Coastguard Worker   cups_ptype_t		dtype;		/* Destination type */
39*5e7646d2SAndroid Build Coastguard Worker   cupsd_printer_t	*printer;	/* Printer this job is assigned to */
40*5e7646d2SAndroid Build Coastguard Worker   int			num_files;	/* Number of files in job */
41*5e7646d2SAndroid Build Coastguard Worker   mime_type_t		**filetypes;	/* File types */
42*5e7646d2SAndroid Build Coastguard Worker   int			*compressions;	/* Compression status of each file */
43*5e7646d2SAndroid Build Coastguard Worker   ipp_attribute_t	*impressions,	/* job-impressions-completed */
44*5e7646d2SAndroid Build Coastguard Worker 			*sheets;	/* job-media-sheets-completed */
45*5e7646d2SAndroid Build Coastguard Worker   time_t		access_time,	/* Last access time */
46*5e7646d2SAndroid Build Coastguard Worker 			cancel_time,	/* When to cancel/send SIGTERM */
47*5e7646d2SAndroid Build Coastguard Worker 			creation_time,	/* When job was created */
48*5e7646d2SAndroid Build Coastguard Worker 			completed_time,	/* When job was completed (0 if not) */
49*5e7646d2SAndroid Build Coastguard Worker 			file_time,	/* Job file retain time */
50*5e7646d2SAndroid Build Coastguard Worker 			history_time,	/* Job history retain time */
51*5e7646d2SAndroid Build Coastguard Worker 			hold_until,	/* Hold expiration date/time */
52*5e7646d2SAndroid Build Coastguard Worker 			kill_time;	/* When to send SIGKILL */
53*5e7646d2SAndroid Build Coastguard Worker   ipp_attribute_t	*state;		/* Job state */
54*5e7646d2SAndroid Build Coastguard Worker   ipp_attribute_t	*reasons;	/* Job state reasons */
55*5e7646d2SAndroid Build Coastguard Worker   ipp_attribute_t	*job_sheets;	/* Job sheets (NULL if none) */
56*5e7646d2SAndroid Build Coastguard Worker   ipp_attribute_t	*printer_message,
57*5e7646d2SAndroid Build Coastguard Worker 					/* job-printer-state-message */
58*5e7646d2SAndroid Build Coastguard Worker 			*printer_reasons;
59*5e7646d2SAndroid Build Coastguard Worker 					/* job-printer-state-reasons */
60*5e7646d2SAndroid Build Coastguard Worker   int			current_file;	/* Current file in job */
61*5e7646d2SAndroid Build Coastguard Worker   ipp_t			*attrs;		/* Job attributes */
62*5e7646d2SAndroid Build Coastguard Worker   int			print_pipes[2],	/* Print data pipes */
63*5e7646d2SAndroid Build Coastguard Worker 			back_pipes[2],	/* Backchannel pipes */
64*5e7646d2SAndroid Build Coastguard Worker 			side_pipes[2],	/* Sidechannel pipes */
65*5e7646d2SAndroid Build Coastguard Worker 			status_pipes[2];/* Status pipes */
66*5e7646d2SAndroid Build Coastguard Worker   cupsd_statbuf_t	*status_buffer;	/* Status buffer for this job */
67*5e7646d2SAndroid Build Coastguard Worker   int			status_level;	/* Highest log level in a status
68*5e7646d2SAndroid Build Coastguard Worker 					 * message */
69*5e7646d2SAndroid Build Coastguard Worker   int			cost;		/* Filtering cost */
70*5e7646d2SAndroid Build Coastguard Worker   int			pending_cost;	/* Waiting for FilterLimit */
71*5e7646d2SAndroid Build Coastguard Worker   int			filters[MAX_FILTERS + 1];
72*5e7646d2SAndroid Build Coastguard Worker 					/* Filter process IDs, 0 terminated */
73*5e7646d2SAndroid Build Coastguard Worker   int			backend;	/* Backend process ID */
74*5e7646d2SAndroid Build Coastguard Worker   int			status;		/* Status code from filters */
75*5e7646d2SAndroid Build Coastguard Worker   int			tries;		/* Number of tries for this job */
76*5e7646d2SAndroid Build Coastguard Worker   int			completed;	/* cups-waiting-for-job-completed seen */
77*5e7646d2SAndroid Build Coastguard Worker   int			retry_as_raster;/* Need to retry the job as raster */
78*5e7646d2SAndroid Build Coastguard Worker   char			*auth_env[3],	/* AUTH_xxx environment variables,
79*5e7646d2SAndroid Build Coastguard Worker                                          * if any */
80*5e7646d2SAndroid Build Coastguard Worker 			*auth_uid;	/* AUTH_UID environment variable */
81*5e7646d2SAndroid Build Coastguard Worker   void			*profile,	/* Security profile for filters */
82*5e7646d2SAndroid Build Coastguard Worker 			*bprofile;	/* Security profile for backend */
83*5e7646d2SAndroid Build Coastguard Worker   cups_array_t		*history;	/* Debug log history */
84*5e7646d2SAndroid Build Coastguard Worker   int			progress;	/* Printing progress */
85*5e7646d2SAndroid Build Coastguard Worker   int			num_keywords;	/* Number of PPD keywords */
86*5e7646d2SAndroid Build Coastguard Worker   cups_option_t		*keywords;	/* PPD keywords */
87*5e7646d2SAndroid Build Coastguard Worker };
88*5e7646d2SAndroid Build Coastguard Worker 
89*5e7646d2SAndroid Build Coastguard Worker typedef struct cupsd_joblog_s		/**** Job log message ****/
90*5e7646d2SAndroid Build Coastguard Worker {
91*5e7646d2SAndroid Build Coastguard Worker   time_t		time;		/* Time of message */
92*5e7646d2SAndroid Build Coastguard Worker   char			message[1];	/* Message string */
93*5e7646d2SAndroid Build Coastguard Worker } cupsd_joblog_t;
94*5e7646d2SAndroid Build Coastguard Worker 
95*5e7646d2SAndroid Build Coastguard Worker 
96*5e7646d2SAndroid Build Coastguard Worker /*
97*5e7646d2SAndroid Build Coastguard Worker  * Globals...
98*5e7646d2SAndroid Build Coastguard Worker  */
99*5e7646d2SAndroid Build Coastguard Worker 
100*5e7646d2SAndroid Build Coastguard Worker VAR int			JobHistory	VALUE(INT_MAX);
101*5e7646d2SAndroid Build Coastguard Worker 					/* Preserve job history? */
102*5e7646d2SAndroid Build Coastguard Worker VAR int			JobFiles	VALUE(86400);
103*5e7646d2SAndroid Build Coastguard Worker 					/* Preserve job files? */
104*5e7646d2SAndroid Build Coastguard Worker VAR time_t		JobHistoryUpdate VALUE(0);
105*5e7646d2SAndroid Build Coastguard Worker 					/* Time for next job history update */
106*5e7646d2SAndroid Build Coastguard Worker VAR int			MaxJobs		VALUE(0),
107*5e7646d2SAndroid Build Coastguard Worker 					/* Max number of jobs */
108*5e7646d2SAndroid Build Coastguard Worker 			MaxActiveJobs	VALUE(0),
109*5e7646d2SAndroid Build Coastguard Worker 					/* Max number of active jobs */
110*5e7646d2SAndroid Build Coastguard Worker 			MaxHoldTime	VALUE(0),
111*5e7646d2SAndroid Build Coastguard Worker 					/* Max time for indefinite hold */
112*5e7646d2SAndroid Build Coastguard Worker 			MaxJobsPerUser	VALUE(0),
113*5e7646d2SAndroid Build Coastguard Worker 					/* Max jobs per user */
114*5e7646d2SAndroid Build Coastguard Worker 			MaxJobsPerPrinter VALUE(0),
115*5e7646d2SAndroid Build Coastguard Worker 					/* Max jobs per printer */
116*5e7646d2SAndroid Build Coastguard Worker 			MaxJobTime	VALUE(3 * 60 * 60);
117*5e7646d2SAndroid Build Coastguard Worker 					/* Max time for a job */
118*5e7646d2SAndroid Build Coastguard Worker VAR int			JobAutoPurge	VALUE(0);
119*5e7646d2SAndroid Build Coastguard Worker 					/* Automatically purge jobs */
120*5e7646d2SAndroid Build Coastguard Worker VAR cups_array_t	*Jobs		VALUE(NULL),
121*5e7646d2SAndroid Build Coastguard Worker 					/* List of current jobs */
122*5e7646d2SAndroid Build Coastguard Worker 			*ActiveJobs	VALUE(NULL),
123*5e7646d2SAndroid Build Coastguard Worker 					/* List of active jobs */
124*5e7646d2SAndroid Build Coastguard Worker 			*PrintingJobs	VALUE(NULL);
125*5e7646d2SAndroid Build Coastguard Worker 					/* List of jobs that are printing */
126*5e7646d2SAndroid Build Coastguard Worker VAR int			NextJobId	VALUE(1);
127*5e7646d2SAndroid Build Coastguard Worker 					/* Next job ID to use */
128*5e7646d2SAndroid Build Coastguard Worker VAR int			JobKillDelay	VALUE(DEFAULT_TIMEOUT),
129*5e7646d2SAndroid Build Coastguard Worker 					/* Delay before killing jobs */
130*5e7646d2SAndroid Build Coastguard Worker 			JobRetryLimit	VALUE(5),
131*5e7646d2SAndroid Build Coastguard Worker 					/* Max number of tries */
132*5e7646d2SAndroid Build Coastguard Worker 			JobRetryInterval VALUE(300);
133*5e7646d2SAndroid Build Coastguard Worker 					/* Seconds between retries */
134*5e7646d2SAndroid Build Coastguard Worker 
135*5e7646d2SAndroid Build Coastguard Worker 
136*5e7646d2SAndroid Build Coastguard Worker /*
137*5e7646d2SAndroid Build Coastguard Worker  * Prototypes...
138*5e7646d2SAndroid Build Coastguard Worker  */
139*5e7646d2SAndroid Build Coastguard Worker 
140*5e7646d2SAndroid Build Coastguard Worker extern cupsd_job_t	*cupsdAddJob(int priority, const char *dest);
141*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdCancelJobs(const char *dest, const char *username,
142*5e7646d2SAndroid Build Coastguard Worker 			                int purge);
143*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdCheckJobs(void);
144*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdCleanJobs(void);
145*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdContinueJob(cupsd_job_t *job);
146*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdDeleteJob(cupsd_job_t *job,
147*5e7646d2SAndroid Build Coastguard Worker 			               cupsd_jobaction_t action);
148*5e7646d2SAndroid Build Coastguard Worker extern cupsd_job_t	*cupsdFindJob(int id);
149*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdFreeAllJobs(void);
150*5e7646d2SAndroid Build Coastguard Worker extern cups_array_t	*cupsdGetCompletedJobs(cupsd_printer_t *p);
151*5e7646d2SAndroid Build Coastguard Worker extern int		cupsdGetPrinterJobCount(const char *dest);
152*5e7646d2SAndroid Build Coastguard Worker extern int		cupsdGetUserJobCount(const char *username);
153*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdLoadAllJobs(void);
154*5e7646d2SAndroid Build Coastguard Worker extern int		cupsdLoadJob(cupsd_job_t *job);
155*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdMoveJob(cupsd_job_t *job, cupsd_printer_t *p);
156*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdReleaseJob(cupsd_job_t *job);
157*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdRestartJob(cupsd_job_t *job);
158*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdSaveAllJobs(void);
159*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdSaveJob(cupsd_job_t *job);
160*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdSetJobHoldUntil(cupsd_job_t *job,
161*5e7646d2SAndroid Build Coastguard Worker 			                     const char *when, int update);
162*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdSetJobPriority(cupsd_job_t *job, int priority);
163*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdSetJobState(cupsd_job_t *job,
164*5e7646d2SAndroid Build Coastguard Worker 			                 ipp_jstate_t newstate,
165*5e7646d2SAndroid Build Coastguard Worker 					 cupsd_jobaction_t action,
166*5e7646d2SAndroid Build Coastguard Worker 					 const char *message, ...)
167*5e7646d2SAndroid Build Coastguard Worker 					__attribute__((__format__(__printf__,
168*5e7646d2SAndroid Build Coastguard Worker 					                          4, 5)));
169*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdStopAllJobs(cupsd_jobaction_t action,
170*5e7646d2SAndroid Build Coastguard Worker 			                 int kill_delay);
171*5e7646d2SAndroid Build Coastguard Worker extern int		cupsdTimeoutJob(cupsd_job_t *job);
172*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdUnloadCompletedJobs(void);
173*5e7646d2SAndroid Build Coastguard Worker extern void		cupsdUpdateJobs(void);
174