📄 curl.h
字号:
#ifndef __CURL_CURL_H#define __CURL_CURL_H/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: curl.h,v 1.341 2008-01-10 10:30:20 bagder Exp $ ***************************************************************************//* If you have problems, all libcurl docs and details are found here: http://curl.haxx.se/libcurl/*/#include "curlver.h" /* the libcurl version defines *//* * Define WIN32 when build target is Win32 API */#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)#define WIN32#endif#include <stdio.h>#include <limits.h>/* The include stuff here below is mainly for time_t! */#ifdef vms# include <types.h># include <time.h>#else# include <sys/types.h># include <time.h>#endif /* defined (vms) */#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__GNUC__) && \ !defined(__CYGWIN__) || defined(__MINGW32__)#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H))/* The check above prevents the winsock2 inclusion if winsock.h already was included, since they can't co-exist without problems */#include <winsock2.h>#include <ws2tcpip.h>#endif#else/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish libc5-based Linux systems. Only include it on system that are known to require it! */#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || defined(__minix)#include <sys/select.h>#endif#ifndef _WIN32_WCE#include <sys/socket.h>#endif#ifndef __WATCOMC__#include <sys/time.h>#endif#include <sys/types.h>#endif#ifdef __BEOS__#include <support/SupportDefs.h>#endif#ifdef __cplusplusextern "C" {#endiftypedef void CURL;/* * Decorate exportable functions for Win32 DLL linking. * This avoids using a .def file for building libcurl.dll. */#if (defined(WIN32) || defined(_WIN32)) && !defined(CURL_STATICLIB)#if defined(BUILDING_LIBCURL)#define CURL_EXTERN __declspec(dllexport)#else#define CURL_EXTERN __declspec(dllimport)#endif#else#ifdef CURL_HIDDEN_SYMBOLS/* * This definition is used to make external definitions visibile in the * shared library when symbols are hidden by default. It makes no * difference when compiling applications whether this is set or not, * only when compiling the library. */#define CURL_EXTERN CURL_EXTERN_SYMBOL#else#define CURL_EXTERN#endif#endif/* * We want the typedef curl_off_t setup for large file support on all * platforms. We also provide a CURL_FORMAT_OFF_T define to use in *printf * format strings when outputting a variable of type curl_off_t. * * Note: "pocc -Ze" is MSVC compatibily mode and this sets _MSC_VER! */#if (defined(_MSC_VER) && !defined(__POCC__)) || (defined(__LCC__) && defined(WIN32))/* MSVC */#ifdef _WIN32_WCE typedef long curl_off_t;#define CURL_FORMAT_OFF_T "%ld"#else typedef signed __int64 curl_off_t;#define CURL_FORMAT_OFF_T "%I64d"#endif#else /* (_MSC_VER && !__POCC__) || (__LCC__ && WIN32) */#if (defined(__GNUC__) && defined(WIN32)) || defined(__WATCOMC__)/* gcc on windows or Watcom */ typedef long long curl_off_t;#define CURL_FORMAT_OFF_T "%I64d"#else /* GCC or Watcom on Windows */#if defined(__ILEC400__)/* OS400 C compiler. */ typedef long long curl_off_t;#define CURL_FORMAT_OFF_T "%lld"#else /* OS400 C compiler. *//* "normal" POSIX approach, do note that this does not necessarily mean that the type is >32 bits, see the SIZEOF_CURL_OFF_T define for that! */ typedef off_t curl_off_t;/* Check a range of defines to detect large file support. On Linux it seems none of these are set by default, so if you don't explicitly switches on large file support, this define will be made for "small file" support. */#ifndef _FILE_OFFSET_BITS#define _FILE_OFFSET_BITS 0 /* to prevent warnings in the check below */#define UNDEF_FILE_OFFSET_BITS#endif#ifndef FILESIZEBITS#define FILESIZEBITS 0 /* to prevent warnings in the check below */#define UNDEF_FILESIZEBITS#endif#if defined(_LARGE_FILES) || (_FILE_OFFSET_BITS > 32) || (FILESIZEBITS > 32) \ || defined(_LARGEFILE_SOURCE) || defined(_LARGEFILE64_SOURCE) /* For now, we assume at least one of these to be set for large files to work! */#define CURL_FORMAT_OFF_T "%lld"#else /* LARGE_FILE support */#define CURL_FORMAT_OFF_T "%ld"#endif#endif /* OS400 C compiler. */#endif /* GCC or Watcom on Windows */#endif /* (_MSC_VER && !__POCC__) || (__LCC__ && WIN32) */#ifdef UNDEF_FILE_OFFSET_BITS/* this was defined above for our checks, undefine it again */#undef _FILE_OFFSET_BITS#endif#ifdef UNDEF_FILESIZEBITS/* this was defined above for our checks, undefine it again */#undef FILESIZEBITS#endif#ifndef curl_socket_typedef/* socket typedef */#ifdef WIN32typedef SOCKET curl_socket_t;#define CURL_SOCKET_BAD INVALID_SOCKET#elsetypedef int curl_socket_t;#define CURL_SOCKET_BAD -1#endif#define curl_socket_typedef#endif /* curl_socket_typedef */struct curl_httppost { struct curl_httppost *next; /* next entry in the list */ char *name; /* pointer to allocated name */ long namelength; /* length of name length */ char *contents; /* pointer to allocated data contents */ long contentslength; /* length of contents field */ char *buffer; /* pointer to allocated buffer contents */ long bufferlength; /* length of buffer field */ char *contenttype; /* Content-Type */ struct curl_slist* contentheader; /* list of extra headers for this form */ struct curl_httppost *more; /* if one field name has more than one file, this link should link to following files */ long flags; /* as defined below */#define HTTPPOST_FILENAME (1<<0) /* specified content is a file name */#define HTTPPOST_READFILE (1<<1) /* specified content is a file name */#define HTTPPOST_PTRNAME (1<<2) /* name is only stored pointer do not free in formfree */#define HTTPPOST_PTRCONTENTS (1<<3) /* contents is only stored pointer do not free in formfree */#define HTTPPOST_BUFFER (1<<4) /* upload file from buffer */#define HTTPPOST_PTRBUFFER (1<<5) /* upload file from pointer contents */ char *showfilename; /* The file name to show. If not set, the actual file name will be used (if this is a file part) */};typedef int (*curl_progress_callback)(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow);#ifndef CURL_MAX_WRITE_SIZE /* Tests have proven that 20K is a very bad buffer size for uploads on Windows, while 16K for some odd reason performed a lot better. We do the ifndef check to allow this value to easier be changed at build time for those who feel adventurous. */#define CURL_MAX_WRITE_SIZE 16384#endif/* This is a magic return code for the write callback that, when returned, will signal libcurl to pause receving on the current transfer. */#define CURL_WRITEFUNC_PAUSE 0x10000001typedef size_t (*curl_write_callback)(char *buffer, size_t size, size_t nitems, void *outstream);/* This is a return code for the read callback that, when returned, will signal libcurl to immediately abort the current transfer. */#define CURL_READFUNC_ABORT 0x10000000/* This is a return code for the read callback that, when returned, will signal libcurl to pause sending data on the current transfer. */#define CURL_READFUNC_PAUSE 0x10000001typedef int (*curl_seek_callback)(void *instream, curl_off_t offset, int origin); /* 'whence' */typedef size_t (*curl_read_callback)(char *buffer, size_t size, size_t nitems, void *instream);typedef enum { CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ CURLSOCKTYPE_LAST /* never use */} curlsocktype;typedef int (*curl_sockopt_callback)(void *clientp, curl_socket_t curlfd, curlsocktype purpose);struct curl_sockaddr { int family; int socktype; int protocol; unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it turned really ugly and painful on the systems that lack this type */ struct sockaddr addr;};typedef curl_socket_t(*curl_opensocket_callback)(void *clientp, curlsocktype purpose, struct curl_sockaddr *address);#ifndef CURL_NO_OLDIES /* not used since 7.10.8, will be removed in a future release */typedef int (*curl_passwd_callback)(void *clientp, const char *prompt, char *buffer, int buflen);#endiftypedef enum { CURLIOE_OK, /* I/O operation successful */ CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ CURLIOE_FAILRESTART, /* failed to restart the read */ CURLIOE_LAST /* never use */} curlioerr;typedef enum { CURLIOCMD_NOP, /* no operation */ CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ CURLIOCMD_LAST /* never use */} curliocmd;typedef curlioerr (*curl_ioctl_callback)(CURL *handle, int cmd, void *clientp);/* * The following typedef's are signatures of malloc, free, realloc, strdup and * calloc respectively. Function pointers of these types can be passed to the * curl_global_init_mem() function to set user defined memory management * callback routines. */typedef void *(*curl_malloc_callback)(size_t size);typedef void (*curl_free_callback)(void *ptr);typedef void *(*curl_realloc_callback)(void *ptr, size_t size);typedef char *(*curl_strdup_callback)(const char *str);typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size);/* the kind of data that is passed to information_callback*/typedef enum { CURLINFO_TEXT = 0, CURLINFO_HEADER_IN, /* 1 */ CURLINFO_HEADER_OUT, /* 2 */ CURLINFO_DATA_IN, /* 3 */ CURLINFO_DATA_OUT, /* 4 */ CURLINFO_SSL_DATA_IN, /* 5 */ CURLINFO_SSL_DATA_OUT, /* 6 */ CURLINFO_END} curl_infotype;typedef int (*curl_debug_callback) (CURL *handle, /* the handle/transfer this concerns */ curl_infotype type, /* what kind of data */ char *data, /* points to the data */ size_t size, /* size of the data pointed to */ void *userptr); /* whatever the user please *//* All possible error codes from all sorts of curl functions. Future versions may return other values, stay prepared. Always add new return codes last. Never *EVER* remove any. The return codes must remain the same! */typedef enum { CURLE_OK = 0, CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ CURLE_FAILED_INIT, /* 2 */ CURLE_URL_MALFORMAT, /* 3 */ CURLE_OBSOLETE4, /* 4 - NOT USED */ CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ CURLE_COULDNT_RESOLVE_HOST, /* 6 */ CURLE_COULDNT_CONNECT, /* 7 */ CURLE_FTP_WEIRD_SERVER_REPLY, /* 8 */ CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server due to lack of access - when login fails this is not returned. */ CURLE_OBSOLETE10, /* 10 - NOT USED */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -