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