125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Private HTTP definitions for CUPS. 325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * 425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Copyright 2007-2016 by Apple Inc. 525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Copyright 1997-2007 by Easy Software Products, all rights reserved. 625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * 725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * These coded instructions, statements, and computer programs are the 825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * property of Apple Inc. and are protected by Federal copyright 925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * law. Distribution and use rights are outlined in the file "LICENSE.txt" 1025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * which should have been included with this file. If this file is 111fa6c247571d74dfd48aeb585c950ff095d115cdPhilip P. Moltmann * missing or damaged, see the license at "http://www.cups.org/". 1225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * 1325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * This file is subject to the Apple OS-Developed Software exception. 1425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 1525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 1625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#ifndef _CUPS_HTTP_PRIVATE_H_ 1725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# define _CUPS_HTTP_PRIVATE_H_ 1825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 1925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 2025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Include necessary headers... 2125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 2225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 2325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include "config.h" 2425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <cups/language.h> 2525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <stddef.h> 2625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <stdlib.h> 2725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 2825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef __sun 2925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <sys/select.h> 3025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* __sun */ 3125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 3225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <limits.h> 3325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef WIN32 3425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <io.h> 3525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <winsock2.h> 3625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# define CUPS_SOCAST (const char *) 3725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# else 3825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <unistd.h> 3925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <fcntl.h> 4025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <sys/socket.h> 4125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# define CUPS_SOCAST 4225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* WIN32 */ 4325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 4425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_GSSAPI 4525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_GSS_GSSAPI_H 4625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <GSS/gssapi.h> 4725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# elif defined(HAVE_GSSAPI_GSSAPI_H) 4825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <gssapi/gssapi.h> 4925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# elif defined(HAVE_GSSAPI_H) 5025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <gssapi.h> 5125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_GSS_GSSAPI_H */ 5225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifndef HAVE_GSS_C_NT_HOSTBASED_SERVICE 5325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name 5425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* !HAVE_GSS_C_NT_HOSTBASED_SERVICE */ 5525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_GSSAPI */ 5625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 5725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_AUTHORIZATION_H 5825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <Security/Authorization.h> 5925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_AUTHORIZATION_H */ 6025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 6125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# if defined(__APPLE__) && !defined(_SOCKLEN_T) 6225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 6325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * macOS 10.2.x does not define socklen_t, and in fact uses an int instead of 6425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * unsigned type for length values... 6525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 6625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 6725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef int socklen_t; 6825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* __APPLE__ && !_SOCKLEN_T */ 6925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 7025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <cups/http.h> 7125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include "md5-private.h" 7225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include "ipp-private.h" 7325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 7425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_GNUTLS 7525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <gnutls/gnutls.h> 7625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <gnutls/x509.h> 7725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# elif defined(HAVE_CDSASSL) 7825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <CoreFoundation/CoreFoundation.h> 7925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <Security/Security.h> 8025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <Security/SecureTransport.h> 8125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_SECURETRANSPORTPRIV_H 8225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <Security/SecureTransportPriv.h> 8325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_SECURETRANSPORTPRIV_H */ 8425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_SECITEM_H 8525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <Security/SecItem.h> 8625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_SECITEM_H */ 8725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_SECBASEPRIV_H 8825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <Security/SecBasePriv.h> 8925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_SECBASEPRIV_H */ 9025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_SECCERTIFICATE_H 9125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <Security/SecCertificate.h> 9225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <Security/SecIdentity.h> 9325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_SECCERTIFICATE_H */ 9425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_SECCERTIFICATEPRIV_H 9525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <Security/SecCertificatePriv.h> 9625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# else 9725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef __cplusplus 9825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern "C" { 9925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* __cplusplus */ 10025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifndef _SECURITY_VERSION_GREATER_THAN_57610_ 10125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef CF_OPTIONS(uint32_t, SecKeyUsage) { 10225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann kSecKeyUsageAll = 0x7FFFFFFF 10325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann}; 10425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* !_SECURITY_VERSION_GREATER_THAN_57610_ */ 10525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const void * kSecCSRChallengePassword; 10625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const void * kSecSubjectAltName; 10725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const void * kSecCertificateKeyUsage; 10825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const void * kSecCSRBasicContraintsPathLen; 10925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const void * kSecCertificateExtensions; 11025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const void * kSecCertificateExtensionsEncoded; 11125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const void * kSecOidCommonName; 11225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const void * kSecOidCountryName; 11325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const void * kSecOidStateProvinceName; 11425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const void * kSecOidLocalityName; 11525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const void * kSecOidOrganization; 11625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const void * kSecOidOrganizationalUnit; 11725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern SecCertificateRef SecCertificateCreateWithBytes(CFAllocatorRef allocator, const UInt8 *bytes, CFIndex length); 11825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern bool SecCertificateIsValid(SecCertificateRef certificate, CFAbsoluteTime verifyTime); 11925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern CFAbsoluteTime SecCertificateNotValidAfter(SecCertificateRef certificate); 12025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern SecCertificateRef SecGenerateSelfSignedCertificate(CFArrayRef subject, CFDictionaryRef parameters, SecKeyRef publicKey, SecKeyRef privateKey); 12125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern SecIdentityRef SecIdentityCreate(CFAllocatorRef allocator, SecCertificateRef certificate, SecKeyRef privateKey); 12225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef __cplusplus 12325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann} 12425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* __cplusplus */ 12525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_SECCERTIFICATEPRIV_H */ 12625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_SECITEMPRIV_H 12725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <Security/SecItemPriv.h> 12825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_SECITEMPRIV_H */ 12925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_SECIDENTITYSEARCHPRIV_H 13025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <Security/SecIdentitySearchPriv.h> 13125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_SECIDENTITYSEARCHPRIV_H */ 13225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_SECPOLICYPRIV_H 13325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <Security/SecPolicyPriv.h> 13425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_SECPOLICYPRIV_H */ 13525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# elif defined(HAVE_SSPISSL) 13625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <wincrypt.h> 13725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <wintrust.h> 13825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <schannel.h> 13925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# define SECURITY_WIN32 14025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <security.h> 14125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <sspi.h> 14225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_GNUTLS */ 14325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 14425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifndef WIN32 14525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <net/if.h> 14625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <resolv.h> 14725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_GETIFADDRS 14825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <ifaddrs.h> 14925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# else 15025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <sys/ioctl.h> 15125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_SYS_SOCKIO_H 15225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <sys/sockio.h> 15325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_SYS_SOCKIO_H */ 15425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_GETIFADDRS */ 15525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* !WIN32 */ 15625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 15725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_LIBZ 15825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# include <zlib.h> 15925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_LIBZ */ 16025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 16125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 16225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 16325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * C++ magic... 16425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 16525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 16625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef __cplusplus 16725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern "C" { 16825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* __cplusplus */ 16925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 17025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 17125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 17225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Constants... 17325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 17425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 17525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 17625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#define _HTTP_MAX_SBUFFER 65536 /* Size of (de)compression buffer */ 17725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#define _HTTP_RESOLVE_DEFAULT 0 /* Just resolve with default options */ 17825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#define _HTTP_RESOLVE_STDERR 1 /* Log resolve progress to stderr */ 17925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#define _HTTP_RESOLVE_FQDN 2 /* Resolve to a FQDN */ 18025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#define _HTTP_RESOLVE_FAXOUT 4 /* Resolve FaxOut service? */ 18125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 18225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#define _HTTP_TLS_NONE 0 /* No TLS options */ 18325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#define _HTTP_TLS_ALLOW_RC4 1 /* Allow RC4 cipher suites */ 18425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#define _HTTP_TLS_ALLOW_SSL3 2 /* Allow SSL 3.0 */ 18525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#define _HTTP_TLS_ALLOW_DH 4 /* Allow DH/DHE key negotiation */ 18625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#define _HTTP_TLS_DENY_TLS10 16 /* Deny TLS 1.0 */ 18725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 18825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 18925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 19025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Types and functions for SSL support... 19125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 19225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 19325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_GNUTLS 19425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 19525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * The GNU TLS library is more of a "bare metal" SSL/TLS library... 19625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 19725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 19825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef gnutls_session_t http_tls_t; 19925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef gnutls_certificate_credentials_t *http_tls_credentials_t; 20025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 20125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# elif defined(HAVE_CDSASSL) 20225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 20325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Darwin's Security framework provides its own SSL/TLS context structure 20425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * for its IO and protocol management... 20525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 20625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 20725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# if !defined(HAVE_SECBASEPRIV_H) && defined(HAVE_CSSMERRORSTRING) /* Declare prototype for function in that header... */ 20825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const char *cssmErrorString(int error); 20925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* !HAVE_SECBASEPRIV_H && HAVE_CSSMERRORSTRING */ 21025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# if !defined(HAVE_SECIDENTITYSEARCHPRIV_H) && defined(HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY) /* Declare prototype for function in that header... */ 21125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern OSStatus SecIdentitySearchCreateWithPolicy(SecPolicyRef policy, 21225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann CFStringRef idString, CSSM_KEYUSE keyUsage, 21325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann CFTypeRef keychainOrArray, 21425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann Boolean returnOnlyValidIdentities, 21525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann SecIdentitySearchRef* searchRef); 21625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* !HAVE_SECIDENTITYSEARCHPRIV_H && HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY */ 21725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# if !defined(HAVE_SECPOLICYPRIV_H) && defined(HAVE_SECPOLICYSETVALUE) /* Declare prototype for function in that header... */ 21825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern OSStatus SecPolicySetValue(SecPolicyRef policyRef, 21925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann const CSSM_DATA *value); 22025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* !HAVE_SECPOLICYPRIV_H && HAVE_SECPOLICYSETVALUE */ 22125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 22225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef SSLContextRef http_tls_t; 22325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef CFArrayRef http_tls_credentials_t; 22425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 22525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# elif defined(HAVE_SSPISSL) 22625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 22725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Windows' SSPI library gets a CUPS wrapper... 22825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 22925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 23025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef struct _http_sspi_s /**** SSPI/SSL data structure ****/ 23125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann{ 23225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann CredHandle creds; /* Credentials */ 23325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann CtxtHandle context; /* SSL context */ 23425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann BOOL contextInitialized; /* Is context init'd? */ 23525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann SecPkgContext_StreamSizes streamSizes;/* SSL data stream sizes */ 23625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann BYTE *decryptBuffer; /* Data pre-decryption*/ 23725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann size_t decryptBufferLength; /* Length of decrypt buffer */ 23825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann size_t decryptBufferUsed; /* Bytes used in buffer */ 23925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann BYTE *readBuffer; /* Data post-decryption */ 24025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int readBufferLength; /* Length of read buffer */ 24125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int readBufferUsed; /* Bytes used in buffer */ 24225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann BYTE *writeBuffer; /* Data pre-encryption */ 24325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int writeBufferLength; /* Length of write buffer */ 24425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann PCCERT_CONTEXT localCert, /* Local certificate */ 24525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann remoteCert; /* Remote (peer's) certificate */ 24625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char error[256]; /* Most recent error message */ 24725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann} _http_sspi_t; 24825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef _http_sspi_t *http_tls_t; 24925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef PCCERT_CONTEXT http_tls_credentials_t; 25025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 25125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# else 25225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 25325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Otherwise define stub types since we have no SSL support... 25425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 25525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 25625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef void *http_tls_t; 25725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef void *http_tls_credentials_t; 25825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_GNUTLS */ 25925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 26025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef enum _http_coding_e /**** HTTP content coding enumeration ****/ 26125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann{ 26225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _HTTP_CODING_IDENTITY, /* No content coding */ 26325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _HTTP_CODING_GZIP, /* LZ77+gzip decompression */ 26425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _HTTP_CODING_DEFLATE, /* LZ77+zlib compression */ 26525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _HTTP_CODING_GUNZIP, /* LZ77+gzip decompression */ 26625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _HTTP_CODING_INFLATE /* LZ77+zlib decompression */ 26725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann} _http_coding_t; 26825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 26925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef enum _http_mode_e /**** HTTP mode enumeration ****/ 27025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann{ 27125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _HTTP_MODE_CLIENT, /* Client connected to server */ 27225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _HTTP_MODE_SERVER /* Server connected (accepted) from client */ 27325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann} _http_mode_t; 27425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 27525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifndef _HTTP_NO_PRIVATE 27625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannstruct _http_s /**** HTTP connection structure ****/ 27725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann{ 27825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int fd; /* File descriptor for this socket */ 27925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int blocking; /* To block or not to block */ 28025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int error; /* Last error on read */ 28125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann time_t activity; /* Time since last read/write */ 28225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann http_state_t state; /* State of client */ 28325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann http_status_t status; /* Status of last request */ 28425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann http_version_t version; /* Protocol version */ 28525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann http_keepalive_t keep_alive; /* Keep-alive supported? */ 28625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann struct sockaddr_in _hostaddr; /* Address of connected host (deprecated) */ 28725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char hostname[HTTP_MAX_HOST], 28825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* Name of connected host */ 28925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann fields[HTTP_FIELD_ACCEPT_ENCODING][HTTP_MAX_VALUE]; 29025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* Field values up to Accept-Encoding */ 29125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char *data; /* Pointer to data buffer */ 29225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann http_encoding_t data_encoding; /* Chunked or not */ 29325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int _data_remaining;/* Number of bytes left (deprecated) */ 29425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int used; /* Number of bytes used in buffer */ 29525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char buffer[HTTP_MAX_BUFFER]; 29625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* Buffer for incoming data */ 29725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int _auth_type; /* Authentication in use (deprecated) */ 29825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _cups_md5_state_t md5_state; /* MD5 state */ 29925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char nonce[HTTP_MAX_VALUE]; 30025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* Nonce value */ 30125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int nonce_count; /* Nonce count */ 30225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann http_tls_t tls; /* TLS state information */ 30325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann http_encryption_t encryption; /* Encryption requirements */ 30425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 30525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /**** New in CUPS 1.1.19 ****/ 30625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann fd_set *input_set; /* select() set for httpWait() (deprecated) */ 30725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann http_status_t expect; /* Expect: header */ 30825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char *cookie; /* Cookie value(s) */ 30925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 31025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /**** New in CUPS 1.1.20 ****/ 31125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char _authstring[HTTP_MAX_VALUE], 31225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* Current Authorization value (deprecated) */ 31325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann userpass[HTTP_MAX_VALUE]; 31425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* Username:password string */ 31525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int digest_tries; /* Number of tries for digest auth */ 31625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 31725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /**** New in CUPS 1.2 ****/ 31825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann off_t data_remaining; /* Number of bytes left */ 31925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann http_addr_t *hostaddr; /* Current host address and port */ 32025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann http_addrlist_t *addrlist; /* List of valid addresses */ 32125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char wbuffer[HTTP_MAX_BUFFER]; 32225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* Buffer for outgoing data */ 32325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int wused; /* Write buffer bytes used */ 32425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 32525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /**** New in CUPS 1.3 ****/ 32625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char *field_authorization; 32725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* Authorization field */ 32825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char *authstring; /* Current Authorization field */ 32925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_GSSAPI 33025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann gss_OID gssmech; /* Authentication mechanism */ 33125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann gss_ctx_id_t gssctx; /* Authentication context */ 33225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann gss_name_t gssname; /* Authentication server name */ 33325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_GSSAPI */ 33425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_AUTHORIZATION_H 33525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann AuthorizationRef auth_ref; /* Authorization ref */ 33625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_AUTHORIZATION_H */ 33725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 33825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /**** New in CUPS 1.5 ****/ 33925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann http_tls_credentials_t tls_credentials; 34025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* TLS credentials */ 34125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann http_timeout_cb_t timeout_cb; /* Timeout callback */ 34225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann void *timeout_data; /* User data pointer */ 34325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann double timeout_value; /* Timeout in seconds */ 34425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int wait_value; /* httpWait value for timeout */ 34525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_GSSAPI 34625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char gsshost[256]; /* Hostname for Kerberos */ 34725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_GSSAPI */ 34825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 34925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /**** New in CUPS 1.7 ****/ 35025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int tls_upgrade; /* Non-zero if we are doing an upgrade */ 35125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _http_mode_t mode; /* _HTTP_MODE_CLIENT or _HTTP_MODE_SERVER */ 35225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char *accept_encoding, 35325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* Accept-Encoding field */ 35425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann *allow, /* Allow field */ 35525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann *server, /* Server field */ 35625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann *default_accept_encoding, 35725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann *default_server, 35825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann *default_user_agent; 35925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* Default field values */ 36025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef HAVE_LIBZ 36125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _http_coding_t coding; /* _HTTP_CODING_xxx */ 36225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann z_stream stream; /* (De)compression stream */ 36325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann Bytef *sbuffer; /* (De)compression buffer */ 36425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* HAVE_LIBZ */ 36525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann}; 36625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* !_HTTP_NO_PRIVATE */ 36725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 36825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 36925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 37025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Some OS's don't have hstrerror(), most notably Solaris... 37125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 37225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 37325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifndef HAVE_HSTRERROR 37425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const char *_cups_hstrerror(int error); 37525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# define hstrerror _cups_hstrerror 37625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* !HAVE_HSTRERROR */ 37725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 37825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 37925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 38025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Some OS's don't have getifaddrs() and freeifaddrs()... 38125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 38225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 38325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# if !defined(WIN32) && !defined(HAVE_GETIFADDRS) 38425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef ifa_dstaddr 38525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# undef ifa_dstaddr 38625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* ifa_dstaddr */ 38725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifndef ifr_netmask 38825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# define ifr_netmask ifr_addr 38925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* !ifr_netmask */ 39025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 39125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannstruct ifaddrs /**** Interface Structure ****/ 39225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann{ 39325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann struct ifaddrs *ifa_next; /* Next interface in list */ 39425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char *ifa_name; /* Name of interface */ 39525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann unsigned int ifa_flags; /* Flags (up, point-to-point, etc.) */ 39625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann struct sockaddr *ifa_addr, /* Network address */ 39725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann *ifa_netmask; /* Address mask */ 39825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann union 39925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann { 40025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann struct sockaddr *ifu_broadaddr; /* Broadcast address of this interface. */ 40125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann struct sockaddr *ifu_dstaddr; /* Point-to-point destination address. */ 40225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann } ifa_ifu; 40325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 40425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann void *ifa_data; /* Interface statistics */ 40525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann}; 40625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 40725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifndef ifa_broadaddr 40825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# define ifa_broadaddr ifa_ifu.ifu_broadaddr 40925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* !ifa_broadaddr */ 41025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifndef ifa_dstaddr 41125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# define ifa_dstaddr ifa_ifu.ifu_dstaddr 41225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* !ifa_dstaddr */ 41325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 41425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern int _cups_getifaddrs(struct ifaddrs **addrs); 41525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# define getifaddrs _cups_getifaddrs 41625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern void _cups_freeifaddrs(struct ifaddrs *addrs); 41725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# define freeifaddrs _cups_freeifaddrs 41825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* !WIN32 && !HAVE_GETIFADDRS */ 41925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 42025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 42125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 42225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Prototypes... 42325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 42425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 42525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern void _httpAddrSetPort(http_addr_t *addr, int port); 42625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern http_tls_credentials_t 42725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _httpCreateCredentials(cups_array_t *credentials); 42825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern char *_httpDecodeURI(char *dst, const char *src, 42925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann size_t dstsize); 43025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern void _httpDisconnect(http_t *http); 43125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern char *_httpEncodeURI(char *dst, const char *src, 43225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann size_t dstsize); 43325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern void _httpFreeCredentials(http_tls_credentials_t credentials); 43425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const char *_httpResolveURI(const char *uri, char *resolved_uri, 43525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann size_t resolved_size, int options, 43625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int (*cb)(void *context), 43725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann void *context); 43825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern const char *_httpStatus(cups_lang_t *lang, http_status_t status); 43925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern void _httpTLSInitialize(void); 44025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern size_t _httpTLSPending(http_t *http); 44125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern int _httpTLSRead(http_t *http, char *buf, int len); 44225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern int _httpTLSSetCredentials(http_t *http); 44325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern void _httpTLSSetOptions(int options); 44425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern int _httpTLSStart(http_t *http); 44525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern void _httpTLSStop(http_t *http); 44625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern int _httpTLSWrite(http_t *http, const char *buf, int len); 44725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern int _httpUpdate(http_t *http, http_status_t *status); 44825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern int _httpWait(http_t *http, int msec, int usessl); 44925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 45025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 45125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 45225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * C++ magic... 45325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 45425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 45525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# ifdef __cplusplus 45625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann} 45725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann# endif /* __cplusplus */ 45825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 45925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#endif /* !_CUPS_HTTP_PRIVATE_H_ */ 460