xref: /aosp_15_r20/external/libcups/cups/http-private.h (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker  * Private HTTP definitions for CUPS.
3*5e7646d2SAndroid Build Coastguard Worker  *
4*5e7646d2SAndroid Build Coastguard Worker  * Copyright 2007-2018 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
6*5e7646d2SAndroid Build Coastguard Worker  *
7*5e7646d2SAndroid Build Coastguard Worker  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
8*5e7646d2SAndroid Build Coastguard Worker  * information.
9*5e7646d2SAndroid Build Coastguard Worker  */
10*5e7646d2SAndroid Build Coastguard Worker 
11*5e7646d2SAndroid Build Coastguard Worker #ifndef _CUPS_HTTP_PRIVATE_H_
12*5e7646d2SAndroid Build Coastguard Worker #  define _CUPS_HTTP_PRIVATE_H_
13*5e7646d2SAndroid Build Coastguard Worker 
14*5e7646d2SAndroid Build Coastguard Worker /*
15*5e7646d2SAndroid Build Coastguard Worker  * Include necessary headers...
16*5e7646d2SAndroid Build Coastguard Worker  */
17*5e7646d2SAndroid Build Coastguard Worker 
18*5e7646d2SAndroid Build Coastguard Worker #  include "config.h"
19*5e7646d2SAndroid Build Coastguard Worker #  include <cups/language.h>
20*5e7646d2SAndroid Build Coastguard Worker #  include <stddef.h>
21*5e7646d2SAndroid Build Coastguard Worker #  include <stdlib.h>
22*5e7646d2SAndroid Build Coastguard Worker 
23*5e7646d2SAndroid Build Coastguard Worker #  ifdef __sun
24*5e7646d2SAndroid Build Coastguard Worker #    include <sys/select.h>
25*5e7646d2SAndroid Build Coastguard Worker #  endif /* __sun */
26*5e7646d2SAndroid Build Coastguard Worker 
27*5e7646d2SAndroid Build Coastguard Worker #  include <limits.h>
28*5e7646d2SAndroid Build Coastguard Worker #  ifdef _WIN32
29*5e7646d2SAndroid Build Coastguard Worker #    define _WINSOCK_DEPRECATED_NO_WARNINGS 1
30*5e7646d2SAndroid Build Coastguard Worker #    include <io.h>
31*5e7646d2SAndroid Build Coastguard Worker #    include <winsock2.h>
32*5e7646d2SAndroid Build Coastguard Worker #    define CUPS_SOCAST (const char *)
33*5e7646d2SAndroid Build Coastguard Worker #  else
34*5e7646d2SAndroid Build Coastguard Worker #    include <unistd.h>
35*5e7646d2SAndroid Build Coastguard Worker #    include <fcntl.h>
36*5e7646d2SAndroid Build Coastguard Worker #    include <sys/socket.h>
37*5e7646d2SAndroid Build Coastguard Worker #    define CUPS_SOCAST
38*5e7646d2SAndroid Build Coastguard Worker #  endif /* _WIN32 */
39*5e7646d2SAndroid Build Coastguard Worker 
40*5e7646d2SAndroid Build Coastguard Worker #  ifdef HAVE_GSSAPI
41*5e7646d2SAndroid Build Coastguard Worker #    ifdef HAVE_GSS_GSSAPI_H
42*5e7646d2SAndroid Build Coastguard Worker #      include <GSS/gssapi.h>
43*5e7646d2SAndroid Build Coastguard Worker #    elif defined(HAVE_GSSAPI_GSSAPI_H)
44*5e7646d2SAndroid Build Coastguard Worker #      include <gssapi/gssapi.h>
45*5e7646d2SAndroid Build Coastguard Worker #    elif defined(HAVE_GSSAPI_H)
46*5e7646d2SAndroid Build Coastguard Worker #      include <gssapi.h>
47*5e7646d2SAndroid Build Coastguard Worker #    endif /* HAVE_GSS_GSSAPI_H */
48*5e7646d2SAndroid Build Coastguard Worker #    ifndef HAVE_GSS_C_NT_HOSTBASED_SERVICE
49*5e7646d2SAndroid Build Coastguard Worker #      define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name
50*5e7646d2SAndroid Build Coastguard Worker #    endif /* !HAVE_GSS_C_NT_HOSTBASED_SERVICE */
51*5e7646d2SAndroid Build Coastguard Worker #  endif /* HAVE_GSSAPI */
52*5e7646d2SAndroid Build Coastguard Worker 
53*5e7646d2SAndroid Build Coastguard Worker #  ifdef HAVE_AUTHORIZATION_H
54*5e7646d2SAndroid Build Coastguard Worker #    include <Security/Authorization.h>
55*5e7646d2SAndroid Build Coastguard Worker #  endif /* HAVE_AUTHORIZATION_H */
56*5e7646d2SAndroid Build Coastguard Worker 
57*5e7646d2SAndroid Build Coastguard Worker #  if defined(__APPLE__) && !defined(_SOCKLEN_T)
58*5e7646d2SAndroid Build Coastguard Worker /*
59*5e7646d2SAndroid Build Coastguard Worker  * macOS 10.2.x does not define socklen_t, and in fact uses an int instead of
60*5e7646d2SAndroid Build Coastguard Worker  * unsigned type for length values...
61*5e7646d2SAndroid Build Coastguard Worker  */
62*5e7646d2SAndroid Build Coastguard Worker 
63*5e7646d2SAndroid Build Coastguard Worker typedef int socklen_t;
64*5e7646d2SAndroid Build Coastguard Worker #  endif /* __APPLE__ && !_SOCKLEN_T */
65*5e7646d2SAndroid Build Coastguard Worker 
66*5e7646d2SAndroid Build Coastguard Worker #  include <cups/http.h>
67*5e7646d2SAndroid Build Coastguard Worker #  include "ipp-private.h"
68*5e7646d2SAndroid Build Coastguard Worker 
69*5e7646d2SAndroid Build Coastguard Worker #  ifdef HAVE_GNUTLS
70*5e7646d2SAndroid Build Coastguard Worker #    include <gnutls/gnutls.h>
71*5e7646d2SAndroid Build Coastguard Worker #    include <gnutls/x509.h>
72*5e7646d2SAndroid Build Coastguard Worker #  elif defined(HAVE_CDSASSL)
73*5e7646d2SAndroid Build Coastguard Worker #    include <CoreFoundation/CoreFoundation.h>
74*5e7646d2SAndroid Build Coastguard Worker #    include <Security/Security.h>
75*5e7646d2SAndroid Build Coastguard Worker #    include <Security/SecureTransport.h>
76*5e7646d2SAndroid Build Coastguard Worker #    ifdef HAVE_SECITEM_H
77*5e7646d2SAndroid Build Coastguard Worker #      include <Security/SecItem.h>
78*5e7646d2SAndroid Build Coastguard Worker #    endif /* HAVE_SECITEM_H */
79*5e7646d2SAndroid Build Coastguard Worker #    ifdef HAVE_SECCERTIFICATE_H
80*5e7646d2SAndroid Build Coastguard Worker #      include <Security/SecCertificate.h>
81*5e7646d2SAndroid Build Coastguard Worker #      include <Security/SecIdentity.h>
82*5e7646d2SAndroid Build Coastguard Worker #    endif /* HAVE_SECCERTIFICATE_H */
83*5e7646d2SAndroid Build Coastguard Worker #  elif defined(HAVE_SSPISSL)
84*5e7646d2SAndroid Build Coastguard Worker #    include <wincrypt.h>
85*5e7646d2SAndroid Build Coastguard Worker #    include <wintrust.h>
86*5e7646d2SAndroid Build Coastguard Worker #    include <schannel.h>
87*5e7646d2SAndroid Build Coastguard Worker #    define SECURITY_WIN32
88*5e7646d2SAndroid Build Coastguard Worker #    include <security.h>
89*5e7646d2SAndroid Build Coastguard Worker #    include <sspi.h>
90*5e7646d2SAndroid Build Coastguard Worker #  endif /* HAVE_GNUTLS */
91*5e7646d2SAndroid Build Coastguard Worker 
92*5e7646d2SAndroid Build Coastguard Worker #  ifndef _WIN32
93*5e7646d2SAndroid Build Coastguard Worker #    include <net/if.h>
94*5e7646d2SAndroid Build Coastguard Worker #    include <resolv.h>
95*5e7646d2SAndroid Build Coastguard Worker #    ifdef HAVE_GETIFADDRS
96*5e7646d2SAndroid Build Coastguard Worker #      include <ifaddrs.h>
97*5e7646d2SAndroid Build Coastguard Worker #    else
98*5e7646d2SAndroid Build Coastguard Worker #      include <sys/ioctl.h>
99*5e7646d2SAndroid Build Coastguard Worker #      ifdef HAVE_SYS_SOCKIO_H
100*5e7646d2SAndroid Build Coastguard Worker #        include <sys/sockio.h>
101*5e7646d2SAndroid Build Coastguard Worker #      endif /* HAVE_SYS_SOCKIO_H */
102*5e7646d2SAndroid Build Coastguard Worker #    endif /* HAVE_GETIFADDRS */
103*5e7646d2SAndroid Build Coastguard Worker #  endif /* !_WIN32 */
104*5e7646d2SAndroid Build Coastguard Worker 
105*5e7646d2SAndroid Build Coastguard Worker 
106*5e7646d2SAndroid Build Coastguard Worker /*
107*5e7646d2SAndroid Build Coastguard Worker  * C++ magic...
108*5e7646d2SAndroid Build Coastguard Worker  */
109*5e7646d2SAndroid Build Coastguard Worker 
110*5e7646d2SAndroid Build Coastguard Worker #  ifdef __cplusplus
111*5e7646d2SAndroid Build Coastguard Worker extern "C" {
112*5e7646d2SAndroid Build Coastguard Worker #  endif /* __cplusplus */
113*5e7646d2SAndroid Build Coastguard Worker 
114*5e7646d2SAndroid Build Coastguard Worker 
115*5e7646d2SAndroid Build Coastguard Worker /*
116*5e7646d2SAndroid Build Coastguard Worker  * Constants...
117*5e7646d2SAndroid Build Coastguard Worker  */
118*5e7646d2SAndroid Build Coastguard Worker 
119*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_MAX_SBUFFER	65536	/* Size of (de)compression buffer */
120*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_RESOLVE_DEFAULT	0	/* Just resolve with default options */
121*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_RESOLVE_STDERR	1	/* Log resolve progress to stderr */
122*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_RESOLVE_FQDN	2	/* Resolve to a FQDN */
123*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_RESOLVE_FAXOUT	4	/* Resolve FaxOut service? */
124*5e7646d2SAndroid Build Coastguard Worker 
125*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_TLS_NONE	0	/* No TLS options */
126*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_TLS_ALLOW_RC4	1	/* Allow RC4 cipher suites */
127*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_TLS_ALLOW_DH	2	/* Allow DH/DHE key negotiation */
128*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_TLS_DENY_CBC	4	/* Deny CBC cipher suites */
129*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_TLS_SET_DEFAULT 128     /* Setting the default TLS options */
130*5e7646d2SAndroid Build Coastguard Worker 
131*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_TLS_SSL3	0	/* Min/max version is SSL/3.0 */
132*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_TLS_1_0		1	/* Min/max version is TLS/1.0 */
133*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_TLS_1_1		2	/* Min/max version is TLS/1.1 */
134*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_TLS_1_2		3	/* Min/max version is TLS/1.2 */
135*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_TLS_1_3		4	/* Min/max version is TLS/1.3 */
136*5e7646d2SAndroid Build Coastguard Worker #  define _HTTP_TLS_MAX		5	/* Highest known TLS version */
137*5e7646d2SAndroid Build Coastguard Worker 
138*5e7646d2SAndroid Build Coastguard Worker 
139*5e7646d2SAndroid Build Coastguard Worker /*
140*5e7646d2SAndroid Build Coastguard Worker  * Types and functions for SSL support...
141*5e7646d2SAndroid Build Coastguard Worker  */
142*5e7646d2SAndroid Build Coastguard Worker 
143*5e7646d2SAndroid Build Coastguard Worker #  ifdef HAVE_GNUTLS
144*5e7646d2SAndroid Build Coastguard Worker /*
145*5e7646d2SAndroid Build Coastguard Worker  * The GNU TLS library is more of a "bare metal" SSL/TLS library...
146*5e7646d2SAndroid Build Coastguard Worker  */
147*5e7646d2SAndroid Build Coastguard Worker 
148*5e7646d2SAndroid Build Coastguard Worker typedef gnutls_session_t http_tls_t;
149*5e7646d2SAndroid Build Coastguard Worker typedef gnutls_certificate_credentials_t *http_tls_credentials_t;
150*5e7646d2SAndroid Build Coastguard Worker 
151*5e7646d2SAndroid Build Coastguard Worker #  elif defined(HAVE_CDSASSL)
152*5e7646d2SAndroid Build Coastguard Worker /*
153*5e7646d2SAndroid Build Coastguard Worker  * Darwin's Security framework provides its own SSL/TLS context structure
154*5e7646d2SAndroid Build Coastguard Worker  * for its IO and protocol management...
155*5e7646d2SAndroid Build Coastguard Worker  */
156*5e7646d2SAndroid Build Coastguard Worker 
157*5e7646d2SAndroid Build Coastguard Worker typedef SSLContextRef	http_tls_t;
158*5e7646d2SAndroid Build Coastguard Worker typedef CFArrayRef	http_tls_credentials_t;
159*5e7646d2SAndroid Build Coastguard Worker 
160*5e7646d2SAndroid Build Coastguard Worker #  elif defined(HAVE_SSPISSL)
161*5e7646d2SAndroid Build Coastguard Worker /*
162*5e7646d2SAndroid Build Coastguard Worker  * Windows' SSPI library gets a CUPS wrapper...
163*5e7646d2SAndroid Build Coastguard Worker  */
164*5e7646d2SAndroid Build Coastguard Worker 
165*5e7646d2SAndroid Build Coastguard Worker typedef struct _http_sspi_s		/**** SSPI/SSL data structure ****/
166*5e7646d2SAndroid Build Coastguard Worker {
167*5e7646d2SAndroid Build Coastguard Worker   CredHandle	creds;			/* Credentials */
168*5e7646d2SAndroid Build Coastguard Worker   CtxtHandle	context;		/* SSL context */
169*5e7646d2SAndroid Build Coastguard Worker   BOOL		contextInitialized;	/* Is context init'd? */
170*5e7646d2SAndroid Build Coastguard Worker   SecPkgContext_StreamSizes streamSizes;/* SSL data stream sizes */
171*5e7646d2SAndroid Build Coastguard Worker   BYTE		*decryptBuffer;		/* Data pre-decryption*/
172*5e7646d2SAndroid Build Coastguard Worker   size_t	decryptBufferLength;	/* Length of decrypt buffer */
173*5e7646d2SAndroid Build Coastguard Worker   size_t	decryptBufferUsed;	/* Bytes used in buffer */
174*5e7646d2SAndroid Build Coastguard Worker   BYTE		*readBuffer;		/* Data post-decryption */
175*5e7646d2SAndroid Build Coastguard Worker   int		readBufferLength;	/* Length of read buffer */
176*5e7646d2SAndroid Build Coastguard Worker   int		readBufferUsed;		/* Bytes used in buffer */
177*5e7646d2SAndroid Build Coastguard Worker   BYTE		*writeBuffer;		/* Data pre-encryption */
178*5e7646d2SAndroid Build Coastguard Worker   int		writeBufferLength;	/* Length of write buffer */
179*5e7646d2SAndroid Build Coastguard Worker   PCCERT_CONTEXT localCert,		/* Local certificate */
180*5e7646d2SAndroid Build Coastguard Worker 		remoteCert;		/* Remote (peer's) certificate */
181*5e7646d2SAndroid Build Coastguard Worker   char		error[256];		/* Most recent error message */
182*5e7646d2SAndroid Build Coastguard Worker } _http_sspi_t;
183*5e7646d2SAndroid Build Coastguard Worker typedef _http_sspi_t *http_tls_t;
184*5e7646d2SAndroid Build Coastguard Worker typedef PCCERT_CONTEXT http_tls_credentials_t;
185*5e7646d2SAndroid Build Coastguard Worker 
186*5e7646d2SAndroid Build Coastguard Worker #  else
187*5e7646d2SAndroid Build Coastguard Worker /*
188*5e7646d2SAndroid Build Coastguard Worker  * Otherwise define stub types since we have no SSL support...
189*5e7646d2SAndroid Build Coastguard Worker  */
190*5e7646d2SAndroid Build Coastguard Worker 
191*5e7646d2SAndroid Build Coastguard Worker typedef void *http_tls_t;
192*5e7646d2SAndroid Build Coastguard Worker typedef void *http_tls_credentials_t;
193*5e7646d2SAndroid Build Coastguard Worker #  endif /* HAVE_GNUTLS */
194*5e7646d2SAndroid Build Coastguard Worker 
195*5e7646d2SAndroid Build Coastguard Worker typedef enum _http_coding_e		/**** HTTP content coding enumeration ****/
196*5e7646d2SAndroid Build Coastguard Worker {
197*5e7646d2SAndroid Build Coastguard Worker   _HTTP_CODING_IDENTITY,		/* No content coding */
198*5e7646d2SAndroid Build Coastguard Worker   _HTTP_CODING_GZIP,			/* LZ77+gzip decompression */
199*5e7646d2SAndroid Build Coastguard Worker   _HTTP_CODING_DEFLATE,			/* LZ77+zlib compression */
200*5e7646d2SAndroid Build Coastguard Worker   _HTTP_CODING_GUNZIP,			/* LZ77+gzip decompression */
201*5e7646d2SAndroid Build Coastguard Worker   _HTTP_CODING_INFLATE			/* LZ77+zlib decompression */
202*5e7646d2SAndroid Build Coastguard Worker } _http_coding_t;
203*5e7646d2SAndroid Build Coastguard Worker 
204*5e7646d2SAndroid Build Coastguard Worker typedef enum _http_mode_e		/**** HTTP mode enumeration ****/
205*5e7646d2SAndroid Build Coastguard Worker {
206*5e7646d2SAndroid Build Coastguard Worker   _HTTP_MODE_CLIENT,			/* Client connected to server */
207*5e7646d2SAndroid Build Coastguard Worker   _HTTP_MODE_SERVER			/* Server connected (accepted) from client */
208*5e7646d2SAndroid Build Coastguard Worker } _http_mode_t;
209*5e7646d2SAndroid Build Coastguard Worker 
210*5e7646d2SAndroid Build Coastguard Worker #  ifndef _HTTP_NO_PRIVATE
211*5e7646d2SAndroid Build Coastguard Worker struct _http_s				/**** HTTP connection structure ****/
212*5e7646d2SAndroid Build Coastguard Worker {
213*5e7646d2SAndroid Build Coastguard Worker   int			fd;		/* File descriptor for this socket */
214*5e7646d2SAndroid Build Coastguard Worker   int			blocking;	/* To block or not to block */
215*5e7646d2SAndroid Build Coastguard Worker   int			error;		/* Last error on read */
216*5e7646d2SAndroid Build Coastguard Worker   time_t		activity;	/* Time since last read/write */
217*5e7646d2SAndroid Build Coastguard Worker   http_state_t		state;		/* State of client */
218*5e7646d2SAndroid Build Coastguard Worker   http_status_t		status;		/* Status of last request */
219*5e7646d2SAndroid Build Coastguard Worker   http_version_t	version;	/* Protocol version */
220*5e7646d2SAndroid Build Coastguard Worker   http_keepalive_t	keep_alive;	/* Keep-alive supported? */
221*5e7646d2SAndroid Build Coastguard Worker   struct sockaddr_in	_hostaddr;	/* Address of connected host (deprecated) */
222*5e7646d2SAndroid Build Coastguard Worker   char			hostname[HTTP_MAX_HOST],
223*5e7646d2SAndroid Build Coastguard Worker   					/* Name of connected host */
224*5e7646d2SAndroid Build Coastguard Worker 			_fields[HTTP_FIELD_ACCEPT_ENCODING][HTTP_MAX_VALUE];
225*5e7646d2SAndroid Build Coastguard Worker 					/* Field values up to Accept-Encoding (deprecated) */
226*5e7646d2SAndroid Build Coastguard Worker   char			*data;		/* Pointer to data buffer */
227*5e7646d2SAndroid Build Coastguard Worker   http_encoding_t	data_encoding;	/* Chunked or not */
228*5e7646d2SAndroid Build Coastguard Worker   int			_data_remaining;/* Number of bytes left (deprecated) */
229*5e7646d2SAndroid Build Coastguard Worker   int			used;		/* Number of bytes used in buffer */
230*5e7646d2SAndroid Build Coastguard Worker   char			buffer[HTTP_MAX_BUFFER];
231*5e7646d2SAndroid Build Coastguard Worker 					/* Buffer for incoming data */
232*5e7646d2SAndroid Build Coastguard Worker   int			_auth_type;	/* Authentication in use (deprecated) */
233*5e7646d2SAndroid Build Coastguard Worker   unsigned char		_md5_state[88];	/* MD5 state (deprecated) */
234*5e7646d2SAndroid Build Coastguard Worker   char			nonce[HTTP_MAX_VALUE];
235*5e7646d2SAndroid Build Coastguard Worker 					/* Nonce value */
236*5e7646d2SAndroid Build Coastguard Worker   unsigned		nonce_count;	/* Nonce count */
237*5e7646d2SAndroid Build Coastguard Worker   http_tls_t		tls;		/* TLS state information */
238*5e7646d2SAndroid Build Coastguard Worker   http_encryption_t	encryption;	/* Encryption requirements */
239*5e7646d2SAndroid Build Coastguard Worker 
240*5e7646d2SAndroid Build Coastguard Worker   /**** New in CUPS 1.1.19 ****/
241*5e7646d2SAndroid Build Coastguard Worker   fd_set		*input_set;	/* select() set for httpWait() (deprecated) */
242*5e7646d2SAndroid Build Coastguard Worker   http_status_t		expect;		/* Expect: header */
243*5e7646d2SAndroid Build Coastguard Worker   char			*cookie;	/* Cookie value(s) */
244*5e7646d2SAndroid Build Coastguard Worker 
245*5e7646d2SAndroid Build Coastguard Worker   /**** New in CUPS 1.1.20 ****/
246*5e7646d2SAndroid Build Coastguard Worker   char			_authstring[HTTP_MAX_VALUE],
247*5e7646d2SAndroid Build Coastguard Worker 					/* Current Authorization value (deprecated) */
248*5e7646d2SAndroid Build Coastguard Worker 			userpass[HTTP_MAX_VALUE];
249*5e7646d2SAndroid Build Coastguard Worker 					/* Username:password string */
250*5e7646d2SAndroid Build Coastguard Worker   int			digest_tries;	/* Number of tries for digest auth */
251*5e7646d2SAndroid Build Coastguard Worker 
252*5e7646d2SAndroid Build Coastguard Worker   /**** New in CUPS 1.2 ****/
253*5e7646d2SAndroid Build Coastguard Worker   off_t			data_remaining;	/* Number of bytes left */
254*5e7646d2SAndroid Build Coastguard Worker   http_addr_t		*hostaddr;	/* Current host address and port */
255*5e7646d2SAndroid Build Coastguard Worker   http_addrlist_t	*addrlist;	/* List of valid addresses */
256*5e7646d2SAndroid Build Coastguard Worker   char			wbuffer[HTTP_MAX_BUFFER];
257*5e7646d2SAndroid Build Coastguard Worker 					/* Buffer for outgoing data */
258*5e7646d2SAndroid Build Coastguard Worker   int			wused;		/* Write buffer bytes used */
259*5e7646d2SAndroid Build Coastguard Worker 
260*5e7646d2SAndroid Build Coastguard Worker   /**** New in CUPS 1.3 ****/
261*5e7646d2SAndroid Build Coastguard Worker   char			*authstring;	/* Current Authorization field */
262*5e7646d2SAndroid Build Coastguard Worker #  ifdef HAVE_GSSAPI
263*5e7646d2SAndroid Build Coastguard Worker   gss_OID 		gssmech;	/* Authentication mechanism */
264*5e7646d2SAndroid Build Coastguard Worker   gss_ctx_id_t		gssctx;		/* Authentication context */
265*5e7646d2SAndroid Build Coastguard Worker   gss_name_t		gssname;	/* Authentication server name */
266*5e7646d2SAndroid Build Coastguard Worker #  endif /* HAVE_GSSAPI */
267*5e7646d2SAndroid Build Coastguard Worker #  ifdef HAVE_AUTHORIZATION_H
268*5e7646d2SAndroid Build Coastguard Worker   AuthorizationRef	auth_ref;	/* Authorization ref */
269*5e7646d2SAndroid Build Coastguard Worker #  endif /* HAVE_AUTHORIZATION_H */
270*5e7646d2SAndroid Build Coastguard Worker 
271*5e7646d2SAndroid Build Coastguard Worker   /**** New in CUPS 1.5 ****/
272*5e7646d2SAndroid Build Coastguard Worker   http_tls_credentials_t tls_credentials;
273*5e7646d2SAndroid Build Coastguard Worker 					/* TLS credentials */
274*5e7646d2SAndroid Build Coastguard Worker   http_timeout_cb_t	timeout_cb;	/* Timeout callback */
275*5e7646d2SAndroid Build Coastguard Worker   void			*timeout_data;	/* User data pointer */
276*5e7646d2SAndroid Build Coastguard Worker   double		timeout_value;	/* Timeout in seconds */
277*5e7646d2SAndroid Build Coastguard Worker   int			wait_value;	/* httpWait value for timeout */
278*5e7646d2SAndroid Build Coastguard Worker #  ifdef HAVE_GSSAPI
279*5e7646d2SAndroid Build Coastguard Worker   char			gsshost[256];	/* Hostname for Kerberos */
280*5e7646d2SAndroid Build Coastguard Worker #  endif /* HAVE_GSSAPI */
281*5e7646d2SAndroid Build Coastguard Worker 
282*5e7646d2SAndroid Build Coastguard Worker   /**** New in CUPS 1.7 ****/
283*5e7646d2SAndroid Build Coastguard Worker   int			tls_upgrade;	/* Non-zero if we are doing an upgrade */
284*5e7646d2SAndroid Build Coastguard Worker   _http_mode_t		mode;		/* _HTTP_MODE_CLIENT or _HTTP_MODE_SERVER */
285*5e7646d2SAndroid Build Coastguard Worker #  ifdef HAVE_LIBZ
286*5e7646d2SAndroid Build Coastguard Worker   _http_coding_t	coding;		/* _HTTP_CODING_xxx */
287*5e7646d2SAndroid Build Coastguard Worker   void			*stream;	/* (De)compression stream */
288*5e7646d2SAndroid Build Coastguard Worker   unsigned char		*sbuffer;	/* (De)compression buffer */
289*5e7646d2SAndroid Build Coastguard Worker #  endif /* HAVE_LIBZ */
290*5e7646d2SAndroid Build Coastguard Worker 
291*5e7646d2SAndroid Build Coastguard Worker   /**** New in CUPS 2.2.9 ****/
292*5e7646d2SAndroid Build Coastguard Worker   char			algorithm[65],	/* Algorithm from WWW-Authenticate */
293*5e7646d2SAndroid Build Coastguard Worker 			nextnonce[HTTP_MAX_VALUE],
294*5e7646d2SAndroid Build Coastguard Worker 					/* Next nonce value from Authentication-Info */
295*5e7646d2SAndroid Build Coastguard Worker 			opaque[HTTP_MAX_VALUE],
296*5e7646d2SAndroid Build Coastguard Worker 					/* Opaque value from WWW-Authenticate */
297*5e7646d2SAndroid Build Coastguard Worker 			realm[HTTP_MAX_VALUE];
298*5e7646d2SAndroid Build Coastguard Worker 					/* Realm from WWW-Authenticate */
299*5e7646d2SAndroid Build Coastguard Worker 
300*5e7646d2SAndroid Build Coastguard Worker   /**** New in CUPS 2.3 ****/
301*5e7646d2SAndroid Build Coastguard Worker   char			*fields[HTTP_FIELD_MAX],
302*5e7646d2SAndroid Build Coastguard Worker 					/* Allocated field values */
303*5e7646d2SAndroid Build Coastguard Worker   			*default_fields[HTTP_FIELD_MAX];
304*5e7646d2SAndroid Build Coastguard Worker 					/* Default field values, if any */
305*5e7646d2SAndroid Build Coastguard Worker };
306*5e7646d2SAndroid Build Coastguard Worker #  endif /* !_HTTP_NO_PRIVATE */
307*5e7646d2SAndroid Build Coastguard Worker 
308*5e7646d2SAndroid Build Coastguard Worker 
309*5e7646d2SAndroid Build Coastguard Worker /*
310*5e7646d2SAndroid Build Coastguard Worker  * Some OS's don't have hstrerror(), most notably Solaris...
311*5e7646d2SAndroid Build Coastguard Worker  */
312*5e7646d2SAndroid Build Coastguard Worker 
313*5e7646d2SAndroid Build Coastguard Worker #  ifndef HAVE_HSTRERROR
314*5e7646d2SAndroid Build Coastguard Worker extern const char *_cups_hstrerror(int error);
315*5e7646d2SAndroid Build Coastguard Worker #    define hstrerror _cups_hstrerror
316*5e7646d2SAndroid Build Coastguard Worker #  endif /* !HAVE_HSTRERROR */
317*5e7646d2SAndroid Build Coastguard Worker 
318*5e7646d2SAndroid Build Coastguard Worker 
319*5e7646d2SAndroid Build Coastguard Worker /*
320*5e7646d2SAndroid Build Coastguard Worker  * Prototypes...
321*5e7646d2SAndroid Build Coastguard Worker  */
322*5e7646d2SAndroid Build Coastguard Worker 
323*5e7646d2SAndroid Build Coastguard Worker extern void		_httpAddrSetPort(http_addr_t *addr, int port) _CUPS_PRIVATE;
324*5e7646d2SAndroid Build Coastguard Worker extern http_tls_credentials_t
325*5e7646d2SAndroid Build Coastguard Worker 			_httpCreateCredentials(cups_array_t *credentials) _CUPS_PRIVATE;
326*5e7646d2SAndroid Build Coastguard Worker extern char		*_httpDecodeURI(char *dst, const char *src,
327*5e7646d2SAndroid Build Coastguard Worker 			                size_t dstsize) _CUPS_PRIVATE;
328*5e7646d2SAndroid Build Coastguard Worker extern void		_httpDisconnect(http_t *http) _CUPS_PRIVATE;
329*5e7646d2SAndroid Build Coastguard Worker extern char		*_httpEncodeURI(char *dst, const char *src,
330*5e7646d2SAndroid Build Coastguard Worker 			                size_t dstsize) _CUPS_PRIVATE;
331*5e7646d2SAndroid Build Coastguard Worker extern void		_httpFreeCredentials(http_tls_credentials_t credentials) _CUPS_PRIVATE;
332*5e7646d2SAndroid Build Coastguard Worker extern const char	*_httpResolveURI(const char *uri, char *resolved_uri,
333*5e7646d2SAndroid Build Coastguard Worker 			                 size_t resolved_size, int options,
334*5e7646d2SAndroid Build Coastguard Worker 					 int (*cb)(void *context),
335*5e7646d2SAndroid Build Coastguard Worker 					 void *context) _CUPS_PRIVATE;
336*5e7646d2SAndroid Build Coastguard Worker extern int		_httpSetDigestAuthString(http_t *http, const char *nonce, const char *method, const char *resource) _CUPS_PRIVATE;
337*5e7646d2SAndroid Build Coastguard Worker extern const char	*_httpStatus(cups_lang_t *lang, http_status_t status) _CUPS_PRIVATE;
338*5e7646d2SAndroid Build Coastguard Worker extern void		_httpTLSInitialize(void) _CUPS_PRIVATE;
339*5e7646d2SAndroid Build Coastguard Worker extern size_t		_httpTLSPending(http_t *http) _CUPS_PRIVATE;
340*5e7646d2SAndroid Build Coastguard Worker extern int		_httpTLSRead(http_t *http, char *buf, int len) _CUPS_PRIVATE;
341*5e7646d2SAndroid Build Coastguard Worker extern void		_httpTLSSetOptions(int options, int min_version, int max_version) _CUPS_PRIVATE;
342*5e7646d2SAndroid Build Coastguard Worker extern int		_httpTLSStart(http_t *http) _CUPS_PRIVATE;
343*5e7646d2SAndroid Build Coastguard Worker extern void		_httpTLSStop(http_t *http) _CUPS_PRIVATE;
344*5e7646d2SAndroid Build Coastguard Worker extern int		_httpTLSWrite(http_t *http, const char *buf, int len) _CUPS_PRIVATE;
345*5e7646d2SAndroid Build Coastguard Worker extern int		_httpUpdate(http_t *http, http_status_t *status) _CUPS_PRIVATE;
346*5e7646d2SAndroid Build Coastguard Worker extern int		_httpWait(http_t *http, int msec, int usessl) _CUPS_PRIVATE;
347*5e7646d2SAndroid Build Coastguard Worker 
348*5e7646d2SAndroid Build Coastguard Worker 
349*5e7646d2SAndroid Build Coastguard Worker /*
350*5e7646d2SAndroid Build Coastguard Worker  * C++ magic...
351*5e7646d2SAndroid Build Coastguard Worker  */
352*5e7646d2SAndroid Build Coastguard Worker 
353*5e7646d2SAndroid Build Coastguard Worker #  ifdef __cplusplus
354*5e7646d2SAndroid Build Coastguard Worker }
355*5e7646d2SAndroid Build Coastguard Worker #  endif /* __cplusplus */
356*5e7646d2SAndroid Build Coastguard Worker 
357*5e7646d2SAndroid Build Coastguard Worker #endif /* !_CUPS_HTTP_PRIVATE_H_ */
358