#ifdef HAVE_DNSSD
# include <dns_sd.h>
#endif
#include <cups/pwg-private.h>
typedef struct
{
char username[33];
time_t next_update;
int page_count,
k_count;
} cupsd_quota_t;
typedef struct cupsd_job_s cupsd_job_t;
struct cupsd_printer_s
{
char *uri,
*uuid,
*hostname,
*name,
*location,
*make_model,
*info,
*op_policy,
*error_policy;
cupsd_policy_t *op_policy_ptr;
int shared;
int accepting;
int holding_new_jobs;
int in_implicit_class;
ipp_pstate_t state;
char state_message[1024];
int num_reasons;
char *reasons[64];
time_t state_time;
char *job_sheets[2];
cups_ptype_t type;
char *browse_attrs;
time_t browse_expire;
time_t browse_time;
char *device_uri;
char *sanitized_device_uri;
char *port_monitor;
int raw;
int remote;
mime_type_t *filetype,
*prefiltertype;
cups_array_t *filetypes,
*dest_types;
cupsd_job_t *job;
ipp_t *attrs,
*ppd_attrs;
int num_printers,
last_printer;
struct cupsd_printer_s **printers;
int quota_period,
page_limit,
k_limit;
cups_array_t *quotas;
int deny_users;
cups_array_t *users;
int sequence_number;
int num_options;
cups_option_t *options;
int num_auth_info_required;
const char *auth_info_required[4];
char *alert,
*alert_description;
time_t marker_time;
_ppd_cache_t *pc;
#ifdef HAVE_DNSSD
char *reg_name,
*pdl,
*ipp_txt,
*printer_txt;
int ipp_len,
printer_len;
DNSServiceRef ipp_ref,
printer_ref;
#endif
};
VAR ipp_t *CommonData VALUE(NULL);
VAR cups_array_t *CommonDefaults VALUE(NULL);
VAR cups_array_t *Printers VALUE(NULL),
*ImplicitPrinters VALUE(NULL);
VAR cupsd_printer_t *DefaultPrinter VALUE(NULL);
VAR char *DefaultPolicy VALUE(NULL);
VAR cupsd_policy_t *DefaultPolicyPtr
VALUE(NULL);
extern cupsd_printer_t *cupsdAddPrinter(const char *name);
extern void cupsdCreateCommonData(void);
extern void cupsdDeleteAllPrinters(void);
extern int cupsdDeletePrinter(cupsd_printer_t *p, int update);
extern cupsd_printer_t *cupsdFindDest(const char *name);
extern cupsd_printer_t *cupsdFindPrinter(const char *name);
extern cupsd_quota_t *cupsdFindQuota(cupsd_printer_t *p,
const char *username);
extern void cupsdFreeQuotas(cupsd_printer_t *p);
extern void cupsdLoadAllPrinters(void);
extern void cupsdRenamePrinter(cupsd_printer_t *p,
const char *name);
extern void cupsdSaveAllPrinters(void);
extern int cupsdSetAuthInfoRequired(cupsd_printer_t *p,
const char *values,
ipp_attribute_t *attr);
extern void cupsdSetDeviceURI(cupsd_printer_t *p, const char *uri);
extern void cupsdSetPrinterAttr(cupsd_printer_t *p,
const char *name, char *value);
extern void cupsdSetPrinterAttrs(cupsd_printer_t *p);
extern int cupsdSetPrinterReasons(cupsd_printer_t *p,
const char *s);
extern void cupsdSetPrinterState(cupsd_printer_t *p, ipp_pstate_t s,
int update);
#define cupsdStartPrinter(p,u) cupsdSetPrinterState((p), IPP_PRINTER_IDLE, (u))
extern void cupsdStopPrinter(cupsd_printer_t *p, int update);
extern int cupsdUpdatePrinterPPD(cupsd_printer_t *p,
int num_keywords,
cups_option_t *keywords);
extern void cupsdUpdatePrinters(void);
extern cupsd_quota_t *cupsdUpdateQuota(cupsd_printer_t *p,
const char *username, int pages,
int k);
extern const char *cupsdValidateDest(const char *uri,
cups_ptype_t *dtype,
cupsd_printer_t **printer);
extern void cupsdWritePrintcap(void);