1 /*
2 ===========================================================================
3 Copyright (C) 2006 Tony J. White (tjw@tjw.org)
4 
5 This file is part of Quake III Arena source code.
6 
7 Quake III Arena source code is free software; you can redistribute it
8 and/or modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2 of the License,
10 or (at your option) any later version.
11 
12 Quake III Arena source code is distributed in the hope that it will be
13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Quake III Arena source code; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 ===========================================================================
21 */
22 
23 
24 #ifndef __QCURL_H__
25 #define __QCURL_H__
26 
27 #include "../qcommon/q_shared.h"
28 #include "../qcommon/qcommon.h"
29 
30 #ifdef USE_LOCAL_HEADERS
31   #include "../curl-7.60.0/include/curl/curl.h"
32 #else
33   #include <curl/curl.h>
34 #endif
35 
36 #ifdef USE_CURL_DLOPEN
37 #ifdef WIN32
38   #define DEFAULT_CURL_LIB "libcurl-4.dll"
39   #define ALTERNATE_CURL_LIB "libcurl-3.dll"
40 #elif defined(__APPLE__)
41   #define DEFAULT_CURL_LIB "libcurl.dylib"
42 #else
43   #define DEFAULT_CURL_LIB "libcurl.so.4"
44   #define ALTERNATE_CURL_LIB "libcurl.so.3"
45 #endif
46 
47 extern cvar_t *cl_cURLLib;
48 
49 extern char* (*qcurl_version)(void);
50 
51 extern CURL* (*qcurl_easy_init)(void);
52 extern CURLcode (*qcurl_easy_setopt)(CURL *curl, CURLoption option, ...);
53 extern CURLcode (*qcurl_easy_perform)(CURL *curl);
54 extern void (*qcurl_easy_cleanup)(CURL *curl);
55 extern CURLcode (*qcurl_easy_getinfo)(CURL *curl, CURLINFO info, ...);
56 extern void (*qcurl_easy_reset)(CURL *curl);
57 extern const char *(*qcurl_easy_strerror)(CURLcode);
58 
59 extern CURLM* (*qcurl_multi_init)(void);
60 extern CURLMcode (*qcurl_multi_add_handle)(CURLM *multi_handle,
61 						CURL *curl_handle);
62 extern CURLMcode (*qcurl_multi_remove_handle)(CURLM *multi_handle,
63 						CURL *curl_handle);
64 extern CURLMcode (*qcurl_multi_fdset)(CURLM *multi_handle,
65 						fd_set *read_fd_set,
66 						fd_set *write_fd_set,
67 						fd_set *exc_fd_set,
68 						int *max_fd);
69 extern CURLMcode (*qcurl_multi_perform)(CURLM *multi_handle,
70 						int *running_handles);
71 extern CURLMcode (*qcurl_multi_cleanup)(CURLM *multi_handle);
72 extern CURLMsg *(*qcurl_multi_info_read)(CURLM *multi_handle,
73 						int *msgs_in_queue);
74 extern const char *(*qcurl_multi_strerror)(CURLMcode);
75 #else
76 #define qcurl_version curl_version
77 
78 #define qcurl_easy_init curl_easy_init
79 #define qcurl_easy_setopt curl_easy_setopt
80 #define qcurl_easy_perform curl_easy_perform
81 #define qcurl_easy_cleanup curl_easy_cleanup
82 #define qcurl_easy_getinfo curl_easy_getinfo
83 #define qcurl_easy_duphandle curl_easy_duphandle
84 #define qcurl_easy_reset curl_easy_reset
85 #define qcurl_easy_strerror curl_easy_strerror
86 
87 #define qcurl_multi_init curl_multi_init
88 #define qcurl_multi_add_handle curl_multi_add_handle
89 #define qcurl_multi_remove_handle curl_multi_remove_handle
90 #define qcurl_multi_fdset curl_multi_fdset
91 #define qcurl_multi_perform curl_multi_perform
92 #define qcurl_multi_cleanup curl_multi_cleanup
93 #define qcurl_multi_info_read curl_multi_info_read
94 #define qcurl_multi_strerror curl_multi_strerror
95 #endif
96 
97 qboolean CL_cURL_Init( void );
98 void CL_cURL_Shutdown( void );
99 void CL_cURL_BeginDownload( const char *localName, const char *remoteURL );
100 void CL_cURL_PerformDownload( void );
101 void CL_cURL_Cleanup( void );
102 #endif	// __QCURL_H__
103