Home | History | Annotate | Download | only in cups
      1 /*
      2  * Private definitions for CUPS.
      3  *
      4  * Copyright 2007-2017 by Apple Inc.
      5  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
      6  *
      7  * These coded instructions, statements, and computer programs are the
      8  * property of Apple Inc. and are protected by Federal copyright
      9  * law.  Distribution and use rights are outlined in the file "LICENSE.txt"
     10  * which should have been included with this file.  If this file is
     11  * missing or damaged, see the license at "http://www.cups.org/".
     12  *
     13  * This file is subject to the Apple OS-Developed Software exception.
     14  */
     15 
     16 #ifndef _CUPS_CUPS_PRIVATE_H_
     17 #  define _CUPS_CUPS_PRIVATE_H_
     18 
     19 /*
     20  * Include necessary headers...
     21  */
     22 
     23 #  include "string-private.h"
     24 #  include "debug-private.h"
     25 #  include "array-private.h"
     26 #  include "ipp-private.h"
     27 #  include "http-private.h"
     28 #  include "language-private.h"
     29 #  include "pwg-private.h"
     30 #  include "thread-private.h"
     31 #  include <cups/cups.h>
     32 #  ifdef __APPLE__
     33 #    include <sys/cdefs.h>
     34 #    include <CoreFoundation/CoreFoundation.h>
     35 #  endif /* __APPLE__ */
     36 
     37 
     38 /*
     39  * C++ magic...
     40  */
     41 
     42 #  ifdef __cplusplus
     43 extern "C" {
     44 #  endif /* __cplusplus */
     45 
     46 
     47 /*
     48  * Types...
     49  */
     50 
     51 typedef struct _cups_buffer_s		/**** Read/write buffer ****/
     52 {
     53   struct _cups_buffer_s	*next;		/* Next buffer in list */
     54   size_t		size;		/* Size of buffer */
     55   char			used,		/* Is this buffer used? */
     56 			d[1];		/* Data buffer */
     57 } _cups_buffer_t;
     58 
     59 typedef struct _cups_globals_s		/**** CUPS global state data ****/
     60 {
     61   /* Multiple places... */
     62   const char		*cups_datadir,	/* CUPS_DATADIR environment var */
     63 			*cups_serverbin,/* CUPS_SERVERBIN environment var */
     64 			*cups_serverroot,
     65 					/* CUPS_SERVERROOT environment var */
     66 			*cups_statedir,	/* CUPS_STATEDIR environment var */
     67 			*localedir;	/* LOCALDIR environment var */
     68 
     69   /* adminutil.c */
     70   time_t		cupsd_update;	/* Last time we got or set cupsd.conf */
     71   char			cupsd_hostname[HTTP_MAX_HOST];
     72 					/* Hostname for connection */
     73   int			cupsd_num_settings;
     74 					/* Number of server settings */
     75   cups_option_t		*cupsd_settings;/* Server settings */
     76 
     77   /* auth.c */
     78 #  ifdef HAVE_GSSAPI
     79   char			gss_service_name[32];
     80   					/* Kerberos service name */
     81 #  endif /* HAVE_GSSAPI */
     82 
     83   /* backend.c */
     84   char			resolved_uri[1024];
     85 					/* Buffer for cupsBackendDeviceURI */
     86 
     87   /* debug.c */
     88 #  ifdef DEBUG
     89   int			thread_id;	/* Friendly thread ID */
     90 #  endif /* DEBUG */
     91 
     92   /* file.c */
     93   cups_file_t		*stdio_files[3];/* stdin, stdout, stderr */
     94 
     95   /* http.c */
     96   char			http_date[256];	/* Date+time buffer */
     97 
     98   /* http-addr.c */
     99   unsigned		ip_addr;	/* Packed IPv4 address */
    100   char			*ip_ptrs[2];	/* Pointer to packed address */
    101   struct hostent	hostent;	/* Host entry for IP address */
    102 #  ifdef HAVE_GETADDRINFO
    103   char			hostname[1024];	/* Hostname */
    104 #  endif /* HAVE_GETADDRINFO */
    105   int			need_res_init;	/* Need to reinitialize resolver? */
    106 
    107   /* ipp.c */
    108   ipp_uchar_t		ipp_date[11];	/* RFC-2579 date/time data */
    109   _cups_buffer_t	*cups_buffers;	/* Buffer list */
    110 
    111   /* ipp-support.c */
    112   int			ipp_port;	/* IPP port number */
    113   char			ipp_unknown[255];
    114 					/* Unknown error statuses */
    115 
    116   /* language.c */
    117   cups_lang_t		*lang_default;	/* Default language */
    118 #  ifdef __APPLE__
    119   char			language[32];	/* Cached language */
    120 #  endif /* __APPLE__ */
    121 
    122   /* pwg-media.c */
    123   cups_array_t		*leg_size_lut,	/* Lookup table for legacy names */
    124 			*ppd_size_lut,	/* Lookup table for PPD names */
    125 			*pwg_size_lut;	/* Lookup table for PWG names */
    126   pwg_media_t		pwg_media;	/* PWG media data for custom size */
    127   char			pwg_name[65],	/* PWG media name for custom size */
    128 			ppd_name[41];	/* PPD media name for custom size */
    129 
    130   /* request.c */
    131   http_t		*http;		/* Current server connection */
    132   ipp_status_t		last_error;	/* Last IPP error */
    133   char			*last_status_message;
    134 					/* Last IPP status-message */
    135 
    136   /* snmp.c */
    137   char			snmp_community[255];
    138 					/* Default SNMP community name */
    139   int			snmp_debug;	/* Log SNMP IO to stderr? */
    140 
    141   /* tempfile.c */
    142   char			tempfile[1024];	/* cupsTempFd/File buffer */
    143 
    144   /* usersys.c */
    145   http_encryption_t	encryption;	/* Encryption setting */
    146   char			user[65],	/* User name */
    147 			user_agent[256],/* User-Agent string */
    148 			server[256],	/* Server address */
    149 			servername[256],/* Server hostname */
    150 			password[128];	/* Password for default callback */
    151   cups_password_cb2_t	password_cb;	/* Password callback */
    152   void			*password_data;	/* Password user data */
    153   http_tls_credentials_t tls_credentials;
    154 					/* Default client credentials */
    155   cups_client_cert_cb_t	client_cert_cb;	/* Client certificate callback */
    156   void			*client_cert_data;
    157 					/* Client certificate user data */
    158   cups_server_cert_cb_t	server_cert_cb;	/* Server certificate callback */
    159   void			*server_cert_data;
    160 					/* Server certificate user data */
    161   int			server_version,	/* Server IPP version */
    162 			trust_first,	/* Trust on first use? */
    163 			any_root,	/* Allow any (e.g., self-signed) root */
    164 			expired_certs,	/* Allow expired certs */
    165 			validate_certs;	/* Validate certificates */
    166 
    167   /* util.c */
    168   char			def_printer[256];
    169 					/* Default printer */
    170 } _cups_globals_t;
    171 
    172 typedef struct _cups_media_db_s		/* Media database */
    173 {
    174   char		*color,			/* Media color, if any */
    175 		*key,			/* Media key, if any */
    176 		*info,			/* Media human-readable name, if any */
    177 		*size_name,		/* Media PWG size name, if provided */
    178 		*source,		/* Media source, if any */
    179 		*type;			/* Media type, if any */
    180   int		width,			/* Width in hundredths of millimeters */
    181 		length,			/* Length in hundredths of
    182 					 * millimeters */
    183 		bottom,			/* Bottom margin in hundredths of
    184 					 * millimeters */
    185 		left,			/* Left margin in hundredths of
    186 					 * millimeters */
    187 		right,			/* Right margin in hundredths of
    188 					 * millimeters */
    189 		top;			/* Top margin in hundredths of
    190 					 * millimeters */
    191 } _cups_media_db_t;
    192 
    193 typedef struct _cups_dconstres_s	/* Constraint/resolver */
    194 {
    195   char	*name;				/* Name of resolver */
    196   ipp_t	*collection;			/* Collection containing attrs */
    197 } _cups_dconstres_t;
    198 
    199 struct _cups_dinfo_s			/* Destination capability and status
    200 					 * information */
    201 {
    202   int			version;	/* IPP version */
    203   const char		*uri;		/* Printer URI */
    204   char			*resource;	/* Resource path */
    205   ipp_t			*attrs;		/* Printer attributes */
    206   int			num_defaults;	/* Number of default options */
    207   cups_option_t		*defaults;	/* Default options */
    208   cups_array_t		*constraints;	/* Job constraints */
    209   cups_array_t		*resolvers;	/* Job resolvers */
    210   cups_array_t		*localizations;	/* Localization information */
    211   cups_array_t		*media_db;	/* Media database */
    212   _cups_media_db_t	min_size,	/* Minimum size */
    213 			max_size;	/* Maximum size */
    214   unsigned		cached_flags;	/* Flags used for cached media */
    215   cups_array_t		*cached_db;	/* Cache of media from last index/default */
    216   time_t		ready_time;	/* When xxx-ready attributes were last queried */
    217   ipp_t			*ready_attrs;	/* xxx-ready attributes */
    218   cups_array_t		*ready_db;	/* media[-col]-ready media database */
    219 };
    220 
    221 
    222 /*
    223  * Prototypes...
    224  */
    225 
    226 #  ifdef __APPLE__
    227 extern CFStringRef	_cupsAppleCopyDefaultPaperID(void);
    228 extern CFStringRef	_cupsAppleCopyDefaultPrinter(void);
    229 extern int		_cupsAppleGetUseLastPrinter(void);
    230 extern void		_cupsAppleSetDefaultPaperID(CFStringRef name);
    231 extern void		_cupsAppleSetDefaultPrinter(CFStringRef name);
    232 extern void		_cupsAppleSetUseLastPrinter(int uselast);
    233 #  endif /* __APPLE__ */
    234 
    235 extern char		*_cupsBufferGet(size_t size);
    236 extern void		_cupsBufferRelease(char *b);
    237 
    238 extern http_t		*_cupsConnect(void);
    239 extern char		*_cupsCreateDest(const char *name, const char *info, const char *device_id, const char *device_uri, char *uri, size_t urisize);
    240 extern int		_cupsGet1284Values(const char *device_id,
    241 			                   cups_option_t **values);
    242 extern const char	*_cupsGetDestResource(cups_dest_t *dest, char *resource,
    243 			                      size_t resourcesize);
    244 extern int		_cupsGetDests(http_t *http, ipp_op_t op,
    245 			              const char *name, cups_dest_t **dests,
    246 			              cups_ptype_t type, cups_ptype_t mask);
    247 extern const char	*_cupsGetPassword(const char *prompt);
    248 extern void		_cupsGlobalLock(void);
    249 extern _cups_globals_t	*_cupsGlobals(void);
    250 extern void		_cupsGlobalUnlock(void);
    251 #  ifdef HAVE_GSSAPI
    252 extern const char	*_cupsGSSServiceName(void);
    253 #  endif /* HAVE_GSSAPI */
    254 extern int		_cupsNextDelay(int current, int *previous);
    255 extern void		_cupsSetDefaults(void);
    256 extern void		_cupsSetError(ipp_status_t status, const char *message,
    257 			              int localize);
    258 extern void		_cupsSetHTTPError(http_status_t status);
    259 #  ifdef HAVE_GSSAPI
    260 extern int		_cupsSetNegotiateAuthString(http_t *http,
    261 			                            const char *method,
    262 						    const char *resource);
    263 #  endif /* HAVE_GSSAPI */
    264 extern char		*_cupsUserDefault(char *name, size_t namesize);
    265 
    266 
    267 /*
    268  * C++ magic...
    269  */
    270 
    271 #  ifdef __cplusplus
    272 }
    273 #  endif /* __cplusplus */
    274 #endif /* !_CUPS_CUPS_PRIVATE_H_ */
    275