]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - scheduler/printers.h
License change: Apache License, Version 2.0.
[thirdparty/cups.git] / scheduler / printers.h
index dcbf302f4606d3924feab30467a95610d3c304f6..6f8afc60f75d3c9783f0c947b30bf73246937b9e 100644 (file)
@@ -1,20 +1,19 @@
 /*
- * "$Id: printers.h 7564 2008-05-15 00:57:43Z mike $"
+ * Printer definitions for the CUPS scheduler.
  *
- *   Printer definitions for the CUPS scheduler.
+ * Copyright 2007-2017 by Apple Inc.
+ * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
- *   Copyright 2007-2011 by Apple Inc.
- *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
- *
- *   These coded instructions, statements, and computer programs are the
- *   property of Apple Inc. and are protected by Federal copyright
- *   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
- *   which should have been included with this file.  If this file is
- *   file is missing or damaged, see the license at "http://www.cups.org/".
+ * Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
  */
 
 #ifdef HAVE_DNSSD
 #  include <dns_sd.h>
+#elif defined(HAVE_AVAHI)
+#  include <avahi-client/client.h>
+#  include <avahi-client/publish.h>
+#  include <avahi-common/error.h>
+#  include <avahi-common/thread-watch.h>
 #endif /* HAVE_DNSSD */
 #include <cups/pwg-private.h>
 
@@ -32,6 +31,20 @@ typedef struct
 } cupsd_quota_t;
 
 
+/*
+ * DNS-SD types to make the code cleaner/clearer...
+ */
+
+#ifdef HAVE_DNSSD
+typedef DNSServiceRef cupsd_srv_t;     /* Service reference */
+typedef TXTRecordRef cupsd_txt_t;      /* TXT record */
+
+#elif defined(HAVE_AVAHI)
+typedef AvahiEntryGroup *cupsd_srv_t;  /* Service reference */
+typedef AvahiStringList *cupsd_txt_t;  /* TXT record */
+#endif /* HAVE_DNSSD */
+
+
 /*
  * Printer/class information structure...
  */
@@ -40,16 +53,23 @@ typedef struct cupsd_job_s cupsd_job_t;
 
 struct cupsd_printer_s
 {
+  _cups_rwlock_t lock;                 /* Concurrency lock for background updates */
+  int          printer_id;             /* Printer ID */
   char         *uri,                   /* Printer URI */
+               *uuid,                  /* Printer UUID */
                *hostname,              /* Host printer resides on */
                *name,                  /* Printer name */
-               *location,              /* Location code */
+               *location,              /* Location string */
+               *geo_location,          /* Geographic location URI */
                *make_model,            /* Make and model */
                *info,                  /* Description */
+               *organization,          /* Organization name */
+               *organizational_unit,   /* Organizational unit (department, etc.) */
                *op_policy,             /* Operation policy name */
                *error_policy;          /* Error policy */
   cupsd_policy_t *op_policy_ptr;       /* Pointer to operation policy */
   int          shared;                 /* Shared? */
+  int          temporary;              /* Temporary queue? */
   int          accepting;              /* Accepting jobs? */
   int          holding_new_jobs;       /* Holding new jobs for printing? */
   int          in_implicit_class;      /* In an implicit class? */
@@ -57,12 +77,10 @@ struct cupsd_printer_s
   char         state_message[1024];    /* Printer state message */
   int          num_reasons;            /* Number of printer-state-reasons */
   char         *reasons[64];           /* printer-state-reasons strings */
-  time_t       state_time;             /* Time at this state */
+  time_t       config_time,            /* Time at this configuration */
+               state_time;             /* Time at this state */
   char         *job_sheets[2];         /* Banners/job sheets */
   cups_ptype_t type;                   /* Printer type (color, small, etc.) */
-  char         *browse_attrs;          /* Attributes sent with browse data */
-  time_t       browse_expire;          /* Expiration time for printer */
-  time_t       browse_time;            /* Last time update was sent/received */
   char         *device_uri;            /* Device URI */
   char         *sanitized_device_uri;  /* Sanitized device URI */
   char         *port_monitor;          /* Port monitor */
@@ -70,7 +88,8 @@ struct cupsd_printer_s
   int          remote;                 /* Remote queue? */
   mime_type_t  *filetype,              /* Pseudo-filetype for printer */
                *prefiltertype;         /* Pseudo-filetype for pre-filters */
-  cups_array_t *filetypes;             /* Supported file types */
+  cups_array_t *filetypes,             /* Supported file types */
+               *dest_types;            /* Destination types for queue */
   cupsd_job_t  *job;                   /* Current job in queue */
   ipp_t                *attrs,                 /* Attributes supported by this printer */
                *ppd_attrs;             /* Attributes based on the PPD */
@@ -83,8 +102,6 @@ struct cupsd_printer_s
   cups_array_t *quotas;                /* Quota records */
   int          deny_users;             /* 1 = deny, 0 = allow */
   cups_array_t *users;                 /* Allowed/denied users */
-  int          num_history;            /* Number of history collections */
-  ipp_t                **history;              /* History data */
   int          sequence_number;        /* Increasing sequence number */
   int          num_options;            /* Number of default options */
   cups_option_t        *options;               /* Default options */
@@ -93,22 +110,19 @@ struct cupsd_printer_s
   char         *alert,                 /* PSX printer-alert value */
                *alert_description;     /* PSX printer-alert-description value */
   time_t       marker_time;            /* Last time marker attributes were updated */
-  cups_array_t *filters,               /* Filters for queue */
-               *pre_filters,           /* Pre-filters for queue */
-               *dest_types;            /* Destination types for queue */
-  _pwg_t       *pwg;                   /* PWG<->PPD mapping data */
+  _ppd_cache_t *pc;                    /* PPD cache and mapping data */
 
-#ifdef HAVE_DNSSD
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
   char         *reg_name,              /* Name used for service registration */
-               *product,               /* PPD Product string */
-               *pdl,                   /* pdl value for TXT record */
-               *ipp_txt,               /* IPP TXT record contents */
-               *printer_txt;           /* LPD TXT record contents */
-  int          ipp_len,                /* IPP TXT record length */
-               printer_len;            /* LPD TXT record length */
-  DNSServiceRef        ipp_ref,                /* Reference for _ipp._tcp,_cups */
-               printer_ref;            /* Reference for _printer._tcp */
-#endif /* HAVE_DNSSD */
+               *pdl;                   /* pdl value for TXT record */
+  cupsd_srv_t  ipp_srv;                /* IPP service(s) */
+#  ifdef HAVE_DNSSD
+#    ifdef HAVE_SSL
+  cupsd_srv_t  ipps_srv;               /* IPPS service(s) */
+#    endif /* HAVE_SSL */
+  cupsd_srv_t  printer_srv;            /* LPD service */
+#  endif /* HAVE_DNSSD */
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
 };
 
 
@@ -120,10 +134,10 @@ VAR ipp_t         *CommonData     VALUE(NULL);
                                        /* Common printer object attrs */
 VAR cups_array_t       *CommonDefaults VALUE(NULL);
                                        /* Common -default option names */
-VAR cups_array_t       *Printers       VALUE(NULL),
+VAR int                        NextPrinterId   VALUE(1);
+                                       /* Next printer-id value */
+VAR cups_array_t       *Printers       VALUE(NULL);
                                        /* Printer list */
-                       *ImplicitPrinters VALUE(NULL);
-                                       /* Implicit class printers */
 VAR cupsd_printer_t    *DefaultPrinter VALUE(NULL);
                                        /* Default printer */
 VAR char               *DefaultPolicy  VALUE(NULL);
@@ -138,10 +152,10 @@ VAR cupsd_policy_t        *DefaultPolicyPtr
  */
 
 extern cupsd_printer_t *cupsdAddPrinter(const char *name);
-extern void            cupsdAddPrinterHistory(cupsd_printer_t *p);
 extern void            cupsdCreateCommonData(void);
 extern void            cupsdDeleteAllPrinters(void);
 extern int             cupsdDeletePrinter(cupsd_printer_t *p, int update);
+extern void             cupsdDeleteTemporaryPrinters(int force);
 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,
@@ -156,13 +170,15 @@ extern int                cupsdSetAuthInfoRequired(cupsd_printer_t *p,
                                                 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);
+                                           const char *name,
+                                           const 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))
+#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,
@@ -175,8 +191,3 @@ extern const char   *cupsdValidateDest(const char *uri,
                                           cups_ptype_t *dtype,
                                           cupsd_printer_t **printer);
 extern void            cupsdWritePrintcap(void);
-
-
-/*
- * End of "$Id: printers.h 7564 2008-05-15 00:57:43Z mike $".
- */