]> git.ipfire.org Git - thirdparty/cups.git/blob - scheduler/subscriptions.h
Use interactive priority for cupsd now.
[thirdparty/cups.git] / scheduler / subscriptions.h
1 /*
2 * Subscription definitions for the CUPS scheduler.
3 *
4 * Copyright 2007-2010 by Apple Inc.
5 * Copyright 1997-2007 by Easy Software Products, all rights reserved.
6 *
7 * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
8 */
9
10 /*
11 * Event mask enumeration...
12 */
13
14 typedef enum
15 {
16 /* Individual printer events... */
17 CUPSD_EVENT_PRINTER_STATE = 0x0001, /* Sent after generic printer state change */
18 CUPSD_EVENT_PRINTER_RESTARTED = 0x0002,
19 /* Sent after printer restarted */
20 CUPSD_EVENT_PRINTER_SHUTDOWN = 0x0004,/* Sent after printer shutdown */
21 CUPSD_EVENT_PRINTER_STOPPED = 0x0008, /* Sent after printer stopped */
22
23 CUPSD_EVENT_PRINTER_CONFIG = 0x0010, /* Send after add/modify changes attrs */
24 CUPSD_EVENT_PRINTER_FINISHINGS_CHANGED = 0x0020,
25 /* Sent after finishings-supported changed */
26 CUPSD_EVENT_PRINTER_MEDIA_CHANGED = 0x0040,
27 /* Sent after media-supported changed */
28 CUPSD_EVENT_PRINTER_ADDED = 0x0080, /* Sent after printer added */
29 CUPSD_EVENT_PRINTER_DELETED = 0x0100, /* Sent after printer deleted */
30 CUPSD_EVENT_PRINTER_MODIFIED = 0x0200,/* Sent after printer modified */
31 CUPSD_EVENT_PRINTER_QUEUE_ORDER_CHANGED = 0x0400,
32 /* Sent when the order of jobs is changed */
33
34 /* Convenience printer event groupings... */
35 CUPSD_EVENT_PRINTER_STATE_CHANGED = 0x000f,
36 /* STATE + RESTARTED + SHUTDOWN + STOPPED */
37 CUPSD_EVENT_PRINTER_CONFIG_CHANGED = 0x0070,
38 /* CONFIG + FINISHINGS_CHANGED + MEDIA_CHANGED */
39 CUPSD_EVENT_PRINTER_CHANGED = 0x07ff, /* All of the above */
40
41 /* Individual job events... */
42 CUPSD_EVENT_JOB_STATE = 0x0800, /* Any state change */
43 CUPSD_EVENT_JOB_CREATED = 0x1000, /* Send after job is created */
44 CUPSD_EVENT_JOB_COMPLETED = 0x2000, /* Sent after job is completed */
45 CUPSD_EVENT_JOB_STOPPED = 0x4000, /* Sent after job is stopped */
46 CUPSD_EVENT_JOB_CONFIG_CHANGED = 0x8000,
47 /* Sent after set-job-attributes */
48 CUPSD_EVENT_JOB_PROGRESS = 0x10000, /* Sent for each page */
49
50 /* Convenience job event grouping... */
51 CUPSD_EVENT_JOB_STATE_CHANGED = 0x7800,
52 /* STATE + CREATED + COMPLETED + STOPPED */
53
54 /* Server events... */
55 CUPSD_EVENT_SERVER_RESTARTED = 0x20000,/* Sent after server restarts */
56 CUPSD_EVENT_SERVER_STARTED = 0x40000, /* Sent when server first starts */
57 CUPSD_EVENT_SERVER_STOPPED = 0x80000, /* Sent when server is stopped */
58 CUPSD_EVENT_SERVER_AUDIT = 0x100000, /* Security-related stuff */
59
60 /* Everything and nothing... */
61 CUPSD_EVENT_NONE = 0, /* Nothing */
62 CUPSD_EVENT_ALL = 0x1fffff /* Everything */
63 } cupsd_eventmask_t;
64
65
66 /*
67 * Notiification support structures...
68 */
69
70 typedef struct cupsd_event_s /**** Event structure ****/
71 {
72 cupsd_eventmask_t event; /* Event */
73 time_t time; /* Time of event */
74 ipp_t *attrs; /* Notification message */
75 cupsd_printer_t *dest; /* Associated printer, if any */
76 cupsd_job_t *job; /* Associated job, if any */
77 } cupsd_event_t;
78
79 typedef struct cupsd_subscription_s /**** Subscription structure ****/
80 {
81 int id; /* subscription-id */
82 unsigned mask; /* Event mask */
83 char *owner; /* notify-subscriber-user-name */
84 char *recipient; /* notify-recipient-uri, if applicable */
85 unsigned char user_data[64]; /* notify-user-data */
86 int user_data_len; /* Length of notify-user-data */
87 int lease; /* notify-lease-duration */
88 int interval; /* notify-time-interval */
89 cupsd_printer_t *dest; /* notify-printer-uri, if any */
90 cupsd_job_t *job; /* notify-job-id, if any */
91 int pid; /* Process ID of notifier */
92 int pipe; /* Pipe to notifier */
93 int status; /* Exit status of notifier */
94 time_t last; /* Time of last notification */
95 time_t expire; /* Lease expiration time */
96 int first_event_id, /* First event-id in cache */
97 next_event_id; /* Next event-id to use */
98 cups_array_t *events; /* Cached events */
99 } cupsd_subscription_t;
100
101
102 /*
103 * Globals...
104 */
105
106 VAR int MaxSubscriptions VALUE(100),
107 /* Overall subscription limit */
108 MaxSubscriptionsPerJob VALUE(0),
109 /* Per-job subscription limit */
110 MaxSubscriptionsPerPrinter VALUE(0),
111 /* Per-printer subscription limit */
112 MaxSubscriptionsPerUser VALUE(0),
113 /* Per-user subscription limit */
114 NextSubscriptionId VALUE(1),
115 /* Next subscription ID */
116 DefaultLeaseDuration VALUE(86400),
117 /* Default notify-lease-duration */
118 MaxLeaseDuration VALUE(0);
119 /* Maximum notify-lease-duration */
120 VAR cups_array_t *Subscriptions VALUE(NULL);
121 /* Active subscriptions */
122
123 VAR int MaxEvents VALUE(100); /* Maximum number of events */
124
125 VAR unsigned LastEvent VALUE(0); /* Last event(s) processed */
126 VAR int NotifierPipes[2] VALUE2(-1, -1);
127 /* Pipes for notifier error/debug output */
128 VAR cupsd_statbuf_t *NotifierStatusBuffer VALUE(NULL);
129 /* Status buffer for pipes */
130
131
132 /*
133 * Prototypes...
134 */
135
136 extern void cupsdAddEvent(cupsd_eventmask_t event, cupsd_printer_t *dest,
137 cupsd_job_t *job, const char *text, ...);
138 extern cupsd_subscription_t *
139 cupsdAddSubscription(unsigned mask, cupsd_printer_t *dest,
140 cupsd_job_t *job, const char *uri,
141 int sub_id);
142 extern void cupsdDeleteAllSubscriptions(void);
143 extern void cupsdDeleteSubscription(cupsd_subscription_t *sub, int update);
144 extern const char *
145 cupsdEventName(cupsd_eventmask_t event);
146 extern cupsd_eventmask_t
147 cupsdEventValue(const char *name);
148
149 extern cupsd_subscription_t *
150 cupsdFindSubscription(int id);
151 extern void cupsdExpireSubscriptions(cupsd_printer_t *dest,
152 cupsd_job_t *job);
153 extern void cupsdLoadAllSubscriptions(void);
154 extern void cupsdSaveAllSubscriptions(void);
155 extern void cupsdStopAllNotifiers(void);