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