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
43extern "C" {
44#  endif /* __cplusplus */
45
46
47/*
48 * Types...
49 */
50
51typedef 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
59typedef 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
172typedef 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
193typedef 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
199struct _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__
227extern CFStringRef	_cupsAppleCopyDefaultPaperID(void);
228extern CFStringRef	_cupsAppleCopyDefaultPrinter(void);
229extern int		_cupsAppleGetUseLastPrinter(void);
230extern void		_cupsAppleSetDefaultPaperID(CFStringRef name);
231extern void		_cupsAppleSetDefaultPrinter(CFStringRef name);
232extern void		_cupsAppleSetUseLastPrinter(int uselast);
233#  endif /* __APPLE__ */
234
235extern char		*_cupsBufferGet(size_t size);
236extern void		_cupsBufferRelease(char *b);
237
238extern http_t		*_cupsConnect(void);
239extern char		*_cupsCreateDest(const char *name, const char *info, const char *device_id, const char *device_uri, char *uri, size_t urisize);
240extern int		_cupsGet1284Values(const char *device_id,
241			                   cups_option_t **values);
242extern const char	*_cupsGetDestResource(cups_dest_t *dest, char *resource,
243			                      size_t resourcesize);
244extern 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);
247extern const char	*_cupsGetPassword(const char *prompt);
248extern void		_cupsGlobalLock(void);
249extern _cups_globals_t	*_cupsGlobals(void);
250extern void		_cupsGlobalUnlock(void);
251#  ifdef HAVE_GSSAPI
252extern const char	*_cupsGSSServiceName(void);
253#  endif /* HAVE_GSSAPI */
254extern int		_cupsNextDelay(int current, int *previous);
255extern void		_cupsSetDefaults(void);
256extern void		_cupsSetError(ipp_status_t status, const char *message,
257			              int localize);
258extern void		_cupsSetHTTPError(http_status_t status);
259#  ifdef HAVE_GSSAPI
260extern int		_cupsSetNegotiateAuthString(http_t *http,
261			                            const char *method,
262						    const char *resource);
263#  endif /* HAVE_GSSAPI */
264extern 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