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