mirror of https://gitee.com/openkylin/cups.git
156 lines
5.6 KiB
C
156 lines
5.6 KiB
C
/*
|
|
* Subscription definitions for the CUPS scheduler.
|
|
*
|
|
* Copyright 2007-2010 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.
|
|
*/
|
|
|
|
/*
|
|
* Event mask enumeration...
|
|
*/
|
|
|
|
typedef enum
|
|
{
|
|
/* Individual printer events... */
|
|
CUPSD_EVENT_PRINTER_STATE = 0x0001, /* Sent after generic printer state change */
|
|
CUPSD_EVENT_PRINTER_RESTARTED = 0x0002,
|
|
/* Sent after printer restarted */
|
|
CUPSD_EVENT_PRINTER_SHUTDOWN = 0x0004,/* Sent after printer shutdown */
|
|
CUPSD_EVENT_PRINTER_STOPPED = 0x0008, /* Sent after printer stopped */
|
|
|
|
CUPSD_EVENT_PRINTER_CONFIG = 0x0010, /* Send after add/modify changes attrs */
|
|
CUPSD_EVENT_PRINTER_FINISHINGS_CHANGED = 0x0020,
|
|
/* Sent after finishings-supported changed */
|
|
CUPSD_EVENT_PRINTER_MEDIA_CHANGED = 0x0040,
|
|
/* Sent after media-supported changed */
|
|
CUPSD_EVENT_PRINTER_ADDED = 0x0080, /* Sent after printer added */
|
|
CUPSD_EVENT_PRINTER_DELETED = 0x0100, /* Sent after printer deleted */
|
|
CUPSD_EVENT_PRINTER_MODIFIED = 0x0200,/* Sent after printer modified */
|
|
CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED = 0x0400,
|
|
/* Sent when the order of jobs is changed */
|
|
|
|
/* Convenience printer event groupings... */
|
|
CUPSD_EVENT_PRINTER_STATE_CHANGED = 0x000f,
|
|
/* STATE + RESTARTED + SHUTDOWN + STOPPED */
|
|
CUPSD_EVENT_PRINTER_CONFIG_CHANGED = 0x0070,
|
|
/* CONFIG + FINISHINGS_CHANGED + MEDIA_CHANGED */
|
|
CUPSD_EVENT_PRINTER_CHANGED = 0x07ff, /* All of the above */
|
|
|
|
/* Individual job events... */
|
|
CUPSD_EVENT_JOB_STATE = 0x0800, /* Any state change */
|
|
CUPSD_EVENT_JOB_CREATED = 0x1000, /* Send after job is created */
|
|
CUPSD_EVENT_JOB_COMPLETED = 0x2000, /* Sent after job is completed */
|
|
CUPSD_EVENT_JOB_STOPPED = 0x4000, /* Sent after job is stopped */
|
|
CUPSD_EVENT_JOB_CONFIG_CHANGED = 0x8000,
|
|
/* Sent after set-job-attributes */
|
|
CUPSD_EVENT_JOB_PROGRESS = 0x10000, /* Sent for each page */
|
|
|
|
/* Convenience job event grouping... */
|
|
CUPSD_EVENT_JOB_STATE_CHANGED = 0x7800,
|
|
/* STATE + CREATED + COMPLETED + STOPPED */
|
|
|
|
/* Server events... */
|
|
CUPSD_EVENT_SERVER_RESTARTED = 0x20000,/* Sent after server restarts */
|
|
CUPSD_EVENT_SERVER_STARTED = 0x40000, /* Sent when server first starts */
|
|
CUPSD_EVENT_SERVER_STOPPED = 0x80000, /* Sent when server is stopped */
|
|
CUPSD_EVENT_SERVER_AUDIT = 0x100000, /* Security-related stuff */
|
|
|
|
/* Everything and nothing... */
|
|
CUPSD_EVENT_NONE = 0, /* Nothing */
|
|
CUPSD_EVENT_ALL = 0x1fffff /* Everything */
|
|
} cupsd_eventmask_t;
|
|
|
|
|
|
/*
|
|
* Notiification support structures...
|
|
*/
|
|
|
|
typedef struct cupsd_event_s /**** Event structure ****/
|
|
{
|
|
cupsd_eventmask_t event; /* Event */
|
|
time_t time; /* Time of event */
|
|
ipp_t *attrs; /* Notification message */
|
|
cupsd_printer_t *dest; /* Associated printer, if any */
|
|
cupsd_job_t *job; /* Associated job, if any */
|
|
} cupsd_event_t;
|
|
|
|
typedef struct cupsd_subscription_s /**** Subscription structure ****/
|
|
{
|
|
int id; /* subscription-id */
|
|
unsigned mask; /* Event mask */
|
|
char *owner; /* notify-subscriber-user-name */
|
|
char *recipient; /* notify-recipient-uri, if applicable */
|
|
unsigned char user_data[64]; /* notify-user-data */
|
|
int user_data_len; /* Length of notify-user-data */
|
|
int lease; /* notify-lease-duration */
|
|
int interval; /* notify-time-interval */
|
|
cupsd_printer_t *dest; /* notify-printer-uri, if any */
|
|
cupsd_job_t *job; /* notify-job-id, if any */
|
|
int pid; /* Process ID of notifier */
|
|
int pipe; /* Pipe to notifier */
|
|
int status; /* Exit status of notifier */
|
|
time_t last; /* Time of last notification */
|
|
time_t expire; /* Lease expiration time */
|
|
int first_event_id, /* First event-id in cache */
|
|
next_event_id; /* Next event-id to use */
|
|
cups_array_t *events; /* Cached events */
|
|
} cupsd_subscription_t;
|
|
|
|
|
|
/*
|
|
* Globals...
|
|
*/
|
|
|
|
VAR int MaxSubscriptions VALUE(100),
|
|
/* Overall subscription limit */
|
|
MaxSubscriptionsPerJob VALUE(0),
|
|
/* Per-job subscription limit */
|
|
MaxSubscriptionsPerPrinter VALUE(0),
|
|
/* Per-printer subscription limit */
|
|
MaxSubscriptionsPerUser VALUE(0),
|
|
/* Per-user subscription limit */
|
|
NextSubscriptionId VALUE(1),
|
|
/* Next subscription ID */
|
|
DefaultLeaseDuration VALUE(86400),
|
|
/* Default notify-lease-duration */
|
|
MaxLeaseDuration VALUE(0);
|
|
/* Maximum notify-lease-duration */
|
|
VAR cups_array_t *Subscriptions VALUE(NULL);
|
|
/* Active subscriptions */
|
|
|
|
VAR int MaxEvents VALUE(100); /* Maximum number of events */
|
|
|
|
VAR unsigned LastEvent VALUE(0); /* Last event(s) processed */
|
|
VAR int NotifierPipes[2] VALUE2(-1, -1);
|
|
/* Pipes for notifier error/debug output */
|
|
VAR cupsd_statbuf_t *NotifierStatusBuffer VALUE(NULL);
|
|
/* Status buffer for pipes */
|
|
|
|
|
|
/*
|
|
* Prototypes...
|
|
*/
|
|
|
|
extern void cupsdAddEvent(cupsd_eventmask_t event, cupsd_printer_t *dest,
|
|
cupsd_job_t *job, const char *text, ...);
|
|
extern cupsd_subscription_t *
|
|
cupsdAddSubscription(unsigned mask, cupsd_printer_t *dest,
|
|
cupsd_job_t *job, const char *uri,
|
|
int sub_id);
|
|
extern void cupsdDeleteAllSubscriptions(void);
|
|
extern void cupsdDeleteSubscription(cupsd_subscription_t *sub, int update);
|
|
extern const char *
|
|
cupsdEventName(cupsd_eventmask_t event);
|
|
extern cupsd_eventmask_t
|
|
cupsdEventValue(const char *name);
|
|
|
|
extern cupsd_subscription_t *
|
|
cupsdFindSubscription(int id);
|
|
extern void cupsdExpireSubscriptions(cupsd_printer_t *dest,
|
|
cupsd_job_t *job);
|
|
extern void cupsdLoadAllSubscriptions(void);
|
|
extern void cupsdSaveAllSubscriptions(void);
|
|
extern void cupsdStopAllNotifiers(void);
|