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