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