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); 156