You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

156 lines
5.6 KiB

/*
* 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);