| /* |
| * Print job definitions for the CUPS scheduler. |
| * |
| * Copyright 2007-2015 by Apple Inc. |
| * Copyright 1997-2007 by Easy Software Products, all rights reserved. |
| * |
| * Licensed under Apache License v2.0. See the file "LICENSE" for more information. |
| */ |
| |
| /* |
| * Constants... |
| */ |
| |
| typedef enum cupsd_jobaction_e /**** Actions for state changes ****/ |
| { |
| CUPSD_JOB_DEFAULT, /* Use default action */ |
| CUPSD_JOB_FORCE, /* Force the change */ |
| CUPSD_JOB_PURGE /* Force the change and purge */ |
| } cupsd_jobaction_t; |
| |
| |
| /* |
| * Job request structure... |
| */ |
| |
| struct cupsd_job_s /**** Job request ****/ |
| { |
| int id, /* Job ID */ |
| priority, /* Job priority */ |
| dirty; /* Do we need to write the "c" file? */ |
| ipp_jstate_t state_value; /* Cached job-state */ |
| int pending_timeout;/* Non-zero if the job was created and |
| * waiting on files */ |
| char *username; /* Printing user */ |
| char *dest; /* Destination printer or class */ |
| char *name; /* Job name/title */ |
| int koctets; /* job-k-octets */ |
| cups_ptype_t dtype; /* Destination type */ |
| cupsd_printer_t *printer; /* Printer this job is assigned to */ |
| int num_files; /* Number of files in job */ |
| mime_type_t **filetypes; /* File types */ |
| int *compressions; /* Compression status of each file */ |
| ipp_attribute_t *impressions, /* job-impressions-completed */ |
| *sheets; /* job-media-sheets-completed */ |
| time_t access_time, /* Last access time */ |
| cancel_time, /* When to cancel/send SIGTERM */ |
| creation_time, /* When job was created */ |
| completed_time, /* When job was completed (0 if not) */ |
| file_time, /* Job file retain time */ |
| history_time, /* Job history retain time */ |
| hold_until, /* Hold expiration date/time */ |
| kill_time; /* When to send SIGKILL */ |
| ipp_attribute_t *state; /* Job state */ |
| ipp_attribute_t *reasons; /* Job state reasons */ |
| ipp_attribute_t *job_sheets; /* Job sheets (NULL if none) */ |
| ipp_attribute_t *printer_message, |
| /* job-printer-state-message */ |
| *printer_reasons; |
| /* job-printer-state-reasons */ |
| int current_file; /* Current file in job */ |
| ipp_t *attrs; /* Job attributes */ |
| int print_pipes[2], /* Print data pipes */ |
| back_pipes[2], /* Backchannel pipes */ |
| side_pipes[2], /* Sidechannel pipes */ |
| status_pipes[2];/* Status pipes */ |
| cupsd_statbuf_t *status_buffer; /* Status buffer for this job */ |
| int status_level; /* Highest log level in a status |
| * message */ |
| int cost; /* Filtering cost */ |
| int pending_cost; /* Waiting for FilterLimit */ |
| int filters[MAX_FILTERS + 1]; |
| /* Filter process IDs, 0 terminated */ |
| int backend; /* Backend process ID */ |
| int status; /* Status code from filters */ |
| int tries; /* Number of tries for this job */ |
| int completed; /* cups-waiting-for-job-completed seen */ |
| int retry_as_raster;/* Need to retry the job as raster */ |
| char *auth_env[3], /* AUTH_xxx environment variables, |
| * if any */ |
| *auth_uid; /* AUTH_UID environment variable */ |
| void *profile, /* Security profile for filters */ |
| *bprofile; /* Security profile for backend */ |
| cups_array_t *history; /* Debug log history */ |
| int progress; /* Printing progress */ |
| int num_keywords; /* Number of PPD keywords */ |
| cups_option_t *keywords; /* PPD keywords */ |
| }; |
| |
| typedef struct cupsd_joblog_s /**** Job log message ****/ |
| { |
| time_t time; /* Time of message */ |
| char message[1]; /* Message string */ |
| } cupsd_joblog_t; |
| |
| |
| /* |
| * Globals... |
| */ |
| |
| VAR int JobHistory VALUE(INT_MAX); |
| /* Preserve job history? */ |
| VAR int JobFiles VALUE(86400); |
| /* Preserve job files? */ |
| VAR time_t JobHistoryUpdate VALUE(0); |
| /* Time for next job history update */ |
| VAR int MaxJobs VALUE(0), |
| /* Max number of jobs */ |
| MaxActiveJobs VALUE(0), |
| /* Max number of active jobs */ |
| MaxHoldTime VALUE(0), |
| /* Max time for indefinite hold */ |
| MaxJobsPerUser VALUE(0), |
| /* Max jobs per user */ |
| MaxJobsPerPrinter VALUE(0), |
| /* Max jobs per printer */ |
| MaxJobTime VALUE(3 * 60 * 60); |
| /* Max time for a job */ |
| VAR int JobAutoPurge VALUE(0); |
| /* Automatically purge jobs */ |
| VAR cups_array_t *Jobs VALUE(NULL), |
| /* List of current jobs */ |
| *ActiveJobs VALUE(NULL), |
| /* List of active jobs */ |
| *PrintingJobs VALUE(NULL); |
| /* List of jobs that are printing */ |
| VAR int NextJobId VALUE(1); |
| /* Next job ID to use */ |
| VAR int JobKillDelay VALUE(DEFAULT_TIMEOUT), |
| /* Delay before killing jobs */ |
| JobRetryLimit VALUE(5), |
| /* Max number of tries */ |
| JobRetryInterval VALUE(300); |
| /* Seconds between retries */ |
| |
| |
| /* |
| * Prototypes... |
| */ |
| |
| extern cupsd_job_t *cupsdAddJob(int priority, const char *dest); |
| extern void cupsdCancelJobs(const char *dest, const char *username, |
| int purge); |
| extern void cupsdCheckJobs(void); |
| extern void cupsdCleanJobs(void); |
| extern void cupsdContinueJob(cupsd_job_t *job); |
| extern void cupsdDeleteJob(cupsd_job_t *job, |
| cupsd_jobaction_t action); |
| extern cupsd_job_t *cupsdFindJob(int id); |
| extern void cupsdFreeAllJobs(void); |
| extern cups_array_t *cupsdGetCompletedJobs(cupsd_printer_t *p); |
| extern int cupsdGetPrinterJobCount(const char *dest); |
| extern int cupsdGetUserJobCount(const char *username); |
| extern void cupsdLoadAllJobs(void); |
| extern int cupsdLoadJob(cupsd_job_t *job); |
| extern void cupsdMoveJob(cupsd_job_t *job, cupsd_printer_t *p); |
| extern void cupsdReleaseJob(cupsd_job_t *job); |
| extern void cupsdRestartJob(cupsd_job_t *job); |
| extern void cupsdSaveAllJobs(void); |
| extern void cupsdSaveJob(cupsd_job_t *job); |
| extern void cupsdSetJobHoldUntil(cupsd_job_t *job, |
| const char *when, int update); |
| extern void cupsdSetJobPriority(cupsd_job_t *job, int priority); |
| extern void cupsdSetJobState(cupsd_job_t *job, |
| ipp_jstate_t newstate, |
| cupsd_jobaction_t action, |
| const char *message, ...) |
| __attribute__((__format__(__printf__, |
| 4, 5))); |
| extern void cupsdStopAllJobs(cupsd_jobaction_t action, |
| int kill_delay); |
| extern int cupsdTimeoutJob(cupsd_job_t *job); |
| extern void cupsdUnloadCompletedJobs(void); |
| extern void cupsdUpdateJobs(void); |