From a7a1e46bcc65211a5df00d646c46c5032deaf15d Mon Sep 17 00:00:00 2001 From: Lucas GAUTHERON Date: Fri, 22 Mar 2013 19:49:21 +0000 Subject: [PATCH] merged branch git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@7382 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- config/pcksources.cfg | 3 + source/codeblocks/AssaultCube.cbp | 1 + source/include/curl/curl.h | 1757 +++++++++++++++++ source/include/curl/curlver.h | 67 + source/include/curl/easy.h | 81 + source/include/curl/mprintf.h | 80 + source/include/curl/multi.h | 346 ++++ source/include/curl/stdcheaders.h | 34 + source/include/curl/types.h | 1 + source/lib/libcurl.lib | Bin 0 -> 440146 bytes source/lib/winmm.lib | Bin 0 -> 42696 bytes source/lib/wldap32.lib | Bin 0 -> 53218 bytes source/lib/ws2_32.lib | Bin 0 -> 251596 bytes source/src/Makefile | 9 +- source/src/audiomanager.cpp | 8 +- source/src/client.cpp | 225 ++- source/src/clientgame.cpp | 5 +- source/src/entity.h | 21 + source/src/main.cpp | 7 + source/src/openal.cpp | 131 +- source/src/platform.h | 5 + source/src/protos.h | 21 +- source/src/rendermodel.cpp | 30 +- source/src/sound.h | 6 +- source/src/stream.cpp | 38 + source/src/texture.cpp | 33 +- source/src/tools.cpp | 8 +- source/src/tools.h | 5 + source/src/weapon.cpp | 4 +- source/src/world.cpp | 1 - source/src/world.h | 4 +- source/src/worldio.cpp | 388 +--- source/src/zip.cpp | 124 +- source/vcpp/cube.sln | 7 +- source/vcpp/cube.vcproj | 4 +- .../assaultcube.xcodeproj/project.pbxproj | 4 + 36 files changed, 2944 insertions(+), 514 deletions(-) create mode 100644 config/pcksources.cfg create mode 100644 source/include/curl/curl.h create mode 100644 source/include/curl/curlver.h create mode 100644 source/include/curl/easy.h create mode 100644 source/include/curl/mprintf.h create mode 100644 source/include/curl/multi.h create mode 100644 source/include/curl/stdcheaders.h create mode 100644 source/include/curl/types.h create mode 100644 source/lib/libcurl.lib create mode 100644 source/lib/winmm.lib create mode 100644 source/lib/wldap32.lib create mode 100644 source/lib/ws2_32.lib diff --git a/config/pcksources.cfg b/config/pcksources.cfg new file mode 100644 index 00000000..fb82c022 --- /dev/null +++ b/config/pcksources.cfg @@ -0,0 +1,3 @@ +// list of package source servers (only add servers you trust!) + +addpckserver de582.ispfr.net/cube/ diff --git a/source/codeblocks/AssaultCube.cbp b/source/codeblocks/AssaultCube.cbp index 46522317..d29da961 100644 --- a/source/codeblocks/AssaultCube.cbp +++ b/source/codeblocks/AssaultCube.cbp @@ -65,6 +65,7 @@ + diff --git a/source/include/curl/curl.h b/source/include/curl/curl.h new file mode 100644 index 00000000..ccc3ff63 --- /dev/null +++ b/source/include/curl/curl.h @@ -0,0 +1,1757 @@ +#ifndef __CURL_CURL_H +#define __CURL_CURL_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2007, Daniel Stenberg, , 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.331 2007-10-15 18:32:01 patrickm 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 */ + +#include +#include + +/* The include stuff here below is mainly for time_t! */ +#ifdef vms +# include +# include +#else +# include +# include +#endif /* defined (vms) */ + +typedef void CURL; + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * 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 + +#if defined(_WIN32) && !defined(WIN32) +/* Chris Lewis mentioned that he doesn't get WIN32 defined, only _WIN32 so we + make this adjustment to catch this. */ +#define WIN32 1 +#endif + +#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 +#include +#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 +#endif + +#ifndef _WIN32_WCE +#include +#endif +#ifndef __WATCOMC__ +#include +#endif +#include +#endif + +#ifndef curl_socket_typedef +/* socket typedef */ +#ifdef WIN32 +typedef SOCKET curl_socket_t; +#define CURL_SOCKET_BAD INVALID_SOCKET +#else +typedef int curl_socket_t; +#define CURL_SOCKET_BAD -1 +#endif +#define curl_socket_typedef +#endif /* curl_socket_typedef */ +// 2011nov05: flowtron +// avoid conflict with /usr/include/unistd.h (l.275ff here) +// typedef __socklen_t socklen_t; +#ifndef __socklen_t_defined +typedef int socklen_t; +// original line was: +//typedef int socklen_t; +#endif + +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 + +typedef 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 +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; + socklen_t addrlen; + 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); +#endif + +typedef 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 */ + CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ + CURLE_OBSOLETE12, /* 12 - NOT USED */ + CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ + CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ + CURLE_FTP_CANT_GET_HOST, /* 15 */ + CURLE_OBSOLETE16, /* 16 - NOT USED */ + CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ + CURLE_PARTIAL_FILE, /* 18 */ + CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ + CURLE_OBSOLETE20, /* 20 - NOT USED */ + CURLE_QUOTE_ERROR, /* 21 - quote command failure */ + CURLE_HTTP_RETURNED_ERROR, /* 22 */ + CURLE_WRITE_ERROR, /* 23 */ + CURLE_OBSOLETE24, /* 24 - NOT USED */ + CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ + CURLE_READ_ERROR, /* 26 - could open/read from file */ + CURLE_OUT_OF_MEMORY, /* 27 */ + /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error + instead of a memory allocation error if CURL_DOES_CONVERSIONS + is defined + */ + CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ + CURLE_OBSOLETE29, /* 29 - NOT USED */ + CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ + CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ + CURLE_OBSOLETE32, /* 32 - NOT USED */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ + CURLE_HTTP_POST_ERROR, /* 34 */ + CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ + CURLE_FILE_COULDNT_READ_FILE, /* 37 */ + CURLE_LDAP_CANNOT_BIND, /* 38 */ + CURLE_LDAP_SEARCH_FAILED, /* 39 */ + CURLE_OBSOLETE40, /* 40 - NOT USED */ + CURLE_FUNCTION_NOT_FOUND, /* 41 */ + CURLE_ABORTED_BY_CALLBACK, /* 42 */ + CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ + CURLE_OBSOLETE44, /* 44 - NOT USED */ + CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ + CURLE_OBSOLETE46, /* 46 - NOT USED */ + CURLE_TOO_MANY_REDIRECTS , /* 47 - catch endless re-direct loops */ + CURLE_UNKNOWN_TELNET_OPTION, /* 48 - User specified an unknown option */ + CURLE_TELNET_OPTION_SYNTAX , /* 49 - Malformed telnet option */ + CURLE_OBSOLETE50, /* 50 - NOT USED */ + CURLE_PEER_FAILED_VERIFICATION, /* 51 - peer's certificate or fingerprint + wasn't verified fine */ + CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ + CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ + CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as + default */ + CURLE_SEND_ERROR, /* 55 - failed sending network data */ + CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ + CURLE_OBSOLETE57, /* 57 - NOT IN USE */ + CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ + CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ + CURLE_SSL_CACERT, /* 60 - problem with the CA cert (path?) */ + CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized transfer encoding */ + CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */ + CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ + CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ + CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind + that failed */ + CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ + CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not + accepted and we failed to login */ + CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ + CURLE_TFTP_PERM, /* 69 - permission problem on server */ + CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ + CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ + CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ + CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ + CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ + CURLE_CONV_FAILED, /* 75 - conversion failed */ + CURLE_CONV_REQD, /* 76 - caller must register conversion + callbacks using curl_easy_setopt options + CURLOPT_CONV_FROM_NETWORK_FUNCTION, + CURLOPT_CONV_TO_NETWORK_FUNCTION, and + CURLOPT_CONV_FROM_UTF8_FUNCTION */ + CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing + or wrong format */ + CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ + CURLE_SSH, /* 79 - error from the SSH layer, somewhat + generic so the error message will be of + interest when this has happened */ + + CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL + connection */ + CURL_LAST /* never use! */ +} CURLcode; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ + +/* The following were added in 7.17.1 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.17.0 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* noone should be using this! */ +#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 +#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 +#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 +#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 +#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 +#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 +#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 +#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 +#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 +#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 +#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 +#define CURLE_URL_MALFORMAT_USER CURLE_OBSOLETE4 + +#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED +#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE +#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR +#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL +#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS +#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR +#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED + +/* The following were added earlier */ + +#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT + +#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR +#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED +#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED + +#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE +#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME + +/* This was the error code 50 in 7.7.3 and a few earlier versions, this + is no longer used by libcurl but is instead #defined here only to not + make programs break */ +#define CURLE_ALREADY_COMPLETE 99999 + +#endif /*!CURL_NO_OLDIES*/ + +/* This prototype applies to all conversion callbacks */ +typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); + +typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ + void *ssl_ctx, /* actually an + OpenSSL SSL_CTX */ + void *userptr); + +typedef enum { + CURLPROXY_HTTP = 0, + CURLPROXY_SOCKS4 = 4, + CURLPROXY_SOCKS5 = 5 +} curl_proxytype; + +#define CURLAUTH_NONE 0 /* nothing */ +#define CURLAUTH_BASIC (1<<0) /* Basic (default) */ +#define CURLAUTH_DIGEST (1<<1) /* Digest */ +#define CURLAUTH_GSSNEGOTIATE (1<<2) /* GSS-Negotiate */ +#define CURLAUTH_NTLM (1<<3) /* NTLM */ +#define CURLAUTH_ANY ~0 /* all types set */ +#define CURLAUTH_ANYSAFE (~CURLAUTH_BASIC) + +#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ +#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ +#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ +#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ +#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ +#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ +#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY + +#define CURL_ERROR_SIZE 256 + +/* parameter for the CURLOPT_USE_SSL option */ +typedef enum { + CURLUSESSL_NONE, /* do not attempt to use SSL */ + CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ + CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ + CURLUSESSL_ALL, /* SSL for all communication or fail */ + CURLUSESSL_LAST /* not an option, never use */ +} curl_usessl; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2009 */ + +#define CURLFTPSSL_NONE CURLUSESSL_NONE +#define CURLFTPSSL_TRY CURLUSESSL_TRY +#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL +#define CURLFTPSSL_ALL CURLUSESSL_ALL +#define CURLFTPSSL_LAST CURLUSESSL_LAST +#define curl_ftpssl curl_usessl +#endif /*!CURL_NO_OLDIES*/ + +/* parameter for the CURLOPT_FTP_SSL_CCC option */ +typedef enum { + CURLFTPSSL_CCC_NONE, /* do not send CCC */ + CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ + CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ + CURLFTPSSL_CCC_LAST /* not an option, never use */ +} curl_ftpccc; + +/* parameter for the CURLOPT_FTPSSLAUTH option */ +typedef enum { + CURLFTPAUTH_DEFAULT, /* let libcurl decide */ + CURLFTPAUTH_SSL, /* use "AUTH SSL" */ + CURLFTPAUTH_TLS, /* use "AUTH TLS" */ + CURLFTPAUTH_LAST /* not an option, never use */ +} curl_ftpauth; + +/* parameter for the CURLOPT_FTP_FILEMETHOD option */ +typedef enum { + CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ + CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ + CURLFTPMETHOD_NOCWD, /* no CWD at all */ + CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ + CURLFTPMETHOD_LAST /* not an option, never use */ +} curl_ftpmethod; + +/* long may be 32 or 64 bits, but we should never depend on anything else + but 32 */ +#define CURLOPTTYPE_LONG 0 +#define CURLOPTTYPE_OBJECTPOINT 10000 +#define CURLOPTTYPE_FUNCTIONPOINT 20000 +#define CURLOPTTYPE_OFF_T 30000 + +/* name is uppercase CURLOPT_, + type is one of the defined CURLOPTTYPE_ + number is unique identifier */ +#ifdef CINIT +#undef CINIT +#endif +/* + * Figure out if we can use the ## operator, which is supported by ISO/ANSI C + * and C++. Some compilers support it without setting __STDC__ or __cplusplus + * so we need to carefully check for them too. We don't use configure-checks + * for these since we want these headers to remain generic and working for all + * platforms. + */ +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ + defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ + defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ + defined(__ILEC400__) + /* This compiler is believed to have an ISO compatible preprocessor */ +#define CURL_ISOCPP +#else + /* This compiler is believed NOT to have an ISO compatible preprocessor */ +#undef CURL_ISOCPP +#endif + +#ifdef CURL_ISOCPP +#define CINIT(name,type,number) CURLOPT_ ## name = CURLOPTTYPE_ ## type + number +#else +/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */ +#define LONG CURLOPTTYPE_LONG +#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT +#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT +#define OFF_T CURLOPTTYPE_OFF_T +#define CINIT(name,type,number) CURLOPT_/**/name = type + number +#endif + +/* + * This macro-mania below setups the CURLOPT_[what] enum, to be used with + * curl_easy_setopt(). The first argument in the CINIT() macro is the [what] + * word. + */ + +typedef enum { + /* This is the FILE * or void * the regular output should be written to. */ + CINIT(FILE, OBJECTPOINT, 1), + + /* The full URL to get/put */ + CINIT(URL, OBJECTPOINT, 2), + + /* Port number to connect to, if other than default. */ + CINIT(PORT, LONG, 3), + + /* Name of proxy to use. */ + CINIT(PROXY, OBJECTPOINT, 4), + + /* "name:password" to use when fetching. */ + CINIT(USERPWD, OBJECTPOINT, 5), + + /* "name:password" to use with proxy. */ + CINIT(PROXYUSERPWD, OBJECTPOINT, 6), + + /* Range to get, specified as an ASCII string. */ + CINIT(RANGE, OBJECTPOINT, 7), + + /* not used */ + + /* Specified file stream to upload from (use as input): */ + CINIT(INFILE, OBJECTPOINT, 9), + + /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE + * bytes big. If this is not used, error messages go to stderr instead: */ + CINIT(ERRORBUFFER, OBJECTPOINT, 10), + + /* Function that will be called to store the output (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11), + + /* Function that will be called to read the input (instead of fread). The + * parameters will use fread() syntax, make sure to follow them. */ + CINIT(READFUNCTION, FUNCTIONPOINT, 12), + + /* Time-out the read operation after this amount of seconds */ + CINIT(TIMEOUT, LONG, 13), + + /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about + * how large the file being sent really is. That allows better error + * checking and better verifies that the upload was succcessful. -1 means + * unknown size. + * + * For large file support, there is also a _LARGE version of the key + * which takes an off_t type, allowing platforms with larger off_t + * sizes to handle larger files. See below for INFILESIZE_LARGE. + */ + CINIT(INFILESIZE, LONG, 14), + + /* POST static input fields. */ + CINIT(POSTFIELDS, OBJECTPOINT, 15), + + /* Set the referer page (needed by some CGIs) */ + CINIT(REFERER, OBJECTPOINT, 16), + + /* Set the FTP PORT string (interface name, named or numerical IP address) + Use i.e '-' to use default address. */ + CINIT(FTPPORT, OBJECTPOINT, 17), + + /* Set the User-Agent string (examined by some CGIs) */ + CINIT(USERAGENT, OBJECTPOINT, 18), + + /* If the download receives less than "low speed limit" bytes/second + * during "low speed time" seconds, the operations is aborted. + * You could i.e if you have a pretty high speed connection, abort if + * it is less than 2000 bytes/sec during 20 seconds. + */ + + /* Set the "low speed limit" */ + CINIT(LOW_SPEED_LIMIT, LONG, 19), + + /* Set the "low speed time" */ + CINIT(LOW_SPEED_TIME, LONG, 20), + + /* Set the continuation offset. + * + * Note there is also a _LARGE version of this key which uses + * off_t types, allowing for large file offsets on platforms which + * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. + */ + CINIT(RESUME_FROM, LONG, 21), + + /* Set cookie in request: */ + CINIT(COOKIE, OBJECTPOINT, 22), + + /* This points to a linked list of headers, struct curl_slist kind */ + CINIT(HTTPHEADER, OBJECTPOINT, 23), + + /* This points to a linked list of post entries, struct HttpPost */ + CINIT(HTTPPOST, OBJECTPOINT, 24), + + /* name of the file keeping your private SSL-certificate */ + CINIT(SSLCERT, OBJECTPOINT, 25), + + /* password for the SSL or SSH private key */ + CINIT(KEYPASSWD, OBJECTPOINT, 26), + + /* send TYPE parameter? */ + CINIT(CRLF, LONG, 27), + + /* send linked-list of QUOTE commands */ + CINIT(QUOTE, OBJECTPOINT, 28), + + /* send FILE * or void * to store headers to, if you use a callback it + is simply passed to the callback unmodified */ + CINIT(WRITEHEADER, OBJECTPOINT, 29), + + /* point to a file to read the initial cookies from, also enables + "cookie awareness" */ + CINIT(COOKIEFILE, OBJECTPOINT, 31), + + /* What version to specifly try to use. + See CURL_SSLVERSION defines below. */ + CINIT(SSLVERSION, LONG, 32), + + /* What kind of HTTP time condition to use, see defines */ + CINIT(TIMECONDITION, LONG, 33), + + /* Time to use with the above condition. Specified in number of seconds + since 1 Jan 1970 */ + CINIT(TIMEVALUE, LONG, 34), + + /* 35 = OBSOLETE */ + + /* Custom request, for customizing the get command like + HTTP: DELETE, TRACE and others + FTP: to use a different list command + */ + CINIT(CUSTOMREQUEST, OBJECTPOINT, 36), + + /* HTTP request, for odd commands like DELETE, TRACE and others */ + CINIT(STDERR, OBJECTPOINT, 37), + + /* 38 is not used */ + + /* send linked-list of post-transfer QUOTE commands */ + CINIT(POSTQUOTE, OBJECTPOINT, 39), + + /* Pass a pointer to string of the output using full variable-replacement + as described elsewhere. */ + CINIT(WRITEINFO, OBJECTPOINT, 40), + + CINIT(VERBOSE, LONG, 41), /* talk a lot */ + CINIT(HEADER, LONG, 42), /* throw the header out too */ + CINIT(NOPROGRESS, LONG, 43), /* shut off the progress meter */ + CINIT(NOBODY, LONG, 44), /* use HEAD to get http document */ + CINIT(FAILONERROR, LONG, 45), /* no output on http error codes >= 300 */ + CINIT(UPLOAD, LONG, 46), /* this is an upload */ + CINIT(POST, LONG, 47), /* HTTP POST method */ + CINIT(DIRLISTONLY, LONG, 48), /* return bare names when listing directories */ + + CINIT(APPEND, LONG, 50), /* Append instead of overwrite on upload! */ + + /* Specify whether to read the user+password from the .netrc or the URL. + * This must be one of the CURL_NETRC_* enums below. */ + CINIT(NETRC, LONG, 51), + + CINIT(FOLLOWLOCATION, LONG, 52), /* use Location: Luke! */ + + CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */ + CINIT(PUT, LONG, 54), /* HTTP PUT */ + + /* 55 = OBSOLETE */ + + /* Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_progress_callback + * prototype defines. */ + CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56), + + /* Data passed to the progress callback */ + CINIT(PROGRESSDATA, OBJECTPOINT, 57), + + /* We want the referer field set automatically when following locations */ + CINIT(AUTOREFERER, LONG, 58), + + /* Port of the proxy, can be set in the proxy string as well with: + "[host]:[port]" */ + CINIT(PROXYPORT, LONG, 59), + + /* size of the POST input data, if strlen() is not good to use */ + CINIT(POSTFIELDSIZE, LONG, 60), + + /* tunnel non-http operations through a HTTP proxy */ + CINIT(HTTPPROXYTUNNEL, LONG, 61), + + /* Set the interface string to use as outgoing network interface */ + CINIT(INTERFACE, OBJECTPOINT, 62), + + /* Set the krb4/5 security level, this also enables krb4/5 awareness. This + * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string + * is set but doesn't match one of these, 'private' will be used. */ + CINIT(KRBLEVEL, OBJECTPOINT, 63), + + /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ + CINIT(SSL_VERIFYPEER, LONG, 64), + + /* The CApath or CAfile used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CINIT(CAINFO, OBJECTPOINT, 65), + + /* 66 = OBSOLETE */ + /* 67 = OBSOLETE */ + + /* Maximum number of http redirects to follow */ + CINIT(MAXREDIRS, LONG, 68), + + /* Pass a long set to 1 to get the date of the requested document (if + possible)! Pass a zero to shut it off. */ + CINIT(FILETIME, LONG, 69), + + /* This points to a linked list of telnet options */ + CINIT(TELNETOPTIONS, OBJECTPOINT, 70), + + /* Max amount of cached alive connections */ + CINIT(MAXCONNECTS, LONG, 71), + + /* What policy to use when closing connections when the cache is filled + up */ + CINIT(CLOSEPOLICY, LONG, 72), + + /* 73 = OBSOLETE */ + + /* Set to explicitly use a new connection for the upcoming transfer. + Do not use this unless you're absolutely sure of this, as it makes the + operation slower and is less friendly for the network. */ + CINIT(FRESH_CONNECT, LONG, 74), + + /* Set to explicitly forbid the upcoming transfer's connection to be re-used + when done. Do not use this unless you're absolutely sure of this, as it + makes the operation slower and is less friendly for the network. */ + CINIT(FORBID_REUSE, LONG, 75), + + /* Set to a file name that contains random data for libcurl to use to + seed the random engine when doing SSL connects. */ + CINIT(RANDOM_FILE, OBJECTPOINT, 76), + + /* Set to the Entropy Gathering Daemon socket pathname */ + CINIT(EGDSOCKET, OBJECTPOINT, 77), + + /* Time-out connect operations after this amount of seconds, if connects + are OK within this time, then fine... This only aborts the connect + phase. [Only works on unix-style/SIGALRM operating systems] */ + CINIT(CONNECTTIMEOUT, LONG, 78), + + /* Function that will be called to store headers (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79), + + /* Set this to force the HTTP request to get back to GET. Only really usable + if POST, PUT or a custom request have been used first. + */ + CINIT(HTTPGET, LONG, 80), + + /* Set if we should verify the Common name from the peer certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches the + * provided hostname. */ + CINIT(SSL_VERIFYHOST, LONG, 81), + + /* Specify which file name to write all known cookies in after completed + operation. Set file name to "-" (dash) to make it go to stdout. */ + CINIT(COOKIEJAR, OBJECTPOINT, 82), + + /* Specify which SSL ciphers to use */ + CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 83), + + /* Specify which HTTP version to use! This must be set to one of the + CURL_HTTP_VERSION* enums set below. */ + CINIT(HTTP_VERSION, LONG, 84), + + /* Specificly switch on or off the FTP engine's use of the EPSV command. By + default, that one will always be attempted before the more traditional + PASV command. */ + CINIT(FTP_USE_EPSV, LONG, 85), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ + CINIT(SSLCERTTYPE, OBJECTPOINT, 86), + + /* name of the file keeping your private SSL-key */ + CINIT(SSLKEY, OBJECTPOINT, 87), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ + CINIT(SSLKEYTYPE, OBJECTPOINT, 88), + + /* crypto engine for the SSL-sub system */ + CINIT(SSLENGINE, OBJECTPOINT, 89), + + /* set the crypto engine for the SSL-sub system as default + the param has no meaning... + */ + CINIT(SSLENGINE_DEFAULT, LONG, 90), + + /* Non-zero value means to use the global dns cache */ + CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* To become OBSOLETE soon */ + + /* DNS cache timeout */ + CINIT(DNS_CACHE_TIMEOUT, LONG, 92), + + /* send linked-list of pre-transfer QUOTE commands (Wesley Laxton)*/ + CINIT(PREQUOTE, OBJECTPOINT, 93), + + /* set the debug function */ + CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94), + + /* set the data for the debug function */ + CINIT(DEBUGDATA, OBJECTPOINT, 95), + + /* mark this as start of a cookie session */ + CINIT(COOKIESESSION, LONG, 96), + + /* The CApath directory used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CINIT(CAPATH, OBJECTPOINT, 97), + + /* Instruct libcurl to use a smaller receive buffer */ + CINIT(BUFFERSIZE, LONG, 98), + + /* Instruct libcurl to not use any signal/alarm handlers, even when using + timeouts. This option is useful for multi-threaded applications. + See libcurl-the-guide for more background information. */ + CINIT(NOSIGNAL, LONG, 99), + + /* Provide a CURLShare for mutexing non-ts data */ + CINIT(SHARE, OBJECTPOINT, 100), + + /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), + CURLPROXY_SOCKS4 and CURLPROXY_SOCKS5. */ + CINIT(PROXYTYPE, LONG, 101), + + /* Set the Accept-Encoding string. Use this to tell a server you would like + the response to be compressed. */ + CINIT(ENCODING, OBJECTPOINT, 102), + + /* Set pointer to private data */ + CINIT(PRIVATE, OBJECTPOINT, 103), + + /* Set aliases for HTTP 200 in the HTTP Response header */ + CINIT(HTTP200ALIASES, OBJECTPOINT, 104), + + /* Continue to send authentication (user+password) when following locations, + even when hostname changed. This can potentionally send off the name + and password to whatever host the server decides. */ + CINIT(UNRESTRICTED_AUTH, LONG, 105), + + /* Specificly switch on or off the FTP engine's use of the EPRT command ( it + also disables the LPRT attempt). By default, those ones will always be + attempted before the good old traditional PORT command. */ + CINIT(FTP_USE_EPRT, LONG, 106), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_USERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CINIT(HTTPAUTH, LONG, 107), + + /* Set the ssl context callback function, currently only for OpenSSL ssl_ctx + in second argument. The function must be matching the + curl_ssl_ctx_callback proto. */ + CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108), + + /* Set the userdata for the ssl context callback function's third + argument */ + CINIT(SSL_CTX_DATA, OBJECTPOINT, 109), + + /* FTP Option that causes missing dirs to be created on the remote server */ + CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CINIT(PROXYAUTH, LONG, 111), + + /* FTP option that changes the timeout, in seconds, associated with + getting a response. This is different from transfer timeout time and + essentially places a demand on the FTP server to acknowledge commands + in a timely manner. */ + CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112), + + /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to + tell libcurl to resolve names to those IP versions only. This only has + affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */ + CINIT(IPRESOLVE, LONG, 113), + + /* Set this option to limit the size of a file that will be downloaded from + an HTTP or FTP server. + + Note there is also _LARGE version which adds large file support for + platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ + CINIT(MAXFILESIZE, LONG, 114), + + /* See the comment for INFILESIZE above, but in short, specifies + * the size of the file being uploaded. -1 means unknown. + */ + CINIT(INFILESIZE_LARGE, OFF_T, 115), + + /* Sets the continuation offset. There is also a LONG version of this; + * look above for RESUME_FROM. + */ + CINIT(RESUME_FROM_LARGE, OFF_T, 116), + + /* Sets the maximum size of data that will be downloaded from + * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. + */ + CINIT(MAXFILESIZE_LARGE, OFF_T, 117), + + /* Set this option to the file name of your .netrc file you want libcurl + to parse (using the CURLOPT_NETRC option). If not set, libcurl will do + a poor attempt to find the user's home directory and check for a .netrc + file in there. */ + CINIT(NETRC_FILE, OBJECTPOINT, 118), + + /* Enable SSL/TLS for FTP, pick one of: + CURLFTPSSL_TRY - try using SSL, proceed anyway otherwise + CURLFTPSSL_CONTROL - SSL for the control connection or fail + CURLFTPSSL_ALL - SSL for all communication or fail + */ + CINIT(USE_SSL, LONG, 119), + + /* The _LARGE version of the standard POSTFIELDSIZE option */ + CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120), + + /* Enable/disable the TCP Nagle algorithm */ + CINIT(TCP_NODELAY, LONG, 121), + + /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 123 OBSOLETE. Gone in 7.16.0 */ + /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 127 OBSOLETE. Gone in 7.16.0 */ + /* 128 OBSOLETE. Gone in 7.16.0 */ + + /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option + can be used to change libcurl's default action which is to first try + "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK + response has been received. + + Available parameters are: + CURLFTPAUTH_DEFAULT - let libcurl decide + CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS + CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL + */ + CINIT(FTPSSLAUTH, LONG, 129), + + CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130), + CINIT(IOCTLDATA, OBJECTPOINT, 131), + + /* 132 OBSOLETE. Gone in 7.16.0 */ + /* 133 OBSOLETE. Gone in 7.16.0 */ + + /* zero terminated string for pass on to the FTP server when asked for + "account" info */ + CINIT(FTP_ACCOUNT, OBJECTPOINT, 134), + + /* feed cookies into cookie engine */ + CINIT(COOKIELIST, OBJECTPOINT, 135), + + /* ignore Content-Length */ + CINIT(IGNORE_CONTENT_LENGTH, LONG, 136), + + /* Set to non-zero to skip the IP address received in a 227 PASV FTP server + response. Typically used for FTP-SSL purposes but is not restricted to + that. libcurl will then instead use the same IP address it used for the + control connection. */ + CINIT(FTP_SKIP_PASV_IP, LONG, 137), + + /* Select "file method" to use when doing FTP, see the curl_ftpmethod + above. */ + CINIT(FTP_FILEMETHOD, LONG, 138), + + /* Local port number to bind the socket to */ + CINIT(LOCALPORT, LONG, 139), + + /* Number of ports to try, including the first one set with LOCALPORT. + Thus, setting it to 1 will make no additional attempts but the first. + */ + CINIT(LOCALPORTRANGE, LONG, 140), + + /* no transfer, set up connection and let application use the socket by + extracting it with CURLINFO_LASTSOCKET */ + CINIT(CONNECT_ONLY, LONG, 141), + + /* Function that will be called to convert from the + network encoding (instead of using the iconv calls in libcurl) */ + CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142), + + /* Function that will be called to convert to the + network encoding (instead of using the iconv calls in libcurl) */ + CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143), + + /* Function that will be called to convert from UTF8 + (instead of using the iconv calls in libcurl) + Note that this is used only for SSL certificate processing */ + CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144), + + /* if the connection proceeds too quickly then need to slow it down */ + /* limit-rate: maximum number of bytes per second to send or receive */ + CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145), + CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146), + + /* Pointer to command string to send if USER/PASS fails. */ + CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147), + + /* callback function for setting socket options */ + CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148), + CINIT(SOCKOPTDATA, OBJECTPOINT, 149), + + /* set to 0 to disable session ID re-use for this transfer, default is + enabled (== 1) */ + CINIT(SSL_SESSIONID_CACHE, LONG, 150), + + /* allowed SSH authentication methods */ + CINIT(SSH_AUTH_TYPES, LONG, 151), + + /* Used by scp/sftp to do public/private key authentication */ + CINIT(SSH_PUBLIC_KEYFILE, OBJECTPOINT, 152), + CINIT(SSH_PRIVATE_KEYFILE, OBJECTPOINT, 153), + + /* Send CCC (Clear Command Channel) after authentication */ + CINIT(FTP_SSL_CCC, LONG, 154), + + /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ + CINIT(TIMEOUT_MS, LONG, 155), + CINIT(CONNECTTIMEOUT_MS, LONG, 156), + + /* set to zero to disable the libcurl's decoding and thus pass the raw body + data to the appliction even when it is encoded/compressed */ + CINIT(HTTP_TRANSFER_DECODING, LONG, 157), + CINIT(HTTP_CONTENT_DECODING, LONG, 158), + + /* Permission used when creating new files and directories on the remote + server for protocols that support it, SFTP/SCP/FILE */ + CINIT(NEW_FILE_PERMS, LONG, 159), + CINIT(NEW_DIRECTORY_PERMS, LONG, 160), + + /* Obey RFC 2616/10.3.2 and keep POSTs as POSTs after a 301 */ + CINIT(POST301, LONG, 161), + + /* used by scp/sftp to verify the host's public key */ + CINIT(SSH_HOST_PUBLIC_KEY_MD5, OBJECTPOINT, 162), + + /* Callback function for opening socket (instead of socket(2)). Optionally, + callback is able change the address or refuse to connect returning + CURL_SOCKET_BAD. The callback should have type + curl_opensocket_callback */ + CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163), + CINIT(OPENSOCKETDATA, OBJECTPOINT, 164), + + /* POST volatile input fields. */ + CINIT(COPYPOSTFIELDS, OBJECTPOINT, 165), + + CURLOPT_LASTENTRY /* the last unused */ +} CURLoption; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2009 */ + +/* The following were added in 7.17.0 */ +#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_FTPAPPEND CURLOPT_APPEND +#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY +#define CURLOPT_FTP_SSL CURLOPT_USE_SSL + +/* The following were added earlier */ + +#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL + +#else +/* This is set if CURL_NO_OLDIES is defined at compile-time */ +#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ +#endif + + + /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host + name resolves addresses using more than one IP protocol version, this + option might be handy to force libcurl to use a specific IP version. */ +#define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP + versions that your system allows */ +#define CURL_IPRESOLVE_V4 1 /* resolve to ipv4 addresses */ +#define CURL_IPRESOLVE_V6 2 /* resolve to ipv6 addresses */ + + /* three convenient "aliases" that follow the name scheme better */ +#define CURLOPT_WRITEDATA CURLOPT_FILE +#define CURLOPT_READDATA CURLOPT_INFILE +#define CURLOPT_HEADERDATA CURLOPT_WRITEHEADER + + /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ +enum { + CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd + like the library to choose the best possible + for us! */ + CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ + CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ + + CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ +}; + + /* These enums are for use with the CURLOPT_NETRC option. */ +enum CURL_NETRC_OPTION { + CURL_NETRC_IGNORED, /* The .netrc will never be read. + * This is the default. */ + CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred + * to one in the .netrc. */ + CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. + * Unless one is set programmatically, the .netrc + * will be queried. */ + CURL_NETRC_LAST +}; + +enum { + CURL_SSLVERSION_DEFAULT, + CURL_SSLVERSION_TLSv1, + CURL_SSLVERSION_SSLv2, + CURL_SSLVERSION_SSLv3, + + CURL_SSLVERSION_LAST /* never use, keep last */ +}; + + +typedef enum { + CURL_TIMECOND_NONE, + + CURL_TIMECOND_IFMODSINCE, + CURL_TIMECOND_IFUNMODSINCE, + CURL_TIMECOND_LASTMOD, + + CURL_TIMECOND_LAST +} curl_TimeCond; + +#ifdef __BEOS__ +#include +#endif + + +/* curl_strequal() and curl_strnequal() are subject for removal in a future + libcurl, see lib/README.curlx for details */ +CURL_EXTERN int (curl_strequal)(const char *s1, const char *s2); +CURL_EXTERN int (curl_strnequal)(const char *s1, const char *s2, size_t n); + +/* name is uppercase CURLFORM_ */ +#ifdef CFINIT +#undef CFINIT +#endif + +#ifdef CURL_ISOCPP +#define CFINIT(name) CURLFORM_ ## name +#else +/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */ +#define CFINIT(name) CURLFORM_/**/name +#endif + +typedef enum { + CFINIT(NOTHING), /********* the first one is unused ************/ + + /* */ + CFINIT(COPYNAME), + CFINIT(PTRNAME), + CFINIT(NAMELENGTH), + CFINIT(COPYCONTENTS), + CFINIT(PTRCONTENTS), + CFINIT(CONTENTSLENGTH), + CFINIT(FILECONTENT), + CFINIT(ARRAY), + CFINIT(OBSOLETE), + CFINIT(FILE), + + CFINIT(BUFFER), + CFINIT(BUFFERPTR), + CFINIT(BUFFERLENGTH), + + CFINIT(CONTENTTYPE), + CFINIT(CONTENTHEADER), + CFINIT(FILENAME), + CFINIT(END), + CFINIT(OBSOLETE2), + + CURLFORM_LASTENTRY /* the last unusued */ +} CURLformoption; + +#undef CFINIT /* done */ + +/* structure to be used as parameter for CURLFORM_ARRAY */ +struct curl_forms { + CURLformoption option; + const char *value; +}; + +/* use this for multipart formpost building */ +/* Returns code for curl_formadd() + * + * Returns: + * CURL_FORMADD_OK on success + * CURL_FORMADD_MEMORY if the FormInfo allocation fails + * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form + * CURL_FORMADD_NULL if a null pointer was given for a char + * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed + * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used + * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) + * CURL_FORMADD_MEMORY if a HttpPost struct cannot be allocated + * CURL_FORMADD_MEMORY if some allocation for string copying failed. + * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array + * + ***************************************************************************/ +typedef enum { + CURL_FORMADD_OK, /* first, no error */ + + CURL_FORMADD_MEMORY, + CURL_FORMADD_OPTION_TWICE, + CURL_FORMADD_NULL, + CURL_FORMADD_UNKNOWN_OPTION, + CURL_FORMADD_INCOMPLETE, + CURL_FORMADD_ILLEGAL_ARRAY, + CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */ + + CURL_FORMADD_LAST /* last */ +} CURLFORMcode; + +/* + * NAME curl_formadd() + * + * DESCRIPTION + * + * Pretty advanved function for building multi-part formposts. Each invoke + * adds one part that together construct a full post. Then use + * CURLOPT_HTTPPOST to send it off to libcurl. + */ +CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost, + struct curl_httppost **last_post, + ...); + +/* + * callback function for curl_formget() + * The void *arg pointer will be the one passed as second argument to curl_formget(). + * The character buffer passed to it must not be freed. + * Should return the buffer length passed to it as the argument "len" on success. + */ +typedef size_t (*curl_formget_callback)(void *arg, const char *buf, size_t len); + +/* + * NAME curl_formget() + * + * DESCRIPTION + * + * Serialize a curl_httppost struct built with curl_formadd(). + * Accepts a void pointer as second argument which will be passed to + * the curl_formget_callback function. + * Returns 0 on success. + */ +CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg, + curl_formget_callback append); +/* + * NAME curl_formfree() + * + * DESCRIPTION + * + * Free a multipart formpost previously built with curl_formadd(). + */ +CURL_EXTERN void curl_formfree(struct curl_httppost *form); + +/* + * NAME curl_getenv() + * + * DESCRIPTION + * + * Returns a malloc()'ed string that MUST be curl_free()ed after usage is + * complete. DEPRECATED - see lib/README.curlx + */ +CURL_EXTERN char *curl_getenv(const char *variable); + +/* + * NAME curl_version() + * + * DESCRIPTION + * + * Returns a static ascii string of the libcurl version. + */ +CURL_EXTERN char *curl_version(void); + +/* + * NAME curl_easy_escape() + * + * DESCRIPTION + * + * Escapes URL strings (converts all letters consider illegal in URLs to their + * %XX versions). This function returns a new allocated string or NULL if an + * error occurred. + */ +CURL_EXTERN char *curl_easy_escape(CURL *handle, + const char *string, + int length); + +/* the previous version: */ +CURL_EXTERN char *curl_escape(const char *string, + int length); + + +/* + * NAME curl_easy_unescape() + * + * DESCRIPTION + * + * Unescapes URL encoding in strings (converts all %XX codes to their 8bit + * versions). This function returns a new allocated string or NULL if an error + * occurred. + * Conversion Note: On non-ASCII platforms the ASCII %XX codes are + * converted into the host encoding. + */ +CURL_EXTERN char *curl_easy_unescape(CURL *handle, + const char *string, + int length, + int *outlength); + +/* the previous version */ +CURL_EXTERN char *curl_unescape(const char *string, + int length); + +/* + * NAME curl_free() + * + * DESCRIPTION + * + * Provided for de-allocation in the same translation unit that did the + * allocation. Added in libcurl 7.10 + */ +CURL_EXTERN void curl_free(void *p); + +/* + * NAME curl_global_init() + * + * DESCRIPTION + * + * curl_global_init() should be invoked exactly once for each application that + * uses libcurl + */ +CURL_EXTERN CURLcode curl_global_init(long flags); + +/* + * NAME curl_global_init_mem() + * + * DESCRIPTION + * + * curl_global_init() or curl_global_init_mem() should be invoked exactly once + * for each application that uses libcurl. This function can be used to + * initialize libcurl and set user defined memory management callback + * functions. Users can implement memory management routines to check for + * memory leaks, check for mis-use of the curl library etc. User registered + * callback routines with be invoked by this library instead of the system + * memory management routines like malloc, free etc. + */ +CURL_EXTERN CURLcode curl_global_init_mem(long flags, + curl_malloc_callback m, + curl_free_callback f, + curl_realloc_callback r, + curl_strdup_callback s, + curl_calloc_callback c); + +/* + * NAME curl_global_cleanup() + * + * DESCRIPTION + * + * curl_global_cleanup() should be invoked exactly once for each application + * that uses libcurl + */ +CURL_EXTERN void curl_global_cleanup(void); + +/* linked-list structure for the CURLOPT_QUOTE option (and other) */ +struct curl_slist { + char *data; + struct curl_slist *next; +}; + +/* + * NAME curl_slist_append() + * + * DESCRIPTION + * + * Appends a string to a linked list. If no list exists, it will be created + * first. Returns the new list, after appending. + */ +CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *, + const char *); + +/* + * NAME curl_slist_free_all() + * + * DESCRIPTION + * + * free a previously built curl_slist. + */ +CURL_EXTERN void curl_slist_free_all(struct curl_slist *); + +/* + * NAME curl_getdate() + * + * DESCRIPTION + * + * Returns the time, in seconds since 1 Jan 1970 of the time string given in + * the first argument. The time argument in the second parameter is unused + * and should be set to NULL. + */ +CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); + +#define CURLINFO_STRING 0x100000 +#define CURLINFO_LONG 0x200000 +#define CURLINFO_DOUBLE 0x300000 +#define CURLINFO_SLIST 0x400000 +#define CURLINFO_MASK 0x0fffff +#define CURLINFO_TYPEMASK 0xf00000 + +typedef enum { + CURLINFO_NONE, /* first, never use this */ + CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, + CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, + CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, + CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, + CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, + CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, + CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7, + CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8, + CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9, + CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10, + CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, + CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, + CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, + CURLINFO_FILETIME = CURLINFO_LONG + 14, + CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15, + CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16, + CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, + CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, + CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, + CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, + CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, + CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, + CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, + CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, + CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, + CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, + CURLINFO_LASTSOCKET = CURLINFO_LONG + 29, + CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, + /* Fill in new entries below here! */ + + CURLINFO_LASTONE = 30 +} CURLINFO; + +/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as + CURLINFO_HTTP_CODE */ +#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE + +typedef enum { + CURLCLOSEPOLICY_NONE, /* first, never use this */ + + CURLCLOSEPOLICY_OLDEST, + CURLCLOSEPOLICY_LEAST_RECENTLY_USED, + CURLCLOSEPOLICY_LEAST_TRAFFIC, + CURLCLOSEPOLICY_SLOWEST, + CURLCLOSEPOLICY_CALLBACK, + + CURLCLOSEPOLICY_LAST /* last, never use this */ +} curl_closepolicy; + +#define CURL_GLOBAL_SSL (1<<0) +#define CURL_GLOBAL_WIN32 (1<<1) +#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) +#define CURL_GLOBAL_NOTHING 0 +#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL + + +/***************************************************************************** + * Setup defines, protos etc for the sharing stuff. + */ + +/* Different data locks for a single share */ +typedef enum { + CURL_LOCK_DATA_NONE = 0, + /* CURL_LOCK_DATA_SHARE is used internaly to say that + * the locking is just made to change the internal state of the share + * itself. + */ + CURL_LOCK_DATA_SHARE, + CURL_LOCK_DATA_COOKIE, + CURL_LOCK_DATA_DNS, + CURL_LOCK_DATA_SSL_SESSION, + CURL_LOCK_DATA_CONNECT, + CURL_LOCK_DATA_LAST +} curl_lock_data; + +/* Different lock access types */ +typedef enum { + CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ + CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ + CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ + CURL_LOCK_ACCESS_LAST /* never use */ +} curl_lock_access; + +typedef void (*curl_lock_function)(CURL *handle, + curl_lock_data data, + curl_lock_access locktype, + void *userptr); +typedef void (*curl_unlock_function)(CURL *handle, + curl_lock_data data, + void *userptr); + +typedef void CURLSH; + +typedef enum { + CURLSHE_OK, /* all is fine */ + CURLSHE_BAD_OPTION, /* 1 */ + CURLSHE_IN_USE, /* 2 */ + CURLSHE_INVALID, /* 3 */ + CURLSHE_NOMEM, /* out of memory */ + CURLSHE_LAST /* never use */ +} CURLSHcode; + +typedef enum { + CURLSHOPT_NONE, /* don't use */ + CURLSHOPT_SHARE, /* specify a data type to share */ + CURLSHOPT_UNSHARE, /* specify shich data type to stop sharing */ + CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ + CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ + CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock + callback functions */ + CURLSHOPT_LAST /* never use */ +} CURLSHoption; + +CURL_EXTERN CURLSH *curl_share_init(void); +CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...); +CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *); + +/**************************************************************************** + * Structures for querying information about the curl library at runtime. + */ + +typedef enum { + CURLVERSION_FIRST, + CURLVERSION_SECOND, + CURLVERSION_THIRD, + CURLVERSION_FOURTH, + CURLVERSION_LAST /* never actually use this */ +} CURLversion; + +/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by + basicly all programs ever, that want to get version information. It is + meant to be a built-in version number for what kind of struct the caller + expects. If the struct ever changes, we redefine the NOW to another enum + from above. */ +#define CURLVERSION_NOW CURLVERSION_FOURTH + +typedef struct { + CURLversion age; /* age of the returned struct */ + const char *version; /* LIBCURL_VERSION */ + unsigned int version_num; /* LIBCURL_VERSION_NUM */ + const char *host; /* OS/host/cpu/machine when configured */ + int features; /* bitmask, see defines below */ + const char *ssl_version; /* human readable string */ + long ssl_version_num; /* not used anymore, always 0 */ + const char *libz_version; /* human readable string */ + /* protocols is terminated by an entry with a NULL protoname */ + const char * const *protocols; + + /* The fields below this were added in CURLVERSION_SECOND */ + const char *ares; + int ares_num; + + /* This field was added in CURLVERSION_THIRD */ + const char *libidn; + + /* These field were added in CURLVERSION_FOURTH */ + + /* Same as '_libiconv_version' if built with HAVE_ICONV */ + int iconv_ver_num; + + const char *libssh_version; /* human readable string */ + +} curl_version_info_data; + +#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ +#define CURL_VERSION_KERBEROS4 (1<<1) /* kerberos auth is supported */ +#define CURL_VERSION_SSL (1<<2) /* SSL options are present */ +#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ +#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ +#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth support */ +#define CURL_VERSION_DEBUG (1<<6) /* built with debug capabilities */ +#define CURL_VERSION_ASYNCHDNS (1<<7) /* asynchronous dns resolves */ +#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth */ +#define CURL_VERSION_LARGEFILE (1<<9) /* supports files bigger than 2GB */ +#define CURL_VERSION_IDN (1<<10) /* International Domain Names support */ +#define CURL_VERSION_SSPI (1<<11) /* SSPI is supported */ +#define CURL_VERSION_CONV (1<<12) /* character conversions are + supported */ + +/* + * NAME curl_version_info() + * + * DESCRIPTION + * + * This function returns a pointer to a static copy of the version info + * struct. See above. + */ +CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); + +/* + * NAME curl_easy_strerror() + * + * DESCRIPTION + * + * The curl_easy_strerror function may be used to turn a CURLcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_easy_strerror(CURLcode); + +/* + * NAME curl_share_strerror() + * + * DESCRIPTION + * + * The curl_share_strerror function may be used to turn a CURLSHcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_share_strerror(CURLSHcode); + +#ifdef __cplusplus +} +#endif + +/* unfortunately, the easy.h and multi.h include files need options and info + stuff before they can be included! */ +#include "easy.h" /* nothing in curl is fun without the easy stuff */ +#include "multi.h" + +#endif /* __CURL_CURL_H */ diff --git a/source/include/curl/curlver.h b/source/include/curl/curlver.h new file mode 100644 index 00000000..8aaca7b0 --- /dev/null +++ b/source/include/curl/curlver.h @@ -0,0 +1,67 @@ +#ifndef __CURL_CURLVER_H +#define __CURL_CURLVER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2007, Daniel Stenberg, , 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: curlver.h,v 1.32 2007-09-13 21:06:19 bagder Exp $ + ***************************************************************************/ + +/* This header file contains nothing but libcurl version info, generated by + a script at release-time. This was made its own header file in 7.11.2 */ + +/* This is the version number of the libcurl package from which this header + file origins: */ +#define LIBCURL_VERSION "7.17.1" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBCURL_VERSION_MAJOR 7 +#define LIBCURL_VERSION_MINOR 17 +#define LIBCURL_VERSION_PATCH 1 + +/* This is the numeric version of the libcurl version number, meant for easier + parsing and comparions by programs. The LIBCURL_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. +*/ +#define LIBCURL_VERSION_NUM 0x071101 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in CVS, as the timestamp is properly set in the + * tarballs by the maketgz script. + * + * The format of the date should follow this template: + * + * "Mon Feb 12 11:35:33 UTC 2007" + */ +#define LIBCURL_TIMESTAMP "Mon Oct 29 14:49:22 UTC 2007" + +#endif /* __CURL_CURLVER_H */ diff --git a/source/include/curl/easy.h b/source/include/curl/easy.h new file mode 100644 index 00000000..b5867200 --- /dev/null +++ b/source/include/curl/easy.h @@ -0,0 +1,81 @@ +#ifndef __CURL_EASY_H +#define __CURL_EASY_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2004, Daniel Stenberg, , 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: easy.h,v 1.13 2004/11/09 14:02:58 giva Exp $ + ***************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +CURL_EXTERN CURL *curl_easy_init(void); +CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); +CURL_EXTERN CURLcode curl_easy_perform(CURL *curl); +CURL_EXTERN void curl_easy_cleanup(CURL *curl); + +/* + * NAME curl_easy_getinfo() + * + * DESCRIPTION + * + * Request internal information from the curl session with this function. The + * third argument MUST be a pointer to a long, a pointer to a char * or a + * pointer to a double (as the documentation describes elsewhere). The data + * pointed to will be filled in accordingly and can be relied upon only if the + * function returns CURLE_OK. This function is intended to get used *AFTER* a + * performed transfer, all results from this function are undefined until the + * transfer is completed. + */ +CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); + + +/* + * NAME curl_easy_duphandle() + * + * DESCRIPTION + * + * Creates a new curl session handle with the same options set for the handle + * passed in. Duplicating a handle could only be a matter of cloning data and + * options, internal state info and things like persistant connections cannot + * be transfered. It is useful in multithreaded applications when you can run + * curl_easy_duphandle() for each new thread to avoid a series of identical + * curl_easy_setopt() invokes in every thread. + */ +CURL_EXTERN CURL* curl_easy_duphandle(CURL *curl); + +/* + * NAME curl_easy_reset() + * + * DESCRIPTION + * + * Re-initializes a CURL handle to the default values. This puts back the + * handle to the same state as it was in when it was just created. + * + * It does keep: live connections, the Session ID cache, the DNS cache and the + * cookies. + */ +CURL_EXTERN void curl_easy_reset(CURL *curl); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/source/include/curl/mprintf.h b/source/include/curl/mprintf.h new file mode 100644 index 00000000..cf265232 --- /dev/null +++ b/source/include/curl/mprintf.h @@ -0,0 +1,80 @@ +#ifndef __CURL_MPRINTF_H +#define __CURL_MPRINTF_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2006, Daniel Stenberg, , 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: mprintf.h,v 1.15 2007-08-07 12:44:38 patrickm Exp $ + ***************************************************************************/ + +#include +#include /* needed for FILE */ + +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +CURL_EXTERN int curl_mprintf(const char *format, ...); +CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...); +CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...); +CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, const char *format, ...); +CURL_EXTERN int curl_mvprintf(const char *format, va_list args); +CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args); +CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args); +CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, const char *format, va_list args); +CURL_EXTERN char *curl_maprintf(const char *format, ...); +CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args); + +#ifdef _MPRINTF_REPLACE +# undef printf +# undef fprintf +# undef sprintf +# undef vsprintf +# undef snprintf +# undef vprintf +# undef vfprintf +# undef vsnprintf +# undef aprintf +# undef vaprintf +# define printf curl_mprintf +# define fprintf curl_mfprintf +#ifdef CURLDEBUG +/* When built with CURLDEBUG we define away the sprintf() functions since we + don't want internal code to be using them */ +# define sprintf sprintf_was_used +# define vsprintf vsprintf_was_used +#else +# define sprintf curl_msprintf +# define vsprintf curl_mvsprintf +#endif +# define snprintf curl_msnprintf +# define vprintf curl_mvprintf +# define vfprintf curl_mvfprintf +# define vsnprintf curl_mvsnprintf +# define aprintf curl_maprintf +# define vaprintf curl_mvaprintf +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __CURL_MPRINTF_H */ diff --git a/source/include/curl/multi.h b/source/include/curl/multi.h new file mode 100644 index 00000000..eada5e7a --- /dev/null +++ b/source/include/curl/multi.h @@ -0,0 +1,346 @@ +#ifndef __CURL_MULTI_H +#define __CURL_MULTI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2007, Daniel Stenberg, , 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: multi.h,v 1.44 2007-05-30 20:04:44 bagder Exp $ + ***************************************************************************/ +/* + This is an "external" header file. Don't give away any internals here! + + GOALS + + o Enable a "pull" interface. The application that uses libcurl decides where + and when to ask libcurl to get/send data. + + o Enable multiple simultaneous transfers in the same thread without making it + complicated for the application. + + o Enable the application to select() on its own file descriptors and curl's + file descriptors simultaneous easily. + +*/ + +/* + * This header file should not really need to include "curl.h" since curl.h + * itself includes this file and we expect user applications to do #include + * without the need for especially including multi.h. + * + * For some reason we added this include here at one point, and rather than to + * break existing (wrongly written) libcurl applications, we leave it as-is + * but with this warning attached. + */ +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void CURLM; + +typedef enum { + CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or + curl_multi_socket*() soon */ + CURLM_OK, + CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ + CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ + CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ + CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ + CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ + CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ + CURLM_LAST +} CURLMcode; + +/* just to make code nicer when using curl_multi_socket() you can now check + for CURLM_CALL_MULTI_SOCKET too in the same style it works for + curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */ +#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM + +typedef enum { + CURLMSG_NONE, /* first, not used */ + CURLMSG_DONE, /* This easy handle has completed. 'result' contains + the CURLcode of the transfer */ + CURLMSG_LAST /* last, not used */ +} CURLMSG; + +struct CURLMsg { + CURLMSG msg; /* what this message means */ + CURL *easy_handle; /* the handle it concerns */ + union { + void *whatever; /* message-specific data */ + CURLcode result; /* return code for transfer */ + } data; +}; +typedef struct CURLMsg CURLMsg; + +/* + * Name: curl_multi_init() + * + * Desc: inititalize multi-style curl usage + * + * Returns: a new CURLM handle to use in all 'curl_multi' functions. + */ +CURL_EXTERN CURLM *curl_multi_init(void); + +/* + * Name: curl_multi_add_handle() + * + * Desc: add a standard curl handle to the multi stack + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_remove_handle() + * + * Desc: removes a curl handle from the multi stack again + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_fdset() + * + * Desc: Ask curl for its fd_set sets. The app can use these to select() or + * poll() on. We want curl_multi_perform() called as soon as one of + * them are ready. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *exc_fd_set, + int *max_fd); + + /* + * Name: curl_multi_perform() + * + * Desc: When the app thinks there's data available for curl it calls this + * function to read/write whatever there is right now. This returns + * as soon as the reads and writes are done. This function does not + * require that there actually is data available for reading or that + * data can be written, it can be called just in case. It returns + * the number of handles that still transfer data in the second + * argument's integer-pointer. + * + * Returns: CURLMcode type, general multi error code. *NOTE* that this only + * returns errors etc regarding the whole multi stack. There might + * still have occurred problems on invidual transfers even when this + * returns OK. + */ +CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, + int *running_handles); + + /* + * Name: curl_multi_cleanup() + * + * Desc: Cleans up and removes a whole multi stack. It does not free or + * touch any individual easy handles in any way. We need to define + * in what state those handles will be if this function is called + * in the middle of a transfer. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); + +/* + * Name: curl_multi_info_read() + * + * Desc: Ask the multi handle if there's any messages/informationals from + * the individual transfers. Messages include informationals such as + * error code from the transfer or just the fact that a transfer is + * completed. More details on these should be written down as well. + * + * Repeated calls to this function will return a new struct each + * time, until a special "end of msgs" struct is returned as a signal + * that there is no more to get at this point. + * + * The data the returned pointer points to will not survive calling + * curl_multi_cleanup(). + * + * The 'CURLMsg' struct is meant to be very simple and only contain + * very basic informations. If more involved information is wanted, + * we will provide the particular "transfer handle" in that struct + * and that should/could/would be used in subsequent + * curl_easy_getinfo() calls (or similar). The point being that we + * must never expose complex structs to applications, as then we'll + * undoubtably get backwards compatibility problems in the future. + * + * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out + * of structs. It also writes the number of messages left in the + * queue (after this read) in the integer the second argument points + * to. + */ +CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, + int *msgs_in_queue); + +/* + * Name: curl_multi_strerror() + * + * Desc: The curl_multi_strerror function may be used to turn a CURLMcode + * value into the equivalent human readable error string. This is + * useful for printing meaningful error messages. + * + * Returns: A pointer to a zero-terminated error message. + */ +CURL_EXTERN const char *curl_multi_strerror(CURLMcode); + +/* + * Name: curl_multi_socket() and + * curl_multi_socket_all() + * + * Desc: An alternative version of curl_multi_perform() that allows the + * application to pass in one of the file descriptors that have been + * detected to have "action" on them and let libcurl perform. + * See man page for details. + */ +#define CURL_POLL_NONE 0 +#define CURL_POLL_IN 1 +#define CURL_POLL_OUT 2 +#define CURL_POLL_INOUT 3 +#define CURL_POLL_REMOVE 4 + +#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD + +#define CURL_CSELECT_IN 0x01 +#define CURL_CSELECT_OUT 0x02 +#define CURL_CSELECT_ERR 0x04 + +typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ + curl_socket_t s, /* socket */ + int what, /* see above */ + void *userp, /* private callback + pointer */ + void *socketp); /* private socket + pointer */ +/* + * Name: curl_multi_timer_callback + * + * Desc: Called by libcurl whenever the library detects a change in the + * maximum number of milliseconds the app is allowed to wait before + * curl_multi_socket() or curl_multi_perform() must be called + * (to allow libcurl's timed events to take place). + * + * Returns: The callback should return zero. + */ +typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ + long timeout_ms, /* see above */ + void *userp); /* private callback + pointer */ + +CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s, + int *running_handles); + +CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, + curl_socket_t s, + int ev_bitmask, + int *running_handles); + +CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle, + int *running_handles); + +#ifndef CURL_ALLOW_OLD_MULTI_SOCKET +/* This macro below was added in 7.16.3 to push users who recompile to use + the new curl_multi_socket_action() instead of the old curl_multi_socket() +*/ +#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) +#endif + +/* + * Name: curl_multi_timeout() + * + * Desc: Returns the maximum number of milliseconds the app is allowed to + * wait before curl_multi_socket() or curl_multi_perform() must be + * called (to allow libcurl's timed events to take place). + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle, + long *milliseconds); + +#undef CINIT /* re-using the same name as in curl.h */ + +#ifdef CURL_ISOCPP +#define CINIT(name,type,number) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + number +#else +/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */ +#define LONG CURLOPTTYPE_LONG +#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT +#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT +#define OFF_T CURLOPTTYPE_OFF_T +#define CINIT(name,type,number) CURLMOPT_/**/name = type + number +#endif + +typedef enum { + /* This is the socket callback function pointer */ + CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1), + + /* This is the argument passed to the socket callback */ + CINIT(SOCKETDATA, OBJECTPOINT, 2), + + /* set to 1 to enable pipelining for this multi handle */ + CINIT(PIPELINING, LONG, 3), + + /* This is the timer callback function pointer */ + CINIT(TIMERFUNCTION, FUNCTIONPOINT, 4), + + /* This is the argument passed to the timer callback */ + CINIT(TIMERDATA, OBJECTPOINT, 5), + + /* maximum number of entries in the connection cache */ + CINIT(MAXCONNECTS, LONG, 6), + + CURLMOPT_LASTENTRY /* the last unused */ +} CURLMoption; + + +/* + * Name: curl_multi_setopt() + * + * Desc: Sets options for the multi handle. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, + CURLMoption option, ...); + + +/* + * Name: curl_multi_assign() + * + * Desc: This function sets an association in the multi handle between the + * given socket and a private pointer of the application. This is + * (only) useful for curl_multi_socket uses. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, + curl_socket_t sockfd, void *sockp); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/source/include/curl/stdcheaders.h b/source/include/curl/stdcheaders.h new file mode 100644 index 00000000..024413ac --- /dev/null +++ b/source/include/curl/stdcheaders.h @@ -0,0 +1,34 @@ +#ifndef __STDC_HEADERS_H +#define __STDC_HEADERS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2004, Daniel Stenberg, , 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: stdcheaders.h,v 1.8 2004/01/07 09:19:34 bagder Exp $ + ***************************************************************************/ + +#include + +size_t fread (void *, size_t, size_t, FILE *); +size_t fwrite (const void *, size_t, size_t, FILE *); + +int strcasecmp(const char *, const char *); +int strncasecmp(const char *, const char *, size_t); + +#endif diff --git a/source/include/curl/types.h b/source/include/curl/types.h new file mode 100644 index 00000000..d37d6ae9 --- /dev/null +++ b/source/include/curl/types.h @@ -0,0 +1 @@ +/* not used */ diff --git a/source/lib/libcurl.lib b/source/lib/libcurl.lib new file mode 100644 index 0000000000000000000000000000000000000000..6008097d9a5ab7dea4c7a0c841dbf39709141741 GIT binary patch literal 440146 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

f^C6A!SpWdt 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 ZtKB)=$Sg0f3Y7XQWGCG4!t#u){|~=UNFe|K literal 0 HcmV?d00001 diff --git a/source/lib/winmm.lib b/source/lib/winmm.lib new file mode 100644 index 0000000000000000000000000000000000000000..32abfa30c925edd59045d0c630d9312796d35d0e GIT binary patch literal 42696 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 OrGa|=JjTjCS^hs%y?49- literal 0 HcmV?d00001 diff --git a/source/lib/wldap32.lib b/source/lib/wldap32.lib new file mode 100644 index 0000000000000000000000000000000000000000..584eb3134de479d08224ebad62087015e63a074a GIT binary patch literal 53218 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 MJ-(JlFuk39|yDnfNWUbZ~)=EOs+Fn8ngqqNM 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 literal 0 HcmV?d00001 diff --git a/source/src/Makefile b/source/src/Makefile index 933e20b4..37312112 100644 --- a/source/src/Makefile +++ b/source/src/Makefile @@ -17,12 +17,12 @@ MV=mv ifneq (,$(findstring MINGW,$(PLATFORM))) WINDRES= windres CLIENT_INCLUDES= $(INCLUDES) -I../include -CLIENT_LIBS= -mwindows -L../lib -lSDL -lSDL_image -lzdll -lopengl32 -lenet -lOpenAL32 -llibvorbisfile -llibintl -lws2_32 -lwinmm +CLIENT_LIBS= -mwindows -L../lib -lSDL -lSDL_image -lzdll -lopengl32 -lenet -lOpenAL32 -llibvorbisfile -llibintl -lws2_32 -lwinmm -lcurl else USRLIB=$(shell if [ -e /usr/lib64 ]; then echo "/usr/lib64"; else echo "/usr/lib"; fi) override CXXFLAGS+= -rdynamic CLIENT_INCLUDES= $(INCLUDES) -I/usr/include `sdl-config --cflags` -idirafter ../include -CLIENT_LIBS= -L../enet/.libs -lenet -L$(USRLIB) -lX11 `sdl-config --libs` -lSDL_image -lz -lGL -lopenal -lvorbisfile +CLIENT_LIBS= -L../enet/.libs -lenet -L$(USRLIB) -lX11 `sdl-config --libs` -lSDL_image -lz -lGL -lopenal -lvorbisfile -lcurl endif CLIENT_OBJS= \ @@ -157,12 +157,11 @@ else client: libenet $(CLIENT_OBJS) $(CXX) $(CXXFLAGS) -o ac_client $(CLIENT_OBJS) $(CLIENT_LIBS) +server: libenet $(SERVER_OBJS) server: libenet $(SERVER_OBJS) $(CXX) $(CXXFLAGS) -o ac_server $(SERVER_OBJS) $(SERVER_LIBS) master: libenet $(MASTER_OBJS) - $(CXX) $(CXXFLAGS) -o ac_master $(MASTER_OBJS) $(SERVER_LIBS) - -client_install: client + $(CXX) $(CXXFLAGS) -o ac_master $(MASTER_OBJS) $(SERVER_LIBS)client_install: client install -d ../../bin_unix/ install -m755 ac_client ../../bin_unix/$(PLATFORM_PREFIX)_client #ifneq (,$(STRIP)) diff --git a/source/src/audiomanager.cpp b/source/src/audiomanager.cpp index b0122f1c..55514884 100644 --- a/source/src/audiomanager.cpp +++ b/source/src/audiomanager.cpp @@ -225,19 +225,19 @@ int audiomanager::addsound(char *name, int vol, int maxuses, bool loop, vectorload()) conoutf("\f3failed to load sample %s", buf->name); + if(!buf->load(trydl) && !trydl) conoutf("\f3failed to load sample %s", buf->name); } -void audiomanager::preloadmapsounds() +void audiomanager::preloadmapsounds(bool trydl) { loopv(ents) { entity &e = ents[i]; - if(e.type==SOUND) preloadmapsound(e); + if(e.type==SOUND) preloadmapsound(e, trydl); } } diff --git a/source/src/client.cpp b/source/src/client.cpp index 5f89e1a1..7b9dbca6 100644 --- a/source/src/client.cpp +++ b/source/src/client.cpp @@ -207,13 +207,11 @@ void disconnect(int onlyclean, int async) } #endif if(!onlyclean) localconnect(); - if(identexists("onDisconnect")) { defformatstring(ondisconnect)("onDisconnect %d", -1); execute(ondisconnect); - } -} + }} void trydisconnect() { @@ -788,12 +786,23 @@ void sendmap(char *mapname) conoutf(_("sending map %s to server..."), mapname); } -void getmap() +void getmap(char *name) { - conoutf(_("requesting map from server...")); - packetbuf p(10, ENET_PACKET_FLAG_RELIABLE); - putint(p, SV_RECVMAP); - sendpackettoserv(2, p.finalize()); + if((!name || !*name) + || (connected && !strcmp(name, getclientmap())) ) + { + conoutf(_("requesting map from server...")); + packetbuf p(10, ENET_PACKET_FLAG_RELIABLE); + putint(p, SV_RECVMAP); + sendpackettoserv(2, p.finalize()); + } + else + { + defformatstring(package)("packages/maps/%s.cgz", name); + requirepackage(PCK_MAP, package); + if(downloadpackages()) conoutf("map %s installed successfully", name); + else conoutf("\f3map download failed."); + } } void deleteservermap(char *mapname) @@ -853,7 +862,7 @@ void rewinddemo(int *seconds) } COMMAND(sendmap, "s"); -COMMAND(getmap, ""); +COMMAND(getmap, "s"); COMMAND(deleteservermap, "s"); COMMAND(resetsecuremaps, ""); COMMAND(securemap, "s"); @@ -861,3 +870,201 @@ COMMAND(getdemo, "is"); COMMAND(listdemos, ""); COMMANDN(setmr, setminutesremaining, "i"); COMMANDN(rewind, rewinddemo, "i"); + +// packages auto - downloader + +// arrays +vector pckservers; +hashtable pendingpackages; + +// cubescript + +void resetpckservers() +{ + pckservers.deletecontents(); +} + +void addpckserver(char *addr) +{ + pckserver *srcserver = new pckserver(); + srcserver->addr = newstring(addr); + srcserver->pending = true; + pckservers.add(srcserver); +} + +COMMAND(resetpckservers, ""); +COMMAND(addpckserver, "s"); + +// cURL / Network + +bool havecurl = false, canceldownloads = false; + +void setupcurl() +{ + if(curl_global_init(CURL_GLOBAL_NOTHING)) conoutf(_("\f3could not init cURL, content downloads not available")); + else + { + havecurl = true; + execfile("config/pcksources.cfg"); + } +} + +static size_t write_callback(void *ptr, size_t size, size_t nmemb, FILE *stream) +{ + return fwrite(ptr, size, nmemb, stream); +} + +int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow) +{ + package *pck = (package *)clientp; + loadingscreen(_("downloading...\n%s %.0f/%.0f KB (%.1f%%)\n(ESC to cancel)"), pck->name, dlnow/double(1000.0), dltotal/double(1000.0), dltotal == 0 ? 0 : (dlnow/dltotal * double(100.0))); + if(interceptkey(SDLK_ESCAPE)) + { + canceldownloads = true; + loadingscreen(); + return 1; + } + return 0; +} + +int processdownload(package *pck) +{ + if(!pck->pending) + { + switch(pck->type) + { + case PCK_TEXTURE: case PCK_AUDIO: + { + preparedir(pck->name); + // with textures/sounds, the image/audio file itself is sent. Just need to copy it from the temporary file + if(!copyfile(path("tmp", true), pck->name)) conoutf(_("\f3failed to install %s"), pck->name); + break; + } + + case PCK_MAP: case PCK_MAPMODEL: + { + const char *p = path("tmp", true); + addzip(p, pck->name, NULL, true, pck->type); + break; + } + + case PCK_SKYBOX: + { + const char *p = path("tmp", true); + char *fname = newstring(pck->name), *ls = strrchr(fname, '/'); + if(ls) *ls = '\0'; + addzip(p, fname, NULL, true, pck->type); + break; + } + + default: + conoutf(_("could not install package %s"), pck->name); + break; + } + delfile(path("tmp", true)); + } + return 0; +} + +// download a package +double dlpackage(package *pck) +{ + if(!pck || !pck->source) return false; + FILE *outfile = fopen(path("tmp", true), "wb"); + string req; + sprintf(req, "%s/%s%s", pck->source->addr, pck->name, (pck->type==PCK_MAP || pck->type==PCK_MAPMODEL || pck->type==PCK_SKYBOX) ? ".zip" : ""); + conoutf(_("downloading %s from %s ..."), pck->name, pck->source->addr); + + int result, httpresult = 0; + double dlsize; + pck->curl = curl_easy_init(); + curl_easy_setopt(pck->curl, CURLOPT_URL, req); + curl_easy_setopt(pck->curl, CURLOPT_WRITEFUNCTION, write_callback); + curl_easy_setopt(pck->curl, CURLOPT_WRITEDATA, outfile); + curl_easy_setopt(pck->curl, CURLOPT_NOPROGRESS, 0); + curl_easy_setopt(pck->curl, CURLOPT_PROGRESSFUNCTION, progress_callback); + curl_easy_setopt(pck->curl, CURLOPT_PROGRESSDATA, pck); + curl_easy_setopt(pck->curl, CURLOPT_CONNECTTIMEOUT, 10); // generous timeout for Bukz ;) + result = curl_easy_perform(pck->curl); + curl_easy_getinfo(pck->curl, CURLINFO_RESPONSE_CODE, &httpresult); + curl_easy_getinfo(pck->curl, CURLINFO_SIZE_DOWNLOAD, &dlsize); + curl_easy_cleanup(pck->curl); + pck->curl = NULL; + fclose(outfile); + + pck->pending = false; + if(result == CURLE_OPERATION_TIMEDOUT || result == CURLE_COULDNT_RESOLVE_HOST) + { + // mark source unresponsive + pck->source->responsive = false; + conoutf(_("\f3could not connect to %s"), pck->source->addr); + + // try to find another source + pckserver *source = NULL; + loopv(pckservers) if(pckservers[i]->responsive) { source = pckservers[i]; break; } + if(!source) + { + conoutf(_("\f3no more servers to connect to")); + canceldownloads = true; + return 0; + } + + // update all packages + enumerate(pendingpackages, package *, pack, + { + pack->source = source; + }); + + pck->pending = true; + + return dlpackage(pck); // retry current + } + if(!result && httpresult == 200) processdownload(pck); + else if(result == CURLE_ABORTED_BY_CALLBACK) conoutf(_("\f3download cancelled")); + else conoutf(_("\f2request for %s failed (cURL %d, HTTP %d)"), req, result, httpresult); + return (!result && httpresult == 200) ? dlsize : 0; +} + +int downloadpackages() +{ + double total = 0; + enumerate(pendingpackages, package *, pck, + { + if(!canceldownloads) + { + if(connected) c2skeepalive(); // try to avoid time out + total += dlpackage(pck); + } + pendingpackages.remove(pck->name); + delete pck; + }); + canceldownloads = false; + return (int)total; +} + +bool requirepackage(int type, const char *path) +{ + if(!havecurl || canceldownloads || type < 0 || type >= PCK_NUM || pendingpackages.access(path)) return false; + + package *pck = new package; + pck->name = unixpath(newstring(path)); + pck->type = type; + loopv(pckservers) if(pckservers[i]->responsive) { pck->source = pckservers[i]; break; } + if(!pck->source) { conoutf(_("\f3no responsive source server found, can't download")); return false; } + pck->pending = true; + + pendingpackages.access(pck->name, pck); + + return true; +} + + +void writepcksourcecfg() +{ + stream *f = openfile(path("config/pcksources.cfg", true), "w"); + if(!f) return; + f->printf("// list of package source servers (only add servers you trust!)\n"); + loopv(pckservers) f->printf("\naddpckserver %s", pckservers[i]->addr); + f->printf("\n"); + delete f; +} \ No newline at end of file diff --git a/source/src/clientgame.cpp b/source/src/clientgame.cpp index 58c3870e..d6a0a84c 100644 --- a/source/src/clientgame.cpp +++ b/source/src/clientgame.cpp @@ -1111,10 +1111,9 @@ void showmapstats() } COMMAND(showmapstats, ""); -VARP(showmodedescriptions, 0, 1, 1); - -void startmap(const char *name, bool reset) // called just after a map load +VARP(showmodedescriptions, 0, 1, 1);extern bool canceldownloads;void startmap(const char *name, bool reset) // called just after a map load { + canceldownloads = false; copystring(clientmap, name); sendmapidenttoserver = true; // Added by Rick diff --git a/source/src/entity.h b/source/src/entity.h index bee118dd..e8824271 100644 --- a/source/src/entity.h +++ b/source/src/entity.h @@ -648,3 +648,24 @@ inline const char *killmessage(int gun, bool gib = false) return killmessages[gib?1:0][gun]; } + +struct pckserver +{ + char *addr; + bool pending, responsive; + + pckserver() : addr(NULL), pending(false), responsive(true) {} +}; + +enum { PCK_TEXTURE, PCK_SKYBOX, PCK_MAPMODEL, PCK_AUDIO, PCK_MAP, PCK_NUM }; + +struct package +{ + char *name; + int type; + bool pending; + pckserver *source; + CURL *curl; + + package() : name(NULL), type(-1), pending(false), source(NULL), curl(NULL) {} +}; diff --git a/source/src/main.cpp b/source/src/main.cpp index aa44612f..48b6dd6c 100644 --- a/source/src/main.cpp +++ b/source/src/main.cpp @@ -34,6 +34,7 @@ void quit() // normal exit extern void writeinitcfg(); writeinitcfg(); writeservercfg(); + writepcksourcecfg(); if(resetcfg) deletecfg(); else writecfg(); cleanup(NULL); @@ -1125,6 +1126,9 @@ int main(int argc, char **argv) notexture = noworldtexture = textureload("packages/misc/notexture.jpg"); if(!notexture) fatal("could not find core textures (hint: run AssaultCube from the parent of the bin directory)"); + nomodel = loadmodel("misc/gib01", -1); //FIXME: need actual placeholder model + if(!notexture) fatal("could not find core models"); + initlog("console"); per_idents = false; // Main font file, all other font files execute from here. @@ -1202,6 +1206,9 @@ int main(int argc, char **argv) initlog("models"); preload_playermodels(); preload_hudguns(); + initlog("curl"); + setupcurl(); + preload_entmodels(); initlog("docs"); diff --git a/source/src/openal.cpp b/source/src/openal.cpp index a55a9a36..db9505a1 100644 --- a/source/src/openal.cpp +++ b/source/src/openal.cpp @@ -254,7 +254,7 @@ sbuffer::~sbuffer() unload(); } -bool sbuffer::load() +bool sbuffer::load(bool trydl) { if(!name) return false; if(id) return true; @@ -264,79 +264,94 @@ bool sbuffer::load() { const char *exts[] = { "", ".wav", ".ogg" }; string filepath; - loopi(sizeof(exts)/sizeof(exts[0])) + loopk(2) { - formatstring(filepath)("packages/audio/%s%s", name, exts[i]); - stream *f = openfile(path(filepath), "rb"); - if(!f) continue; - - size_t len = strlen(filepath); - if(len >= 4 && !strcasecmp(filepath + len - 4, ".ogg")) + loopi(sizeof(exts)/sizeof(exts[0])) { - OggVorbis_File oggfile; - if(!ov_open_callbacks(f, &oggfile, NULL, 0, oggcallbacks)) + formatstring(filepath)("packages/audio/%s%s", name, exts[i]); + stream *f = openfile(path(filepath), "rb"); + if(!f && k>0 && trydl) // only try donwloading after trying all extensions { - vorbis_info *info = ov_info(&oggfile, -1); + requirepackage(PCK_AUDIO, filepath); + bool skip = false; + loopj(sizeof(exts)/sizeof(exts[0])) if(strstr(name, exts[j])) skip = true; // don't try extensions if name already has a known extension + if(skip) break; + continue; + } + if(!f) continue; - const size_t BUFSIZE = 32*1024; - vector buf; - int bitstream; - long bytes; - - do + size_t len = strlen(filepath); + if(len >= 4 && !strcasecmp(filepath + len - 4, ".ogg")) + { + OggVorbis_File oggfile; + if(!ov_open_callbacks(f, &oggfile, NULL, 0, oggcallbacks)) { - char buffer[BUFSIZE]; - bytes = ov_read(&oggfile, buffer, BUFSIZE, isbigendian(), 2, 1, &bitstream); - loopi(bytes) buf.add(buffer[i]); - } while(bytes > 0); + vorbis_info *info = ov_info(&oggfile, -1); - alBufferData(id, info->channels == 2 ? AL_FORMAT_STEREO16 : AL_FORMAT_MONO16, buf.getbuf(), buf.length(), info->rate); - ov_clear(&oggfile); + const size_t BUFSIZE = 32*1024; + vector buf; + int bitstream; + long bytes; + + do + { + char buffer[BUFSIZE]; + bytes = ov_read(&oggfile, buffer, BUFSIZE, isbigendian(), 2, 1, &bitstream); + loopi(bytes) buf.add(buffer[i]); + } while(bytes > 0); + + alBufferData(id, info->channels == 2 ? AL_FORMAT_STEREO16 : AL_FORMAT_MONO16, buf.getbuf(), buf.length(), info->rate); + ov_clear(&oggfile); + } + else + { + delete f; + continue; + } } else { + SDL_AudioSpec wavspec; + uint32_t wavlen; + uint8_t *wavbuf; + + if(!SDL_LoadWAV_RW(f->rwops(), 1, &wavspec, &wavbuf, &wavlen)) + { + SDL_ClearError(); + continue; + } + + ALenum format; + switch(wavspec.format) // map wav header to openal format + { + case AUDIO_U8: + case AUDIO_S8: + format = wavspec.channels==2 ? AL_FORMAT_STEREO8 : AL_FORMAT_MONO8; + break; + case AUDIO_U16: + case AUDIO_S16: + format = wavspec.channels==2 ? AL_FORMAT_STEREO16 : AL_FORMAT_MONO16; + break; + default: + SDL_FreeWAV(wavbuf); + delete f; + unload(); + return false; + } + + alBufferData(id, format, wavbuf, wavlen, wavspec.freq); + SDL_FreeWAV(wavbuf); delete f; - continue; - } - } - else - { - SDL_AudioSpec wavspec; - uint32_t wavlen; - uint8_t *wavbuf; - if(!SDL_LoadWAV_RW(f->rwops(), 1, &wavspec, &wavbuf, &wavlen)) - { - SDL_ClearError(); - continue; - } - - ALenum format; - switch(wavspec.format) // map wav header to openal format - { - case AUDIO_U8: - case AUDIO_S8: - format = wavspec.channels==2 ? AL_FORMAT_STEREO8 : AL_FORMAT_MONO8; - break; - case AUDIO_U16: - case AUDIO_S16: - format = wavspec.channels==2 ? AL_FORMAT_STEREO16 : AL_FORMAT_MONO16; - break; - default: - SDL_FreeWAV(wavbuf); - delete f; + if(ALERR) + { unload(); return false; + }; } - alBufferData(id, format, wavbuf, wavlen, wavspec.freq); - SDL_FreeWAV(wavbuf); - delete f; - - if(ALERR) break; + return true; } - - return true; } } unload(); // loading failed diff --git a/source/src/platform.h b/source/src/platform.h index 0c9f79aa..89f5e09c 100644 --- a/source/src/platform.h +++ b/source/src/platform.h @@ -71,3 +71,8 @@ #include #endif + +#ifndef CURL_STATICLIB +#define CURL_STATICLIB +#endif +#include "curl/curl.h" diff --git a/source/src/protos.h b/source/src/protos.h index b8673487..ae5b45d1 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -312,20 +312,26 @@ extern SDL_Surface *creatergbsurface(int width, int height); extern SDL_Surface *creatergbasurface(int width, int height); extern SDL_Surface *forcergbsurface(SDL_Surface *os); extern SDL_Surface *forcergbasurface(SDL_Surface *os); -extern Texture *textureload(const char *name, int clamp = 0, bool mipmap = true, bool canreduce = false, float scale = 1.0f); -extern Texture *lookuptexture(int tex, Texture *failtex = notexture); +extern Texture *textureload(const char *name, int clamp = 0, bool mipmap = true, bool canreduce = false, float scale = 1.0f, bool trydl = false); +extern Texture *lookuptexture(int tex, Texture *failtex = notexture, bool trydl = false); extern bool reloadtexture(Texture &t); extern bool reloadtexture(const char *name); extern void reloadtextures(); Texture *createtexturefromsurface(const char *name, SDL_Surface *s); extern void blitsurface(SDL_Surface *dst, SDL_Surface *src, int x, int y); +void loadsky(char *basename, bool reload); -static inline Texture *lookupworldtexture(int tex) -{ return lookuptexture(tex, noworldtexture); } +static inline Texture *lookupworldtexture(int tex, bool trydl = true) +{ return lookuptexture(tex, noworldtexture, trydl); } extern float skyfloor; extern void draw_envbox(int fogdist); +extern void setupcurl(); +extern bool requirepackage(int type, const char *path); +extern int downloadpackages(); +extern void writepcksourcecfg(); + extern int maxtmus; extern void inittmus(); extern void resettmu(int n); @@ -369,7 +375,7 @@ extern void c2skeepalive(); extern void neterr(const char *s); extern int getclientnum(); extern void changeteam(int team, bool respawn = true); // deprecated? -extern void getmap(); +extern void getmap(char *name = NULL); extern void newteam(char *name); extern bool securemapcheck(const char *map, bool msg = true); extern int getbuildtype(); @@ -705,11 +711,12 @@ extern void clearmodelbatches(); extern mapmodelinfo &getmminfo(int i); extern int findanim(const char *name); extern void loadskin(const char *dir, const char *altdir, Texture *&skin); -extern model *loadmodel(const char *name, int i = -1); +extern model *nomodel; +extern model *loadmodel(const char *name, int i = -1, bool trydl = false); extern void preload_playermodels(); extern void preload_entmodels(); extern void preload_hudguns(); -extern void preload_mapmodels(); +extern void preload_mapmodels(bool trydl = false); extern void renderclients(); extern void renderclient(playerent *d); extern void renderclient(playerent *d, const char *mdlname, const char *vwepname, int tex = 0); diff --git a/source/src/rendermodel.cpp b/source/src/rendermodel.cpp index 90416e93..671bb3d2 100644 --- a/source/src/rendermodel.cpp +++ b/source/src/rendermodel.cpp @@ -94,6 +94,7 @@ void mapmodel(int *rad, int *h, int *zoff, char *snap, char *name) mmi.rad = *rad; mmi.h = *h; mmi.zoff = *zoff; + mmi.m = NULL; formatstring(mmi.name)("mapmodels/%s", name); } @@ -110,7 +111,7 @@ COMMAND(mapmodelreset, ""); hashtable mdllookup; model *nomodel = NULL; -model *loadmodel(const char *name, int i) +model *loadmodel(const char *name, int i, bool trydl) { if(!name) { @@ -136,15 +137,28 @@ model *loadmodel(const char *name, int i) { delete m; loadingmodel = NULL; + if(trydl) + { + defformatstring(dl)("packages/models/%s", name); + requirepackage(PCK_MAPMODEL, dl); + } + else + { + mdllookup.access(newstring(name), nomodel); + conoutf("\f3failed to load model %s", name); + } } } popscontext(); if(!loadingmodel) { - conoutf(_("failed to load model %s"), name); - if(!nomodel) nomodel = new md2("nomodel"); - m = nomodel; - mdllookup.access(newstring(name), m); + if(!trydl) + { + conoutf(_("failed to load model %s"), name); + if(!nomodel) nomodel = new md2("nomodel"); + m = nomodel; + mdllookup.access(newstring(name), m); + } } else mdllookup.access(m->name(), m); loadingmodel = NULL; @@ -550,14 +564,14 @@ void preload_entmodels() } } -void preload_mapmodels() +void preload_mapmodels(bool trydl) { loopv(ents) { entity &e = ents[i]; if(e.type!=MAPMODEL || !mapmodels.inrange(e.attr2)) continue; - if(!loadmodel(NULL, e.attr2)) continue; - if(e.attr4) lookuptexture(e.attr4); + loadmodel(NULL, e.attr2, trydl); + if(e.attr4) lookuptexture(e.attr4, notexture, trydl); } } diff --git a/source/src/sound.h b/source/src/sound.h index c277bca2..6dce0ce5 100644 --- a/source/src/sound.h +++ b/source/src/sound.h @@ -160,7 +160,7 @@ public: sbuffer(); ~sbuffer(); - bool load(); + bool load(bool trydl = false); void unload(); }; @@ -389,8 +389,8 @@ public: // init & setup void initsound(); - void preloadmapsound(entity &e); - void preloadmapsounds(); + void preloadmapsound(entity &e, bool trydl = false); + void preloadmapsounds(bool trydl = false); void applymapsoundchanges(); // configuration diff --git a/source/src/stream.cpp b/source/src/stream.cpp index 1e326b32..8658ca7f 100644 --- a/source/src/stream.cpp +++ b/source/src/stream.cpp @@ -74,6 +74,12 @@ char *path(char *s) return s; } +char *unixpath(char *s) +{ + for(char *t = s; (t = strchr(t, '\\')); *t++ = '/'); + return s; +} + char *path(const char *s, bool copy) { static string tmp; @@ -304,6 +310,38 @@ bool delfile(const char *path) return !remove(path); } +bool copyfile(const char *source, const char *destination) +{ + FILE *from = fopen(source, "rb"); + FILE *dest = fopen(destination, "wb"); + + if(!from || !dest) return false; + size_t len; + uchar buf[1024]; + while((len = fread(&buf, sizeof(uchar), 1024, from))) + { + fwrite(&buf, sizeof(uchar), len, dest); + } + fclose(from); + fclose(dest); + return true; +} + +bool preparedir(const char *destination) +{ + string dir; + copystring(dir, parentdir(destination)); + vector dirs; + while(!fileexists(dir, "r")) + { + dirs.add(newstring(dir)); + copystring(dir, parentdir(dir)); + } + + loopvrev(dirs) if(!createdir(dirs[i])) return false; + return true; +} + #ifndef STANDALONE static int rwopsseek(SDL_RWops *rw, int offset, int whence) { diff --git a/source/src/texture.cpp b/source/src/texture.cpp index e468fc8e..59630518 100644 --- a/source/src/texture.cpp +++ b/source/src/texture.cpp @@ -354,7 +354,7 @@ bool silent_texture_load = false; VARFP(hirestextures, 0, 1, 1, initwarning("texture resolution", INIT_LOAD)); bool uniformtexres = !hirestextures; -GLuint loadsurface(const char *texname, int &xs, int &ys, int &bpp, int clamp = 0, bool mipmap = true, bool canreduce = false, float scale = 1.0f) +GLuint loadsurface(const char *texname, int &xs, int &ys, int &bpp, int clamp = 0, bool mipmap = true, bool canreduce = false, float scale = 1.0f, bool trydl = false) { const char *file = texname; if(texname[0]=='<') @@ -377,6 +377,11 @@ GLuint loadsurface(const char *texname, int &xs, int &ys, int &bpp, int clamp = delete z; } if(!s) s = IMG_Load(findfile(file, "rb")); + if(!s && trydl) + { + requirepackage(PCK_TEXTURE, file); + return 0; + } if(!s) { if(!silent_texture_load) conoutf("couldn't load texture %s", texname); return 0; } s = fixsurfaceformat(s); Uint8 x = 0; @@ -420,7 +425,7 @@ GLuint loadsurface(const char *texname, int &xs, int &ys, int &bpp, int clamp = // each texture slot can have multiple texture frames, of which currently only the first is used // additional frames can be used for various shaders -Texture *textureload(const char *name, int clamp, bool mipmap, bool canreduce, float scale) +Texture *textureload(const char *name, int clamp, bool mipmap, bool canreduce, float scale, bool trydl) { string pname; copystring(pname, name); @@ -428,7 +433,7 @@ Texture *textureload(const char *name, int clamp, bool mipmap, bool canreduce, f Texture *t = textures.access(pname); if(t) return t; int xs, ys, bpp; - GLuint id = loadsurface(pname, xs, ys, bpp, clamp, mipmap, canreduce, scale); + GLuint id = loadsurface(pname, xs, ys, bpp, clamp, mipmap, canreduce, scale, trydl); if(!id) return notexture; char *key = newstring(pname); t = &textures[key]; @@ -497,7 +502,7 @@ void texture(char *scale, char *name) COMMAND(texturereset, ""); COMMAND(texture, "fs"); -Texture *lookuptexture(int tex, Texture *failtex) +Texture *lookuptexture(int tex, Texture *failtex, bool trydl) { Texture *t = failtex; if(slots.inrange(tex)) @@ -506,10 +511,13 @@ Texture *lookuptexture(int tex, Texture *failtex) if(!s.loaded) { defformatstring(pname)("packages/textures/%s", s.name); - s.tex = textureload(pname, 0, true, true, s.scale); + s.tex = textureload(pname, 0, true, true, s.scale, trydl); + if(!trydl) + { if(s.tex==notexture) s.tex = failtex; s.loaded = true; } + } if(s.tex) t = s.tex; } return t; @@ -546,20 +554,27 @@ void reloadtextures() } Texture *sky[6] = {NULL, NULL, NULL, NULL, NULL, NULL}; +static string skybox; -void loadsky(char *basename) +void loadsky(char *basename, bool reload) { const char *side[] = { "lf", "rt", "ft", "bk", "dn", "up" }; + if(reload) basename = skybox; + else copystring(skybox, basename); loopi(6) { defformatstring(name)("packages/%s_%s.jpg", basename, side[i]); sky[i] = textureload(name, 3); - if(!sky[i]) conoutf("could not load sky texture: %s", name); + if(sky[i] == notexture && !reload) + { + defformatstring(dl)("packages/%s", basename); + requirepackage(PCK_SKYBOX, dl); + break; + } } } -COMMAND(loadsky, "s"); - +COMMANDF(loadsky, "s", (char *name) { loadsky(name, false); intret(0); }); void loadnotexture(char *c) { noworldtexture = notexture; // reset to default diff --git a/source/src/tools.cpp b/source/src/tools.cpp index 0a02819e..a65c4628 100644 --- a/source/src/tools.cpp +++ b/source/src/tools.cpp @@ -45,20 +45,16 @@ mapstats *loadmapstats(const char *filename, bool getlayout) stream *f = opengzfile(filename, "rb"); if(!f) return NULL; memset(&s.hdr, 0, sizeof(header)); - if(f->read(&s.hdr, sizeof(header)-sizeof(int)*16-sizeof(char)*128)!=sizeof(header)-sizeof(int)*16-sizeof(char)*128 || (strncmp(s.hdr.head, "CUBE", 4) && strncmp(s.hdr.head, "ACMP",4))) { delete f; return NULL; } + if(f->read(&s.hdr, sizeof(header)-sizeof(int)*16)!=sizeof(header)-sizeof(int)*16 || (strncmp(s.hdr.head, "CUBE", 4) && strncmp(s.hdr.head, "ACMP",4))) { delete f; return NULL; } lilswap(&s.hdr.version, 4); if(s.hdr.version>MAPVERSION || s.hdr.numents > MAXENTITIES || (s.hdr.version>=4 && f->read(&s.hdr.waterlevel, sizeof(int)*16)!=sizeof(int)*16)) { delete f; return NULL; } - if(s.hdr.version>=7 && f->read(&s.hdr.mediareq, sizeof(char)*128)!=sizeof(char)*128) { delete f; return NULL; } + if((s.hdr.version==7 || s.hdr.version==8) && !f->seek(sizeof(char)*128, SEEK_CUR)) { delete f; return NULL; } if(s.hdr.version>=4) { lilswap(&s.hdr.waterlevel, 1); lilswap(&s.hdr.maprevision, 2); } else s.hdr.waterlevel = -100000; - if(s.hdr.version<7) - { - copystring(s.hdr.mediareq, "", 128);//s.hdr.mediareq[0] = '\0'; - } entity e; enttypes = new uchar[s.hdr.numents]; entposs = new short[s.hdr.numents * 3]; diff --git a/source/src/tools.h b/source/src/tools.h index ae21df25..0fe897cf 100644 --- a/source/src/tools.h +++ b/source/src/tools.h @@ -897,6 +897,7 @@ extern const char *asctime(); extern const char *numtime(); extern char *path(char *s); extern char *path(const char *s, bool copy); +extern char *unixpath(char *s); extern const char *behindpath(const char *s); extern const char *parentdir(const char *directory); extern bool fileexists(const char *path, const char *mode); @@ -916,6 +917,10 @@ extern bool listdir(const char *dir, const char *ext, vector &files); extern int listfiles(const char *dir, const char *ext, vector &files); extern int listzipfiles(const char *dir, const char *ext, vector &files); extern bool delfile(const char *path); +extern bool copyfile(const char *source, const char *destination); +extern bool preparedir(const char *destination); +extern bool addzip(const char *name, const char *mount = NULL, const char *strip = NULL, bool extract = false, int type = -1); +extern bool removezip(const char *name); extern struct mapstats *loadmapstats(const char *filename, bool getlayout); extern bool cmpb(void *b, int n, enet_uint32 c); extern bool cmpf(char *fn, enet_uint32 c); diff --git a/source/src/weapon.cpp b/source/src/weapon.cpp index 61599485..96abd6fa 100644 --- a/source/src/weapon.cpp +++ b/source/src/weapon.cpp @@ -1701,6 +1701,4 @@ void checkweaponstate() { checkweaponswitch(); checkakimbo(); - - // TODO : here we need to check properly that the spectated player weapon has finished to reload... -} +} \ No newline at end of file diff --git a/source/src/world.cpp b/source/src/world.cpp index d2582605..c272a452 100644 --- a/source/src/world.cpp +++ b/source/src/world.cpp @@ -499,7 +499,6 @@ bool empty_world(int factor, bool force) // main empty world creation routine else { copystring(hdr.maptitle, "Untitled Map by Unknown", 128); - copystring(hdr.mediareq, "", 128); // MediaPack hdr.waterlevel = -100000; hdr.ambient = 0; setwatercolor(); diff --git a/source/src/world.h b/source/src/world.h index 67a7472a..41e819ac 100644 --- a/source/src/world.h +++ b/source/src/world.h @@ -32,7 +32,7 @@ enum // hardcoded texture numbers DEFAULT_CEIL }; -#define MAPVERSION 8 // bump if map format changes, see worldio.cpp +#define MAPVERSION 9 // bump if map format changes, see worldio.cpp struct header // map file format header { @@ -48,7 +48,7 @@ struct header // map file format header int maprevision; int ambient; int reserved[12]; - char mediareq[128]; // new since version 7 (flowtron) // actually a maximum of 124 will ever be used (24*5+4) + //char mediareq[128]; // version 7 and 8 only. }; struct mapstats diff --git a/source/src/worldio.cpp b/source/src/worldio.cpp index 4c2d65b9..90c00fb4 100644 --- a/source/src/worldio.cpp +++ b/source/src/worldio.cpp @@ -11,7 +11,6 @@ void backup(char *name, char *backupname) } static string cgzname, ocgzname, bakname, pcfname, mcfname, omcfname; -static string reqmpak; // required media pack const char *setnames(const char *name) { @@ -200,184 +199,6 @@ uchar *readmcfggz(char *name, int *size, int *sizegz) VAR(advancemaprevision, 1, 1, 100); -void checkmapdependencies(bool silent = false, bool details = false) // find required MediaPack (s) for current map -{ - if(!silent) conoutf("checking map dependencies"); - static hashtable mufpaths; - hashtable usedmods; - string goodname, modname, allmods; - // well, the "goodname" can still contain the users home-dir - #define USEFILENAME(fmtp2f,fname,count) \ - { \ - defformatstring(basename)(fmtp2f, fname); \ - copystring(goodname, findfile(path(basename), "r")); \ - int *n = mufpaths.access(goodname); \ - if(!n) { n = &mufpaths.access(newstring(goodname), -1); if(fileexists(goodname, "r")) *n = 0; } \ - if(*n >= 0) *n += count; \ - const char *pt = strstr(goodname, basename); \ - copystring(modname, goodname, pt - goodname + 1); \ - if(goodname != pt && !usedmods.access(modname)) usedmods.access(newstring(modname), 0); \ - } - // skybox textures - loopi(6) - { - extern Texture *sky[]; - Texture *t = sky[i]; - if(t == notexture) { if(!silent) conoutf("sky texture %d doesn't exist", i); } - else USEFILENAME("%s", t->name, 1); - } - // map textures (cubes & models) - int texuse[256] = { 0 }; - loopj(ssize - 2) - { - loopk(ssize - 2) - { - if(SOLID(S(j + 1, k + 1)) && texuse[S(j + 1, k + 1)->wtex] && SOLID(S(j, k + 1)) && SOLID(S(j + 1, k)) && SOLID(S(j + 2, k + 1)) && SOLID(S(j + 1, k + 2))) continue; // no side visible - sqr *s = S(j + 1, k + 1); - char ttexuse[256] = { 0 }; - ttexuse[s->wtex] = 1; - if(!SOLID(s)) ttexuse[s->utex] = ttexuse[s->ftex] = ttexuse[s->ctex] = 1; - loopi(256) texuse[i] += ttexuse[i]; - } - } - extern vector mapmodels; - loopv(ents) if(ents[i].type == MAPMODEL && mapmodels.inrange(ents[i].attr2) && ents[i].attr4) texuse[ents[i].attr4]++; - int used = 0; - loopi(256) if(texuse[i]) - { - Texture *t = lookuptexture(i); - if(t == notexture) { if(!silent) conoutf("texture slot %3d doesn't exist (used %d times)", i, texuse[i]); } - else - { - used++; - USEFILENAME("%s", t->name, texuse[i]); - } - - } - if(!silent) conoutf("used: %d texture slots", used); - // mapmodels - int mmuse[256] = { 0 }; - used = 0; - loopv(ents) if(ents[i].type == MAPMODEL) mmuse[ents[i].attr2]++; - loopi(256) if(mmuse[i]) - { - if(!mapmodels.inrange(i)) { if(!silent) conoutf("mapmodel slot %3d doesn't exist (used %d times)", i, mmuse[i]); } - else - { - used++; - USEFILENAME("packages/models/%s", mapmodels[i].name, mmuse[i]); - } - } - if(!silent) conoutf("used: %d mapmodel slots", used); - // sounds - int msuse[128] = { 0 }; - used = 0; - loopv(ents) if(ents[i].type == SOUND && ents[i].attr1 >= 0) msuse[ents[i].attr1]++; - loopi(128) if(msuse[i]) - { - if(!mapsounds.inrange(i)) { if(!silent) conoutf("mapsound slot %3d doesn't exist (used %d times)", i, msuse[i]); } - else if(mapsounds[i].buf && mapsounds[i].buf->name) - { - used++; - USEFILENAME("packages/audio/%s", mapsounds[i].buf->name, msuse[i]); - } - } - if(!silent) conoutf("used: %d mapsound slots", used); - // used mods - int usedm = 0; - allmods[0] = '\0'; - enumeratek(usedmods, const char *, key, concatformatstring(allmods, "%s%s",*allmods ? ", " : "", key); delete key; usedm++); - extern string clientmap; - if(!silent) conoutf("used: %s%s %d total packages (%s.cfg)", allmods, usedm ? ", " : "", usedm, clientmap); - // mediapacks - int usedf = mufpaths.numelems; - int *packn = new int[usedf]; - loopi(usedf) packn[i] = -2; // -2: unset, -1: local-only, 0: release, 1..n: i in loopv(mpdefs) - int idx; - copystring(reqmpak, ""); - reqmpak[0] = '\0'; - // First check releasefiles - int mpfl; - char* acrfc = loadfile("config/releasefiles.cfg", &mpfl, "r"); - if(acrfc) - { - idx = -1; - enumeratek(mufpaths, const char *, key, - idx++; - if(packn[idx]==-2) - { - char* p = strstr(acrfc, key); - if(p) packn[idx] = 0; - } - ); - } - else conoutf("ERROR: your installation is missing the file config/releasefiles.cfg - please do a CLEAN re-install!"); // even if silent == true - // Now check MediaPack definition files - vector mpdefs; - listfiles("packages/mediapack", "txt", mpdefs); - int usedmpaks = 0; - loopvj(mpdefs) - { - bool usethis = false; - int mpfl; - defformatstring(p2mpdf)("packages/mediapack/%s.txt", mpdefs[j]); - char* mpfc = loadfile(p2mpdf, &mpfl, "r"); - if(mpfc) - { - if(!silent) conoutf("found mediapack %s [%d]", mpdefs[j], mpfl); - idx = -1; - enumeratek(mufpaths, const char *, key, - idx++; - if(packn[idx]==-2) - { - const char* gp = strstr(key, "packages/"); - if(gp) - { - const char* fp = strstr(mpfc, gp); - if(fp) - { - packn[idx] = j + 1; - if(!usethis) - { - formatstring(reqmpak)("%s%s%s", reqmpak, reqmpak[0]=='\0'?"":",", mpdefs[j]); - if(++usedmpaks > 0) usethis = true; // these packs are already on the system - if(usedmpaks>25) conoutf("this map requires too many mediapacks."); // even if silent == true - } - } - } - } - ) - } - } - idx = -1; - if(!silent && details) - { - conoutf("mediapack details:"); - // packn[idx]==0?"release": - enumeratek(mufpaths, const char *, key, idx++; if(packn[idx]!=0) conoutf("%3d: %s : %d : %s", idx, key, packn[idx], packn[idx]<0?"LOCAL":mpdefs[packn[idx]-1]); ); - } - if(usedmpaks>0) conoutf("this map requires the following %d mediapack%s: %s", usedmpaks, usedmpaks==1?"":"s", reqmpak); - else - { - if(hdr.mediareq[0] && !silent) - { - char sep[] = ","; - char *pch; - pch = strtok (hdr.mediareq,sep); - while (pch != NULL) - { - conoutf("http://assault.cubers.net/cgi/mediapack.do?mpid=%s", pch); - //conoutf("http://www.26things.com/mrx/get.php?mpid=%s", pch); - pch = strtok (NULL, sep); - } - } - } - enumeratek(mufpaths, const char *, key, mufpaths.remove(key)); // don't report false positives next time round - delete[] packn; -} - -COMMANDF(checkmapdependencies, "i", (int *i) { checkmapdependencies(false, *i!=0); }); - VARP(mapbackupsonsave, 0, 1, 1); void save_world(char *mname) @@ -388,8 +209,6 @@ void save_world(char *mname) toptimize(); setnames(mname); if(mapbackupsonsave) backup(cgzname, bakname); - checkmapdependencies(true); - copystring(hdr.mediareq, reqmpak, 128); stream *f = opengzfile(cgzname, "wb"); if(!f) { conoutf("could not write map to %s", cgzname); return; } strncpy(hdr.head, "ACMP", 4); // ensure map now declares itself as an AssaultCube map, even if imported as CUBE @@ -507,13 +326,13 @@ bool load_world(char *mname) // still supports all map formats that have if(!f) { conoutf("\f3could not read map %s", cgzname); return false; } header tmp; memset(&tmp, 0, sizeof(header)); - if(f->read(&tmp, sizeof(header)-sizeof(int)*16-sizeof(char)*128)!=sizeof(header)-sizeof(int)*16-sizeof(char)*128) { conoutf("\f3while reading map: header malformatted"); delete f; return false; } + if(f->read(&tmp, sizeof(header)-sizeof(int)*16)!=sizeof(header)-sizeof(int)*16) { conoutf("\f3while reading map: header malformatted"); delete f; return false; } lilswap(&tmp.version, 4); if(strncmp(tmp.head, "CUBE", 4)!=0 && strncmp(tmp.head, "ACMP",4)!=0) { conoutf("\f3while reading map: header malformatted"); delete f; return false; } if(tmp.version>MAPVERSION) { conoutf("\f3this map requires a newer version of AssaultCube"); delete f; return false; } if(tmp.sfactorLARGEST_FACTOR || tmp.numents > MAXENTITIES) { conoutf("\f3illegal map size"); delete f; return false; } if(tmp.version>=4 && f->read(&tmp.waterlevel, sizeof(int)*16)!=sizeof(int)*16) { conoutf("\f3while reading map: header malformatted"); delete f; return false; } - if(tmp.version>=7 && f->read(&tmp.mediareq, sizeof(char)*128)!=sizeof(char)*128) { conoutf("\f3while reading map: header malformatted"); delete f; return false; } + if((tmp.version==7 || tmp.version==8) && !f->seek(sizeof(char)*128, SEEK_CUR)) { conoutf("\f3while reading map: header malformatted"); delete f; return false; } hdr = tmp; loadingscreen("%s", hdr.maptitle); resetmap(); @@ -529,17 +348,6 @@ bool load_world(char *mname) // still supports all map formats that have hdr.waterlevel = -100000; hdr.ambient = 0; } - if(hdr.version<7) hdr.mediareq[0] = '\0'; - else - { - if(hdr.mediareq[0]) - { - conoutf("this map requires the following mediapacks: %s", hdr.mediareq); // TODO: check for client meeting these requirements - hint: listfiles - conoutf("to get a set of URLs to download them please run \f2checkmapdependencies\f5 manually."); - } - //else conoutf("this map works with the vanilla release"); - // TODO: output the requirements into a file for easy user-retrieval & -action - needs a base-URL where we will hold the mediapacks - } ents.shrink(0); loopi(3) numspawn[i] = 0; loopi(2) numflagspawn[i] = 0; @@ -701,17 +509,44 @@ bool load_world(char *mname) // still supports all map formats that have popscontext(); c2skeepalive(); + watch.start(); - loopi(256) if(texuse[i]) lookupworldtexture(i); - printf("loaded textures (%d milliseconds)\n", watch.stop()); + loopi(256) if(texuse[i]) lookupworldtexture(i, true); + int texloadtime = watch.stop(); + + c2skeepalive(); + + watch.start(); + preload_mapmodels(true); + int mdlloadtime = watch.stop(); + + c2skeepalive(); + + watch.start(); + audiomgr.preloadmapsounds(true); + int audioloadtime = watch.stop(); + + c2skeepalive(); + + watch.start(); + int downloaded = downloadpackages(); + if(downloaded > 0) printf("downloaded content (%d KB in %d seconds)\n", downloaded/1000, watch.stop()/1000); + + c2skeepalive(); + + loadsky(NULL, true); + + watch.start(); + loopi(256) if(texuse[i]) lookupworldtexture(i, false); + printf("loaded textures (%d milliseconds)\n", texloadtime+watch.stop()); c2skeepalive(); watch.start(); - preload_mapmodels(); - printf("loaded mapmodels (%d milliseconds)\n", watch.stop()); + preload_mapmodels(false); + printf("loaded mapmodels (%d milliseconds)\n", mdlloadtime+watch.stop()); c2skeepalive(); watch.start(); - audiomgr.preloadmapsounds(); - printf("loaded mapsounds (%d milliseconds)\n", watch.stop()); + audiomgr.preloadmapsounds(false); + printf("loaded mapsounds (%d milliseconds)\n", audioloadtime+watch.stop()); c2skeepalive(); defformatstring(startmillis)("%d", millis_()); @@ -720,155 +555,4 @@ bool load_world(char *mname) // still supports all map formats that have return true; } -COMMANDN(savemap, save_world, "s"); - -// FIXME - remove this before release -COMMANDF(setmaprevision, "i", (int *rev) { hdr.maprevision = *rev; }); - -#define MAPDEPFILENAME "mapdependencies.txt" -void listmapdependencies(char *mapname) // print map dependencies to file -{ - static hashtable sumpaths; - hashtable usedmods; - string fullname, modname, allmods; - - #define ADDFILENAME(prefix, fname, count) \ - { \ - defformatstring(basename)(prefix, fname); \ - copystring(fullname, findfile(basename, "r")); \ - int *n = sumpaths.access(fullname); \ - if(!n) { n = &sumpaths.access(newstring(fullname), -1); if(fileexists(fullname, "r")) *n = 0; } \ - if(*n >= 0) *n += count; \ - const char *pt = strstr(fullname, basename); \ - copystring(modname, fullname, pt - fullname + 1); \ - if(fullname != pt && !usedmods.access(modname)) usedmods.access(newstring(modname), 0); \ - } - - if(multiplayer()) return; - stream *f = openfile(MAPDEPFILENAME, "a"); - if(!f) { conoutf("\f3could not append to %s", MAPDEPFILENAME); return; } - if(!mapname || !*mapname) - { // print summary - vector allres; - enumeratek(sumpaths, const char *, key, allres.add(key)); - allres.sort(stringsort); - f->printf("used resources total:\n"); - loopv(allres) f->printf(" used %6d times: \"%s\"\n", *sumpaths.access(allres[i]), allres[i]); - enumeratek(sumpaths, const char *, key, delete key); - sumpaths.clear(); - f->printf(" %d files used\n\n\n", allres.length()); - } - else if(load_world(mapname)) - { // print map deps - filtertext(fullname, hdr.maptitle, 1); - f->printf("-- --:-- -- -- --\n map: %s\n %s\nspawns: FFA %d\tCLA %2d RVSF %2d\tflags: %d+%d\n size: %d : %8d\trevision: %d\n-- --:-- -- -- --\n", - cgzname, fullname, - numspawn[2], numspawn[0], numspawn[1], - numflagspawn[0], numflagspawn[1], - sfactor, maploaded, - hdr.maprevision - ); - loopi(6) - { - extern Texture *sky[]; - Texture *t = sky[i]; - if(t == notexture) f->printf(" sky texture %d doesn't exist\n", i); - else - { - ADDFILENAME("%s", t->name, 1); - f->printf(" sky texture %d, \"%s\"\n", i, fullname); - } - } - int texuse[256] = { 0 }; - loopj(ssize - 2) - { - loopk(ssize - 2) - { - if(SOLID(S(j + 1, k + 1)) && texuse[S(j + 1, k + 1)->wtex] && SOLID(S(j, k + 1)) && SOLID(S(j + 1, k)) && SOLID(S(j + 2, k + 1)) && SOLID(S(j + 1, k + 2))) continue; // no side visible - sqr *s = S(j + 1, k + 1); - char ttexuse[256] = { 0 }; - ttexuse[s->wtex] = 1; - if(!SOLID(s)) ttexuse[s->utex] = ttexuse[s->ftex] = ttexuse[s->ctex] = 1; - loopi(256) texuse[i] += ttexuse[i]; - } - } - extern vector mapmodels; - loopv(ents) if(ents[i].type == MAPMODEL && mapmodels.inrange(ents[i].attr2) && ents[i].attr4) texuse[ents[i].attr4]++; - int used = 0; - loopi(256) if(texuse[i]) - { - Texture *t = lookuptexture(i); - if(t == notexture) f->printf(" texture slot %3d doesn't exist (used %d times)\n", i, texuse[i]); - else - { - used++; - ADDFILENAME("%s", t->name, texuse[i]); - f->printf(" texture slot %3d used %5d times, \"%s\"\n", i, texuse[i], fullname); - } - } - f->printf(" used: %d texture slots\n", used); - // mapmodels - int mmuse[256] = { 0 }; - used = 0; - loopv(ents) if(ents[i].type == MAPMODEL) mmuse[ents[i].attr2]++; - loopi(256) if(mmuse[i]) - { - if(!mapmodels.inrange(i)) f->printf(" mapmodel slot %3d doesn't exist (used %d times)\n", i, mmuse[i]); - else - { - used++; - ADDFILENAME("packages/models/%s", mapmodels[i].name, mmuse[i]); - f->printf(" mapmodel slot %3d used %4d times, \"%s\"\n", i, mmuse[i], fullname); - } - } - f->printf(" used: %d mapmodel slots\n", used); - // sounds - int msuse[128] = { 0 }; - used = 0; - loopv(ents) if(ents[i].type == SOUND && ents[i].attr1 >= 0) msuse[ents[i].attr1]++; - loopi(128) if(msuse[i]) - { - if(!mapsounds.inrange(i)) f->printf(" mapsound slot %3d doesn't exist (used %d times)\n", i, msuse[i]); - else if(mapsounds[i].buf && mapsounds[i].buf->name) - { - used++; - ADDFILENAME("packages/audio/%s", mapsounds[i].buf->name, msuse[i]); - f->printf(" mapsound slot %3d used %4d times, \"%s\"\n", i, msuse[i], fullname); - } - } - f->printf(" used: %d mapsound slots\n", used); - - int usedm = 0; - allmods[0] = '\0'; - enumeratek(usedmods, const char *, key, concatformatstring(allmods, "%s%s",*allmods ? ", " : "", key); delete key; usedm++); - pushscontext(IEXC_MAPCFG); // untrusted altogether - per_idents = false; - neverpersist = true; - execfile(mcfname); - f->printf(" used: %s%s %d total packages (%s.cfg)\n", allmods, usedm ? ", " : "", usedm, mapname); - if(usedm) conoutf(" used: %s (%s.cfg) in %s", allmods, mapname, mapname); - neverpersist = false; - per_idents = true; - popscontext(); - f->printf("\n\n"); - } - delete f; -} - -COMMAND(listmapdependencies, "s"); - -void listmapdependencies_all(int *sure) -{ - if(*sure != 42 || multiplayer()) return; - - stream *f = openfile(MAPDEPFILENAME, "w"); - delete f; - vector files; - listfiles("packages/maps", "cgz", files); - listfiles("packages/maps/official", "cgz", files); - files.sort(stringsort); - conoutf("%d maps to go...", files.length()); - loopv(files) listmapdependencies(files[i]); - listmapdependencies(NULL); -} -COMMAND(listmapdependencies_all, "i"); +COMMANDN(savemap, save_world, "s"); \ No newline at end of file diff --git a/source/src/zip.cpp b/source/src/zip.cpp index c9ff1769..c8ecbdd3 100644 --- a/source/src/zip.cpp +++ b/source/src/zip.cpp @@ -22,7 +22,7 @@ struct zipfileheader { uint signature; ushort version, needversion, flags, compression, modtime, moddate; - uint crc32, compressedsize, uncompressedsize; + uint crc32, compressedsize, uncompressedsize; ushort namelength, extralength, commentlength, disknumber, internalattribs; uint externalattribs, offset; }; @@ -43,9 +43,9 @@ struct zipfile zipfile() : name(NULL), header(0), offset(~0U), size(0), compressedsize(0) { } - ~zipfile() - { - DELETEA(name); + ~zipfile() + { + DELETEA(name); } }; @@ -57,9 +57,10 @@ struct ziparchive FILE *data; hashtable files; int openfiles; + int type; zipstream *owner; - ziparchive() : name(NULL), data(NULL), files(512), openfiles(0), owner(NULL) + ziparchive() : name(NULL), data(NULL), files(512), openfiles(0), type(-1), owner(NULL) { } ~ziparchive() @@ -85,9 +86,9 @@ static bool findzipdirectory(FILE *f, zipdirectoryheader &hdr) if(next + carry < ZIP_DIRECTORY_SIZE || fseek(f, offset, SEEK_SET) < 0 || (int)fread(buf, 1, next, f) != next) return false; len = next + carry; uchar *search = &buf[next-1]; - for(; search >= buf; search--) if(*(uint *)search == signature) break; + for(; search >= buf; search--) if(*(uint *)search == signature) break; if(search >= buf) { src = search; break; } - } + } if(&buf[len] - src < ZIP_DIRECTORY_SIZE) return false; @@ -149,7 +150,7 @@ static bool readzipdirectory(const char *archname, FILE *f, int entries, int off pname[namelen] = '\0'; path(pname); char *name = newstring(pname); - + zipfile &f = files.add(); f.name = name; f.header = hdr.offset; @@ -206,18 +207,36 @@ static bool checkprefix(vector &files, const char *prefix, int prefixle return true; } -static void mountzip(ziparchive &arch, vector &files, const char *mountdir, const char *stripdir) +bool extractzipfile(ziparchive *a, zipfile *f, const char *name); + +bool fitspackage(char *filename, int type) +{ + char *extension = strrchr(filename, '.'); + ++extension; + switch(type) + { + case PCK_MAPMODEL: return !strcmp(extension, "md2") || !strcmp(extension, "md3") + || !strcmp(extension, "cfg") || !strcmp(extension, "txt") + || !strcmp(extension, "jpg") || !strcmp(extension, "png"); + case PCK_MAP: return !strcmp(extension, "cgz") || !strcmp(extension, "cfg"); + case PCK_SKYBOX: return !strcmp(extension, "jpg") || !strcmp(extension, "png"); + default: return true; + } +} + +static void mountzip(ziparchive &arch, vector &files, const char *mountdir, const char *stripdir, bool extract) { string packagesdir = "packages/"; path(packagesdir); int striplen = stripdir ? (int)strlen(stripdir) : 0; + if(arch.type == PCK_MAP) mountdir = "packages/maps/"; if(!mountdir && !stripdir) loopv(files) { zipfile &f = files[i]; const char *foundpackages = strstr(f.name, packagesdir); if(foundpackages) { - if(foundpackages > f.name) + if(foundpackages > f.name) { stripdir = f.name; striplen = foundpackages - f.name; @@ -239,7 +258,8 @@ static void mountzip(ziparchive &arch, vector &files, const char *mount if(!mountdir) mountdir = "packages/maps/"; break; } - } + mountdir = "packages/maps/"; + } } string mdir = "", fname; if(mountdir) @@ -256,26 +276,32 @@ static void mountzip(ziparchive &arch, vector &files, const char *mount zipfile &mf = arch.files[mname]; mf = f; mf.name = mname; + + if(extract) + { + if(fitspackage(fname, arch.type)) extractzipfile(&arch, &f, fname); + else conoutf("\f3could not extract \"%s\" : file extension not supported", fname); + } } } -bool addzip(const char *name, const char *mount = NULL, const char *strip = NULL) +bool addzip(const char *name, const char *mount, const char *strip, bool extract, int type) { string pname; copystring(pname, name); path(pname); - int plen = (int)strlen(pname); - if(plen < 4 || !strchr(&pname[plen-4], '.')) concatstring(pname, ".zip"); + /*int plen = (int)strlen(pname); + if(plen < 4 || !strchr(&pname[plen-4], '.')) concatstring(pname, ".zip");*/ - ziparchive *exists = findzip(pname); - if(exists) + /*ziparchive *exists = findzip(pname); + if(exists) { conoutf("already added zip %s", pname); return true; - } - + }*/ + FILE *f = fopen(findfile(pname, "rb"), "rb"); - if(!f) + if(!f) { conoutf("could not open file %s", pname); return false; @@ -288,24 +314,24 @@ bool addzip(const char *name, const char *mount = NULL, const char *strip = NULL fclose(f); return false; } - + ziparchive *arch = new ziparchive; arch->name = newstring(pname); arch->data = f; - mountzip(*arch, files, mount, strip); - archives.add(arch); - - conoutf("added zip %s", pname); + arch->type = type; + mountzip(*arch, files, mount, strip, extract); + if(!extract) archives.add(arch); + else delete arch; return true; -} - +} + bool removezip(const char *name) { string pname; copystring(pname, name); path(pname); - int plen = (int)strlen(pname); - if(plen < 4 || !strchr(&pname[plen-4], '.')) concatstring(pname, ".zip"); + /*int plen = (int)strlen(pname); + if(plen < 4 || !strchr(&pname[plen-4], '.')) concatstring(pname, ".zip");*/ ziparchive *exists = findzip(pname); if(!exists) { @@ -317,8 +343,8 @@ bool removezip(const char *name) conoutf("zip %s has open files", pname); return false; } - conoutf("removed zip %s", exists->name); - archives.removeobj(exists); + //conoutf("removed zip %s", exists->name); + archives.removeobj(exists); delete exists; return true; } @@ -416,11 +442,11 @@ struct zipstream : stream { switch(whence) { - case SEEK_END: pos += info->offset + info->size; break; + case SEEK_END: pos += info->offset + info->size; break; case SEEK_CUR: pos += reading; break; case SEEK_SET: pos += info->offset; break; default: return false; - } + } pos = clamp(pos, long(info->offset), long(info->offset + info->size)); arch->owner = NULL; if(fseek(arch->data, pos, SEEK_SET) < 0) return false; @@ -429,10 +455,10 @@ struct zipstream : stream ended = false; return true; } - + switch(whence) { - case SEEK_END: pos += info->size; break; + case SEEK_END: pos += info->size; break; case SEEK_CUR: pos += zfile.total_out; break; case SEEK_SET: break; default: return false; @@ -443,7 +469,7 @@ struct zipstream : stream reading = info->offset + info->compressedsize; zfile.next_in += zfile.avail_in; zfile.avail_in = 0; - zfile.total_in = info->compressedsize; + zfile.total_in = info->compressedsize; arch->owner = NULL; ended = false; return true; @@ -451,7 +477,7 @@ struct zipstream : stream if(pos < 0) return false; if(pos >= (long)zfile.total_out) pos -= zfile.total_out; - else + else { if(zfile.next_in && zfile.total_in <= uint(zfile.next_in - buf)) { @@ -491,7 +517,7 @@ struct zipstream : stream if(fseek(arch->data, reading, SEEK_SET) < 0) { stopreading(); return 0; } arch->owner = this; } - + int n = (int)fread(buf, 1, min(len, int(info->size + info->offset - reading)), arch->data); reading += n; if(n < len) ended = true; @@ -504,7 +530,7 @@ struct zipstream : stream { if(!zfile.avail_in) readbuf(BUFSIZE); int err = inflate(&zfile, Z_NO_FLUSH); - if(err != Z_OK) + if(err != Z_OK) { if(err == Z_STREAM_END) ended = true; else @@ -514,13 +540,33 @@ struct zipstream : stream #endif stopreading(); } - break; + break; } } return len - zfile.avail_out; } }; +bool extractzipfile(ziparchive *a, zipfile *f, const char *name) +{ + zipstream *s = new zipstream; + FILE *target; + defformatstring(fname)("%s", findfile(name, "wb")); + preparedir(fname); + bool error = false; + if(s->open(a, f) && (target = fopen(fname, "wb"))) + { + size_t len; + uchar copybuf[1024]; + while((len = s->read(copybuf, 1024))) fwrite(copybuf, 1, len, target); + } + else error = true; + if(error) conoutf("failed to extract zip file %s from archive %s", fname, a->name); + if(target) fclose(target); + delete s; + return !error; +} + stream *openzipfile(const char *name, const char *mode) { for(; *mode; mode++) if(*mode=='w' || *mode=='a') return NULL; diff --git a/source/vcpp/cube.sln b/source/vcpp/cube.sln index 92829966..613716f8 100644 --- a/source/vcpp/cube.sln +++ b/source/vcpp/cube.sln @@ -1,6 +1,7 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cube", "cube.vcproj", "{1FAF5BB4-C49A-4124-9F23-188528BAE7C8}" + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cube", "cube.vcxproj", "{1FAF5BB4-C49A-4124-9F23-188528BAE7C8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/source/vcpp/cube.vcproj b/source/vcpp/cube.vcproj index 1bf49516..e4c811ac 100644 --- a/source/vcpp/cube.vcproj +++ b/source/vcpp/cube.vcproj @@ -84,7 +84,7 @@ />