• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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