4 * Subscription definitions for the Common UNIX Printing System (CUPS) scheduler.
6 * Copyright 1997-2005 by Easy Software Products, all rights reserved.
8 * These coded instructions, statements, and computer programs are the
9 * property of Easy Software Products and are protected by Federal
10 * copyright law. Distribution and use rights are outlined in the file
11 * "LICENSE.txt" which should have been included with this file. If this
12 * file is missing or damaged please contact Easy Software Products
15 * Attn: CUPS Licensing Information
16 * Easy Software Products
17 * 44141 Airport View Drive, Suite 204
18 * Hollywood, Maryland 20636 USA
20 * Voice: (301) 373-9600
21 * EMail: cups-info@cups.org
22 * WWW: http://www.cups.org
26 * Event mask enumeration...
31 /* Individual printer events... */
32 CUPSD_EVENT_PRINTER_RESTARTED
= 0x0001,
33 /* Sent after printer restarted */
34 CUPSD_EVENT_PRINTER_SHUTDOWN
= 0x0002,/* Sent after printer shutdown */
35 CUPSD_EVENT_PRINTER_STOPPED
= 0x0004, /* Sent after printer stopped */
36 CUPSD_EVENT_PRINTER_FINISHINGS_CHANGED
= 0x0008,
37 /* Sent after finishings-supported changed */
38 CUPSD_EVENT_PRINTER_MEDIA_CHANGED
= 0x0010,
39 /* Sent after media-supported changed */
40 CUPSD_EVENT_PRINTER_ADDED
= 0x0020, /* Sent after printer added */
41 CUPSD_EVENT_PRINTER_DELETED
= 0x0040, /* Sent after printer deleted */
42 CUPSD_EVENT_PRINTER_MODIFIED
= 0x0080,/* Sent after printer modified */
44 /* Convenience printer event groupings... */
45 CUPSD_EVENT_PRINTER_STATE_CHANGED
= 0x0007,
46 /* RESTARTED + SHUTDOWN + STOPPED */
47 CUPSD_EVENT_PRINTER_CONFIG_CHANGED
= 0x0018,
48 /* FINISHINGS_CHANGED + MEDIA_CHANGED */
49 CUPSD_EVENT_PRINTER_CHANGED
= 0x00ff, /* All of the above */
51 /* Individual job events... */
52 CUPSD_EVENT_JOB_CREATED
= 0x0100, /* Send after job is created */
53 CUPSD_EVENT_JOB_COMPLETED
= 0x0200, /* Sent after job is completed */
54 CUPSD_EVENT_JOB_STOPPED
= 0x0400, /* Sent after job is stopped */
55 CUPSD_EVENT_JOB_CONFIG_CHANGED
= 0x0800,
56 /* Sent after set-job-attributes */
57 CUPSD_EVENT_JOB_PROGRESS
= 0x1000, /* Sent for each page */
59 /* Convenience job event grouping... */
60 CUPSD_EVENT_JOB_STATE_CHANGED
= 0x0700,
61 /* CREATED + COMPLETED + STOPPED */
63 /* Server events... */
64 CUPSD_EVENT_SERVER_RESTARTED
= 0x2000,/* Sent after server restarts */
65 CUPSD_EVENT_SERVER_STARTED
= 0x4000, /* Sent when server first starts */
66 CUPSD_EVENT_SERVER_STOPPED
= 0x8000, /* Sent when server is stopped */
67 CUPSD_EVENT_SERVER_AUDIT
= 0x10000, /* Security-related stuff */
69 /* Everything and nothing... */
70 CUPSD_EVENT_NONE
= 0, /* Nothing */
71 CUPSD_EVENT_ALL
= 0x1ffff /* Everything */
76 * Notiification support structures...
79 typedef struct cupsd_event_s
/**** Event structure ****/
81 cupsd_eventmask_t event
; /* Event */
82 time_t time
; /* Time of event */
83 ipp_t
*attrs
; /* Notification message */
84 cupsd_printer_t
*dest
; /* Associated printer, if any */
85 cupsd_job_t
*job
; /* Associated job, if any */
88 typedef struct cupsd_subscription_s
/**** Subscription structure ****/
90 int id
; /* subscription-id */
91 unsigned mask
; /* Event mask */
92 char *owner
; /* notify-subscriber-user-name */
93 char *recipient
; /* notify-recipient-uri, if applicable */
94 unsigned char user_data
[64]; /* notify-user-data */
95 int user_data_len
; /* Length of notify-user-data */
96 int lease
; /* notify-lease-time */
97 int interval
; /* notify-interval */
98 cupsd_printer_t
*dest
; /* notify-printer-uri, if any */
99 cupsd_job_t
*job
; /* notify-job-id, if any */
100 int pid
; /* Process ID of notifier */
101 int pipe
; /* Pipe to notifier */
102 int status
; /* Exit status of notifier */
103 time_t last
; /* Time of last notification */
104 time_t expire
; /* Lease expiration time */
105 int first_event_id
, /* First event-id in cache */
106 next_event_id
, /* Next event-id to use */
107 num_events
; /* Number of cached events */
108 cupsd_event_t
**events
; /* Cached events */
109 } cupsd_subscription_t
;
116 VAR
int MaxSubscriptions
VALUE(100),
117 /* Overall subscription limit */
118 MaxSubscriptionsPerJob
VALUE(0),
119 /* Per-job subscription limit */
120 MaxSubscriptionsPerPrinter
VALUE(0),
121 /* Per-printer subscription limit */
122 MaxSubscriptionsPerUser
VALUE(0),
123 /* Per-user subscription limit */
124 NextSubscriptionId
VALUE(1),
125 /* Next subscription ID */
126 DefaultLeaseTime
VALUE(86400),
127 /* Default notify-lease-time */
128 MaxLeaseTime
VALUE(0), /* Maximum notify-lease-time */
129 NumSubscriptions
VALUE(0);
130 /* Number of active subscriptions */
131 VAR cupsd_subscription_t
**Subscriptions
VALUE(NULL
);
132 /* Active subscriptions */
134 VAR
int MaxEvents
VALUE(100), /* Maximum number of events */
135 NumEvents
VALUE(0); /* Number of active events */
136 VAR cupsd_event_t
**Events
VALUE(NULL
); /* Active events */
138 VAR
int NotifierPipes
[2] VALUE2(-1, -1);
139 /* Pipes for notifier error/debug output */
140 VAR cupsd_statbuf_t
*NotifierStatusBuffer
VALUE(NULL
);
141 /* Status buffer for pipes */
148 extern void cupsdAddEvent(cupsd_eventmask_t event
, cupsd_printer_t
*dest
,
149 cupsd_job_t
*job
, const char *text
, ...);
150 extern cupsd_subscription_t
*
151 cupsdAddSubscription(unsigned mask
,
152 cupsd_printer_t
*dest
,
153 cupsd_job_t
*job
, const char *uri
);
154 extern void cupsdDeleteAllEvents(void);
155 extern void cupsdDeleteAllSubscriptions(void);
156 extern void cupsdDeleteSubscription(cupsd_subscription_t
*sub
, int update
);
158 cupsdEventName(cupsd_eventmask_t event
);
159 extern cupsd_eventmask_t
160 cupsdEventValue(const char *name
);
162 extern cupsd_subscription_t
*
163 cupsdFindSubscription(int id
);
164 extern void cupsdExpireSubscriptions(cupsd_printer_t
*dest
,
166 extern void cupsdLoadAllSubscriptions(void);
167 extern void cupsdSaveAllSubscriptions(void);
168 extern void cupsdSendNotification(cupsd_subscription_t
*sub
,
169 cupsd_event_t
*event
);
170 extern void cupsdStopAllNotifiers(void);
171 extern void cupsdUpdateNotiferStatus(void);