]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - cups/http.h
Merge changes from CUPS 1.7svn-r10643
[thirdparty/cups.git] / cups / http.h
index 40ba98235fd60e95ff60ab0a9a66a77bcc7a4b5b..3aefd53b3ccf0df1233dcb3ac3740376fef71446 100644 (file)
@@ -1,26 +1,16 @@
 /*
- * "$Id$"
+ * "$Id: http.h 7026 2007-10-19 00:57:45Z mike $"
  *
- *   Hyper-Text Transport Protocol definitions for the Common UNIX Printing
- *   System (CUPS).
+ *   Hyper-Text Transport Protocol definitions for CUPS.
  *
- *   Copyright 1997-2006 by Easy Software Products, all rights reserved.
+ *   Copyright 2007-2012 by Apple Inc.
+ *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
- *   property of Easy Software Products and are protected by Federal
- *   copyright law.  Distribution and use rights are outlined in the file
- *   "LICENSE.txt" which should have been included with this file.  If this
- *   file is missing or damaged please contact Easy Software Products
- *   at:
- *
- *       Attn: CUPS Licensing Information
- *       Easy Software Products
- *       44141 Airport View Drive, Suite 204
- *       Hollywood, Maryland 20636 USA
- *
- *       Voice: (301) 373-9600
- *       EMail: cups-info@cups.org
- *         WWW: http://www.cups.org
+ *   property of Apple Inc. and are protected by Federal copyright
+ *   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
+ *   which should have been included with this file.  If this file is
+ *   file is missing or damaged, see the license at "http://www.cups.org/".
  *
  *   This file is subject to the Apple OS-Developed Software exception.
  */
  * Include necessary headers...
  */
 
+#  include "versioning.h"
+#  include "array.h"
 #  include <string.h>
 #  include <time.h>
 #  include <sys/types.h>
 #  ifdef WIN32
+#    ifndef __CUPS_SSIZE_T_DEFINED
+#      define __CUPS_SSIZE_T_DEFINED
+/* Windows does not support the ssize_t type, so map it to off_t... */
+typedef off_t ssize_t;                 /* @private@ */
+#    endif /* !__CUPS_SSIZE_T_DEFINED */
 #    include <winsock2.h>
 #    include <ws2tcpip.h>
 #  else
-#    ifdef __sgi /* IRIX needs this for IPv6 support!?! */
-#      define INET6
-#    endif /* __sgi */
 #    include <unistd.h>
 #    include <sys/time.h>
 #    include <sys/socket.h>
 #    if !defined(__APPLE__) || !defined(TCP_NODELAY)
 #      include <netinet/tcp.h>
 #    endif /* !__APPLE__ || !TCP_NODELAY */
+#    if defined(AF_UNIX) && !defined(AF_LOCAL)
+#      define AF_LOCAL AF_UNIX         /* Older UNIX's have old names... */
+#    endif /* AF_UNIX && !AF_LOCAL */
 #    ifdef AF_LOCAL
 #      include <sys/un.h>
 #    endif /* AF_LOCAL */
+#    if defined(LOCAL_PEERCRED) && !defined(SO_PEERCRED)
+#      define SO_PEERCRED LOCAL_PEERCRED
+#    endif /* LOCAL_PEERCRED && !SO_PEERCRED */
 #  endif /* WIN32 */
 
-#  include "md5.h"
-
-/*
- * With GCC 3.0 and higher, we can mark old APIs "deprecated" so you get
- * a warning at compile-time.
- */
-
-#  if defined(__GNUC__) && __GNUC__ > 2
-#    define _HTTP_DEPRECATED __attribute__ ((__deprecated__))
-#  else
-#    define _HTTP_DEPRECATED
-#  endif /* __GNUC__ && __GNUC__ > 2 */
-
 
 /*
  * C++ magic...
@@ -98,7 +85,7 @@ extern "C" {
 #if defined(AF_INET6) && !defined(s6_addr32)
 #  if defined(__sun)
 #    define s6_addr32  _S6_un._S6_u32
-#  elif defined(__FreeBSD__) || defined(__APPLE__)
+#  elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)|| defined(__DragonFly__)
 #    define s6_addr32  __u6_addr.__u6_addr32
 #  elif defined(__osf__)
 #    define s6_addr32  s6_un.sa6_laddr
@@ -133,13 +120,15 @@ typedef enum http_auth_e          /**** HTTP authentication types ****/
   HTTP_AUTH_MD5,                       /* Digest authentication in use */
   HTTP_AUTH_MD5_SESS,                  /* MD5-session authentication in use */
   HTTP_AUTH_MD5_INT,                   /* Digest authentication in use for body */
-  HTTP_AUTH_MD5_SESS_INT               /* MD5-session authentication in use for body */
+  HTTP_AUTH_MD5_SESS_INT,              /* MD5-session authentication in use for body */
+  HTTP_AUTH_NEGOTIATE                  /* GSSAPI authentication in use @since CUPS 1.3/OS X 10.5@ */
 } http_auth_t;
 
 typedef enum http_encoding_e           /**** HTTP transfer encoding values ****/
 {
   HTTP_ENCODE_LENGTH,                  /* Data is sent with Content-Length */
-  HTTP_ENCODE_CHUNKED                  /* Data is chunked */
+  HTTP_ENCODE_CHUNKED,                 /* Data is chunked */
+  HTTP_ENCODE_FIELDS                   /* Sending HTTP fields */
 } http_encoding_t;
 
 typedef enum http_encryption_e         /**** HTTP encryption values ****/
@@ -256,10 +245,14 @@ typedef enum http_status_e                /**** HTTP status codes ****/
   HTTP_BAD_GATEWAY,                    /* Bad gateway */
   HTTP_SERVICE_UNAVAILABLE,            /* Service is unavailable */
   HTTP_GATEWAY_TIMEOUT,                        /* Gateway connection timed out */
-  HTTP_NOT_SUPPORTED                   /* HTTP version not supported */
+  HTTP_NOT_SUPPORTED,                  /* HTTP version not supported */
+
+  HTTP_AUTHORIZATION_CANCELED = 1000,  /* User canceled authorization @since CUPS 1.4@ */
+  HTTP_PKI_ERROR,                      /* Error negotiating a secure connection @since CUPS 1.5/OS X 10.7@ */
+  HTTP_WEBIF_DISABLED                  /* Web interface is disabled @private@ */
 } http_status_t;
 
-typedef enum http_uri_status_e         /**** URI separation status @since CUPS1.2@ ****/
+typedef enum http_uri_status_e         /**** URI separation status @since CUPS 1.2@ ****/
 {
   HTTP_URI_OVERFLOW = -8,              /* URI buffer for httpAssembleURI is too small */
   HTTP_URI_BAD_ARGUMENTS = -7,         /* Bad arguments to function (error) */
@@ -296,7 +289,7 @@ typedef enum http_version_e         /**** HTTP version numbers ****/
 typedef union _http_addr_u             /**** Socket address union, which
                                         **** makes using IPv6 and other
                                         **** address types easier and
-                                        **** more portable. @since CUPS 1.2@
+                                        **** more portable. @since CUPS 1.2/OS X 10.5@
                                         ****/
 {
   struct sockaddr      addr;           /* Base structure for family value */
@@ -313,7 +306,7 @@ typedef union _http_addr_u          /**** Socket address union, which
 typedef struct http_addrlist_s         /**** Socket address list, which is
                                         **** used to enumerate all of the
                                         **** addresses that are associated
-                                        **** with a hostname. @since CUPS 1.2@
+                                        **** with a hostname. @since CUPS 1.2/OS X 10.5@
                                         ****/
 {
   struct http_addrlist_s *next;                /* Pointer to next address in list */
@@ -322,6 +315,16 @@ typedef struct http_addrlist_s             /**** Socket address list, which is
 
 typedef struct _http_s http_t;         /**** HTTP connection type ****/
 
+typedef struct http_credential_s       /**** HTTP credential data @since CUPS 1.5/OS X 10.7@ ****/
+{
+  void         *data;                  /* Pointer to credential data */
+  size_t       datalen;                /* Credential length */
+} http_credential_t;
+
+typedef int (*http_timeout_cb_t)(http_t *http, void *user_data);
+                                       /**** HTTP timeout callback @since CUPS 1.5/OS X 10.7@ ****/
+
+
 
 /*
  * Prototypes...
@@ -351,25 +354,22 @@ extern void               httpInitialize(void);
 extern int             httpOptions(http_t *http, const char *uri);
 extern int             httpPost(http_t *http, const char *uri);
 extern int             httpPrintf(http_t *http, const char *format, ...)
-#  ifdef __GNUC__
-__attribute__ ((__format__ (__printf__, 2, 3)))
-#  endif /* __GNUC__ */
-;
+                       __attribute__ ((__format__ (__printf__, 2, 3)));
 extern int             httpPut(http_t *http, const char *uri);
-extern int             httpRead(http_t *http, char *buffer, int length) _HTTP_DEPRECATED;
+extern int             httpRead(http_t *http, char *buffer, int length) _CUPS_DEPRECATED;
 extern int             httpReconnect(http_t *http);
 extern void            httpSeparate(const char *uri, char *method,
                                     char *username, char *host, int *port,
-                                    char *resource) _HTTP_DEPRECATED;
+                                    char *resource) _CUPS_DEPRECATED;
 extern void            httpSetField(http_t *http, http_field_t field,
                                     const char *value);
 extern const char      *httpStatus(http_status_t status);
 extern int             httpTrace(http_t *http, const char *uri);
 extern http_status_t   httpUpdate(http_t *http);
-extern int             httpWrite(http_t *http, const char *buffer, int length) _HTTP_DEPRECATED;
-extern char            *httpEncode64(char *out, const char *in) _HTTP_DEPRECATED;
-extern char            *httpDecode64(char *out, const char *in) _HTTP_DEPRECATED;
-extern int             httpGetLength(http_t *http) _HTTP_DEPRECATED;
+extern int             httpWrite(http_t *http, const char *buffer, int length) _CUPS_DEPRECATED;
+extern char            *httpEncode64(char *out, const char *in) _CUPS_DEPRECATED;
+extern char            *httpDecode64(char *out, const char *in) _CUPS_DEPRECATED;
+extern int             httpGetLength(http_t *http) _CUPS_DEPRECATED;
 extern char            *httpMD5(const char *, const char *, const char *,
                                 char [33]);
 extern char            *httpMD5Final(const char *, const char *, const char *,
@@ -377,68 +377,96 @@ extern char               *httpMD5Final(const char *, const char *, const char *,
 extern char            *httpMD5String(const unsigned char *, char [33]);
 
 /**** New in CUPS 1.1.19 ****/
-extern void            httpClearCookie(http_t *http);
-extern const char      *httpGetCookie(http_t *http);
-extern void            httpSetCookie(http_t *http, const char *cookie);
-extern int             httpWait(http_t *http, int msec);
+extern void            httpClearCookie(http_t *http) _CUPS_API_1_1_19;
+extern const char      *httpGetCookie(http_t *http) _CUPS_API_1_1_19;
+extern void            httpSetCookie(http_t *http, const char *cookie) _CUPS_API_1_1_19;
+extern int             httpWait(http_t *http, int msec) _CUPS_API_1_1_19;
 
 /**** New in CUPS 1.1.21 ****/
-extern char            *httpDecode64_2(char *out, int *outlen, const char *in);
+extern char            *httpDecode64_2(char *out, int *outlen, const char *in) _CUPS_API_1_1_21;
 extern char            *httpEncode64_2(char *out, int outlen, const char *in,
-                                       int inlen);
+                                       int inlen) _CUPS_API_1_1_21;
 extern void            httpSeparate2(const char *uri,
                                      char *method, int methodlen,
                                      char *username, int usernamelen,
                                      char *host, int hostlen, int *port,
-                                     char *resource, int resourcelen) _HTTP_DEPRECATED;
+                                     char *resource, int resourcelen) _CUPS_DEPRECATED;
 
-/**** New in CUPS 1.2 ****/
-extern int             httpAddrAny(const http_addr_t *addr);
-extern http_addrlist_t *httpAddrConnect(http_addrlist_t *addrlist, int *sock);
+/**** New in CUPS 1.2/OS X 10.5 ****/
+extern int             httpAddrAny(const http_addr_t *addr) _CUPS_API_1_2;
+extern http_addrlist_t *httpAddrConnect(http_addrlist_t *addrlist, int *sock) _CUPS_API_1_2;
 extern int             httpAddrEqual(const http_addr_t *addr1,
-                                     const http_addr_t *addr2);
-extern void            httpAddrFreeList(http_addrlist_t *addrlist);
+                                     const http_addr_t *addr2) _CUPS_API_1_2;
+extern void            httpAddrFreeList(http_addrlist_t *addrlist) _CUPS_API_1_2;
 extern http_addrlist_t *httpAddrGetList(const char *hostname, int family,
-                                        const char *service);
-extern int             httpAddrLength(const http_addr_t *addr);
-extern int             httpAddrLocalhost(const http_addr_t *addr);
+                                        const char *service) _CUPS_API_1_2;
+extern int             httpAddrLength(const http_addr_t *addr) _CUPS_API_1_2;
+extern int             httpAddrLocalhost(const http_addr_t *addr) _CUPS_API_1_2;
 extern char            *httpAddrLookup(const http_addr_t *addr,
-                                        char *name, int namelen);
+                                        char *name, int namelen) _CUPS_API_1_2;
 extern char            *httpAddrString(const http_addr_t *addr,
-                                       char *s, int slen);
+                                       char *s, int slen) _CUPS_API_1_2;
 extern http_uri_status_t httpAssembleURI(http_uri_coding_t encoding,
                                         char *uri, int urilen,
                                         const char *scheme,
                                         const char *username,
                                         const char *host, int port,
-                                        const char *resource);
+                                        const char *resource) _CUPS_API_1_2;
 extern http_uri_status_t httpAssembleURIf(http_uri_coding_t encoding,
                                          char *uri, int urilen,
                                          const char *scheme,
                                          const char *username,
                                          const char *host, int port,
-                                         const char *resourcef, ...);
-extern int             httpFlushWrite(http_t *http);
-extern int             httpGetBlocking(http_t *http);
-extern const char      *httpGetDateString2(time_t t, char *s, int slen);
-extern int             httpGetFd(http_t *http);
-extern const char      *httpGetHostname(http_t *http, char *s, int slen);
-extern off_t           httpGetLength2(http_t *http);
-extern http_status_t   httpGetStatus(http_t *http);
+                                         const char *resourcef, ...) _CUPS_API_1_2;
+extern int             httpFlushWrite(http_t *http) _CUPS_API_1_2;
+extern int             httpGetBlocking(http_t *http) _CUPS_API_1_2;
+extern const char      *httpGetDateString2(time_t t, char *s, int slen) _CUPS_API_1_2;
+extern int             httpGetFd(http_t *http) _CUPS_API_1_2;
+extern const char      *httpGetHostname(http_t *http, char *s, int slen) _CUPS_API_1_2;
+extern off_t           httpGetLength2(http_t *http) _CUPS_API_1_2;
+extern http_status_t   httpGetStatus(http_t *http) _CUPS_API_1_2;
 extern char            *httpGetSubField2(http_t *http, http_field_t field,
                                          const char *name, char *value,
-                                         int valuelen);
-extern ssize_t         httpRead2(http_t *http, char *buffer, size_t length);
+                                         int valuelen) _CUPS_API_1_2;
+extern ssize_t         httpRead2(http_t *http, char *buffer, size_t length) _CUPS_API_1_2;
 extern http_uri_status_t httpSeparateURI(http_uri_coding_t decoding,
                                         const char *uri,
                                         char *scheme, int schemelen,
                                         char *username, int usernamelen,
                                         char *host, int hostlen, int *port,
-                                        char *resource, int resourcelen);
-extern void            httpSetExpect(http_t *http, http_status_t expect);
-extern void            httpSetLength(http_t *http, size_t length);
+                                        char *resource, int resourcelen) _CUPS_API_1_2;
+extern void            httpSetExpect(http_t *http, http_status_t expect) _CUPS_API_1_2;
+extern void            httpSetLength(http_t *http, size_t length) _CUPS_API_1_2;
 extern ssize_t         httpWrite2(http_t *http, const char *buffer,
-                                  size_t length);
+                                  size_t length) _CUPS_API_1_2;
+
+/**** New in CUPS 1.3/OS X 10.5 ****/
+extern char            *httpGetAuthString(http_t *http) _CUPS_API_1_3;
+extern void            httpSetAuthString(http_t *http, const char *scheme,
+                                         const char *data) _CUPS_API_1_3;
+
+/**** New in CUPS 1.5/OS X 10.7 ****/
+extern int             httpAddCredential(cups_array_t *credentials,
+                                         const void *data, size_t datalen)
+                                         _CUPS_API_1_5;
+extern int             httpCopyCredentials(http_t *http,
+                                           cups_array_t **credentials)
+                                           _CUPS_API_1_5;
+extern void            httpFreeCredentials(cups_array_t *certs) _CUPS_API_1_5;
+extern int             httpSetCredentials(http_t *http, cups_array_t *certs)
+                                          _CUPS_API_1_5;
+extern void            httpSetTimeout(http_t *http, double timeout,
+                                      http_timeout_cb_t cb, void *user_data)
+                                      _CUPS_API_1_5;
+
+/**** New in CUPS 1.6/OS X 10.8 ****/
+extern http_addrlist_t *httpAddrConnect2(http_addrlist_t *addrlist, int *sock,
+                                         int msec, int *cancel)
+                                         _CUPS_API_1_6;
+extern http_state_t    httpGetState(http_t *http) _CUPS_API_1_6;
+extern http_version_t  httpGetVersion(http_t *http) _CUPS_API_1_6;
+extern int             httpReconnect2(http_t *http, int msec, int *cancel)
+                                      _CUPS_API_1_6;
 
 
 /*
@@ -451,5 +479,5 @@ extern ssize_t              httpWrite2(http_t *http, const char *buffer,
 #endif /* !_CUPS_HTTP_H_ */
 
 /*
- * End of "$Id$".
+ * End of "$Id: http.h 7026 2007-10-19 00:57:45Z mike $".
  */