xref: /aosp_15_r20/external/google-breakpad/src/third_party/curl/curl.h (revision 9712c20fc9bbfbac4935993a2ca0b3958c5adad2)
1*9712c20fSFrederick Mayle #ifndef __CURL_CURL_H
2*9712c20fSFrederick Mayle #define __CURL_CURL_H
3*9712c20fSFrederick Mayle /***************************************************************************
4*9712c20fSFrederick Mayle  *                                  _   _ ____  _
5*9712c20fSFrederick Mayle  *  Project                     ___| | | |  _ \| |
6*9712c20fSFrederick Mayle  *                             / __| | | | |_) | |
7*9712c20fSFrederick Mayle  *                            | (__| |_| |  _ <| |___
8*9712c20fSFrederick Mayle  *                             \___|\___/|_| \_\_____|
9*9712c20fSFrederick Mayle  *
10*9712c20fSFrederick Mayle  * Copyright (C) 1998 - 2009, Daniel Stenberg, <[email protected]>, et al.
11*9712c20fSFrederick Mayle  *
12*9712c20fSFrederick Mayle  * This software is licensed as described in the file COPYING, which
13*9712c20fSFrederick Mayle  * you should have received as part of this distribution. The terms
14*9712c20fSFrederick Mayle  * are also available at http://curl.haxx.se/docs/copyright.html.
15*9712c20fSFrederick Mayle  *
16*9712c20fSFrederick Mayle  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17*9712c20fSFrederick Mayle  * copies of the Software, and permit persons to whom the Software is
18*9712c20fSFrederick Mayle  * furnished to do so, under the terms of the COPYING file.
19*9712c20fSFrederick Mayle  *
20*9712c20fSFrederick Mayle  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21*9712c20fSFrederick Mayle  * KIND, either express or implied.
22*9712c20fSFrederick Mayle  *
23*9712c20fSFrederick Mayle  * $Id: curl.h,v 1.396 2009-10-16 13:30:31 yangtse Exp $
24*9712c20fSFrederick Mayle  ***************************************************************************/
25*9712c20fSFrederick Mayle 
26*9712c20fSFrederick Mayle /*
27*9712c20fSFrederick Mayle  * If you have libcurl problems, all docs and details are found here:
28*9712c20fSFrederick Mayle  *   http://curl.haxx.se/libcurl/
29*9712c20fSFrederick Mayle  *
30*9712c20fSFrederick Mayle  * curl-library mailing list subscription and unsubscription web interface:
31*9712c20fSFrederick Mayle  *   http://cool.haxx.se/mailman/listinfo/curl-library/
32*9712c20fSFrederick Mayle  */
33*9712c20fSFrederick Mayle 
34*9712c20fSFrederick Mayle /*
35*9712c20fSFrederick Mayle  * Leading 'curl' path on the 'curlbuild.h' include statement is
36*9712c20fSFrederick Mayle  * required to properly allow building outside of the source tree,
37*9712c20fSFrederick Mayle  * due to the fact that in this case 'curlbuild.h' is generated in
38*9712c20fSFrederick Mayle  * a subdirectory of the build tree while 'curl.h actually remains
39*9712c20fSFrederick Mayle  * in a subdirectory of the source tree.
40*9712c20fSFrederick Mayle  */
41*9712c20fSFrederick Mayle 
42*9712c20fSFrederick Mayle #include "third_party/curl/curlver.h"         /* libcurl version defines   */
43*9712c20fSFrederick Mayle #include "third_party/curl/curlbuild.h"       /* libcurl build definitions */
44*9712c20fSFrederick Mayle #include "third_party/curl/curlrules.h"       /* libcurl rules enforcement */
45*9712c20fSFrederick Mayle 
46*9712c20fSFrederick Mayle /*
47*9712c20fSFrederick Mayle  * Define WIN32 when build target is Win32 API
48*9712c20fSFrederick Mayle  */
49*9712c20fSFrederick Mayle 
50*9712c20fSFrederick Mayle #if (defined(_WIN32) || defined(__WIN32__)) && \
51*9712c20fSFrederick Mayle      !defined(WIN32) && !defined(__SYMBIAN32__)
52*9712c20fSFrederick Mayle #define WIN32
53*9712c20fSFrederick Mayle #endif
54*9712c20fSFrederick Mayle 
55*9712c20fSFrederick Mayle #include <stdio.h>
56*9712c20fSFrederick Mayle #include <limits.h>
57*9712c20fSFrederick Mayle 
58*9712c20fSFrederick Mayle /* The include stuff here below is mainly for time_t! */
59*9712c20fSFrederick Mayle #include <sys/types.h>
60*9712c20fSFrederick Mayle #include <time.h>
61*9712c20fSFrederick Mayle 
62*9712c20fSFrederick Mayle #if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__GNUC__) && \
63*9712c20fSFrederick Mayle   !defined(__CYGWIN__) || defined(__MINGW32__)
64*9712c20fSFrederick Mayle #if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H))
65*9712c20fSFrederick Mayle /* The check above prevents the winsock2 inclusion if winsock.h already was
66*9712c20fSFrederick Mayle    included, since they can't co-exist without problems */
67*9712c20fSFrederick Mayle #include <winsock2.h>
68*9712c20fSFrederick Mayle #include <ws2tcpip.h>
69*9712c20fSFrederick Mayle #endif
70*9712c20fSFrederick Mayle #else
71*9712c20fSFrederick Mayle 
72*9712c20fSFrederick Mayle /* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
73*9712c20fSFrederick Mayle    libc5-based Linux systems. Only include it on system that are known to
74*9712c20fSFrederick Mayle    require it! */
75*9712c20fSFrederick Mayle #if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
76*9712c20fSFrederick Mayle     defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \
77*9712c20fSFrederick Mayle     defined(__ANDROID__)
78*9712c20fSFrederick Mayle #include <sys/select.h>
79*9712c20fSFrederick Mayle #endif
80*9712c20fSFrederick Mayle 
81*9712c20fSFrederick Mayle #ifndef _WIN32_WCE
82*9712c20fSFrederick Mayle #include <sys/socket.h>
83*9712c20fSFrederick Mayle #endif
84*9712c20fSFrederick Mayle #if !defined(WIN32) && !defined(__WATCOMC__) && !defined(__VXWORKS__)
85*9712c20fSFrederick Mayle #include <sys/time.h>
86*9712c20fSFrederick Mayle #endif
87*9712c20fSFrederick Mayle #include <sys/types.h>
88*9712c20fSFrederick Mayle #endif
89*9712c20fSFrederick Mayle 
90*9712c20fSFrederick Mayle #ifdef __BEOS__
91*9712c20fSFrederick Mayle #include <support/SupportDefs.h>
92*9712c20fSFrederick Mayle #endif
93*9712c20fSFrederick Mayle 
94*9712c20fSFrederick Mayle #ifdef  __cplusplus
95*9712c20fSFrederick Mayle extern "C" {
96*9712c20fSFrederick Mayle #endif
97*9712c20fSFrederick Mayle 
98*9712c20fSFrederick Mayle typedef void CURL;
99*9712c20fSFrederick Mayle 
100*9712c20fSFrederick Mayle /*
101*9712c20fSFrederick Mayle  * Decorate exportable functions for Win32 and Symbian OS DLL linking.
102*9712c20fSFrederick Mayle  * This avoids using a .def file for building libcurl.dll.
103*9712c20fSFrederick Mayle  */
104*9712c20fSFrederick Mayle #if (defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)) && \
105*9712c20fSFrederick Mayle      !defined(CURL_STATICLIB)
106*9712c20fSFrederick Mayle #if defined(BUILDING_LIBCURL)
107*9712c20fSFrederick Mayle #define CURL_EXTERN  __declspec(dllexport)
108*9712c20fSFrederick Mayle #else
109*9712c20fSFrederick Mayle #define CURL_EXTERN  __declspec(dllimport)
110*9712c20fSFrederick Mayle #endif
111*9712c20fSFrederick Mayle #else
112*9712c20fSFrederick Mayle 
113*9712c20fSFrederick Mayle #ifdef CURL_HIDDEN_SYMBOLS
114*9712c20fSFrederick Mayle /*
115*9712c20fSFrederick Mayle  * This definition is used to make external definitions visible in the
116*9712c20fSFrederick Mayle  * shared library when symbols are hidden by default.  It makes no
117*9712c20fSFrederick Mayle  * difference when compiling applications whether this is set or not,
118*9712c20fSFrederick Mayle  * only when compiling the library.
119*9712c20fSFrederick Mayle  */
120*9712c20fSFrederick Mayle #define CURL_EXTERN CURL_EXTERN_SYMBOL
121*9712c20fSFrederick Mayle #else
122*9712c20fSFrederick Mayle #define CURL_EXTERN
123*9712c20fSFrederick Mayle #endif
124*9712c20fSFrederick Mayle #endif
125*9712c20fSFrederick Mayle 
126*9712c20fSFrederick Mayle #ifndef curl_socket_typedef
127*9712c20fSFrederick Mayle /* socket typedef */
128*9712c20fSFrederick Mayle #ifdef WIN32
129*9712c20fSFrederick Mayle typedef SOCKET curl_socket_t;
130*9712c20fSFrederick Mayle #define CURL_SOCKET_BAD INVALID_SOCKET
131*9712c20fSFrederick Mayle #else
132*9712c20fSFrederick Mayle typedef int curl_socket_t;
133*9712c20fSFrederick Mayle #define CURL_SOCKET_BAD -1
134*9712c20fSFrederick Mayle #endif
135*9712c20fSFrederick Mayle #define curl_socket_typedef
136*9712c20fSFrederick Mayle #endif /* curl_socket_typedef */
137*9712c20fSFrederick Mayle 
138*9712c20fSFrederick Mayle struct curl_httppost {
139*9712c20fSFrederick Mayle   struct curl_httppost *next;       /* next entry in the list */
140*9712c20fSFrederick Mayle   char *name;                       /* pointer to allocated name */
141*9712c20fSFrederick Mayle   long namelength;                  /* length of name length */
142*9712c20fSFrederick Mayle   char *contents;                   /* pointer to allocated data contents */
143*9712c20fSFrederick Mayle   long contentslength;              /* length of contents field */
144*9712c20fSFrederick Mayle   char *buffer;                     /* pointer to allocated buffer contents */
145*9712c20fSFrederick Mayle   long bufferlength;                /* length of buffer field */
146*9712c20fSFrederick Mayle   char *contenttype;                /* Content-Type */
147*9712c20fSFrederick Mayle   struct curl_slist* contentheader; /* list of extra headers for this form */
148*9712c20fSFrederick Mayle   struct curl_httppost *more;       /* if one field name has more than one
149*9712c20fSFrederick Mayle                                        file, this link should link to following
150*9712c20fSFrederick Mayle                                        files */
151*9712c20fSFrederick Mayle   long flags;                       /* as defined below */
152*9712c20fSFrederick Mayle #define HTTPPOST_FILENAME (1<<0)    /* specified content is a file name */
153*9712c20fSFrederick Mayle #define HTTPPOST_READFILE (1<<1)    /* specified content is a file name */
154*9712c20fSFrederick Mayle #define HTTPPOST_PTRNAME (1<<2)     /* name is only stored pointer
155*9712c20fSFrederick Mayle                                        do not free in formfree */
156*9712c20fSFrederick Mayle #define HTTPPOST_PTRCONTENTS (1<<3) /* contents is only stored pointer
157*9712c20fSFrederick Mayle                                        do not free in formfree */
158*9712c20fSFrederick Mayle #define HTTPPOST_BUFFER (1<<4)      /* upload file from buffer */
159*9712c20fSFrederick Mayle #define HTTPPOST_PTRBUFFER (1<<5)   /* upload file from pointer contents */
160*9712c20fSFrederick Mayle #define HTTPPOST_CALLBACK (1<<6)    /* upload file contents by using the
161*9712c20fSFrederick Mayle                                        regular read callback to get the data
162*9712c20fSFrederick Mayle                                        and pass the given pointer as custom
163*9712c20fSFrederick Mayle                                        pointer */
164*9712c20fSFrederick Mayle 
165*9712c20fSFrederick Mayle   char *showfilename;               /* The file name to show. If not set, the
166*9712c20fSFrederick Mayle                                        actual file name will be used (if this
167*9712c20fSFrederick Mayle                                        is a file part) */
168*9712c20fSFrederick Mayle   void *userp;                      /* custom pointer used for
169*9712c20fSFrederick Mayle                                        HTTPPOST_CALLBACK posts */
170*9712c20fSFrederick Mayle };
171*9712c20fSFrederick Mayle 
172*9712c20fSFrederick Mayle typedef int (*curl_progress_callback)(void *clientp,
173*9712c20fSFrederick Mayle                                       double dltotal,
174*9712c20fSFrederick Mayle                                       double dlnow,
175*9712c20fSFrederick Mayle                                       double ultotal,
176*9712c20fSFrederick Mayle                                       double ulnow);
177*9712c20fSFrederick Mayle 
178*9712c20fSFrederick Mayle #ifndef CURL_MAX_WRITE_SIZE
179*9712c20fSFrederick Mayle   /* Tests have proven that 20K is a very bad buffer size for uploads on
180*9712c20fSFrederick Mayle      Windows, while 16K for some odd reason performed a lot better.
181*9712c20fSFrederick Mayle      We do the ifndef check to allow this value to easier be changed at build
182*9712c20fSFrederick Mayle      time for those who feel adventurous. */
183*9712c20fSFrederick Mayle #define CURL_MAX_WRITE_SIZE 16384
184*9712c20fSFrederick Mayle #endif
185*9712c20fSFrederick Mayle 
186*9712c20fSFrederick Mayle #ifndef CURL_MAX_HTTP_HEADER
187*9712c20fSFrederick Mayle /* The only reason to have a max limit for this is to avoid the risk of a bad
188*9712c20fSFrederick Mayle    server feeding libcurl with a never-ending header that will cause reallocs
189*9712c20fSFrederick Mayle    infinitely */
190*9712c20fSFrederick Mayle #define CURL_MAX_HTTP_HEADER (100*1024)
191*9712c20fSFrederick Mayle #endif
192*9712c20fSFrederick Mayle 
193*9712c20fSFrederick Mayle 
194*9712c20fSFrederick Mayle /* This is a magic return code for the write callback that, when returned,
195*9712c20fSFrederick Mayle    will signal libcurl to pause receiving on the current transfer. */
196*9712c20fSFrederick Mayle #define CURL_WRITEFUNC_PAUSE 0x10000001
197*9712c20fSFrederick Mayle typedef size_t (*curl_write_callback)(char *buffer,
198*9712c20fSFrederick Mayle                                       size_t size,
199*9712c20fSFrederick Mayle                                       size_t nitems,
200*9712c20fSFrederick Mayle                                       void *outstream);
201*9712c20fSFrederick Mayle 
202*9712c20fSFrederick Mayle /* These are the return codes for the seek callbacks */
203*9712c20fSFrederick Mayle #define CURL_SEEKFUNC_OK       0
204*9712c20fSFrederick Mayle #define CURL_SEEKFUNC_FAIL     1 /* fail the entire transfer */
205*9712c20fSFrederick Mayle #define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so
206*9712c20fSFrederick Mayle                                     libcurl might try other means instead */
207*9712c20fSFrederick Mayle typedef int (*curl_seek_callback)(void *instream,
208*9712c20fSFrederick Mayle                                   curl_off_t offset,
209*9712c20fSFrederick Mayle                                   int origin); /* 'whence' */
210*9712c20fSFrederick Mayle 
211*9712c20fSFrederick Mayle /* This is a return code for the read callback that, when returned, will
212*9712c20fSFrederick Mayle    signal libcurl to immediately abort the current transfer. */
213*9712c20fSFrederick Mayle #define CURL_READFUNC_ABORT 0x10000000
214*9712c20fSFrederick Mayle /* This is a return code for the read callback that, when returned, will
215*9712c20fSFrederick Mayle    signal libcurl to pause sending data on the current transfer. */
216*9712c20fSFrederick Mayle #define CURL_READFUNC_PAUSE 0x10000001
217*9712c20fSFrederick Mayle 
218*9712c20fSFrederick Mayle typedef size_t (*curl_read_callback)(char *buffer,
219*9712c20fSFrederick Mayle                                       size_t size,
220*9712c20fSFrederick Mayle                                       size_t nitems,
221*9712c20fSFrederick Mayle                                       void *instream);
222*9712c20fSFrederick Mayle 
223*9712c20fSFrederick Mayle typedef enum  {
224*9712c20fSFrederick Mayle   CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */
225*9712c20fSFrederick Mayle   CURLSOCKTYPE_LAST   /* never use */
226*9712c20fSFrederick Mayle } curlsocktype;
227*9712c20fSFrederick Mayle 
228*9712c20fSFrederick Mayle typedef int (*curl_sockopt_callback)(void *clientp,
229*9712c20fSFrederick Mayle                                      curl_socket_t curlfd,
230*9712c20fSFrederick Mayle                                      curlsocktype purpose);
231*9712c20fSFrederick Mayle 
232*9712c20fSFrederick Mayle struct curl_sockaddr {
233*9712c20fSFrederick Mayle   int family;
234*9712c20fSFrederick Mayle   int socktype;
235*9712c20fSFrederick Mayle   int protocol;
236*9712c20fSFrederick Mayle   unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it
237*9712c20fSFrederick Mayle                            turned really ugly and painful on the systems that
238*9712c20fSFrederick Mayle                            lack this type */
239*9712c20fSFrederick Mayle   struct sockaddr addr;
240*9712c20fSFrederick Mayle };
241*9712c20fSFrederick Mayle 
242*9712c20fSFrederick Mayle typedef curl_socket_t
243*9712c20fSFrederick Mayle (*curl_opensocket_callback)(void *clientp,
244*9712c20fSFrederick Mayle                             curlsocktype purpose,
245*9712c20fSFrederick Mayle                             struct curl_sockaddr *address);
246*9712c20fSFrederick Mayle 
247*9712c20fSFrederick Mayle #ifndef CURL_NO_OLDIES
248*9712c20fSFrederick Mayle   /* not used since 7.10.8, will be removed in a future release */
249*9712c20fSFrederick Mayle typedef int (*curl_passwd_callback)(void *clientp,
250*9712c20fSFrederick Mayle                                     const char *prompt,
251*9712c20fSFrederick Mayle                                     char *buffer,
252*9712c20fSFrederick Mayle                                     int buflen);
253*9712c20fSFrederick Mayle #endif
254*9712c20fSFrederick Mayle 
255*9712c20fSFrederick Mayle typedef enum {
256*9712c20fSFrederick Mayle   CURLIOE_OK,            /* I/O operation successful */
257*9712c20fSFrederick Mayle   CURLIOE_UNKNOWNCMD,    /* command was unknown to callback */
258*9712c20fSFrederick Mayle   CURLIOE_FAILRESTART,   /* failed to restart the read */
259*9712c20fSFrederick Mayle   CURLIOE_LAST           /* never use */
260*9712c20fSFrederick Mayle } curlioerr;
261*9712c20fSFrederick Mayle 
262*9712c20fSFrederick Mayle typedef enum  {
263*9712c20fSFrederick Mayle   CURLIOCMD_NOP,         /* no operation */
264*9712c20fSFrederick Mayle   CURLIOCMD_RESTARTREAD, /* restart the read stream from start */
265*9712c20fSFrederick Mayle   CURLIOCMD_LAST         /* never use */
266*9712c20fSFrederick Mayle } curliocmd;
267*9712c20fSFrederick Mayle 
268*9712c20fSFrederick Mayle typedef curlioerr (*curl_ioctl_callback)(CURL *handle,
269*9712c20fSFrederick Mayle                                          int cmd,
270*9712c20fSFrederick Mayle                                          void *clientp);
271*9712c20fSFrederick Mayle 
272*9712c20fSFrederick Mayle /*
273*9712c20fSFrederick Mayle  * The following typedef's are signatures of malloc, free, realloc, strdup and
274*9712c20fSFrederick Mayle  * calloc respectively.  Function pointers of these types can be passed to the
275*9712c20fSFrederick Mayle  * curl_global_init_mem() function to set user defined memory management
276*9712c20fSFrederick Mayle  * callback routines.
277*9712c20fSFrederick Mayle  */
278*9712c20fSFrederick Mayle typedef void *(*curl_malloc_callback)(size_t size);
279*9712c20fSFrederick Mayle typedef void (*curl_free_callback)(void *ptr);
280*9712c20fSFrederick Mayle typedef void *(*curl_realloc_callback)(void *ptr, size_t size);
281*9712c20fSFrederick Mayle typedef char *(*curl_strdup_callback)(const char *str);
282*9712c20fSFrederick Mayle typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size);
283*9712c20fSFrederick Mayle 
284*9712c20fSFrederick Mayle /* the kind of data that is passed to information_callback*/
285*9712c20fSFrederick Mayle typedef enum {
286*9712c20fSFrederick Mayle   CURLINFO_TEXT = 0,
287*9712c20fSFrederick Mayle   CURLINFO_HEADER_IN,    /* 1 */
288*9712c20fSFrederick Mayle   CURLINFO_HEADER_OUT,   /* 2 */
289*9712c20fSFrederick Mayle   CURLINFO_DATA_IN,      /* 3 */
290*9712c20fSFrederick Mayle   CURLINFO_DATA_OUT,     /* 4 */
291*9712c20fSFrederick Mayle   CURLINFO_SSL_DATA_IN,  /* 5 */
292*9712c20fSFrederick Mayle   CURLINFO_SSL_DATA_OUT, /* 6 */
293*9712c20fSFrederick Mayle   CURLINFO_END
294*9712c20fSFrederick Mayle } curl_infotype;
295*9712c20fSFrederick Mayle 
296*9712c20fSFrederick Mayle typedef int (*curl_debug_callback)
297*9712c20fSFrederick Mayle        (CURL *handle,      /* the handle/transfer this concerns */
298*9712c20fSFrederick Mayle         curl_infotype type, /* what kind of data */
299*9712c20fSFrederick Mayle         char *data,        /* points to the data */
300*9712c20fSFrederick Mayle         size_t size,       /* size of the data pointed to */
301*9712c20fSFrederick Mayle         void *userptr);    /* whatever the user please */
302*9712c20fSFrederick Mayle 
303*9712c20fSFrederick Mayle /* All possible error codes from all sorts of curl functions. Future versions
304*9712c20fSFrederick Mayle    may return other values, stay prepared.
305*9712c20fSFrederick Mayle 
306*9712c20fSFrederick Mayle    Always add new return codes last. Never *EVER* remove any. The return
307*9712c20fSFrederick Mayle    codes must remain the same!
308*9712c20fSFrederick Mayle  */
309*9712c20fSFrederick Mayle 
310*9712c20fSFrederick Mayle typedef enum {
311*9712c20fSFrederick Mayle   CURLE_OK = 0,
312*9712c20fSFrederick Mayle   CURLE_UNSUPPORTED_PROTOCOL,    /* 1 */
313*9712c20fSFrederick Mayle   CURLE_FAILED_INIT,             /* 2 */
314*9712c20fSFrederick Mayle   CURLE_URL_MALFORMAT,           /* 3 */
315*9712c20fSFrederick Mayle   CURLE_OBSOLETE4,               /* 4 - NOT USED */
316*9712c20fSFrederick Mayle   CURLE_COULDNT_RESOLVE_PROXY,   /* 5 */
317*9712c20fSFrederick Mayle   CURLE_COULDNT_RESOLVE_HOST,    /* 6 */
318*9712c20fSFrederick Mayle   CURLE_COULDNT_CONNECT,         /* 7 */
319*9712c20fSFrederick Mayle   CURLE_FTP_WEIRD_SERVER_REPLY,  /* 8 */
320*9712c20fSFrederick Mayle   CURLE_REMOTE_ACCESS_DENIED,    /* 9 a service was denied by the server
321*9712c20fSFrederick Mayle                                     due to lack of access - when login fails
322*9712c20fSFrederick Mayle                                     this is not returned. */
323*9712c20fSFrederick Mayle   CURLE_OBSOLETE10,              /* 10 - NOT USED */
324*9712c20fSFrederick Mayle   CURLE_FTP_WEIRD_PASS_REPLY,    /* 11 */
325*9712c20fSFrederick Mayle   CURLE_OBSOLETE12,              /* 12 - NOT USED */
326*9712c20fSFrederick Mayle   CURLE_FTP_WEIRD_PASV_REPLY,    /* 13 */
327*9712c20fSFrederick Mayle   CURLE_FTP_WEIRD_227_FORMAT,    /* 14 */
328*9712c20fSFrederick Mayle   CURLE_FTP_CANT_GET_HOST,       /* 15 */
329*9712c20fSFrederick Mayle   CURLE_OBSOLETE16,              /* 16 - NOT USED */
330*9712c20fSFrederick Mayle   CURLE_FTP_COULDNT_SET_TYPE,    /* 17 */
331*9712c20fSFrederick Mayle   CURLE_PARTIAL_FILE,            /* 18 */
332*9712c20fSFrederick Mayle   CURLE_FTP_COULDNT_RETR_FILE,   /* 19 */
333*9712c20fSFrederick Mayle   CURLE_OBSOLETE20,              /* 20 - NOT USED */
334*9712c20fSFrederick Mayle   CURLE_QUOTE_ERROR,             /* 21 - quote command failure */
335*9712c20fSFrederick Mayle   CURLE_HTTP_RETURNED_ERROR,     /* 22 */
336*9712c20fSFrederick Mayle   CURLE_WRITE_ERROR,             /* 23 */
337*9712c20fSFrederick Mayle   CURLE_OBSOLETE24,              /* 24 - NOT USED */
338*9712c20fSFrederick Mayle   CURLE_UPLOAD_FAILED,           /* 25 - failed upload "command" */
339*9712c20fSFrederick Mayle   CURLE_READ_ERROR,              /* 26 - couldn't open/read from file */
340*9712c20fSFrederick Mayle   CURLE_OUT_OF_MEMORY,           /* 27 */
341*9712c20fSFrederick Mayle   /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error
342*9712c20fSFrederick Mayle            instead of a memory allocation error if CURL_DOES_CONVERSIONS
343*9712c20fSFrederick Mayle            is defined
344*9712c20fSFrederick Mayle   */
345*9712c20fSFrederick Mayle   CURLE_OPERATION_TIMEDOUT,      /* 28 - the timeout time was reached */
346*9712c20fSFrederick Mayle   CURLE_OBSOLETE29,              /* 29 - NOT USED */
347*9712c20fSFrederick Mayle   CURLE_FTP_PORT_FAILED,         /* 30 - FTP PORT operation failed */
348*9712c20fSFrederick Mayle   CURLE_FTP_COULDNT_USE_REST,    /* 31 - the REST command failed */
349*9712c20fSFrederick Mayle   CURLE_OBSOLETE32,              /* 32 - NOT USED */
350*9712c20fSFrederick Mayle   CURLE_RANGE_ERROR,             /* 33 - RANGE "command" didn't work */
351*9712c20fSFrederick Mayle   CURLE_HTTP_POST_ERROR,         /* 34 */
352*9712c20fSFrederick Mayle   CURLE_SSL_CONNECT_ERROR,       /* 35 - wrong when connecting with SSL */
353*9712c20fSFrederick Mayle   CURLE_BAD_DOWNLOAD_RESUME,     /* 36 - couldn't resume download */
354*9712c20fSFrederick Mayle   CURLE_FILE_COULDNT_READ_FILE,  /* 37 */
355*9712c20fSFrederick Mayle   CURLE_LDAP_CANNOT_BIND,        /* 38 */
356*9712c20fSFrederick Mayle   CURLE_LDAP_SEARCH_FAILED,      /* 39 */
357*9712c20fSFrederick Mayle   CURLE_OBSOLETE40,              /* 40 - NOT USED */
358*9712c20fSFrederick Mayle   CURLE_FUNCTION_NOT_FOUND,      /* 41 */
359*9712c20fSFrederick Mayle   CURLE_ABORTED_BY_CALLBACK,     /* 42 */
360*9712c20fSFrederick Mayle   CURLE_BAD_FUNCTION_ARGUMENT,   /* 43 */
361*9712c20fSFrederick Mayle   CURLE_OBSOLETE44,              /* 44 - NOT USED */
362*9712c20fSFrederick Mayle   CURLE_INTERFACE_FAILED,        /* 45 - CURLOPT_INTERFACE failed */
363*9712c20fSFrederick Mayle   CURLE_OBSOLETE46,              /* 46 - NOT USED */
364*9712c20fSFrederick Mayle   CURLE_TOO_MANY_REDIRECTS ,     /* 47 - catch endless re-direct loops */
365*9712c20fSFrederick Mayle   CURLE_UNKNOWN_TELNET_OPTION,   /* 48 - User specified an unknown option */
366*9712c20fSFrederick Mayle   CURLE_TELNET_OPTION_SYNTAX ,   /* 49 - Malformed telnet option */
367*9712c20fSFrederick Mayle   CURLE_OBSOLETE50,              /* 50 - NOT USED */
368*9712c20fSFrederick Mayle   CURLE_PEER_FAILED_VERIFICATION, /* 51 - peer's certificate or fingerprint
369*9712c20fSFrederick Mayle                                      wasn't verified fine */
370*9712c20fSFrederick Mayle   CURLE_GOT_NOTHING,             /* 52 - when this is a specific error */
371*9712c20fSFrederick Mayle   CURLE_SSL_ENGINE_NOTFOUND,     /* 53 - SSL crypto engine not found */
372*9712c20fSFrederick Mayle   CURLE_SSL_ENGINE_SETFAILED,    /* 54 - can not set SSL crypto engine as
373*9712c20fSFrederick Mayle                                     default */
374*9712c20fSFrederick Mayle   CURLE_SEND_ERROR,              /* 55 - failed sending network data */
375*9712c20fSFrederick Mayle   CURLE_RECV_ERROR,              /* 56 - failure in receiving network data */
376*9712c20fSFrederick Mayle   CURLE_OBSOLETE57,              /* 57 - NOT IN USE */
377*9712c20fSFrederick Mayle   CURLE_SSL_CERTPROBLEM,         /* 58 - problem with the local certificate */
378*9712c20fSFrederick Mayle   CURLE_SSL_CIPHER,              /* 59 - couldn't use specified cipher */
379*9712c20fSFrederick Mayle   CURLE_SSL_CACERT,              /* 60 - problem with the CA cert (path?) */
380*9712c20fSFrederick Mayle   CURLE_BAD_CONTENT_ENCODING,    /* 61 - Unrecognized transfer encoding */
381*9712c20fSFrederick Mayle   CURLE_LDAP_INVALID_URL,        /* 62 - Invalid LDAP URL */
382*9712c20fSFrederick Mayle   CURLE_FILESIZE_EXCEEDED,       /* 63 - Maximum file size exceeded */
383*9712c20fSFrederick Mayle   CURLE_USE_SSL_FAILED,          /* 64 - Requested FTP SSL level failed */
384*9712c20fSFrederick Mayle   CURLE_SEND_FAIL_REWIND,        /* 65 - Sending the data requires a rewind
385*9712c20fSFrederick Mayle                                     that failed */
386*9712c20fSFrederick Mayle   CURLE_SSL_ENGINE_INITFAILED,   /* 66 - failed to initialise ENGINE */
387*9712c20fSFrederick Mayle   CURLE_LOGIN_DENIED,            /* 67 - user, password or similar was not
388*9712c20fSFrederick Mayle                                     accepted and we failed to login */
389*9712c20fSFrederick Mayle   CURLE_TFTP_NOTFOUND,           /* 68 - file not found on server */
390*9712c20fSFrederick Mayle   CURLE_TFTP_PERM,               /* 69 - permission problem on server */
391*9712c20fSFrederick Mayle   CURLE_REMOTE_DISK_FULL,        /* 70 - out of disk space on server */
392*9712c20fSFrederick Mayle   CURLE_TFTP_ILLEGAL,            /* 71 - Illegal TFTP operation */
393*9712c20fSFrederick Mayle   CURLE_TFTP_UNKNOWNID,          /* 72 - Unknown transfer ID */
394*9712c20fSFrederick Mayle   CURLE_REMOTE_FILE_EXISTS,      /* 73 - File already exists */
395*9712c20fSFrederick Mayle   CURLE_TFTP_NOSUCHUSER,         /* 74 - No such user */
396*9712c20fSFrederick Mayle   CURLE_CONV_FAILED,             /* 75 - conversion failed */
397*9712c20fSFrederick Mayle   CURLE_CONV_REQD,               /* 76 - caller must register conversion
398*9712c20fSFrederick Mayle                                     callbacks using curl_easy_setopt options
399*9712c20fSFrederick Mayle                                     CURLOPT_CONV_FROM_NETWORK_FUNCTION,
400*9712c20fSFrederick Mayle                                     CURLOPT_CONV_TO_NETWORK_FUNCTION, and
401*9712c20fSFrederick Mayle                                     CURLOPT_CONV_FROM_UTF8_FUNCTION */
402*9712c20fSFrederick Mayle   CURLE_SSL_CACERT_BADFILE,      /* 77 - could not load CACERT file, missing
403*9712c20fSFrederick Mayle                                     or wrong format */
404*9712c20fSFrederick Mayle   CURLE_REMOTE_FILE_NOT_FOUND,   /* 78 - remote file not found */
405*9712c20fSFrederick Mayle   CURLE_SSH,                     /* 79 - error from the SSH layer, somewhat
406*9712c20fSFrederick Mayle                                     generic so the error message will be of
407*9712c20fSFrederick Mayle                                     interest when this has happened */
408*9712c20fSFrederick Mayle 
409*9712c20fSFrederick Mayle   CURLE_SSL_SHUTDOWN_FAILED,     /* 80 - Failed to shut down the SSL
410*9712c20fSFrederick Mayle                                     connection */
411*9712c20fSFrederick Mayle   CURLE_AGAIN,                   /* 81 - socket is not ready for send/recv,
412*9712c20fSFrederick Mayle                                     wait till it's ready and try again (Added
413*9712c20fSFrederick Mayle                                     in 7.18.2) */
414*9712c20fSFrederick Mayle   CURLE_SSL_CRL_BADFILE,         /* 82 - could not load CRL file, missing or
415*9712c20fSFrederick Mayle                                     wrong format (Added in 7.19.0) */
416*9712c20fSFrederick Mayle   CURLE_SSL_ISSUER_ERROR,        /* 83 - Issuer check failed.  (Added in
417*9712c20fSFrederick Mayle                                     7.19.0) */
418*9712c20fSFrederick Mayle   CURL_LAST /* never use! */
419*9712c20fSFrederick Mayle } CURLcode;
420*9712c20fSFrederick Mayle 
421*9712c20fSFrederick Mayle #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
422*9712c20fSFrederick Mayle                           the obsolete stuff removed! */
423*9712c20fSFrederick Mayle 
424*9712c20fSFrederick Mayle /* Backwards compatibility with older names */
425*9712c20fSFrederick Mayle 
426*9712c20fSFrederick Mayle /* The following were added in 7.17.1 */
427*9712c20fSFrederick Mayle /* These are scheduled to disappear by 2009 */
428*9712c20fSFrederick Mayle #define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION
429*9712c20fSFrederick Mayle 
430*9712c20fSFrederick Mayle /* The following were added in 7.17.0 */
431*9712c20fSFrederick Mayle /* These are scheduled to disappear by 2009 */
432*9712c20fSFrederick Mayle #define CURLE_OBSOLETE CURLE_OBSOLETE50 /* noone should be using this! */
433*9712c20fSFrederick Mayle #define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46
434*9712c20fSFrederick Mayle #define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44
435*9712c20fSFrederick Mayle #define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10
436*9712c20fSFrederick Mayle #define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16
437*9712c20fSFrederick Mayle #define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32
438*9712c20fSFrederick Mayle #define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29
439*9712c20fSFrederick Mayle #define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12
440*9712c20fSFrederick Mayle #define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20
441*9712c20fSFrederick Mayle #define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40
442*9712c20fSFrederick Mayle #define CURLE_MALFORMAT_USER CURLE_OBSOLETE24
443*9712c20fSFrederick Mayle #define CURLE_SHARE_IN_USE CURLE_OBSOLETE57
444*9712c20fSFrederick Mayle #define CURLE_URL_MALFORMAT_USER CURLE_OBSOLETE4
445*9712c20fSFrederick Mayle 
446*9712c20fSFrederick Mayle #define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED
447*9712c20fSFrederick Mayle #define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE
448*9712c20fSFrederick Mayle #define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR
449*9712c20fSFrederick Mayle #define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL
450*9712c20fSFrederick Mayle #define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS
451*9712c20fSFrederick Mayle #define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR
452*9712c20fSFrederick Mayle #define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED
453*9712c20fSFrederick Mayle 
454*9712c20fSFrederick Mayle /* The following were added earlier */
455*9712c20fSFrederick Mayle 
456*9712c20fSFrederick Mayle #define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT
457*9712c20fSFrederick Mayle 
458*9712c20fSFrederick Mayle #define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR
459*9712c20fSFrederick Mayle #define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED
460*9712c20fSFrederick Mayle #define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED
461*9712c20fSFrederick Mayle 
462*9712c20fSFrederick Mayle #define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE
463*9712c20fSFrederick Mayle #define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME
464*9712c20fSFrederick Mayle 
465*9712c20fSFrederick Mayle /* This was the error code 50 in 7.7.3 and a few earlier versions, this
466*9712c20fSFrederick Mayle    is no longer used by libcurl but is instead #defined here only to not
467*9712c20fSFrederick Mayle    make programs break */
468*9712c20fSFrederick Mayle #define CURLE_ALREADY_COMPLETE 99999
469*9712c20fSFrederick Mayle 
470*9712c20fSFrederick Mayle #endif /*!CURL_NO_OLDIES*/
471*9712c20fSFrederick Mayle 
472*9712c20fSFrederick Mayle /* This prototype applies to all conversion callbacks */
473*9712c20fSFrederick Mayle typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length);
474*9712c20fSFrederick Mayle 
475*9712c20fSFrederick Mayle typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl,    /* easy handle */
476*9712c20fSFrederick Mayle                                           void *ssl_ctx, /* actually an
477*9712c20fSFrederick Mayle                                                             OpenSSL SSL_CTX */
478*9712c20fSFrederick Mayle                                           void *userptr);
479*9712c20fSFrederick Mayle 
480*9712c20fSFrederick Mayle typedef enum {
481*9712c20fSFrederick Mayle   CURLPROXY_HTTP = 0,   /* added in 7.10, new in 7.19.4 default is to use
482*9712c20fSFrederick Mayle                            CONNECT HTTP/1.1 */
483*9712c20fSFrederick Mayle   CURLPROXY_HTTP_1_0 = 1,   /* added in 7.19.4, force to use CONNECT
484*9712c20fSFrederick Mayle                                HTTP/1.0  */
485*9712c20fSFrederick Mayle   CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already
486*9712c20fSFrederick Mayle                            in 7.10 */
487*9712c20fSFrederick Mayle   CURLPROXY_SOCKS5 = 5, /* added in 7.10 */
488*9712c20fSFrederick Mayle   CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */
489*9712c20fSFrederick Mayle   CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the
490*9712c20fSFrederick Mayle                                    host name rather than the IP address. added
491*9712c20fSFrederick Mayle                                    in 7.18.0 */
492*9712c20fSFrederick Mayle } curl_proxytype;  /* this enum was added in 7.10 */
493*9712c20fSFrederick Mayle 
494*9712c20fSFrederick Mayle #define CURLAUTH_NONE         0       /* nothing */
495*9712c20fSFrederick Mayle #define CURLAUTH_BASIC        (1<<0)  /* Basic (default) */
496*9712c20fSFrederick Mayle #define CURLAUTH_DIGEST       (1<<1)  /* Digest */
497*9712c20fSFrederick Mayle #define CURLAUTH_GSSNEGOTIATE (1<<2)  /* GSS-Negotiate */
498*9712c20fSFrederick Mayle #define CURLAUTH_NTLM         (1<<3)  /* NTLM */
499*9712c20fSFrederick Mayle #define CURLAUTH_DIGEST_IE    (1<<4)  /* Digest with IE flavour */
500*9712c20fSFrederick Mayle #define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE)  /* all fine types set */
501*9712c20fSFrederick Mayle #define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE))
502*9712c20fSFrederick Mayle 
503*9712c20fSFrederick Mayle #define CURLSSH_AUTH_ANY       ~0     /* all types supported by the server */
504*9712c20fSFrederick Mayle #define CURLSSH_AUTH_NONE      0      /* none allowed, silly but complete */
505*9712c20fSFrederick Mayle #define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */
506*9712c20fSFrederick Mayle #define CURLSSH_AUTH_PASSWORD  (1<<1) /* password */
507*9712c20fSFrederick Mayle #define CURLSSH_AUTH_HOST      (1<<2) /* host key files */
508*9712c20fSFrederick Mayle #define CURLSSH_AUTH_KEYBOARD  (1<<3) /* keyboard interactive */
509*9712c20fSFrederick Mayle #define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY
510*9712c20fSFrederick Mayle 
511*9712c20fSFrederick Mayle #define CURL_ERROR_SIZE 256
512*9712c20fSFrederick Mayle 
513*9712c20fSFrederick Mayle struct curl_khkey {
514*9712c20fSFrederick Mayle   const char *key; /* points to a zero-terminated string encoded with base64
515*9712c20fSFrederick Mayle                       if len is zero, otherwise to the "raw" data */
516*9712c20fSFrederick Mayle   size_t len;
517*9712c20fSFrederick Mayle   enum type {
518*9712c20fSFrederick Mayle     CURLKHTYPE_UNKNOWN,
519*9712c20fSFrederick Mayle     CURLKHTYPE_RSA1,
520*9712c20fSFrederick Mayle     CURLKHTYPE_RSA,
521*9712c20fSFrederick Mayle     CURLKHTYPE_DSS
522*9712c20fSFrederick Mayle   } keytype;
523*9712c20fSFrederick Mayle };
524*9712c20fSFrederick Mayle 
525*9712c20fSFrederick Mayle /* this is the set of return values expected from the curl_sshkeycallback
526*9712c20fSFrederick Mayle    callback */
527*9712c20fSFrederick Mayle enum curl_khstat {
528*9712c20fSFrederick Mayle   CURLKHSTAT_FINE_ADD_TO_FILE,
529*9712c20fSFrederick Mayle   CURLKHSTAT_FINE,
530*9712c20fSFrederick Mayle   CURLKHSTAT_REJECT, /* reject the connection, return an error */
531*9712c20fSFrederick Mayle   CURLKHSTAT_DEFER,  /* do not accept it, but we can't answer right now so
532*9712c20fSFrederick Mayle                         this causes a CURLE_DEFER error but otherwise the
533*9712c20fSFrederick Mayle                         connection will be left intact etc */
534*9712c20fSFrederick Mayle   CURLKHSTAT_LAST    /* not for use, only a marker for last-in-list */
535*9712c20fSFrederick Mayle };
536*9712c20fSFrederick Mayle 
537*9712c20fSFrederick Mayle /* this is the set of status codes pass in to the callback */
538*9712c20fSFrederick Mayle enum curl_khmatch {
539*9712c20fSFrederick Mayle   CURLKHMATCH_OK,       /* match */
540*9712c20fSFrederick Mayle   CURLKHMATCH_MISMATCH, /* host found, key mismatch! */
541*9712c20fSFrederick Mayle   CURLKHMATCH_MISSING,  /* no matching host/key found */
542*9712c20fSFrederick Mayle   CURLKHMATCH_LAST      /* not for use, only a marker for last-in-list */
543*9712c20fSFrederick Mayle };
544*9712c20fSFrederick Mayle 
545*9712c20fSFrederick Mayle typedef int
546*9712c20fSFrederick Mayle   (*curl_sshkeycallback) (CURL *easy,     /* easy handle */
547*9712c20fSFrederick Mayle                           const struct curl_khkey *knownkey, /* known */
548*9712c20fSFrederick Mayle                           const struct curl_khkey *foundkey, /* found */
549*9712c20fSFrederick Mayle                           enum curl_khmatch, /* libcurl's view on the keys */
550*9712c20fSFrederick Mayle                           void *clientp); /* custom pointer passed from app */
551*9712c20fSFrederick Mayle 
552*9712c20fSFrederick Mayle /* parameter for the CURLOPT_USE_SSL option */
553*9712c20fSFrederick Mayle typedef enum {
554*9712c20fSFrederick Mayle   CURLUSESSL_NONE,    /* do not attempt to use SSL */
555*9712c20fSFrederick Mayle   CURLUSESSL_TRY,     /* try using SSL, proceed anyway otherwise */
556*9712c20fSFrederick Mayle   CURLUSESSL_CONTROL, /* SSL for the control connection or fail */
557*9712c20fSFrederick Mayle   CURLUSESSL_ALL,     /* SSL for all communication or fail */
558*9712c20fSFrederick Mayle   CURLUSESSL_LAST     /* not an option, never use */
559*9712c20fSFrederick Mayle } curl_usessl;
560*9712c20fSFrederick Mayle 
561*9712c20fSFrederick Mayle #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
562*9712c20fSFrederick Mayle                           the obsolete stuff removed! */
563*9712c20fSFrederick Mayle 
564*9712c20fSFrederick Mayle /* Backwards compatibility with older names */
565*9712c20fSFrederick Mayle /* These are scheduled to disappear by 2009 */
566*9712c20fSFrederick Mayle 
567*9712c20fSFrederick Mayle #define CURLFTPSSL_NONE CURLUSESSL_NONE
568*9712c20fSFrederick Mayle #define CURLFTPSSL_TRY CURLUSESSL_TRY
569*9712c20fSFrederick Mayle #define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL
570*9712c20fSFrederick Mayle #define CURLFTPSSL_ALL CURLUSESSL_ALL
571*9712c20fSFrederick Mayle #define CURLFTPSSL_LAST CURLUSESSL_LAST
572*9712c20fSFrederick Mayle #define curl_ftpssl curl_usessl
573*9712c20fSFrederick Mayle #endif /*!CURL_NO_OLDIES*/
574*9712c20fSFrederick Mayle 
575*9712c20fSFrederick Mayle /* parameter for the CURLOPT_FTP_SSL_CCC option */
576*9712c20fSFrederick Mayle typedef enum {
577*9712c20fSFrederick Mayle   CURLFTPSSL_CCC_NONE,    /* do not send CCC */
578*9712c20fSFrederick Mayle   CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */
579*9712c20fSFrederick Mayle   CURLFTPSSL_CCC_ACTIVE,  /* Initiate the shutdown */
580*9712c20fSFrederick Mayle   CURLFTPSSL_CCC_LAST     /* not an option, never use */
581*9712c20fSFrederick Mayle } curl_ftpccc;
582*9712c20fSFrederick Mayle 
583*9712c20fSFrederick Mayle /* parameter for the CURLOPT_FTPSSLAUTH option */
584*9712c20fSFrederick Mayle typedef enum {
585*9712c20fSFrederick Mayle   CURLFTPAUTH_DEFAULT, /* let libcurl decide */
586*9712c20fSFrederick Mayle   CURLFTPAUTH_SSL,     /* use "AUTH SSL" */
587*9712c20fSFrederick Mayle   CURLFTPAUTH_TLS,     /* use "AUTH TLS" */
588*9712c20fSFrederick Mayle   CURLFTPAUTH_LAST /* not an option, never use */
589*9712c20fSFrederick Mayle } curl_ftpauth;
590*9712c20fSFrederick Mayle 
591*9712c20fSFrederick Mayle /* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */
592*9712c20fSFrederick Mayle typedef enum {
593*9712c20fSFrederick Mayle   CURLFTP_CREATE_DIR_NONE,  /* do NOT create missing dirs! */
594*9712c20fSFrederick Mayle   CURLFTP_CREATE_DIR,       /* (FTP/SFTP) if CWD fails, try MKD and then CWD
595*9712c20fSFrederick Mayle                                again if MKD succeeded, for SFTP this does
596*9712c20fSFrederick Mayle                                similar magic */
597*9712c20fSFrederick Mayle   CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD
598*9712c20fSFrederick Mayle                                again even if MKD failed! */
599*9712c20fSFrederick Mayle   CURLFTP_CREATE_DIR_LAST   /* not an option, never use */
600*9712c20fSFrederick Mayle } curl_ftpcreatedir;
601*9712c20fSFrederick Mayle 
602*9712c20fSFrederick Mayle /* parameter for the CURLOPT_FTP_FILEMETHOD option */
603*9712c20fSFrederick Mayle typedef enum {
604*9712c20fSFrederick Mayle   CURLFTPMETHOD_DEFAULT,   /* let libcurl pick */
605*9712c20fSFrederick Mayle   CURLFTPMETHOD_MULTICWD,  /* single CWD operation for each path part */
606*9712c20fSFrederick Mayle   CURLFTPMETHOD_NOCWD,     /* no CWD at all */
607*9712c20fSFrederick Mayle   CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */
608*9712c20fSFrederick Mayle   CURLFTPMETHOD_LAST       /* not an option, never use */
609*9712c20fSFrederick Mayle } curl_ftpmethod;
610*9712c20fSFrederick Mayle 
611*9712c20fSFrederick Mayle /* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */
612*9712c20fSFrederick Mayle #define CURLPROTO_HTTP   (1<<0)
613*9712c20fSFrederick Mayle #define CURLPROTO_HTTPS  (1<<1)
614*9712c20fSFrederick Mayle #define CURLPROTO_FTP    (1<<2)
615*9712c20fSFrederick Mayle #define CURLPROTO_FTPS   (1<<3)
616*9712c20fSFrederick Mayle #define CURLPROTO_SCP    (1<<4)
617*9712c20fSFrederick Mayle #define CURLPROTO_SFTP   (1<<5)
618*9712c20fSFrederick Mayle #define CURLPROTO_TELNET (1<<6)
619*9712c20fSFrederick Mayle #define CURLPROTO_LDAP   (1<<7)
620*9712c20fSFrederick Mayle #define CURLPROTO_LDAPS  (1<<8)
621*9712c20fSFrederick Mayle #define CURLPROTO_DICT   (1<<9)
622*9712c20fSFrederick Mayle #define CURLPROTO_FILE   (1<<10)
623*9712c20fSFrederick Mayle #define CURLPROTO_TFTP   (1<<11)
624*9712c20fSFrederick Mayle #define CURLPROTO_ALL    (~0) /* enable everything */
625*9712c20fSFrederick Mayle 
626*9712c20fSFrederick Mayle /* long may be 32 or 64 bits, but we should never depend on anything else
627*9712c20fSFrederick Mayle    but 32 */
628*9712c20fSFrederick Mayle #define CURLOPTTYPE_LONG          0
629*9712c20fSFrederick Mayle #define CURLOPTTYPE_OBJECTPOINT   10000
630*9712c20fSFrederick Mayle #define CURLOPTTYPE_FUNCTIONPOINT 20000
631*9712c20fSFrederick Mayle #define CURLOPTTYPE_OFF_T         30000
632*9712c20fSFrederick Mayle 
633*9712c20fSFrederick Mayle /* name is uppercase CURLOPT_<name>,
634*9712c20fSFrederick Mayle    type is one of the defined CURLOPTTYPE_<type>
635*9712c20fSFrederick Mayle    number is unique identifier */
636*9712c20fSFrederick Mayle #ifdef CINIT
637*9712c20fSFrederick Mayle #undef CINIT
638*9712c20fSFrederick Mayle #endif
639*9712c20fSFrederick Mayle 
640*9712c20fSFrederick Mayle #ifdef CURL_ISOCPP
641*9712c20fSFrederick Mayle #define CINIT(name,type,number) CURLOPT_ ## name = CURLOPTTYPE_ ## type + number
642*9712c20fSFrederick Mayle #else
643*9712c20fSFrederick Mayle /* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
644*9712c20fSFrederick Mayle #define LONG          CURLOPTTYPE_LONG
645*9712c20fSFrederick Mayle #define OBJECTPOINT   CURLOPTTYPE_OBJECTPOINT
646*9712c20fSFrederick Mayle #define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
647*9712c20fSFrederick Mayle #define OFF_T         CURLOPTTYPE_OFF_T
648*9712c20fSFrederick Mayle #define CINIT(name,type,number) CURLOPT_/**/name = type + number
649*9712c20fSFrederick Mayle #endif
650*9712c20fSFrederick Mayle 
651*9712c20fSFrederick Mayle /*
652*9712c20fSFrederick Mayle  * This macro-mania below setups the CURLOPT_[what] enum, to be used with
653*9712c20fSFrederick Mayle  * curl_easy_setopt(). The first argument in the CINIT() macro is the [what]
654*9712c20fSFrederick Mayle  * word.
655*9712c20fSFrederick Mayle  */
656*9712c20fSFrederick Mayle 
657*9712c20fSFrederick Mayle typedef enum {
658*9712c20fSFrederick Mayle   /* This is the FILE * or void * the regular output should be written to. */
659*9712c20fSFrederick Mayle   CINIT(FILE, OBJECTPOINT, 1),
660*9712c20fSFrederick Mayle 
661*9712c20fSFrederick Mayle   /* The full URL to get/put */
662*9712c20fSFrederick Mayle   CINIT(URL,  OBJECTPOINT, 2),
663*9712c20fSFrederick Mayle 
664*9712c20fSFrederick Mayle   /* Port number to connect to, if other than default. */
665*9712c20fSFrederick Mayle   CINIT(PORT, LONG, 3),
666*9712c20fSFrederick Mayle 
667*9712c20fSFrederick Mayle   /* Name of proxy to use. */
668*9712c20fSFrederick Mayle   CINIT(PROXY, OBJECTPOINT, 4),
669*9712c20fSFrederick Mayle 
670*9712c20fSFrederick Mayle   /* "name:password" to use when fetching. */
671*9712c20fSFrederick Mayle   CINIT(USERPWD, OBJECTPOINT, 5),
672*9712c20fSFrederick Mayle 
673*9712c20fSFrederick Mayle   /* "name:password" to use with proxy. */
674*9712c20fSFrederick Mayle   CINIT(PROXYUSERPWD, OBJECTPOINT, 6),
675*9712c20fSFrederick Mayle 
676*9712c20fSFrederick Mayle   /* Range to get, specified as an ASCII string. */
677*9712c20fSFrederick Mayle   CINIT(RANGE, OBJECTPOINT, 7),
678*9712c20fSFrederick Mayle 
679*9712c20fSFrederick Mayle   /* not used */
680*9712c20fSFrederick Mayle 
681*9712c20fSFrederick Mayle   /* Specified file stream to upload from (use as input): */
682*9712c20fSFrederick Mayle   CINIT(INFILE, OBJECTPOINT, 9),
683*9712c20fSFrederick Mayle 
684*9712c20fSFrederick Mayle   /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE
685*9712c20fSFrederick Mayle    * bytes big. If this is not used, error messages go to stderr instead: */
686*9712c20fSFrederick Mayle   CINIT(ERRORBUFFER, OBJECTPOINT, 10),
687*9712c20fSFrederick Mayle 
688*9712c20fSFrederick Mayle   /* Function that will be called to store the output (instead of fwrite). The
689*9712c20fSFrederick Mayle    * parameters will use fwrite() syntax, make sure to follow them. */
690*9712c20fSFrederick Mayle   CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11),
691*9712c20fSFrederick Mayle 
692*9712c20fSFrederick Mayle   /* Function that will be called to read the input (instead of fread). The
693*9712c20fSFrederick Mayle    * parameters will use fread() syntax, make sure to follow them. */
694*9712c20fSFrederick Mayle   CINIT(READFUNCTION, FUNCTIONPOINT, 12),
695*9712c20fSFrederick Mayle 
696*9712c20fSFrederick Mayle   /* Time-out the read operation after this amount of seconds */
697*9712c20fSFrederick Mayle   CINIT(TIMEOUT, LONG, 13),
698*9712c20fSFrederick Mayle 
699*9712c20fSFrederick Mayle   /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about
700*9712c20fSFrederick Mayle    * how large the file being sent really is. That allows better error
701*9712c20fSFrederick Mayle    * checking and better verifies that the upload was successful. -1 means
702*9712c20fSFrederick Mayle    * unknown size.
703*9712c20fSFrederick Mayle    *
704*9712c20fSFrederick Mayle    * For large file support, there is also a _LARGE version of the key
705*9712c20fSFrederick Mayle    * which takes an off_t type, allowing platforms with larger off_t
706*9712c20fSFrederick Mayle    * sizes to handle larger files.  See below for INFILESIZE_LARGE.
707*9712c20fSFrederick Mayle    */
708*9712c20fSFrederick Mayle   CINIT(INFILESIZE, LONG, 14),
709*9712c20fSFrederick Mayle 
710*9712c20fSFrederick Mayle   /* POST static input fields. */
711*9712c20fSFrederick Mayle   CINIT(POSTFIELDS, OBJECTPOINT, 15),
712*9712c20fSFrederick Mayle 
713*9712c20fSFrederick Mayle   /* Set the referrer page (needed by some CGIs) */
714*9712c20fSFrederick Mayle   CINIT(REFERER, OBJECTPOINT, 16),
715*9712c20fSFrederick Mayle 
716*9712c20fSFrederick Mayle   /* Set the FTP PORT string (interface name, named or numerical IP address)
717*9712c20fSFrederick Mayle      Use i.e '-' to use default address. */
718*9712c20fSFrederick Mayle   CINIT(FTPPORT, OBJECTPOINT, 17),
719*9712c20fSFrederick Mayle 
720*9712c20fSFrederick Mayle   /* Set the User-Agent string (examined by some CGIs) */
721*9712c20fSFrederick Mayle   CINIT(USERAGENT, OBJECTPOINT, 18),
722*9712c20fSFrederick Mayle 
723*9712c20fSFrederick Mayle   /* If the download receives less than "low speed limit" bytes/second
724*9712c20fSFrederick Mayle    * during "low speed time" seconds, the operations is aborted.
725*9712c20fSFrederick Mayle    * You could i.e if you have a pretty high speed connection, abort if
726*9712c20fSFrederick Mayle    * it is less than 2000 bytes/sec during 20 seconds.
727*9712c20fSFrederick Mayle    */
728*9712c20fSFrederick Mayle 
729*9712c20fSFrederick Mayle   /* Set the "low speed limit" */
730*9712c20fSFrederick Mayle   CINIT(LOW_SPEED_LIMIT, LONG, 19),
731*9712c20fSFrederick Mayle 
732*9712c20fSFrederick Mayle   /* Set the "low speed time" */
733*9712c20fSFrederick Mayle   CINIT(LOW_SPEED_TIME, LONG, 20),
734*9712c20fSFrederick Mayle 
735*9712c20fSFrederick Mayle   /* Set the continuation offset.
736*9712c20fSFrederick Mayle    *
737*9712c20fSFrederick Mayle    * Note there is also a _LARGE version of this key which uses
738*9712c20fSFrederick Mayle    * off_t types, allowing for large file offsets on platforms which
739*9712c20fSFrederick Mayle    * use larger-than-32-bit off_t's.  Look below for RESUME_FROM_LARGE.
740*9712c20fSFrederick Mayle    */
741*9712c20fSFrederick Mayle   CINIT(RESUME_FROM, LONG, 21),
742*9712c20fSFrederick Mayle 
743*9712c20fSFrederick Mayle   /* Set cookie in request: */
744*9712c20fSFrederick Mayle   CINIT(COOKIE, OBJECTPOINT, 22),
745*9712c20fSFrederick Mayle 
746*9712c20fSFrederick Mayle   /* This points to a linked list of headers, struct curl_slist kind */
747*9712c20fSFrederick Mayle   CINIT(HTTPHEADER, OBJECTPOINT, 23),
748*9712c20fSFrederick Mayle 
749*9712c20fSFrederick Mayle   /* This points to a linked list of post entries, struct curl_httppost */
750*9712c20fSFrederick Mayle   CINIT(HTTPPOST, OBJECTPOINT, 24),
751*9712c20fSFrederick Mayle 
752*9712c20fSFrederick Mayle   /* name of the file keeping your private SSL-certificate */
753*9712c20fSFrederick Mayle   CINIT(SSLCERT, OBJECTPOINT, 25),
754*9712c20fSFrederick Mayle 
755*9712c20fSFrederick Mayle   /* password for the SSL or SSH private key */
756*9712c20fSFrederick Mayle   CINIT(KEYPASSWD, OBJECTPOINT, 26),
757*9712c20fSFrederick Mayle 
758*9712c20fSFrederick Mayle   /* send TYPE parameter? */
759*9712c20fSFrederick Mayle   CINIT(CRLF, LONG, 27),
760*9712c20fSFrederick Mayle 
761*9712c20fSFrederick Mayle   /* send linked-list of QUOTE commands */
762*9712c20fSFrederick Mayle   CINIT(QUOTE, OBJECTPOINT, 28),
763*9712c20fSFrederick Mayle 
764*9712c20fSFrederick Mayle   /* send FILE * or void * to store headers to, if you use a callback it
765*9712c20fSFrederick Mayle      is simply passed to the callback unmodified */
766*9712c20fSFrederick Mayle   CINIT(WRITEHEADER, OBJECTPOINT, 29),
767*9712c20fSFrederick Mayle 
768*9712c20fSFrederick Mayle   /* point to a file to read the initial cookies from, also enables
769*9712c20fSFrederick Mayle      "cookie awareness" */
770*9712c20fSFrederick Mayle   CINIT(COOKIEFILE, OBJECTPOINT, 31),
771*9712c20fSFrederick Mayle 
772*9712c20fSFrederick Mayle   /* What version to specifically try to use.
773*9712c20fSFrederick Mayle      See CURL_SSLVERSION defines below. */
774*9712c20fSFrederick Mayle   CINIT(SSLVERSION, LONG, 32),
775*9712c20fSFrederick Mayle 
776*9712c20fSFrederick Mayle   /* What kind of HTTP time condition to use, see defines */
777*9712c20fSFrederick Mayle   CINIT(TIMECONDITION, LONG, 33),
778*9712c20fSFrederick Mayle 
779*9712c20fSFrederick Mayle   /* Time to use with the above condition. Specified in number of seconds
780*9712c20fSFrederick Mayle      since 1 Jan 1970 */
781*9712c20fSFrederick Mayle   CINIT(TIMEVALUE, LONG, 34),
782*9712c20fSFrederick Mayle 
783*9712c20fSFrederick Mayle   /* 35 = OBSOLETE */
784*9712c20fSFrederick Mayle 
785*9712c20fSFrederick Mayle   /* Custom request, for customizing the get command like
786*9712c20fSFrederick Mayle      HTTP: DELETE, TRACE and others
787*9712c20fSFrederick Mayle      FTP: to use a different list command
788*9712c20fSFrederick Mayle      */
789*9712c20fSFrederick Mayle   CINIT(CUSTOMREQUEST, OBJECTPOINT, 36),
790*9712c20fSFrederick Mayle 
791*9712c20fSFrederick Mayle   /* HTTP request, for odd commands like DELETE, TRACE and others */
792*9712c20fSFrederick Mayle   CINIT(STDERR, OBJECTPOINT, 37),
793*9712c20fSFrederick Mayle 
794*9712c20fSFrederick Mayle   /* 38 is not used */
795*9712c20fSFrederick Mayle 
796*9712c20fSFrederick Mayle   /* send linked-list of post-transfer QUOTE commands */
797*9712c20fSFrederick Mayle   CINIT(POSTQUOTE, OBJECTPOINT, 39),
798*9712c20fSFrederick Mayle 
799*9712c20fSFrederick Mayle   /* Pass a pointer to string of the output using full variable-replacement
800*9712c20fSFrederick Mayle      as described elsewhere. */
801*9712c20fSFrederick Mayle   CINIT(WRITEINFO, OBJECTPOINT, 40),
802*9712c20fSFrederick Mayle 
803*9712c20fSFrederick Mayle   CINIT(VERBOSE, LONG, 41),      /* talk a lot */
804*9712c20fSFrederick Mayle   CINIT(HEADER, LONG, 42),       /* throw the header out too */
805*9712c20fSFrederick Mayle   CINIT(NOPROGRESS, LONG, 43),   /* shut off the progress meter */
806*9712c20fSFrederick Mayle   CINIT(NOBODY, LONG, 44),       /* use HEAD to get http document */
807*9712c20fSFrederick Mayle   CINIT(FAILONERROR, LONG, 45),  /* no output on http error codes >= 300 */
808*9712c20fSFrederick Mayle   CINIT(UPLOAD, LONG, 46),       /* this is an upload */
809*9712c20fSFrederick Mayle   CINIT(POST, LONG, 47),         /* HTTP POST method */
810*9712c20fSFrederick Mayle   CINIT(DIRLISTONLY, LONG, 48),  /* return bare names when listing directories */
811*9712c20fSFrederick Mayle 
812*9712c20fSFrederick Mayle   CINIT(APPEND, LONG, 50),       /* Append instead of overwrite on upload! */
813*9712c20fSFrederick Mayle 
814*9712c20fSFrederick Mayle   /* Specify whether to read the user+password from the .netrc or the URL.
815*9712c20fSFrederick Mayle    * This must be one of the CURL_NETRC_* enums below. */
816*9712c20fSFrederick Mayle   CINIT(NETRC, LONG, 51),
817*9712c20fSFrederick Mayle 
818*9712c20fSFrederick Mayle   CINIT(FOLLOWLOCATION, LONG, 52),  /* use Location: Luke! */
819*9712c20fSFrederick Mayle 
820*9712c20fSFrederick Mayle   CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */
821*9712c20fSFrederick Mayle   CINIT(PUT, LONG, 54),          /* HTTP PUT */
822*9712c20fSFrederick Mayle 
823*9712c20fSFrederick Mayle   /* 55 = OBSOLETE */
824*9712c20fSFrederick Mayle 
825*9712c20fSFrederick Mayle   /* Function that will be called instead of the internal progress display
826*9712c20fSFrederick Mayle    * function. This function should be defined as the curl_progress_callback
827*9712c20fSFrederick Mayle    * prototype defines. */
828*9712c20fSFrederick Mayle   CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56),
829*9712c20fSFrederick Mayle 
830*9712c20fSFrederick Mayle   /* Data passed to the progress callback */
831*9712c20fSFrederick Mayle   CINIT(PROGRESSDATA, OBJECTPOINT, 57),
832*9712c20fSFrederick Mayle 
833*9712c20fSFrederick Mayle   /* We want the referrer field set automatically when following locations */
834*9712c20fSFrederick Mayle   CINIT(AUTOREFERER, LONG, 58),
835*9712c20fSFrederick Mayle 
836*9712c20fSFrederick Mayle   /* Port of the proxy, can be set in the proxy string as well with:
837*9712c20fSFrederick Mayle      "[host]:[port]" */
838*9712c20fSFrederick Mayle   CINIT(PROXYPORT, LONG, 59),
839*9712c20fSFrederick Mayle 
840*9712c20fSFrederick Mayle   /* size of the POST input data, if strlen() is not good to use */
841*9712c20fSFrederick Mayle   CINIT(POSTFIELDSIZE, LONG, 60),
842*9712c20fSFrederick Mayle 
843*9712c20fSFrederick Mayle   /* tunnel non-http operations through a HTTP proxy */
844*9712c20fSFrederick Mayle   CINIT(HTTPPROXYTUNNEL, LONG, 61),
845*9712c20fSFrederick Mayle 
846*9712c20fSFrederick Mayle   /* Set the interface string to use as outgoing network interface */
847*9712c20fSFrederick Mayle   CINIT(INTERFACE, OBJECTPOINT, 62),
848*9712c20fSFrederick Mayle 
849*9712c20fSFrederick Mayle   /* Set the krb4/5 security level, this also enables krb4/5 awareness.  This
850*9712c20fSFrederick Mayle    * is a string, 'clear', 'safe', 'confidential' or 'private'.  If the string
851*9712c20fSFrederick Mayle    * is set but doesn't match one of these, 'private' will be used.  */
852*9712c20fSFrederick Mayle   CINIT(KRBLEVEL, OBJECTPOINT, 63),
853*9712c20fSFrederick Mayle 
854*9712c20fSFrederick Mayle   /* Set if we should verify the peer in ssl handshake, set 1 to verify. */
855*9712c20fSFrederick Mayle   CINIT(SSL_VERIFYPEER, LONG, 64),
856*9712c20fSFrederick Mayle 
857*9712c20fSFrederick Mayle   /* The CApath or CAfile used to validate the peer certificate
858*9712c20fSFrederick Mayle      this option is used only if SSL_VERIFYPEER is true */
859*9712c20fSFrederick Mayle   CINIT(CAINFO, OBJECTPOINT, 65),
860*9712c20fSFrederick Mayle 
861*9712c20fSFrederick Mayle   /* 66 = OBSOLETE */
862*9712c20fSFrederick Mayle   /* 67 = OBSOLETE */
863*9712c20fSFrederick Mayle 
864*9712c20fSFrederick Mayle   /* Maximum number of http redirects to follow */
865*9712c20fSFrederick Mayle   CINIT(MAXREDIRS, LONG, 68),
866*9712c20fSFrederick Mayle 
867*9712c20fSFrederick Mayle   /* Pass a long set to 1 to get the date of the requested document (if
868*9712c20fSFrederick Mayle      possible)! Pass a zero to shut it off. */
869*9712c20fSFrederick Mayle   CINIT(FILETIME, LONG, 69),
870*9712c20fSFrederick Mayle 
871*9712c20fSFrederick Mayle   /* This points to a linked list of telnet options */
872*9712c20fSFrederick Mayle   CINIT(TELNETOPTIONS, OBJECTPOINT, 70),
873*9712c20fSFrederick Mayle 
874*9712c20fSFrederick Mayle   /* Max amount of cached alive connections */
875*9712c20fSFrederick Mayle   CINIT(MAXCONNECTS, LONG, 71),
876*9712c20fSFrederick Mayle 
877*9712c20fSFrederick Mayle   /* What policy to use when closing connections when the cache is filled
878*9712c20fSFrederick Mayle      up */
879*9712c20fSFrederick Mayle   CINIT(CLOSEPOLICY, LONG, 72),
880*9712c20fSFrederick Mayle 
881*9712c20fSFrederick Mayle   /* 73 = OBSOLETE */
882*9712c20fSFrederick Mayle 
883*9712c20fSFrederick Mayle   /* Set to explicitly use a new connection for the upcoming transfer.
884*9712c20fSFrederick Mayle      Do not use this unless you're absolutely sure of this, as it makes the
885*9712c20fSFrederick Mayle      operation slower and is less friendly for the network. */
886*9712c20fSFrederick Mayle   CINIT(FRESH_CONNECT, LONG, 74),
887*9712c20fSFrederick Mayle 
888*9712c20fSFrederick Mayle   /* Set to explicitly forbid the upcoming transfer's connection to be re-used
889*9712c20fSFrederick Mayle      when done. Do not use this unless you're absolutely sure of this, as it
890*9712c20fSFrederick Mayle      makes the operation slower and is less friendly for the network. */
891*9712c20fSFrederick Mayle   CINIT(FORBID_REUSE, LONG, 75),
892*9712c20fSFrederick Mayle 
893*9712c20fSFrederick Mayle   /* Set to a file name that contains random data for libcurl to use to
894*9712c20fSFrederick Mayle      seed the random engine when doing SSL connects. */
895*9712c20fSFrederick Mayle   CINIT(RANDOM_FILE, OBJECTPOINT, 76),
896*9712c20fSFrederick Mayle 
897*9712c20fSFrederick Mayle   /* Set to the Entropy Gathering Daemon socket pathname */
898*9712c20fSFrederick Mayle   CINIT(EGDSOCKET, OBJECTPOINT, 77),
899*9712c20fSFrederick Mayle 
900*9712c20fSFrederick Mayle   /* Time-out connect operations after this amount of seconds, if connects
901*9712c20fSFrederick Mayle      are OK within this time, then fine... This only aborts the connect
902*9712c20fSFrederick Mayle      phase. [Only works on unix-style/SIGALRM operating systems] */
903*9712c20fSFrederick Mayle   CINIT(CONNECTTIMEOUT, LONG, 78),
904*9712c20fSFrederick Mayle 
905*9712c20fSFrederick Mayle   /* Function that will be called to store headers (instead of fwrite). The
906*9712c20fSFrederick Mayle    * parameters will use fwrite() syntax, make sure to follow them. */
907*9712c20fSFrederick Mayle   CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79),
908*9712c20fSFrederick Mayle 
909*9712c20fSFrederick Mayle   /* Set this to force the HTTP request to get back to GET. Only really usable
910*9712c20fSFrederick Mayle      if POST, PUT or a custom request have been used first.
911*9712c20fSFrederick Mayle    */
912*9712c20fSFrederick Mayle   CINIT(HTTPGET, LONG, 80),
913*9712c20fSFrederick Mayle 
914*9712c20fSFrederick Mayle   /* Set if we should verify the Common name from the peer certificate in ssl
915*9712c20fSFrederick Mayle    * handshake, set 1 to check existence, 2 to ensure that it matches the
916*9712c20fSFrederick Mayle    * provided hostname. */
917*9712c20fSFrederick Mayle   CINIT(SSL_VERIFYHOST, LONG, 81),
918*9712c20fSFrederick Mayle 
919*9712c20fSFrederick Mayle   /* Specify which file name to write all known cookies in after completed
920*9712c20fSFrederick Mayle      operation. Set file name to "-" (dash) to make it go to stdout. */
921*9712c20fSFrederick Mayle   CINIT(COOKIEJAR, OBJECTPOINT, 82),
922*9712c20fSFrederick Mayle 
923*9712c20fSFrederick Mayle   /* Specify which SSL ciphers to use */
924*9712c20fSFrederick Mayle   CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 83),
925*9712c20fSFrederick Mayle 
926*9712c20fSFrederick Mayle   /* Specify which HTTP version to use! This must be set to one of the
927*9712c20fSFrederick Mayle      CURL_HTTP_VERSION* enums set below. */
928*9712c20fSFrederick Mayle   CINIT(HTTP_VERSION, LONG, 84),
929*9712c20fSFrederick Mayle 
930*9712c20fSFrederick Mayle   /* Specifically switch on or off the FTP engine's use of the EPSV command. By
931*9712c20fSFrederick Mayle      default, that one will always be attempted before the more traditional
932*9712c20fSFrederick Mayle      PASV command. */
933*9712c20fSFrederick Mayle   CINIT(FTP_USE_EPSV, LONG, 85),
934*9712c20fSFrederick Mayle 
935*9712c20fSFrederick Mayle   /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */
936*9712c20fSFrederick Mayle   CINIT(SSLCERTTYPE, OBJECTPOINT, 86),
937*9712c20fSFrederick Mayle 
938*9712c20fSFrederick Mayle   /* name of the file keeping your private SSL-key */
939*9712c20fSFrederick Mayle   CINIT(SSLKEY, OBJECTPOINT, 87),
940*9712c20fSFrederick Mayle 
941*9712c20fSFrederick Mayle   /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */
942*9712c20fSFrederick Mayle   CINIT(SSLKEYTYPE, OBJECTPOINT, 88),
943*9712c20fSFrederick Mayle 
944*9712c20fSFrederick Mayle   /* crypto engine for the SSL-sub system */
945*9712c20fSFrederick Mayle   CINIT(SSLENGINE, OBJECTPOINT, 89),
946*9712c20fSFrederick Mayle 
947*9712c20fSFrederick Mayle   /* set the crypto engine for the SSL-sub system as default
948*9712c20fSFrederick Mayle      the param has no meaning...
949*9712c20fSFrederick Mayle    */
950*9712c20fSFrederick Mayle   CINIT(SSLENGINE_DEFAULT, LONG, 90),
951*9712c20fSFrederick Mayle 
952*9712c20fSFrederick Mayle   /* Non-zero value means to use the global dns cache */
953*9712c20fSFrederick Mayle   CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* To become OBSOLETE soon */
954*9712c20fSFrederick Mayle 
955*9712c20fSFrederick Mayle   /* DNS cache timeout */
956*9712c20fSFrederick Mayle   CINIT(DNS_CACHE_TIMEOUT, LONG, 92),
957*9712c20fSFrederick Mayle 
958*9712c20fSFrederick Mayle   /* send linked-list of pre-transfer QUOTE commands */
959*9712c20fSFrederick Mayle   CINIT(PREQUOTE, OBJECTPOINT, 93),
960*9712c20fSFrederick Mayle 
961*9712c20fSFrederick Mayle   /* set the debug function */
962*9712c20fSFrederick Mayle   CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94),
963*9712c20fSFrederick Mayle 
964*9712c20fSFrederick Mayle   /* set the data for the debug function */
965*9712c20fSFrederick Mayle   CINIT(DEBUGDATA, OBJECTPOINT, 95),
966*9712c20fSFrederick Mayle 
967*9712c20fSFrederick Mayle   /* mark this as start of a cookie session */
968*9712c20fSFrederick Mayle   CINIT(COOKIESESSION, LONG, 96),
969*9712c20fSFrederick Mayle 
970*9712c20fSFrederick Mayle   /* The CApath directory used to validate the peer certificate
971*9712c20fSFrederick Mayle      this option is used only if SSL_VERIFYPEER is true */
972*9712c20fSFrederick Mayle   CINIT(CAPATH, OBJECTPOINT, 97),
973*9712c20fSFrederick Mayle 
974*9712c20fSFrederick Mayle   /* Instruct libcurl to use a smaller receive buffer */
975*9712c20fSFrederick Mayle   CINIT(BUFFERSIZE, LONG, 98),
976*9712c20fSFrederick Mayle 
977*9712c20fSFrederick Mayle   /* Instruct libcurl to not use any signal/alarm handlers, even when using
978*9712c20fSFrederick Mayle      timeouts. This option is useful for multi-threaded applications.
979*9712c20fSFrederick Mayle      See libcurl-the-guide for more background information. */
980*9712c20fSFrederick Mayle   CINIT(NOSIGNAL, LONG, 99),
981*9712c20fSFrederick Mayle 
982*9712c20fSFrederick Mayle   /* Provide a CURLShare for mutexing non-ts data */
983*9712c20fSFrederick Mayle   CINIT(SHARE, OBJECTPOINT, 100),
984*9712c20fSFrederick Mayle 
985*9712c20fSFrederick Mayle   /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default),
986*9712c20fSFrederick Mayle      CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and CURLPROXY_SOCKS5. */
987*9712c20fSFrederick Mayle   CINIT(PROXYTYPE, LONG, 101),
988*9712c20fSFrederick Mayle 
989*9712c20fSFrederick Mayle   /* Set the Accept-Encoding string. Use this to tell a server you would like
990*9712c20fSFrederick Mayle      the response to be compressed. */
991*9712c20fSFrederick Mayle   CINIT(ENCODING, OBJECTPOINT, 102),
992*9712c20fSFrederick Mayle 
993*9712c20fSFrederick Mayle   /* Set pointer to private data */
994*9712c20fSFrederick Mayle   CINIT(PRIVATE, OBJECTPOINT, 103),
995*9712c20fSFrederick Mayle 
996*9712c20fSFrederick Mayle   /* Set aliases for HTTP 200 in the HTTP Response header */
997*9712c20fSFrederick Mayle   CINIT(HTTP200ALIASES, OBJECTPOINT, 104),
998*9712c20fSFrederick Mayle 
999*9712c20fSFrederick Mayle   /* Continue to send authentication (user+password) when following locations,
1000*9712c20fSFrederick Mayle      even when hostname changed. This can potentially send off the name
1001*9712c20fSFrederick Mayle      and password to whatever host the server decides. */
1002*9712c20fSFrederick Mayle   CINIT(UNRESTRICTED_AUTH, LONG, 105),
1003*9712c20fSFrederick Mayle 
1004*9712c20fSFrederick Mayle   /* Specifically switch on or off the FTP engine's use of the EPRT command ( it
1005*9712c20fSFrederick Mayle      also disables the LPRT attempt). By default, those ones will always be
1006*9712c20fSFrederick Mayle      attempted before the good old traditional PORT command. */
1007*9712c20fSFrederick Mayle   CINIT(FTP_USE_EPRT, LONG, 106),
1008*9712c20fSFrederick Mayle 
1009*9712c20fSFrederick Mayle   /* Set this to a bitmask value to enable the particular authentications
1010*9712c20fSFrederick Mayle      methods you like. Use this in combination with CURLOPT_USERPWD.
1011*9712c20fSFrederick Mayle      Note that setting multiple bits may cause extra network round-trips. */
1012*9712c20fSFrederick Mayle   CINIT(HTTPAUTH, LONG, 107),
1013*9712c20fSFrederick Mayle 
1014*9712c20fSFrederick Mayle   /* Set the ssl context callback function, currently only for OpenSSL ssl_ctx
1015*9712c20fSFrederick Mayle      in second argument. The function must be matching the
1016*9712c20fSFrederick Mayle      curl_ssl_ctx_callback proto. */
1017*9712c20fSFrederick Mayle   CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108),
1018*9712c20fSFrederick Mayle 
1019*9712c20fSFrederick Mayle   /* Set the userdata for the ssl context callback function's third
1020*9712c20fSFrederick Mayle      argument */
1021*9712c20fSFrederick Mayle   CINIT(SSL_CTX_DATA, OBJECTPOINT, 109),
1022*9712c20fSFrederick Mayle 
1023*9712c20fSFrederick Mayle   /* FTP Option that causes missing dirs to be created on the remote server.
1024*9712c20fSFrederick Mayle      In 7.19.4 we introduced the convenience enums for this option using the
1025*9712c20fSFrederick Mayle      CURLFTP_CREATE_DIR prefix.
1026*9712c20fSFrederick Mayle   */
1027*9712c20fSFrederick Mayle   CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110),
1028*9712c20fSFrederick Mayle 
1029*9712c20fSFrederick Mayle   /* Set this to a bitmask value to enable the particular authentications
1030*9712c20fSFrederick Mayle      methods you like. Use this in combination with CURLOPT_PROXYUSERPWD.
1031*9712c20fSFrederick Mayle      Note that setting multiple bits may cause extra network round-trips. */
1032*9712c20fSFrederick Mayle   CINIT(PROXYAUTH, LONG, 111),
1033*9712c20fSFrederick Mayle 
1034*9712c20fSFrederick Mayle   /* FTP option that changes the timeout, in seconds, associated with
1035*9712c20fSFrederick Mayle      getting a response.  This is different from transfer timeout time and
1036*9712c20fSFrederick Mayle      essentially places a demand on the FTP server to acknowledge commands
1037*9712c20fSFrederick Mayle      in a timely manner. */
1038*9712c20fSFrederick Mayle   CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112),
1039*9712c20fSFrederick Mayle 
1040*9712c20fSFrederick Mayle   /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to
1041*9712c20fSFrederick Mayle      tell libcurl to resolve names to those IP versions only. This only has
1042*9712c20fSFrederick Mayle      affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */
1043*9712c20fSFrederick Mayle   CINIT(IPRESOLVE, LONG, 113),
1044*9712c20fSFrederick Mayle 
1045*9712c20fSFrederick Mayle   /* Set this option to limit the size of a file that will be downloaded from
1046*9712c20fSFrederick Mayle      an HTTP or FTP server.
1047*9712c20fSFrederick Mayle 
1048*9712c20fSFrederick Mayle      Note there is also _LARGE version which adds large file support for
1049*9712c20fSFrederick Mayle      platforms which have larger off_t sizes.  See MAXFILESIZE_LARGE below. */
1050*9712c20fSFrederick Mayle   CINIT(MAXFILESIZE, LONG, 114),
1051*9712c20fSFrederick Mayle 
1052*9712c20fSFrederick Mayle   /* See the comment for INFILESIZE above, but in short, specifies
1053*9712c20fSFrederick Mayle    * the size of the file being uploaded.  -1 means unknown.
1054*9712c20fSFrederick Mayle    */
1055*9712c20fSFrederick Mayle   CINIT(INFILESIZE_LARGE, OFF_T, 115),
1056*9712c20fSFrederick Mayle 
1057*9712c20fSFrederick Mayle   /* Sets the continuation offset.  There is also a LONG version of this;
1058*9712c20fSFrederick Mayle    * look above for RESUME_FROM.
1059*9712c20fSFrederick Mayle    */
1060*9712c20fSFrederick Mayle   CINIT(RESUME_FROM_LARGE, OFF_T, 116),
1061*9712c20fSFrederick Mayle 
1062*9712c20fSFrederick Mayle   /* Sets the maximum size of data that will be downloaded from
1063*9712c20fSFrederick Mayle    * an HTTP or FTP server.  See MAXFILESIZE above for the LONG version.
1064*9712c20fSFrederick Mayle    */
1065*9712c20fSFrederick Mayle   CINIT(MAXFILESIZE_LARGE, OFF_T, 117),
1066*9712c20fSFrederick Mayle 
1067*9712c20fSFrederick Mayle   /* Set this option to the file name of your .netrc file you want libcurl
1068*9712c20fSFrederick Mayle      to parse (using the CURLOPT_NETRC option). If not set, libcurl will do
1069*9712c20fSFrederick Mayle      a poor attempt to find the user's home directory and check for a .netrc
1070*9712c20fSFrederick Mayle      file in there. */
1071*9712c20fSFrederick Mayle   CINIT(NETRC_FILE, OBJECTPOINT, 118),
1072*9712c20fSFrederick Mayle 
1073*9712c20fSFrederick Mayle   /* Enable SSL/TLS for FTP, pick one of:
1074*9712c20fSFrederick Mayle      CURLFTPSSL_TRY     - try using SSL, proceed anyway otherwise
1075*9712c20fSFrederick Mayle      CURLFTPSSL_CONTROL - SSL for the control connection or fail
1076*9712c20fSFrederick Mayle      CURLFTPSSL_ALL     - SSL for all communication or fail
1077*9712c20fSFrederick Mayle   */
1078*9712c20fSFrederick Mayle   CINIT(USE_SSL, LONG, 119),
1079*9712c20fSFrederick Mayle 
1080*9712c20fSFrederick Mayle   /* The _LARGE version of the standard POSTFIELDSIZE option */
1081*9712c20fSFrederick Mayle   CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120),
1082*9712c20fSFrederick Mayle 
1083*9712c20fSFrederick Mayle   /* Enable/disable the TCP Nagle algorithm */
1084*9712c20fSFrederick Mayle   CINIT(TCP_NODELAY, LONG, 121),
1085*9712c20fSFrederick Mayle 
1086*9712c20fSFrederick Mayle   /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
1087*9712c20fSFrederick Mayle   /* 123 OBSOLETE. Gone in 7.16.0 */
1088*9712c20fSFrederick Mayle   /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
1089*9712c20fSFrederick Mayle   /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
1090*9712c20fSFrederick Mayle   /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
1091*9712c20fSFrederick Mayle   /* 127 OBSOLETE. Gone in 7.16.0 */
1092*9712c20fSFrederick Mayle   /* 128 OBSOLETE. Gone in 7.16.0 */
1093*9712c20fSFrederick Mayle 
1094*9712c20fSFrederick Mayle   /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option
1095*9712c20fSFrederick Mayle      can be used to change libcurl's default action which is to first try
1096*9712c20fSFrederick Mayle      "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK
1097*9712c20fSFrederick Mayle      response has been received.
1098*9712c20fSFrederick Mayle 
1099*9712c20fSFrederick Mayle      Available parameters are:
1100*9712c20fSFrederick Mayle      CURLFTPAUTH_DEFAULT - let libcurl decide
1101*9712c20fSFrederick Mayle      CURLFTPAUTH_SSL     - try "AUTH SSL" first, then TLS
1102*9712c20fSFrederick Mayle      CURLFTPAUTH_TLS     - try "AUTH TLS" first, then SSL
1103*9712c20fSFrederick Mayle   */
1104*9712c20fSFrederick Mayle   CINIT(FTPSSLAUTH, LONG, 129),
1105*9712c20fSFrederick Mayle 
1106*9712c20fSFrederick Mayle   CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130),
1107*9712c20fSFrederick Mayle   CINIT(IOCTLDATA, OBJECTPOINT, 131),
1108*9712c20fSFrederick Mayle 
1109*9712c20fSFrederick Mayle   /* 132 OBSOLETE. Gone in 7.16.0 */
1110*9712c20fSFrederick Mayle   /* 133 OBSOLETE. Gone in 7.16.0 */
1111*9712c20fSFrederick Mayle 
1112*9712c20fSFrederick Mayle   /* zero terminated string for pass on to the FTP server when asked for
1113*9712c20fSFrederick Mayle      "account" info */
1114*9712c20fSFrederick Mayle   CINIT(FTP_ACCOUNT, OBJECTPOINT, 134),
1115*9712c20fSFrederick Mayle 
1116*9712c20fSFrederick Mayle   /* feed cookies into cookie engine */
1117*9712c20fSFrederick Mayle   CINIT(COOKIELIST, OBJECTPOINT, 135),
1118*9712c20fSFrederick Mayle 
1119*9712c20fSFrederick Mayle   /* ignore Content-Length */
1120*9712c20fSFrederick Mayle   CINIT(IGNORE_CONTENT_LENGTH, LONG, 136),
1121*9712c20fSFrederick Mayle 
1122*9712c20fSFrederick Mayle   /* Set to non-zero to skip the IP address received in a 227 PASV FTP server
1123*9712c20fSFrederick Mayle      response. Typically used for FTP-SSL purposes but is not restricted to
1124*9712c20fSFrederick Mayle      that. libcurl will then instead use the same IP address it used for the
1125*9712c20fSFrederick Mayle      control connection. */
1126*9712c20fSFrederick Mayle   CINIT(FTP_SKIP_PASV_IP, LONG, 137),
1127*9712c20fSFrederick Mayle 
1128*9712c20fSFrederick Mayle   /* Select "file method" to use when doing FTP, see the curl_ftpmethod
1129*9712c20fSFrederick Mayle      above. */
1130*9712c20fSFrederick Mayle   CINIT(FTP_FILEMETHOD, LONG, 138),
1131*9712c20fSFrederick Mayle 
1132*9712c20fSFrederick Mayle   /* Local port number to bind the socket to */
1133*9712c20fSFrederick Mayle   CINIT(LOCALPORT, LONG, 139),
1134*9712c20fSFrederick Mayle 
1135*9712c20fSFrederick Mayle   /* Number of ports to try, including the first one set with LOCALPORT.
1136*9712c20fSFrederick Mayle      Thus, setting it to 1 will make no additional attempts but the first.
1137*9712c20fSFrederick Mayle   */
1138*9712c20fSFrederick Mayle   CINIT(LOCALPORTRANGE, LONG, 140),
1139*9712c20fSFrederick Mayle 
1140*9712c20fSFrederick Mayle   /* no transfer, set up connection and let application use the socket by
1141*9712c20fSFrederick Mayle      extracting it with CURLINFO_LASTSOCKET */
1142*9712c20fSFrederick Mayle   CINIT(CONNECT_ONLY, LONG, 141),
1143*9712c20fSFrederick Mayle 
1144*9712c20fSFrederick Mayle   /* Function that will be called to convert from the
1145*9712c20fSFrederick Mayle      network encoding (instead of using the iconv calls in libcurl) */
1146*9712c20fSFrederick Mayle   CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142),
1147*9712c20fSFrederick Mayle 
1148*9712c20fSFrederick Mayle   /* Function that will be called to convert to the
1149*9712c20fSFrederick Mayle      network encoding (instead of using the iconv calls in libcurl) */
1150*9712c20fSFrederick Mayle   CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143),
1151*9712c20fSFrederick Mayle 
1152*9712c20fSFrederick Mayle   /* Function that will be called to convert from UTF8
1153*9712c20fSFrederick Mayle      (instead of using the iconv calls in libcurl)
1154*9712c20fSFrederick Mayle      Note that this is used only for SSL certificate processing */
1155*9712c20fSFrederick Mayle   CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144),
1156*9712c20fSFrederick Mayle 
1157*9712c20fSFrederick Mayle   /* if the connection proceeds too quickly then need to slow it down */
1158*9712c20fSFrederick Mayle   /* limit-rate: maximum number of bytes per second to send or receive */
1159*9712c20fSFrederick Mayle   CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145),
1160*9712c20fSFrederick Mayle   CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146),
1161*9712c20fSFrederick Mayle 
1162*9712c20fSFrederick Mayle   /* Pointer to command string to send if USER/PASS fails. */
1163*9712c20fSFrederick Mayle   CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147),
1164*9712c20fSFrederick Mayle 
1165*9712c20fSFrederick Mayle   /* callback function for setting socket options */
1166*9712c20fSFrederick Mayle   CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148),
1167*9712c20fSFrederick Mayle   CINIT(SOCKOPTDATA, OBJECTPOINT, 149),
1168*9712c20fSFrederick Mayle 
1169*9712c20fSFrederick Mayle   /* set to 0 to disable session ID re-use for this transfer, default is
1170*9712c20fSFrederick Mayle      enabled (== 1) */
1171*9712c20fSFrederick Mayle   CINIT(SSL_SESSIONID_CACHE, LONG, 150),
1172*9712c20fSFrederick Mayle 
1173*9712c20fSFrederick Mayle   /* allowed SSH authentication methods */
1174*9712c20fSFrederick Mayle   CINIT(SSH_AUTH_TYPES, LONG, 151),
1175*9712c20fSFrederick Mayle 
1176*9712c20fSFrederick Mayle   /* Used by scp/sftp to do public/private key authentication */
1177*9712c20fSFrederick Mayle   CINIT(SSH_PUBLIC_KEYFILE, OBJECTPOINT, 152),
1178*9712c20fSFrederick Mayle   CINIT(SSH_PRIVATE_KEYFILE, OBJECTPOINT, 153),
1179*9712c20fSFrederick Mayle 
1180*9712c20fSFrederick Mayle   /* Send CCC (Clear Command Channel) after authentication */
1181*9712c20fSFrederick Mayle   CINIT(FTP_SSL_CCC, LONG, 154),
1182*9712c20fSFrederick Mayle 
1183*9712c20fSFrederick Mayle   /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */
1184*9712c20fSFrederick Mayle   CINIT(TIMEOUT_MS, LONG, 155),
1185*9712c20fSFrederick Mayle   CINIT(CONNECTTIMEOUT_MS, LONG, 156),
1186*9712c20fSFrederick Mayle 
1187*9712c20fSFrederick Mayle   /* set to zero to disable the libcurl's decoding and thus pass the raw body
1188*9712c20fSFrederick Mayle      data to the application even when it is encoded/compressed */
1189*9712c20fSFrederick Mayle   CINIT(HTTP_TRANSFER_DECODING, LONG, 157),
1190*9712c20fSFrederick Mayle   CINIT(HTTP_CONTENT_DECODING, LONG, 158),
1191*9712c20fSFrederick Mayle 
1192*9712c20fSFrederick Mayle   /* Permission used when creating new files and directories on the remote
1193*9712c20fSFrederick Mayle      server for protocols that support it, SFTP/SCP/FILE */
1194*9712c20fSFrederick Mayle   CINIT(NEW_FILE_PERMS, LONG, 159),
1195*9712c20fSFrederick Mayle   CINIT(NEW_DIRECTORY_PERMS, LONG, 160),
1196*9712c20fSFrederick Mayle 
1197*9712c20fSFrederick Mayle   /* Set the behaviour of POST when redirecting. Values must be set to one
1198*9712c20fSFrederick Mayle      of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */
1199*9712c20fSFrederick Mayle   CINIT(POSTREDIR, LONG, 161),
1200*9712c20fSFrederick Mayle 
1201*9712c20fSFrederick Mayle   /* used by scp/sftp to verify the host's public key */
1202*9712c20fSFrederick Mayle   CINIT(SSH_HOST_PUBLIC_KEY_MD5, OBJECTPOINT, 162),
1203*9712c20fSFrederick Mayle 
1204*9712c20fSFrederick Mayle   /* Callback function for opening socket (instead of socket(2)). Optionally,
1205*9712c20fSFrederick Mayle      callback is able change the address or refuse to connect returning
1206*9712c20fSFrederick Mayle      CURL_SOCKET_BAD.  The callback should have type
1207*9712c20fSFrederick Mayle      curl_opensocket_callback */
1208*9712c20fSFrederick Mayle   CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163),
1209*9712c20fSFrederick Mayle   CINIT(OPENSOCKETDATA, OBJECTPOINT, 164),
1210*9712c20fSFrederick Mayle 
1211*9712c20fSFrederick Mayle   /* POST volatile input fields. */
1212*9712c20fSFrederick Mayle   CINIT(COPYPOSTFIELDS, OBJECTPOINT, 165),
1213*9712c20fSFrederick Mayle 
1214*9712c20fSFrederick Mayle   /* set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy */
1215*9712c20fSFrederick Mayle   CINIT(PROXY_TRANSFER_MODE, LONG, 166),
1216*9712c20fSFrederick Mayle 
1217*9712c20fSFrederick Mayle   /* Callback function for seeking in the input stream */
1218*9712c20fSFrederick Mayle   CINIT(SEEKFUNCTION, FUNCTIONPOINT, 167),
1219*9712c20fSFrederick Mayle   CINIT(SEEKDATA, OBJECTPOINT, 168),
1220*9712c20fSFrederick Mayle 
1221*9712c20fSFrederick Mayle   /* CRL file */
1222*9712c20fSFrederick Mayle   CINIT(CRLFILE, OBJECTPOINT, 169),
1223*9712c20fSFrederick Mayle 
1224*9712c20fSFrederick Mayle   /* Issuer certificate */
1225*9712c20fSFrederick Mayle   CINIT(ISSUERCERT, OBJECTPOINT, 170),
1226*9712c20fSFrederick Mayle 
1227*9712c20fSFrederick Mayle   /* (IPv6) Address scope */
1228*9712c20fSFrederick Mayle   CINIT(ADDRESS_SCOPE, LONG, 171),
1229*9712c20fSFrederick Mayle 
1230*9712c20fSFrederick Mayle   /* Collect certificate chain info and allow it to get retrievable with
1231*9712c20fSFrederick Mayle      CURLINFO_CERTINFO after the transfer is complete. (Unfortunately) only
1232*9712c20fSFrederick Mayle      working with OpenSSL-powered builds. */
1233*9712c20fSFrederick Mayle   CINIT(CERTINFO, LONG, 172),
1234*9712c20fSFrederick Mayle 
1235*9712c20fSFrederick Mayle   /* "name" and "pwd" to use when fetching. */
1236*9712c20fSFrederick Mayle   CINIT(USERNAME, OBJECTPOINT, 173),
1237*9712c20fSFrederick Mayle   CINIT(PASSWORD, OBJECTPOINT, 174),
1238*9712c20fSFrederick Mayle 
1239*9712c20fSFrederick Mayle     /* "name" and "pwd" to use with Proxy when fetching. */
1240*9712c20fSFrederick Mayle   CINIT(PROXYUSERNAME, OBJECTPOINT, 175),
1241*9712c20fSFrederick Mayle   CINIT(PROXYPASSWORD, OBJECTPOINT, 176),
1242*9712c20fSFrederick Mayle 
1243*9712c20fSFrederick Mayle   /* Comma separated list of hostnames defining no-proxy zones. These should
1244*9712c20fSFrederick Mayle      match both hostnames directly, and hostnames within a domain. For
1245*9712c20fSFrederick Mayle      example, local.com will match local.com and www.local.com, but NOT
1246*9712c20fSFrederick Mayle      notlocal.com or www.notlocal.com. For compatibility with other
1247*9712c20fSFrederick Mayle      implementations of this, .local.com will be considered to be the same as
1248*9712c20fSFrederick Mayle      local.com. A single * is the only valid wildcard, and effectively
1249*9712c20fSFrederick Mayle      disables the use of proxy. */
1250*9712c20fSFrederick Mayle   CINIT(NOPROXY, OBJECTPOINT, 177),
1251*9712c20fSFrederick Mayle 
1252*9712c20fSFrederick Mayle   /* block size for TFTP transfers */
1253*9712c20fSFrederick Mayle   CINIT(TFTP_BLKSIZE, LONG, 178),
1254*9712c20fSFrederick Mayle 
1255*9712c20fSFrederick Mayle   /* Socks Service */
1256*9712c20fSFrederick Mayle   CINIT(SOCKS5_GSSAPI_SERVICE, OBJECTPOINT, 179),
1257*9712c20fSFrederick Mayle 
1258*9712c20fSFrederick Mayle   /* Socks Service */
1259*9712c20fSFrederick Mayle   CINIT(SOCKS5_GSSAPI_NEC, LONG, 180),
1260*9712c20fSFrederick Mayle 
1261*9712c20fSFrederick Mayle   /* set the bitmask for the protocols that are allowed to be used for the
1262*9712c20fSFrederick Mayle      transfer, which thus helps the app which takes URLs from users or other
1263*9712c20fSFrederick Mayle      external inputs and want to restrict what protocol(s) to deal
1264*9712c20fSFrederick Mayle      with. Defaults to CURLPROTO_ALL. */
1265*9712c20fSFrederick Mayle   CINIT(PROTOCOLS, LONG, 181),
1266*9712c20fSFrederick Mayle 
1267*9712c20fSFrederick Mayle   /* set the bitmask for the protocols that libcurl is allowed to follow to,
1268*9712c20fSFrederick Mayle      as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs
1269*9712c20fSFrederick Mayle      to be set in both bitmasks to be allowed to get redirected to. Defaults
1270*9712c20fSFrederick Mayle      to all protocols except FILE and SCP. */
1271*9712c20fSFrederick Mayle   CINIT(REDIR_PROTOCOLS, LONG, 182),
1272*9712c20fSFrederick Mayle 
1273*9712c20fSFrederick Mayle   /* set the SSH knownhost file name to use */
1274*9712c20fSFrederick Mayle   CINIT(SSH_KNOWNHOSTS, OBJECTPOINT, 183),
1275*9712c20fSFrederick Mayle 
1276*9712c20fSFrederick Mayle   /* set the SSH host key callback, must point to a curl_sshkeycallback
1277*9712c20fSFrederick Mayle      function */
1278*9712c20fSFrederick Mayle   CINIT(SSH_KEYFUNCTION, FUNCTIONPOINT, 184),
1279*9712c20fSFrederick Mayle 
1280*9712c20fSFrederick Mayle   /* set the SSH host key callback custom pointer */
1281*9712c20fSFrederick Mayle   CINIT(SSH_KEYDATA, OBJECTPOINT, 185),
1282*9712c20fSFrederick Mayle 
1283*9712c20fSFrederick Mayle   CURLOPT_LASTENTRY /* the last unused */
1284*9712c20fSFrederick Mayle } CURLoption;
1285*9712c20fSFrederick Mayle 
1286*9712c20fSFrederick Mayle #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
1287*9712c20fSFrederick Mayle                           the obsolete stuff removed! */
1288*9712c20fSFrederick Mayle 
1289*9712c20fSFrederick Mayle /* Backwards compatibility with older names */
1290*9712c20fSFrederick Mayle /* These are scheduled to disappear by 2011 */
1291*9712c20fSFrederick Mayle 
1292*9712c20fSFrederick Mayle /* This was added in version 7.19.1 */
1293*9712c20fSFrederick Mayle #define CURLOPT_POST301 CURLOPT_POSTREDIR
1294*9712c20fSFrederick Mayle 
1295*9712c20fSFrederick Mayle /* These are scheduled to disappear by 2009 */
1296*9712c20fSFrederick Mayle 
1297*9712c20fSFrederick Mayle /* The following were added in 7.17.0 */
1298*9712c20fSFrederick Mayle #define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD
1299*9712c20fSFrederick Mayle #define CURLOPT_FTPAPPEND CURLOPT_APPEND
1300*9712c20fSFrederick Mayle #define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY
1301*9712c20fSFrederick Mayle #define CURLOPT_FTP_SSL CURLOPT_USE_SSL
1302*9712c20fSFrederick Mayle 
1303*9712c20fSFrederick Mayle /* The following were added earlier */
1304*9712c20fSFrederick Mayle 
1305*9712c20fSFrederick Mayle #define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD
1306*9712c20fSFrederick Mayle #define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL
1307*9712c20fSFrederick Mayle 
1308*9712c20fSFrederick Mayle #else
1309*9712c20fSFrederick Mayle /* This is set if CURL_NO_OLDIES is defined at compile-time */
1310*9712c20fSFrederick Mayle #undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */
1311*9712c20fSFrederick Mayle #endif
1312*9712c20fSFrederick Mayle 
1313*9712c20fSFrederick Mayle 
1314*9712c20fSFrederick Mayle   /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host
1315*9712c20fSFrederick Mayle      name resolves addresses using more than one IP protocol version, this
1316*9712c20fSFrederick Mayle      option might be handy to force libcurl to use a specific IP version. */
1317*9712c20fSFrederick Mayle #define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP
1318*9712c20fSFrederick Mayle                                      versions that your system allows */
1319*9712c20fSFrederick Mayle #define CURL_IPRESOLVE_V4       1 /* resolve to ipv4 addresses */
1320*9712c20fSFrederick Mayle #define CURL_IPRESOLVE_V6       2 /* resolve to ipv6 addresses */
1321*9712c20fSFrederick Mayle 
1322*9712c20fSFrederick Mayle   /* three convenient "aliases" that follow the name scheme better */
1323*9712c20fSFrederick Mayle #define CURLOPT_WRITEDATA CURLOPT_FILE
1324*9712c20fSFrederick Mayle #define CURLOPT_READDATA  CURLOPT_INFILE
1325*9712c20fSFrederick Mayle #define CURLOPT_HEADERDATA CURLOPT_WRITEHEADER
1326*9712c20fSFrederick Mayle 
1327*9712c20fSFrederick Mayle   /* These enums are for use with the CURLOPT_HTTP_VERSION option. */
1328*9712c20fSFrederick Mayle enum {
1329*9712c20fSFrederick Mayle   CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd
1330*9712c20fSFrederick Mayle                              like the library to choose the best possible
1331*9712c20fSFrederick Mayle                              for us! */
1332*9712c20fSFrederick Mayle   CURL_HTTP_VERSION_1_0,  /* please use HTTP 1.0 in the request */
1333*9712c20fSFrederick Mayle   CURL_HTTP_VERSION_1_1,  /* please use HTTP 1.1 in the request */
1334*9712c20fSFrederick Mayle 
1335*9712c20fSFrederick Mayle   CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */
1336*9712c20fSFrederick Mayle };
1337*9712c20fSFrederick Mayle 
1338*9712c20fSFrederick Mayle   /* These enums are for use with the CURLOPT_NETRC option. */
1339*9712c20fSFrederick Mayle enum CURL_NETRC_OPTION {
1340*9712c20fSFrederick Mayle   CURL_NETRC_IGNORED,     /* The .netrc will never be read.
1341*9712c20fSFrederick Mayle                            * This is the default. */
1342*9712c20fSFrederick Mayle   CURL_NETRC_OPTIONAL,    /* A user:password in the URL will be preferred
1343*9712c20fSFrederick Mayle                            * to one in the .netrc. */
1344*9712c20fSFrederick Mayle   CURL_NETRC_REQUIRED,    /* A user:password in the URL will be ignored.
1345*9712c20fSFrederick Mayle                            * Unless one is set programmatically, the .netrc
1346*9712c20fSFrederick Mayle                            * will be queried. */
1347*9712c20fSFrederick Mayle   CURL_NETRC_LAST
1348*9712c20fSFrederick Mayle };
1349*9712c20fSFrederick Mayle 
1350*9712c20fSFrederick Mayle enum {
1351*9712c20fSFrederick Mayle   CURL_SSLVERSION_DEFAULT,
1352*9712c20fSFrederick Mayle   CURL_SSLVERSION_TLSv1,
1353*9712c20fSFrederick Mayle   CURL_SSLVERSION_SSLv2,
1354*9712c20fSFrederick Mayle   CURL_SSLVERSION_SSLv3,
1355*9712c20fSFrederick Mayle 
1356*9712c20fSFrederick Mayle   CURL_SSLVERSION_LAST /* never use, keep last */
1357*9712c20fSFrederick Mayle };
1358*9712c20fSFrederick Mayle 
1359*9712c20fSFrederick Mayle /* symbols to use with CURLOPT_POSTREDIR.
1360*9712c20fSFrederick Mayle    CURL_REDIR_POST_301 and CURL_REDIR_POST_302 can be bitwise ORed so that
1361*9712c20fSFrederick Mayle    CURL_REDIR_POST_301 | CURL_REDIR_POST_302 == CURL_REDIR_POST_ALL */
1362*9712c20fSFrederick Mayle 
1363*9712c20fSFrederick Mayle #define CURL_REDIR_GET_ALL  0
1364*9712c20fSFrederick Mayle #define CURL_REDIR_POST_301 1
1365*9712c20fSFrederick Mayle #define CURL_REDIR_POST_302 2
1366*9712c20fSFrederick Mayle #define CURL_REDIR_POST_ALL (CURL_REDIR_POST_301|CURL_REDIR_POST_302)
1367*9712c20fSFrederick Mayle 
1368*9712c20fSFrederick Mayle typedef enum {
1369*9712c20fSFrederick Mayle   CURL_TIMECOND_NONE,
1370*9712c20fSFrederick Mayle 
1371*9712c20fSFrederick Mayle   CURL_TIMECOND_IFMODSINCE,
1372*9712c20fSFrederick Mayle   CURL_TIMECOND_IFUNMODSINCE,
1373*9712c20fSFrederick Mayle   CURL_TIMECOND_LASTMOD,
1374*9712c20fSFrederick Mayle 
1375*9712c20fSFrederick Mayle   CURL_TIMECOND_LAST
1376*9712c20fSFrederick Mayle } curl_TimeCond;
1377*9712c20fSFrederick Mayle 
1378*9712c20fSFrederick Mayle 
1379*9712c20fSFrederick Mayle /* curl_strequal() and curl_strnequal() are subject for removal in a future
1380*9712c20fSFrederick Mayle    libcurl, see lib/README.curlx for details */
1381*9712c20fSFrederick Mayle CURL_EXTERN int (curl_strequal)(const char *s1, const char *s2);
1382*9712c20fSFrederick Mayle CURL_EXTERN int (curl_strnequal)(const char *s1, const char *s2, size_t n);
1383*9712c20fSFrederick Mayle 
1384*9712c20fSFrederick Mayle /* name is uppercase CURLFORM_<name> */
1385*9712c20fSFrederick Mayle #ifdef CFINIT
1386*9712c20fSFrederick Mayle #undef CFINIT
1387*9712c20fSFrederick Mayle #endif
1388*9712c20fSFrederick Mayle 
1389*9712c20fSFrederick Mayle #ifdef CURL_ISOCPP
1390*9712c20fSFrederick Mayle #define CFINIT(name) CURLFORM_ ## name
1391*9712c20fSFrederick Mayle #else
1392*9712c20fSFrederick Mayle /* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
1393*9712c20fSFrederick Mayle #define CFINIT(name) CURLFORM_/**/name
1394*9712c20fSFrederick Mayle #endif
1395*9712c20fSFrederick Mayle 
1396*9712c20fSFrederick Mayle typedef enum {
1397*9712c20fSFrederick Mayle   CFINIT(NOTHING),        /********* the first one is unused ************/
1398*9712c20fSFrederick Mayle 
1399*9712c20fSFrederick Mayle   /*  */
1400*9712c20fSFrederick Mayle   CFINIT(COPYNAME),
1401*9712c20fSFrederick Mayle   CFINIT(PTRNAME),
1402*9712c20fSFrederick Mayle   CFINIT(NAMELENGTH),
1403*9712c20fSFrederick Mayle   CFINIT(COPYCONTENTS),
1404*9712c20fSFrederick Mayle   CFINIT(PTRCONTENTS),
1405*9712c20fSFrederick Mayle   CFINIT(CONTENTSLENGTH),
1406*9712c20fSFrederick Mayle   CFINIT(FILECONTENT),
1407*9712c20fSFrederick Mayle   CFINIT(ARRAY),
1408*9712c20fSFrederick Mayle   CFINIT(OBSOLETE),
1409*9712c20fSFrederick Mayle   CFINIT(FILE),
1410*9712c20fSFrederick Mayle 
1411*9712c20fSFrederick Mayle   CFINIT(BUFFER),
1412*9712c20fSFrederick Mayle   CFINIT(BUFFERPTR),
1413*9712c20fSFrederick Mayle   CFINIT(BUFFERLENGTH),
1414*9712c20fSFrederick Mayle 
1415*9712c20fSFrederick Mayle   CFINIT(CONTENTTYPE),
1416*9712c20fSFrederick Mayle   CFINIT(CONTENTHEADER),
1417*9712c20fSFrederick Mayle   CFINIT(FILENAME),
1418*9712c20fSFrederick Mayle   CFINIT(END),
1419*9712c20fSFrederick Mayle   CFINIT(OBSOLETE2),
1420*9712c20fSFrederick Mayle 
1421*9712c20fSFrederick Mayle   CFINIT(STREAM),
1422*9712c20fSFrederick Mayle 
1423*9712c20fSFrederick Mayle   CURLFORM_LASTENTRY /* the last unused */
1424*9712c20fSFrederick Mayle } CURLformoption;
1425*9712c20fSFrederick Mayle 
1426*9712c20fSFrederick Mayle #undef CFINIT /* done */
1427*9712c20fSFrederick Mayle 
1428*9712c20fSFrederick Mayle /* structure to be used as parameter for CURLFORM_ARRAY */
1429*9712c20fSFrederick Mayle struct curl_forms {
1430*9712c20fSFrederick Mayle   CURLformoption option;
1431*9712c20fSFrederick Mayle   const char     *value;
1432*9712c20fSFrederick Mayle };
1433*9712c20fSFrederick Mayle 
1434*9712c20fSFrederick Mayle /* use this for multipart formpost building */
1435*9712c20fSFrederick Mayle /* Returns code for curl_formadd()
1436*9712c20fSFrederick Mayle  *
1437*9712c20fSFrederick Mayle  * Returns:
1438*9712c20fSFrederick Mayle  * CURL_FORMADD_OK             on success
1439*9712c20fSFrederick Mayle  * CURL_FORMADD_MEMORY         if the FormInfo allocation fails
1440*9712c20fSFrederick Mayle  * CURL_FORMADD_OPTION_TWICE   if one option is given twice for one Form
1441*9712c20fSFrederick Mayle  * CURL_FORMADD_NULL           if a null pointer was given for a char
1442*9712c20fSFrederick Mayle  * CURL_FORMADD_MEMORY         if the allocation of a FormInfo struct failed
1443*9712c20fSFrederick Mayle  * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used
1444*9712c20fSFrederick Mayle  * CURL_FORMADD_INCOMPLETE     if the some FormInfo is not complete (or error)
1445*9712c20fSFrederick Mayle  * CURL_FORMADD_MEMORY         if a curl_httppost struct cannot be allocated
1446*9712c20fSFrederick Mayle  * CURL_FORMADD_MEMORY         if some allocation for string copying failed.
1447*9712c20fSFrederick Mayle  * CURL_FORMADD_ILLEGAL_ARRAY  if an illegal option is used in an array
1448*9712c20fSFrederick Mayle  *
1449*9712c20fSFrederick Mayle  ***************************************************************************/
1450*9712c20fSFrederick Mayle typedef enum {
1451*9712c20fSFrederick Mayle   CURL_FORMADD_OK, /* first, no error */
1452*9712c20fSFrederick Mayle 
1453*9712c20fSFrederick Mayle   CURL_FORMADD_MEMORY,
1454*9712c20fSFrederick Mayle   CURL_FORMADD_OPTION_TWICE,
1455*9712c20fSFrederick Mayle   CURL_FORMADD_NULL,
1456*9712c20fSFrederick Mayle   CURL_FORMADD_UNKNOWN_OPTION,
1457*9712c20fSFrederick Mayle   CURL_FORMADD_INCOMPLETE,
1458*9712c20fSFrederick Mayle   CURL_FORMADD_ILLEGAL_ARRAY,
1459*9712c20fSFrederick Mayle   CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */
1460*9712c20fSFrederick Mayle 
1461*9712c20fSFrederick Mayle   CURL_FORMADD_LAST /* last */
1462*9712c20fSFrederick Mayle } CURLFORMcode;
1463*9712c20fSFrederick Mayle 
1464*9712c20fSFrederick Mayle /*
1465*9712c20fSFrederick Mayle  * NAME curl_formadd()
1466*9712c20fSFrederick Mayle  *
1467*9712c20fSFrederick Mayle  * DESCRIPTION
1468*9712c20fSFrederick Mayle  *
1469*9712c20fSFrederick Mayle  * Pretty advanced function for building multi-part formposts. Each invoke
1470*9712c20fSFrederick Mayle  * adds one part that together construct a full post. Then use
1471*9712c20fSFrederick Mayle  * CURLOPT_HTTPPOST to send it off to libcurl.
1472*9712c20fSFrederick Mayle  */
1473*9712c20fSFrederick Mayle CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost,
1474*9712c20fSFrederick Mayle                                       struct curl_httppost **last_post,
1475*9712c20fSFrederick Mayle                                       ...);
1476*9712c20fSFrederick Mayle 
1477*9712c20fSFrederick Mayle /*
1478*9712c20fSFrederick Mayle  * callback function for curl_formget()
1479*9712c20fSFrederick Mayle  * The void *arg pointer will be the one passed as second argument to
1480*9712c20fSFrederick Mayle  *   curl_formget().
1481*9712c20fSFrederick Mayle  * The character buffer passed to it must not be freed.
1482*9712c20fSFrederick Mayle  * Should return the buffer length passed to it as the argument "len" on
1483*9712c20fSFrederick Mayle  *   success.
1484*9712c20fSFrederick Mayle  */
1485*9712c20fSFrederick Mayle typedef size_t (*curl_formget_callback)(void *arg, const char *buf, size_t len);
1486*9712c20fSFrederick Mayle 
1487*9712c20fSFrederick Mayle /*
1488*9712c20fSFrederick Mayle  * NAME curl_formget()
1489*9712c20fSFrederick Mayle  *
1490*9712c20fSFrederick Mayle  * DESCRIPTION
1491*9712c20fSFrederick Mayle  *
1492*9712c20fSFrederick Mayle  * Serialize a curl_httppost struct built with curl_formadd().
1493*9712c20fSFrederick Mayle  * Accepts a void pointer as second argument which will be passed to
1494*9712c20fSFrederick Mayle  * the curl_formget_callback function.
1495*9712c20fSFrederick Mayle  * Returns 0 on success.
1496*9712c20fSFrederick Mayle  */
1497*9712c20fSFrederick Mayle CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg,
1498*9712c20fSFrederick Mayle                              curl_formget_callback append);
1499*9712c20fSFrederick Mayle /*
1500*9712c20fSFrederick Mayle  * NAME curl_formfree()
1501*9712c20fSFrederick Mayle  *
1502*9712c20fSFrederick Mayle  * DESCRIPTION
1503*9712c20fSFrederick Mayle  *
1504*9712c20fSFrederick Mayle  * Free a multipart formpost previously built with curl_formadd().
1505*9712c20fSFrederick Mayle  */
1506*9712c20fSFrederick Mayle CURL_EXTERN void curl_formfree(struct curl_httppost *form);
1507*9712c20fSFrederick Mayle 
1508*9712c20fSFrederick Mayle /*
1509*9712c20fSFrederick Mayle  * NAME curl_getenv()
1510*9712c20fSFrederick Mayle  *
1511*9712c20fSFrederick Mayle  * DESCRIPTION
1512*9712c20fSFrederick Mayle  *
1513*9712c20fSFrederick Mayle  * Returns a malloc()'ed string that MUST be curl_free()ed after usage is
1514*9712c20fSFrederick Mayle  * complete. DEPRECATED - see lib/README.curlx
1515*9712c20fSFrederick Mayle  */
1516*9712c20fSFrederick Mayle CURL_EXTERN char *curl_getenv(const char *variable);
1517*9712c20fSFrederick Mayle 
1518*9712c20fSFrederick Mayle /*
1519*9712c20fSFrederick Mayle  * NAME curl_version()
1520*9712c20fSFrederick Mayle  *
1521*9712c20fSFrederick Mayle  * DESCRIPTION
1522*9712c20fSFrederick Mayle  *
1523*9712c20fSFrederick Mayle  * Returns a static ascii string of the libcurl version.
1524*9712c20fSFrederick Mayle  */
1525*9712c20fSFrederick Mayle CURL_EXTERN char *curl_version(void);
1526*9712c20fSFrederick Mayle 
1527*9712c20fSFrederick Mayle /*
1528*9712c20fSFrederick Mayle  * NAME curl_easy_escape()
1529*9712c20fSFrederick Mayle  *
1530*9712c20fSFrederick Mayle  * DESCRIPTION
1531*9712c20fSFrederick Mayle  *
1532*9712c20fSFrederick Mayle  * Escapes URL strings (converts all letters consider illegal in URLs to their
1533*9712c20fSFrederick Mayle  * %XX versions). This function returns a new allocated string or NULL if an
1534*9712c20fSFrederick Mayle  * error occurred.
1535*9712c20fSFrederick Mayle  */
1536*9712c20fSFrederick Mayle CURL_EXTERN char *curl_easy_escape(CURL *handle,
1537*9712c20fSFrederick Mayle                                    const char *string,
1538*9712c20fSFrederick Mayle                                    int length);
1539*9712c20fSFrederick Mayle 
1540*9712c20fSFrederick Mayle /* the previous version: */
1541*9712c20fSFrederick Mayle CURL_EXTERN char *curl_escape(const char *string,
1542*9712c20fSFrederick Mayle                               int length);
1543*9712c20fSFrederick Mayle 
1544*9712c20fSFrederick Mayle 
1545*9712c20fSFrederick Mayle /*
1546*9712c20fSFrederick Mayle  * NAME curl_easy_unescape()
1547*9712c20fSFrederick Mayle  *
1548*9712c20fSFrederick Mayle  * DESCRIPTION
1549*9712c20fSFrederick Mayle  *
1550*9712c20fSFrederick Mayle  * Unescapes URL encoding in strings (converts all %XX codes to their 8bit
1551*9712c20fSFrederick Mayle  * versions). This function returns a new allocated string or NULL if an error
1552*9712c20fSFrederick Mayle  * occurred.
1553*9712c20fSFrederick Mayle  * Conversion Note: On non-ASCII platforms the ASCII %XX codes are
1554*9712c20fSFrederick Mayle  * converted into the host encoding.
1555*9712c20fSFrederick Mayle  */
1556*9712c20fSFrederick Mayle CURL_EXTERN char *curl_easy_unescape(CURL *handle,
1557*9712c20fSFrederick Mayle                                      const char *string,
1558*9712c20fSFrederick Mayle                                      int length,
1559*9712c20fSFrederick Mayle                                      int *outlength);
1560*9712c20fSFrederick Mayle 
1561*9712c20fSFrederick Mayle /* the previous version */
1562*9712c20fSFrederick Mayle CURL_EXTERN char *curl_unescape(const char *string,
1563*9712c20fSFrederick Mayle                                 int length);
1564*9712c20fSFrederick Mayle 
1565*9712c20fSFrederick Mayle /*
1566*9712c20fSFrederick Mayle  * NAME curl_free()
1567*9712c20fSFrederick Mayle  *
1568*9712c20fSFrederick Mayle  * DESCRIPTION
1569*9712c20fSFrederick Mayle  *
1570*9712c20fSFrederick Mayle  * Provided for de-allocation in the same translation unit that did the
1571*9712c20fSFrederick Mayle  * allocation. Added in libcurl 7.10
1572*9712c20fSFrederick Mayle  */
1573*9712c20fSFrederick Mayle CURL_EXTERN void curl_free(void *p);
1574*9712c20fSFrederick Mayle 
1575*9712c20fSFrederick Mayle /*
1576*9712c20fSFrederick Mayle  * NAME curl_global_init()
1577*9712c20fSFrederick Mayle  *
1578*9712c20fSFrederick Mayle  * DESCRIPTION
1579*9712c20fSFrederick Mayle  *
1580*9712c20fSFrederick Mayle  * curl_global_init() should be invoked exactly once for each application that
1581*9712c20fSFrederick Mayle  * uses libcurl and before any call of other libcurl functions.
1582*9712c20fSFrederick Mayle  *
1583*9712c20fSFrederick Mayle  * This function is not thread-safe!
1584*9712c20fSFrederick Mayle  */
1585*9712c20fSFrederick Mayle CURL_EXTERN CURLcode curl_global_init(long flags);
1586*9712c20fSFrederick Mayle 
1587*9712c20fSFrederick Mayle /*
1588*9712c20fSFrederick Mayle  * NAME curl_global_init_mem()
1589*9712c20fSFrederick Mayle  *
1590*9712c20fSFrederick Mayle  * DESCRIPTION
1591*9712c20fSFrederick Mayle  *
1592*9712c20fSFrederick Mayle  * curl_global_init() or curl_global_init_mem() should be invoked exactly once
1593*9712c20fSFrederick Mayle  * for each application that uses libcurl.  This function can be used to
1594*9712c20fSFrederick Mayle  * initialize libcurl and set user defined memory management callback
1595*9712c20fSFrederick Mayle  * functions.  Users can implement memory management routines to check for
1596*9712c20fSFrederick Mayle  * memory leaks, check for mis-use of the curl library etc.  User registered
1597*9712c20fSFrederick Mayle  * callback routines with be invoked by this library instead of the system
1598*9712c20fSFrederick Mayle  * memory management routines like malloc, free etc.
1599*9712c20fSFrederick Mayle  */
1600*9712c20fSFrederick Mayle CURL_EXTERN CURLcode curl_global_init_mem(long flags,
1601*9712c20fSFrederick Mayle                                           curl_malloc_callback m,
1602*9712c20fSFrederick Mayle                                           curl_free_callback f,
1603*9712c20fSFrederick Mayle                                           curl_realloc_callback r,
1604*9712c20fSFrederick Mayle                                           curl_strdup_callback s,
1605*9712c20fSFrederick Mayle                                           curl_calloc_callback c);
1606*9712c20fSFrederick Mayle 
1607*9712c20fSFrederick Mayle /*
1608*9712c20fSFrederick Mayle  * NAME curl_global_cleanup()
1609*9712c20fSFrederick Mayle  *
1610*9712c20fSFrederick Mayle  * DESCRIPTION
1611*9712c20fSFrederick Mayle  *
1612*9712c20fSFrederick Mayle  * curl_global_cleanup() should be invoked exactly once for each application
1613*9712c20fSFrederick Mayle  * that uses libcurl
1614*9712c20fSFrederick Mayle  */
1615*9712c20fSFrederick Mayle CURL_EXTERN void curl_global_cleanup(void);
1616*9712c20fSFrederick Mayle 
1617*9712c20fSFrederick Mayle /* linked-list structure for the CURLOPT_QUOTE option (and other) */
1618*9712c20fSFrederick Mayle struct curl_slist {
1619*9712c20fSFrederick Mayle   char *data;
1620*9712c20fSFrederick Mayle   struct curl_slist *next;
1621*9712c20fSFrederick Mayle };
1622*9712c20fSFrederick Mayle 
1623*9712c20fSFrederick Mayle /*
1624*9712c20fSFrederick Mayle  * NAME curl_slist_append()
1625*9712c20fSFrederick Mayle  *
1626*9712c20fSFrederick Mayle  * DESCRIPTION
1627*9712c20fSFrederick Mayle  *
1628*9712c20fSFrederick Mayle  * Appends a string to a linked list. If no list exists, it will be created
1629*9712c20fSFrederick Mayle  * first. Returns the new list, after appending.
1630*9712c20fSFrederick Mayle  */
1631*9712c20fSFrederick Mayle CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *,
1632*9712c20fSFrederick Mayle                                                  const char *);
1633*9712c20fSFrederick Mayle 
1634*9712c20fSFrederick Mayle /*
1635*9712c20fSFrederick Mayle  * NAME curl_slist_free_all()
1636*9712c20fSFrederick Mayle  *
1637*9712c20fSFrederick Mayle  * DESCRIPTION
1638*9712c20fSFrederick Mayle  *
1639*9712c20fSFrederick Mayle  * free a previously built curl_slist.
1640*9712c20fSFrederick Mayle  */
1641*9712c20fSFrederick Mayle CURL_EXTERN void curl_slist_free_all(struct curl_slist *);
1642*9712c20fSFrederick Mayle 
1643*9712c20fSFrederick Mayle /*
1644*9712c20fSFrederick Mayle  * NAME curl_getdate()
1645*9712c20fSFrederick Mayle  *
1646*9712c20fSFrederick Mayle  * DESCRIPTION
1647*9712c20fSFrederick Mayle  *
1648*9712c20fSFrederick Mayle  * Returns the time, in seconds since 1 Jan 1970 of the time string given in
1649*9712c20fSFrederick Mayle  * the first argument. The time argument in the second parameter is unused
1650*9712c20fSFrederick Mayle  * and should be set to NULL.
1651*9712c20fSFrederick Mayle  */
1652*9712c20fSFrederick Mayle CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused);
1653*9712c20fSFrederick Mayle 
1654*9712c20fSFrederick Mayle /* info about the certificate chain, only for OpenSSL builds. Asked
1655*9712c20fSFrederick Mayle    for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */
1656*9712c20fSFrederick Mayle struct curl_certinfo {
1657*9712c20fSFrederick Mayle   int num_of_certs;             /* number of certificates with information */
1658*9712c20fSFrederick Mayle   struct curl_slist **certinfo; /* for each index in this array, there's a
1659*9712c20fSFrederick Mayle                                    linked list with textual information in the
1660*9712c20fSFrederick Mayle                                    format "name: value" */
1661*9712c20fSFrederick Mayle };
1662*9712c20fSFrederick Mayle 
1663*9712c20fSFrederick Mayle #define CURLINFO_STRING   0x100000
1664*9712c20fSFrederick Mayle #define CURLINFO_LONG     0x200000
1665*9712c20fSFrederick Mayle #define CURLINFO_DOUBLE   0x300000
1666*9712c20fSFrederick Mayle #define CURLINFO_SLIST    0x400000
1667*9712c20fSFrederick Mayle #define CURLINFO_MASK     0x0fffff
1668*9712c20fSFrederick Mayle #define CURLINFO_TYPEMASK 0xf00000
1669*9712c20fSFrederick Mayle 
1670*9712c20fSFrederick Mayle typedef enum {
1671*9712c20fSFrederick Mayle   CURLINFO_NONE, /* first, never use this */
1672*9712c20fSFrederick Mayle   CURLINFO_EFFECTIVE_URL    = CURLINFO_STRING + 1,
1673*9712c20fSFrederick Mayle   CURLINFO_RESPONSE_CODE    = CURLINFO_LONG   + 2,
1674*9712c20fSFrederick Mayle   CURLINFO_TOTAL_TIME       = CURLINFO_DOUBLE + 3,
1675*9712c20fSFrederick Mayle   CURLINFO_NAMELOOKUP_TIME  = CURLINFO_DOUBLE + 4,
1676*9712c20fSFrederick Mayle   CURLINFO_CONNECT_TIME     = CURLINFO_DOUBLE + 5,
1677*9712c20fSFrederick Mayle   CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6,
1678*9712c20fSFrederick Mayle   CURLINFO_SIZE_UPLOAD      = CURLINFO_DOUBLE + 7,
1679*9712c20fSFrederick Mayle   CURLINFO_SIZE_DOWNLOAD    = CURLINFO_DOUBLE + 8,
1680*9712c20fSFrederick Mayle   CURLINFO_SPEED_DOWNLOAD   = CURLINFO_DOUBLE + 9,
1681*9712c20fSFrederick Mayle   CURLINFO_SPEED_UPLOAD     = CURLINFO_DOUBLE + 10,
1682*9712c20fSFrederick Mayle   CURLINFO_HEADER_SIZE      = CURLINFO_LONG   + 11,
1683*9712c20fSFrederick Mayle   CURLINFO_REQUEST_SIZE     = CURLINFO_LONG   + 12,
1684*9712c20fSFrederick Mayle   CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG   + 13,
1685*9712c20fSFrederick Mayle   CURLINFO_FILETIME         = CURLINFO_LONG   + 14,
1686*9712c20fSFrederick Mayle   CURLINFO_CONTENT_LENGTH_DOWNLOAD   = CURLINFO_DOUBLE + 15,
1687*9712c20fSFrederick Mayle   CURLINFO_CONTENT_LENGTH_UPLOAD     = CURLINFO_DOUBLE + 16,
1688*9712c20fSFrederick Mayle   CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17,
1689*9712c20fSFrederick Mayle   CURLINFO_CONTENT_TYPE     = CURLINFO_STRING + 18,
1690*9712c20fSFrederick Mayle   CURLINFO_REDIRECT_TIME    = CURLINFO_DOUBLE + 19,
1691*9712c20fSFrederick Mayle   CURLINFO_REDIRECT_COUNT   = CURLINFO_LONG   + 20,
1692*9712c20fSFrederick Mayle   CURLINFO_PRIVATE          = CURLINFO_STRING + 21,
1693*9712c20fSFrederick Mayle   CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG   + 22,
1694*9712c20fSFrederick Mayle   CURLINFO_HTTPAUTH_AVAIL   = CURLINFO_LONG   + 23,
1695*9712c20fSFrederick Mayle   CURLINFO_PROXYAUTH_AVAIL  = CURLINFO_LONG   + 24,
1696*9712c20fSFrederick Mayle   CURLINFO_OS_ERRNO         = CURLINFO_LONG   + 25,
1697*9712c20fSFrederick Mayle   CURLINFO_NUM_CONNECTS     = CURLINFO_LONG   + 26,
1698*9712c20fSFrederick Mayle   CURLINFO_SSL_ENGINES      = CURLINFO_SLIST  + 27,
1699*9712c20fSFrederick Mayle   CURLINFO_COOKIELIST       = CURLINFO_SLIST  + 28,
1700*9712c20fSFrederick Mayle   CURLINFO_LASTSOCKET       = CURLINFO_LONG   + 29,
1701*9712c20fSFrederick Mayle   CURLINFO_FTP_ENTRY_PATH   = CURLINFO_STRING + 30,
1702*9712c20fSFrederick Mayle   CURLINFO_REDIRECT_URL     = CURLINFO_STRING + 31,
1703*9712c20fSFrederick Mayle   CURLINFO_PRIMARY_IP       = CURLINFO_STRING + 32,
1704*9712c20fSFrederick Mayle   CURLINFO_APPCONNECT_TIME  = CURLINFO_DOUBLE + 33,
1705*9712c20fSFrederick Mayle   CURLINFO_CERTINFO         = CURLINFO_SLIST  + 34,
1706*9712c20fSFrederick Mayle   CURLINFO_CONDITION_UNMET  = CURLINFO_LONG   + 35,
1707*9712c20fSFrederick Mayle   /* Fill in new entries below here! */
1708*9712c20fSFrederick Mayle 
1709*9712c20fSFrederick Mayle   CURLINFO_LASTONE          = 35
1710*9712c20fSFrederick Mayle } CURLINFO;
1711*9712c20fSFrederick Mayle 
1712*9712c20fSFrederick Mayle /* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
1713*9712c20fSFrederick Mayle    CURLINFO_HTTP_CODE */
1714*9712c20fSFrederick Mayle #define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE
1715*9712c20fSFrederick Mayle 
1716*9712c20fSFrederick Mayle typedef enum {
1717*9712c20fSFrederick Mayle   CURLCLOSEPOLICY_NONE, /* first, never use this */
1718*9712c20fSFrederick Mayle 
1719*9712c20fSFrederick Mayle   CURLCLOSEPOLICY_OLDEST,
1720*9712c20fSFrederick Mayle   CURLCLOSEPOLICY_LEAST_RECENTLY_USED,
1721*9712c20fSFrederick Mayle   CURLCLOSEPOLICY_LEAST_TRAFFIC,
1722*9712c20fSFrederick Mayle   CURLCLOSEPOLICY_SLOWEST,
1723*9712c20fSFrederick Mayle   CURLCLOSEPOLICY_CALLBACK,
1724*9712c20fSFrederick Mayle 
1725*9712c20fSFrederick Mayle   CURLCLOSEPOLICY_LAST /* last, never use this */
1726*9712c20fSFrederick Mayle } curl_closepolicy;
1727*9712c20fSFrederick Mayle 
1728*9712c20fSFrederick Mayle #define CURL_GLOBAL_SSL (1<<0)
1729*9712c20fSFrederick Mayle #define CURL_GLOBAL_WIN32 (1<<1)
1730*9712c20fSFrederick Mayle #define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32)
1731*9712c20fSFrederick Mayle #define CURL_GLOBAL_NOTHING 0
1732*9712c20fSFrederick Mayle #define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL
1733*9712c20fSFrederick Mayle 
1734*9712c20fSFrederick Mayle 
1735*9712c20fSFrederick Mayle /*****************************************************************************
1736*9712c20fSFrederick Mayle  * Setup defines, protos etc for the sharing stuff.
1737*9712c20fSFrederick Mayle  */
1738*9712c20fSFrederick Mayle 
1739*9712c20fSFrederick Mayle /* Different data locks for a single share */
1740*9712c20fSFrederick Mayle typedef enum {
1741*9712c20fSFrederick Mayle   CURL_LOCK_DATA_NONE = 0,
1742*9712c20fSFrederick Mayle   /*  CURL_LOCK_DATA_SHARE is used internally to say that
1743*9712c20fSFrederick Mayle    *  the locking is just made to change the internal state of the share
1744*9712c20fSFrederick Mayle    *  itself.
1745*9712c20fSFrederick Mayle    */
1746*9712c20fSFrederick Mayle   CURL_LOCK_DATA_SHARE,
1747*9712c20fSFrederick Mayle   CURL_LOCK_DATA_COOKIE,
1748*9712c20fSFrederick Mayle   CURL_LOCK_DATA_DNS,
1749*9712c20fSFrederick Mayle   CURL_LOCK_DATA_SSL_SESSION,
1750*9712c20fSFrederick Mayle   CURL_LOCK_DATA_CONNECT,
1751*9712c20fSFrederick Mayle   CURL_LOCK_DATA_LAST
1752*9712c20fSFrederick Mayle } curl_lock_data;
1753*9712c20fSFrederick Mayle 
1754*9712c20fSFrederick Mayle /* Different lock access types */
1755*9712c20fSFrederick Mayle typedef enum {
1756*9712c20fSFrederick Mayle   CURL_LOCK_ACCESS_NONE = 0,   /* unspecified action */
1757*9712c20fSFrederick Mayle   CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */
1758*9712c20fSFrederick Mayle   CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */
1759*9712c20fSFrederick Mayle   CURL_LOCK_ACCESS_LAST        /* never use */
1760*9712c20fSFrederick Mayle } curl_lock_access;
1761*9712c20fSFrederick Mayle 
1762*9712c20fSFrederick Mayle typedef void (*curl_lock_function)(CURL *handle,
1763*9712c20fSFrederick Mayle                                    curl_lock_data data,
1764*9712c20fSFrederick Mayle                                    curl_lock_access locktype,
1765*9712c20fSFrederick Mayle                                    void *userptr);
1766*9712c20fSFrederick Mayle typedef void (*curl_unlock_function)(CURL *handle,
1767*9712c20fSFrederick Mayle                                      curl_lock_data data,
1768*9712c20fSFrederick Mayle                                      void *userptr);
1769*9712c20fSFrederick Mayle 
1770*9712c20fSFrederick Mayle typedef void CURLSH;
1771*9712c20fSFrederick Mayle 
1772*9712c20fSFrederick Mayle typedef enum {
1773*9712c20fSFrederick Mayle   CURLSHE_OK,  /* all is fine */
1774*9712c20fSFrederick Mayle   CURLSHE_BAD_OPTION, /* 1 */
1775*9712c20fSFrederick Mayle   CURLSHE_IN_USE,     /* 2 */
1776*9712c20fSFrederick Mayle   CURLSHE_INVALID,    /* 3 */
1777*9712c20fSFrederick Mayle   CURLSHE_NOMEM,      /* out of memory */
1778*9712c20fSFrederick Mayle   CURLSHE_LAST /* never use */
1779*9712c20fSFrederick Mayle } CURLSHcode;
1780*9712c20fSFrederick Mayle 
1781*9712c20fSFrederick Mayle typedef enum {
1782*9712c20fSFrederick Mayle   CURLSHOPT_NONE,  /* don't use */
1783*9712c20fSFrederick Mayle   CURLSHOPT_SHARE,   /* specify a data type to share */
1784*9712c20fSFrederick Mayle   CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */
1785*9712c20fSFrederick Mayle   CURLSHOPT_LOCKFUNC,   /* pass in a 'curl_lock_function' pointer */
1786*9712c20fSFrederick Mayle   CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */
1787*9712c20fSFrederick Mayle   CURLSHOPT_USERDATA,   /* pass in a user data pointer used in the lock/unlock
1788*9712c20fSFrederick Mayle                            callback functions */
1789*9712c20fSFrederick Mayle   CURLSHOPT_LAST  /* never use */
1790*9712c20fSFrederick Mayle } CURLSHoption;
1791*9712c20fSFrederick Mayle 
1792*9712c20fSFrederick Mayle CURL_EXTERN CURLSH *curl_share_init(void);
1793*9712c20fSFrederick Mayle CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...);
1794*9712c20fSFrederick Mayle CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *);
1795*9712c20fSFrederick Mayle 
1796*9712c20fSFrederick Mayle /****************************************************************************
1797*9712c20fSFrederick Mayle  * Structures for querying information about the curl library at runtime.
1798*9712c20fSFrederick Mayle  */
1799*9712c20fSFrederick Mayle 
1800*9712c20fSFrederick Mayle typedef enum {
1801*9712c20fSFrederick Mayle   CURLVERSION_FIRST,
1802*9712c20fSFrederick Mayle   CURLVERSION_SECOND,
1803*9712c20fSFrederick Mayle   CURLVERSION_THIRD,
1804*9712c20fSFrederick Mayle   CURLVERSION_FOURTH,
1805*9712c20fSFrederick Mayle   CURLVERSION_LAST /* never actually use this */
1806*9712c20fSFrederick Mayle } CURLversion;
1807*9712c20fSFrederick Mayle 
1808*9712c20fSFrederick Mayle /* The 'CURLVERSION_NOW' is the symbolic name meant to be used by
1809*9712c20fSFrederick Mayle    basically all programs ever that want to get version information. It is
1810*9712c20fSFrederick Mayle    meant to be a built-in version number for what kind of struct the caller
1811*9712c20fSFrederick Mayle    expects. If the struct ever changes, we redefine the NOW to another enum
1812*9712c20fSFrederick Mayle    from above. */
1813*9712c20fSFrederick Mayle #define CURLVERSION_NOW CURLVERSION_FOURTH
1814*9712c20fSFrederick Mayle 
1815*9712c20fSFrederick Mayle typedef struct {
1816*9712c20fSFrederick Mayle   CURLversion age;          /* age of the returned struct */
1817*9712c20fSFrederick Mayle   const char *version;      /* LIBCURL_VERSION */
1818*9712c20fSFrederick Mayle   unsigned int version_num; /* LIBCURL_VERSION_NUM */
1819*9712c20fSFrederick Mayle   const char *host;         /* OS/host/cpu/machine when configured */
1820*9712c20fSFrederick Mayle   int features;             /* bitmask, see defines below */
1821*9712c20fSFrederick Mayle   const char *ssl_version;  /* human readable string */
1822*9712c20fSFrederick Mayle   long ssl_version_num;     /* not used anymore, always 0 */
1823*9712c20fSFrederick Mayle   const char *libz_version; /* human readable string */
1824*9712c20fSFrederick Mayle   /* protocols is terminated by an entry with a NULL protoname */
1825*9712c20fSFrederick Mayle   const char * const *protocols;
1826*9712c20fSFrederick Mayle 
1827*9712c20fSFrederick Mayle   /* The fields below this were added in CURLVERSION_SECOND */
1828*9712c20fSFrederick Mayle   const char *ares;
1829*9712c20fSFrederick Mayle   int ares_num;
1830*9712c20fSFrederick Mayle 
1831*9712c20fSFrederick Mayle   /* This field was added in CURLVERSION_THIRD */
1832*9712c20fSFrederick Mayle   const char *libidn;
1833*9712c20fSFrederick Mayle 
1834*9712c20fSFrederick Mayle   /* These field were added in CURLVERSION_FOURTH */
1835*9712c20fSFrederick Mayle 
1836*9712c20fSFrederick Mayle   /* Same as '_libiconv_version' if built with HAVE_ICONV */
1837*9712c20fSFrederick Mayle   int iconv_ver_num;
1838*9712c20fSFrederick Mayle 
1839*9712c20fSFrederick Mayle   const char *libssh_version; /* human readable string */
1840*9712c20fSFrederick Mayle 
1841*9712c20fSFrederick Mayle } curl_version_info_data;
1842*9712c20fSFrederick Mayle 
1843*9712c20fSFrederick Mayle #define CURL_VERSION_IPV6      (1<<0)  /* IPv6-enabled */
1844*9712c20fSFrederick Mayle #define CURL_VERSION_KERBEROS4 (1<<1)  /* kerberos auth is supported */
1845*9712c20fSFrederick Mayle #define CURL_VERSION_SSL       (1<<2)  /* SSL options are present */
1846*9712c20fSFrederick Mayle #define CURL_VERSION_LIBZ      (1<<3)  /* libz features are present */
1847*9712c20fSFrederick Mayle #define CURL_VERSION_NTLM      (1<<4)  /* NTLM auth is supported */
1848*9712c20fSFrederick Mayle #define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth support */
1849*9712c20fSFrederick Mayle #define CURL_VERSION_DEBUG     (1<<6)  /* built with debug capabilities */
1850*9712c20fSFrederick Mayle #define CURL_VERSION_ASYNCHDNS (1<<7)  /* asynchronous dns resolves */
1851*9712c20fSFrederick Mayle #define CURL_VERSION_SPNEGO    (1<<8)  /* SPNEGO auth */
1852*9712c20fSFrederick Mayle #define CURL_VERSION_LARGEFILE (1<<9)  /* supports files bigger than 2GB */
1853*9712c20fSFrederick Mayle #define CURL_VERSION_IDN       (1<<10) /* International Domain Names support */
1854*9712c20fSFrederick Mayle #define CURL_VERSION_SSPI      (1<<11) /* SSPI is supported */
1855*9712c20fSFrederick Mayle #define CURL_VERSION_CONV      (1<<12) /* character conversions supported */
1856*9712c20fSFrederick Mayle #define CURL_VERSION_CURLDEBUG (1<<13) /* debug memory tracking supported */
1857*9712c20fSFrederick Mayle 
1858*9712c20fSFrederick Mayle /*
1859*9712c20fSFrederick Mayle  * NAME curl_version_info()
1860*9712c20fSFrederick Mayle  *
1861*9712c20fSFrederick Mayle  * DESCRIPTION
1862*9712c20fSFrederick Mayle  *
1863*9712c20fSFrederick Mayle  * This function returns a pointer to a static copy of the version info
1864*9712c20fSFrederick Mayle  * struct. See above.
1865*9712c20fSFrederick Mayle  */
1866*9712c20fSFrederick Mayle CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion);
1867*9712c20fSFrederick Mayle 
1868*9712c20fSFrederick Mayle /*
1869*9712c20fSFrederick Mayle  * NAME curl_easy_strerror()
1870*9712c20fSFrederick Mayle  *
1871*9712c20fSFrederick Mayle  * DESCRIPTION
1872*9712c20fSFrederick Mayle  *
1873*9712c20fSFrederick Mayle  * The curl_easy_strerror function may be used to turn a CURLcode value
1874*9712c20fSFrederick Mayle  * into the equivalent human readable error string.  This is useful
1875*9712c20fSFrederick Mayle  * for printing meaningful error messages.
1876*9712c20fSFrederick Mayle  */
1877*9712c20fSFrederick Mayle CURL_EXTERN const char *curl_easy_strerror(CURLcode);
1878*9712c20fSFrederick Mayle 
1879*9712c20fSFrederick Mayle /*
1880*9712c20fSFrederick Mayle  * NAME curl_share_strerror()
1881*9712c20fSFrederick Mayle  *
1882*9712c20fSFrederick Mayle  * DESCRIPTION
1883*9712c20fSFrederick Mayle  *
1884*9712c20fSFrederick Mayle  * The curl_share_strerror function may be used to turn a CURLSHcode value
1885*9712c20fSFrederick Mayle  * into the equivalent human readable error string.  This is useful
1886*9712c20fSFrederick Mayle  * for printing meaningful error messages.
1887*9712c20fSFrederick Mayle  */
1888*9712c20fSFrederick Mayle CURL_EXTERN const char *curl_share_strerror(CURLSHcode);
1889*9712c20fSFrederick Mayle 
1890*9712c20fSFrederick Mayle /*
1891*9712c20fSFrederick Mayle  * NAME curl_easy_pause()
1892*9712c20fSFrederick Mayle  *
1893*9712c20fSFrederick Mayle  * DESCRIPTION
1894*9712c20fSFrederick Mayle  *
1895*9712c20fSFrederick Mayle  * The curl_easy_pause function pauses or unpauses transfers. Select the new
1896*9712c20fSFrederick Mayle  * state by setting the bitmask, use the convenience defines below.
1897*9712c20fSFrederick Mayle  *
1898*9712c20fSFrederick Mayle  */
1899*9712c20fSFrederick Mayle CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask);
1900*9712c20fSFrederick Mayle 
1901*9712c20fSFrederick Mayle #define CURLPAUSE_RECV      (1<<0)
1902*9712c20fSFrederick Mayle #define CURLPAUSE_RECV_CONT (0)
1903*9712c20fSFrederick Mayle 
1904*9712c20fSFrederick Mayle #define CURLPAUSE_SEND      (1<<2)
1905*9712c20fSFrederick Mayle #define CURLPAUSE_SEND_CONT (0)
1906*9712c20fSFrederick Mayle 
1907*9712c20fSFrederick Mayle #define CURLPAUSE_ALL       (CURLPAUSE_RECV|CURLPAUSE_SEND)
1908*9712c20fSFrederick Mayle #define CURLPAUSE_CONT      (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT)
1909*9712c20fSFrederick Mayle 
1910*9712c20fSFrederick Mayle #ifdef  __cplusplus
1911*9712c20fSFrederick Mayle }
1912*9712c20fSFrederick Mayle #endif
1913*9712c20fSFrederick Mayle 
1914*9712c20fSFrederick Mayle /* unfortunately, the easy.h and multi.h include files need options and info
1915*9712c20fSFrederick Mayle   stuff before they can be included! */
1916*9712c20fSFrederick Mayle #include "easy.h" /* nothing in curl is fun without the easy stuff */
1917*9712c20fSFrederick Mayle #include "multi.h"
1918*9712c20fSFrederick Mayle 
1919*9712c20fSFrederick Mayle /* the typechecker doesn't work in C++ (yet) */
1920*9712c20fSFrederick Mayle #if defined(__GNUC__) && defined(__GNUC_MINOR__) && \
1921*9712c20fSFrederick Mayle     ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \
1922*9712c20fSFrederick Mayle     !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK)
1923*9712c20fSFrederick Mayle #include "typecheck-gcc.h"
1924*9712c20fSFrederick Mayle #else
1925*9712c20fSFrederick Mayle #if defined(__STDC__) && (__STDC__ >= 1)
1926*9712c20fSFrederick Mayle /* This preprocessor magic that replaces a call with the exact same call is
1927*9712c20fSFrederick Mayle    only done to make sure application authors pass exactly three arguments
1928*9712c20fSFrederick Mayle    to these functions. */
1929*9712c20fSFrederick Mayle #define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param)
1930*9712c20fSFrederick Mayle #define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg)
1931*9712c20fSFrederick Mayle #define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param)
1932*9712c20fSFrederick Mayle #define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param)
1933*9712c20fSFrederick Mayle #endif /* __STDC__ >= 1 */
1934*9712c20fSFrederick Mayle #endif /* gcc >= 4.3 && !__cplusplus */
1935*9712c20fSFrederick Mayle 
1936*9712c20fSFrederick Mayle #endif /* __CURL_CURL_H */
1937