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