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