DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
libcurl.h File Reference
#include <stddef.h>
#include "qtypes.h"
#include "qdefs.h"
+ Include dependency graph for libcurl.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  Curl_downloadinfo_t
 

Typedefs

typedef void(* curl_callback_t) (int status, size_t length_received, unsigned char *buffer, void *cbdata)
 

Enumerations

enum  {
  CURLCBSTATUS_OK = 0 , CURLCBSTATUS_FAILED = -1 , CURLCBSTATUS_ABORTED = -2 , CURLCBSTATUS_SERVERERROR = -3 ,
  CURLCBSTATUS_UNKNOWN = -4
}
 

Functions

qbool Curl_Available (void)
 
qbool Curl_Begin_ToFile (const char *URL, double maxspeed, const char *name, int loadtype, qbool forthismap)
 
qbool Curl_Begin_ToMemory (const char *URL, double maxspeed, unsigned char *buf, size_t bufsize, curl_callback_t callback, void *cbdata)
 
qbool Curl_Begin_ToMemory_POST (const char *URL, const char *extraheaders, double maxspeed, const char *post_content_type, const unsigned char *postbuf, size_t postbufsize, unsigned char *buf, size_t bufsize, curl_callback_t callback, void *cbdata)
 
void Curl_Cancel_ToMemory (curl_callback_t callback, void *cbdata)
 
void Curl_CancelAll (void)
 
void Curl_Clear_forthismap (void)
 
void Curl_ClearRequirements (void)
 
void Curl_Frame (void)
 
Curl_downloadinfo_tCurl_GetDownloadInfo (int *nDownloads, const char **additional_info, char *addinfo, size_t addinfolength)
 
qbool Curl_Have_forthismap (void)
 
void Curl_Init (void)
 
void Curl_Init_Commands (void)
 
void Curl_Register_predownload (void)
 
void Curl_RequireFile (const char *filename)
 
qbool Curl_Running (void)
 
bool Curl_Select (int timeout_ms)
 
void Curl_SendRequirements (void)
 
void Curl_Shutdown (void)
 

Typedef Documentation

◆ curl_callback_t

typedef void(* curl_callback_t) (int status, size_t length_received, unsigned char *buffer, void *cbdata)

Definition at line 13 of file libcurl.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
CURLCBSTATUS_OK 
CURLCBSTATUS_FAILED 
CURLCBSTATUS_ABORTED 
CURLCBSTATUS_SERVERERROR 
CURLCBSTATUS_UNKNOWN 

Definition at line 5 of file libcurl.h.

6{
8 CURLCBSTATUS_FAILED = -1, // failed for generic reason (e.g. buffer too small)
9 CURLCBSTATUS_ABORTED = -2, // aborted by curl --cancel
10 CURLCBSTATUS_SERVERERROR = -3, // only used if no HTTP status code is available
11 CURLCBSTATUS_UNKNOWN = -4 // should never happen
12};
@ CURLCBSTATUS_UNKNOWN
Definition libcurl.h:11
@ CURLCBSTATUS_SERVERERROR
Definition libcurl.h:10
@ CURLCBSTATUS_OK
Definition libcurl.h:7
@ CURLCBSTATUS_FAILED
Definition libcurl.h:8
@ CURLCBSTATUS_ABORTED
Definition libcurl.h:9

Function Documentation

◆ Curl_Available()

qbool Curl_Available ( void )

Definition at line 840 of file libcurl.c.

841{
842 return curl_dll ? true : false;
843}
const float true
static dllhandle_t curl_dll
Definition libcurl.c:195

References curl_dll, and true.

Referenced by checkextension().

◆ Curl_Begin_ToFile()

qbool Curl_Begin_ToFile ( const char * URL,
double maxspeed,
const char * name,
int loadtype,
qbool forthismap )

Definition at line 1113 of file libcurl.c.

1114{
1115 return Curl_Begin(URL, NULL, maxspeed, name, loadtype, forthismap, NULL, NULL, 0, NULL, 0, NULL, NULL);
1116}
const GLchar * name
Definition glquake.h:601
static qbool Curl_Begin(const char *URL, const char *extraheaders, double maxspeed, const char *name, int loadtype, qbool forthismap, const char *post_content_type, const unsigned char *postbuf, size_t postbufsize, unsigned char *buf, size_t bufsize, curl_callback_t callback, void *cbdata)
Definition libcurl.c:886
#define NULL
Definition qtypes.h:12

References Curl_Begin(), name, and NULL.

Referenced by Curl_Curl_f().

◆ Curl_Begin_ToMemory()

qbool Curl_Begin_ToMemory ( const char * URL,
double maxspeed,
unsigned char * buf,
size_t bufsize,
curl_callback_t callback,
void * cbdata )

Definition at line 1117 of file libcurl.c.

1118{
1119 return Curl_Begin(URL, NULL, maxspeed, NULL, false, false, NULL, NULL, 0, buf, bufsize, callback, cbdata);
1120}
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition glquake.h:657

References buf, Curl_Begin(), and NULL.

Referenced by Crypto_KeyGen_f().

◆ Curl_Begin_ToMemory_POST()

qbool Curl_Begin_ToMemory_POST ( const char * URL,
const char * extraheaders,
double maxspeed,
const char * post_content_type,
const unsigned char * postbuf,
size_t postbufsize,
unsigned char * buf,
size_t bufsize,
curl_callback_t callback,
void * cbdata )

Definition at line 1121 of file libcurl.c.

1122{
1123 return Curl_Begin(URL, extraheaders, maxspeed, NULL, false, false, post_content_type, postbuf, postbufsize, buf, bufsize, callback, cbdata);
1124}

References buf, Curl_Begin(), and NULL.

Referenced by VM_uri_get().

◆ Curl_Cancel_ToMemory()

void Curl_Cancel_ToMemory ( curl_callback_t callback,
void * cbdata )

Definition at line 863 of file libcurl.c.

864{
865 downloadinfo *di, *ndi;
866 if(!curl_dll)
867 return;
868 List_For_Each_Entry_Safe(di, ndi, &downloads, downloadinfo, list)
869 {
870 if(di->callback == callback && di->callback_data == cbdata)
871 {
872 di->callback = curl_quiet_callback; // do NOT call the callback
874 }
875 }
876}
#define List_For_Each_Entry_Safe(pos, n, head, type, member)
Definition com_list.h:173
@ CURL_DOWNLOAD_ABORTED
Definition libcurl.c:451
static void Curl_EndDownload(downloadinfo *di, CurlStatus status, CURLcode error, const char *content_type_)
Definition libcurl.c:521
static void curl_quiet_callback(int status, size_t length_received, unsigned char *buffer, void *cbdata)
Definition libcurl.c:482
@ CURLE_OK
Definition libcurl.c:38
curl_callback_t callback
Definition libcurl.c:225
void * callback_data
Definition libcurl.c:226

References downloadinfo::callback, downloadinfo::callback_data, curl_dll, CURL_DOWNLOAD_ABORTED, Curl_EndDownload(), curl_quiet_callback(), CURLE_OK, List_For_Each_Entry_Safe, and NULL.

◆ Curl_CancelAll()

void Curl_CancelAll ( void )

Definition at line 1284 of file libcurl.c.

1285{
1286 if(!curl_dll)
1287 return;
1288
1290
1291 while(!List_Is_Empty(&downloads))
1292 {
1294 // INVARIANT: downloads will point to the next download after that!
1295 }
1296
1298}
#define List_First_Entry(ptr, type, member)
Definition com_list.h:50
static qbool List_Is_Empty(const llist_t *list)
Definition com_list.h:211
void * curl_mutex
Definition libcurl.c:203
#define Thread_LockMutex(m)
Definition thread.h:17
#define Thread_UnlockMutex(m)
Definition thread.h:18

References curl_dll, CURL_DOWNLOAD_ABORTED, Curl_EndDownload(), curl_mutex, CURLE_OK, List_First_Entry, List_Is_Empty(), NULL, Thread_LockMutex, and Thread_UnlockMutex.

Referenced by CL_StopDownload_f(), Curl_Curl_f(), and Curl_Shutdown().

◆ Curl_Clear_forthismap()

void Curl_Clear_forthismap ( void )

Definition at line 287 of file libcurl.c.

288{
289 downloadinfo *di;
290 if(noclear)
291 return;
293 List_For_Each_Entry(di, &downloads, downloadinfo, list)
294 di->forthismap = false;
301}
#define List_For_Each_Entry(pos, head, type, member)
Definition com_list.h:121
static int numdownloads_success
Definition libcurl.c:240
static int numdownloads_fail
Definition libcurl.c:239
static qbool noclear
Definition libcurl.c:237
static void Curl_CommandWhenDone(const char *cmd)
Definition libcurl.c:254
static void Curl_CommandWhenError(const char *cmd)
Definition libcurl.c:270
static int numdownloads_added
Definition libcurl.c:241
qbool forthismap
Definition libcurl.c:219

References Curl_CommandWhenDone(), Curl_CommandWhenError(), curl_mutex, downloadinfo::forthismap, List_For_Each_Entry, noclear, NULL, numdownloads_added, numdownloads_fail, numdownloads_success, Thread_LockMutex, and Thread_UnlockMutex.

Referenced by CL_DisconnectEx(), Curl_CheckCommandWhenDone(), and Curl_Curl_f().

◆ Curl_ClearRequirements()

void Curl_ClearRequirements ( void )

Definition at line 1795 of file libcurl.c.

1796{
1797 while(requirements)
1798 {
1801 Z_Free(req);
1802 }
1803}
static requirement * requirements
Definition libcurl.c:1769
struct requirement_s * next
Definition libcurl.c:1765
#define Z_Free(data)
Definition zone.h:164

References requirement::next, requirements, and Z_Free.

Referenced by Curl_Shutdown(), and SV_SpawnServer().

◆ Curl_Frame()

void Curl_Frame ( void )

Definition at line 1134 of file libcurl.c.

1135{
1136 double maxspeed;
1137 downloadinfo *di;
1138
1139 noclear = false;
1140
1142 return;
1143
1144 if(!curl_dll)
1145 return;
1146
1148
1150
1151 if(List_Is_Empty(&downloads))
1152 {
1154 return;
1155 }
1156
1157 if(host.realtime < curltime) // throttle
1158 {
1160 return;
1161 }
1162
1163 {
1164 int remaining;
1165 CURLMcode mc;
1166
1167 do
1168 {
1169 mc = qcurl_multi_perform(curlm, &remaining);
1170 }
1171 while(mc == CURLM_CALL_MULTI_PERFORM);
1172
1173 List_For_Each_Entry(di, &downloads, downloadinfo, list)
1174 {
1175 double b = 0;
1176 if(di->curle)
1177 {
1179 bytes_sent += (b - di->bytes_sent_curl);
1180 di->bytes_sent_curl = b;
1182 bytes_sent += (b - di->bytes_received_curl);
1183 di->bytes_received_curl = b;
1184 }
1185 }
1186
1187 for(;;)
1188 {
1189 CURLMsg *msg = qcurl_multi_info_read(curlm, &remaining);
1190 if(!msg)
1191 break;
1192 if(msg->msg == CURLMSG_DONE)
1193 {
1194 const char *ct = NULL;
1196 CURLcode result;
1198 result = msg->data.result;
1199 if(result)
1200 {
1201 failed = CURL_DOWNLOAD_FAILED;
1202 }
1203 else
1204 {
1205 long code;
1207 switch(code / 100)
1208 {
1209 case 4: // e.g. 404?
1210 case 5: // e.g. 500?
1212 result = (CURLcode) code;
1213 break;
1214 }
1216 }
1217
1218 Curl_EndDownload(di, failed, result, ct);
1219 }
1220 }
1221 }
1222
1224
1225 // when will we curl the next time?
1226 // we will wait a bit to ensure our download rate is kept.
1227 // we now know that realtime >= curltime... so set up a new curltime
1228
1229 // use the slowest allowing download to derive the maxspeed... this CAN
1230 // be done better, but maybe later
1231 maxspeed = curl_maxspeed.value;
1232 List_For_Each_Entry(di, &downloads, downloadinfo, list)
1233 if(di->maxspeed > 0)
1234 if(di->maxspeed < maxspeed || maxspeed <= 0)
1235 maxspeed = di->maxspeed;
1236
1237 if(maxspeed > 0)
1238 {
1239 double bytes = bytes_sent + bytes_received; // maybe smoothen a bit?
1240 curltime = host.realtime + bytes / (maxspeed * 1024.0);
1241 bytes_sent = 0;
1242 bytes_received = 0;
1243 }
1244 else
1246
1248}
client_static_t cls
Definition cl_main.c:116
@ ca_dedicated
Definition client.h:530
host_static_t host
Definition host.c:41
static cvar_t curl_enabled
Definition libcurl.c:10
static CURLM * curlm
Definition libcurl.c:403
static double bytes_received
Definition libcurl.c:404
static double curltime
Definition libcurl.c:406
static void CheckPendingDownloads(void)
Definition libcurl.c:683
CurlStatus
Definition libcurl.c:448
@ CURL_DOWNLOAD_SUCCESS
Definition libcurl.c:449
@ CURL_DOWNLOAD_SERVERERROR
Definition libcurl.c:452
@ CURL_DOWNLOAD_FAILED
Definition libcurl.c:450
@ CURLMSG_DONE
Definition libcurl.c:134
static CURLMcode(* qcurl_multi_perform)(CURLM *multi_handle, int *running_handles)
Definition libcurl.c:162
static void Curl_CheckCommandWhenDone(void)
Definition libcurl.c:331
CURLMcode
Definition libcurl.c:42
@ CURLM_CALL_MULTI_PERFORM
Definition libcurl.c:43
static CURLcode(* qcurl_easy_getinfo)(CURL *handle, CURLINFO info,...)
Definition libcurl.c:158
@ CURLINFO_SIZE_DOWNLOAD
Definition libcurl.c:108
@ CURLINFO_PRIVATE
Definition libcurl.c:121
@ CURLINFO_SIZE_UPLOAD
Definition libcurl.c:107
@ CURLINFO_CONTENT_TYPE
Definition libcurl.c:118
@ CURLINFO_RESPONSE_CODE
Definition libcurl.c:102
static double bytes_sent
Definition libcurl.c:405
static CURLMsg *(* qcurl_multi_info_read)(CURLM *multi_handle, int *msgs_in_queue)
Definition libcurl.c:166
CURLcode
Definition libcurl.c:37
static cvar_t curl_maxspeed
Definition libcurl.c:12
dp_FragColor b
CURL * easy_handle
Definition libcurl.c:142
CURLMSG msg
Definition libcurl.c:141
union CURLMsg::@16 data
CURLcode result
Definition libcurl.c:146
cactive_t state
Definition client.h:568
float value
Definition cvar.h:74
int integer
Definition cvar.h:73
double bytes_sent_curl
Definition libcurl.c:217
CURL * curle
Definition libcurl.c:212
double maxspeed
Definition libcurl.c:220
double bytes_received_curl
Definition libcurl.c:216
double realtime
the accumulated mainloop time since application started (with filtering), without any slowmo or clamp...
Definition host.h:46

References b, bytes_received, downloadinfo::bytes_received_curl, bytes_sent, downloadinfo::bytes_sent_curl, ca_dedicated, CheckPendingDownloads(), cls, Curl_CheckCommandWhenDone(), curl_dll, CURL_DOWNLOAD_FAILED, CURL_DOWNLOAD_SERVERERROR, CURL_DOWNLOAD_SUCCESS, curl_enabled, Curl_EndDownload(), curl_maxspeed, curl_mutex, downloadinfo::curle, CURLINFO_CONTENT_TYPE, CURLINFO_PRIVATE, CURLINFO_RESPONSE_CODE, CURLINFO_SIZE_DOWNLOAD, CURLINFO_SIZE_UPLOAD, curlm, CURLM_CALL_MULTI_PERFORM, CURLMSG_DONE, curltime, CURLMsg::data, CURLMsg::easy_handle, host, cvar_t::integer, List_For_Each_Entry, List_Is_Empty(), downloadinfo::maxspeed, CURLMsg::msg, noclear, NULL, qcurl_easy_getinfo, qcurl_multi_info_read, qcurl_multi_perform, host_static_t::realtime, CURLMsg::result, client_static_t::state, Thread_LockMutex, Thread_UnlockMutex, and cvar_t::value.

Referenced by Host_Frame().

◆ Curl_GetDownloadInfo()

Curl_downloadinfo_t * Curl_GetDownloadInfo ( int * nDownloads,
const char ** additional_info,
char * addinfo,
size_t addinfolength )

Definition at line 1612 of file libcurl.c.

1613{
1614 int i;
1615 downloadinfo *di;
1616 Curl_downloadinfo_t *downinfo;
1617
1618 if(!curl_dll)
1619 {
1620 *nDownloads = 0;
1621 if(additional_info)
1622 *additional_info = NULL;
1623 return NULL;
1624 }
1625
1627
1628 i = 0;
1629 List_For_Each_Entry(di, &downloads, downloadinfo, list)
1630 ++i;
1631
1632 downinfo = (Curl_downloadinfo_t *) Z_Malloc(sizeof(*downinfo) * i);
1633 i = 0;
1634 List_For_Each_Entry(di, &downloads, downloadinfo, list)
1635 {
1636 // do not show infobars for background downloads
1637 if(developer.integer <= 0)
1638 if(di->buffer)
1639 continue;
1640 dp_strlcpy(downinfo[i].filename, di->filename, sizeof(downinfo[i].filename));
1641 if(di->curle)
1642 {
1643 downinfo[i].progress = Curl_GetDownloadAmount(di);
1644 downinfo[i].speed = Curl_GetDownloadSpeed(di);
1645 downinfo[i].queued = false;
1646 }
1647 else
1648 {
1649 downinfo[i].queued = true;
1650 }
1651 ++i;
1652 }
1653
1654 if(additional_info)
1655 {
1656 // TODO: can I clear command_when_done as soon as the first download fails?
1658 {
1659 if(!strncmp(command_when_done, "connect ", 8))
1660 dpsnprintf(addinfo, addinfolength, "(will join %s when done)", command_when_done + 8);
1661 else if(!strcmp(command_when_done, "cl_begindownloads"))
1662 dpsnprintf(addinfo, addinfolength, "(will enter the game when done)");
1663 else
1664 dpsnprintf(addinfo, addinfolength, "(will do '%s' when done)", command_when_done);
1665 *additional_info = addinfo;
1666 }
1667 else
1668 *additional_info = NULL;
1669 }
1670
1671 *nDownloads = i;
1673 return downinfo;
1674}
int dpsnprintf(char *buffer, size_t buffersize, const char *format,...)
Returns the number of printed characters, excluding the final '\0' or returns -1 if the buffer isn't ...
Definition common.c:997
#define dp_strlcpy(dst, src, dsize)
Definition common.h:303
cvar_t developer
Definition host.c:48
static double Curl_GetDownloadAmount(downloadinfo *di)
Definition libcurl.c:1323
static double Curl_GetDownloadSpeed(downloadinfo *di)
Definition libcurl.c:1347
static char command_when_done[256]
Definition libcurl.c:242
int i
char filename[MAX_OSPATH]
Definition libcurl.c:207
unsigned char * buffer
Definition libcurl.c:223
#define Z_Malloc(size)
Definition zone.h:161

References downloadinfo::buffer, command_when_done, curl_dll, Curl_GetDownloadAmount(), Curl_GetDownloadSpeed(), curl_mutex, downloadinfo::curle, developer, dp_strlcpy, dpsnprintf(), Curl_downloadinfo_t::filename, downloadinfo::filename, i, cvar_t::integer, List_For_Each_Entry, NULL, numdownloads_added, numdownloads_fail, Curl_downloadinfo_t::progress, Curl_downloadinfo_t::queued, Curl_downloadinfo_t::speed, Thread_LockMutex, Thread_UnlockMutex, and Z_Malloc.

Referenced by SCR_DrawCurlDownload(), and SCR_InfobarHeight().

◆ Curl_Have_forthismap()

qbool Curl_Have_forthismap ( void )

Definition at line 310 of file libcurl.c.

311{
312 return numdownloads_added != 0;
313}

References numdownloads_added.

Referenced by CL_BeginDownloads().

◆ Curl_Init()

void Curl_Init ( void )

Definition at line 810 of file libcurl.c.

811{
813 if(!curl_dll)
814 return;
818}
static qbool CURL_OpenLibrary(void)
Definition libcurl.c:362
#define CURL_GLOBAL_SSL
Definition libcurl.c:48
static void(* qcurl_global_init)(long flags)
Definition libcurl.c:152
static CURLM *(* qcurl_multi_init)(void)
Definition libcurl.c:161
qbool Thread_HasThreads(void)
Definition thread_null.c:13
#define Thread_CreateMutex()
Definition thread.h:15

References curl_dll, CURL_GLOBAL_SSL, curl_mutex, CURL_OpenLibrary(), curlm, qcurl_global_init, qcurl_multi_init, Thread_CreateMutex, and Thread_HasThreads().

Referenced by Host_Init().

◆ Curl_Init_Commands()

void Curl_Init_Commands ( void )

Definition at line 1578 of file libcurl.c.

1579{
1585 Cvar_RegisterVirtual (&curl_enabled, "cl_curl_enabled");
1586 Cvar_RegisterVirtual (&curl_maxdownloads, "cl_curl_maxdownloads");
1587 Cvar_RegisterVirtual (&curl_maxspeed, "cl_curl_maxspeed");
1588 Cvar_RegisterVirtual (&curl_useragent, "cl_curl_useragent");
1589 Cvar_RegisterVirtual (&curl_useragent_append, "cl_curl_useragent_append");
1590
1594
1596
1597 Cmd_AddCommand(CF_CLIENT | CF_CLIENT_FROM_SERVER, "curl", Curl_Curl_f, "download data from an URL and add to search path");
1598 //Cmd_AddCommand(cmd_local, "curlcat", Curl_CurlCat_f, "display data from an URL (debugging command)");
1599}
void Cmd_AddCommand(unsigned flags, const char *cmd_name, xcommand_t function, const char *description)
called by the init functions of other parts of the program to register commands and functions to call...
Definition cmd.c:1661
#define CF_CLIENT
cvar/command that only the client can change/execute
Definition cmd.h:48
#define CF_CLIENT_FROM_SERVER
command that the server is allowed to execute on the client
Definition cmd.h:50
void Cvar_RegisterVariable(cvar_t *variable)
registers a cvar that already has the name, string, and optionally the archive elements set.
Definition cvar.c:599
void Cvar_RegisterVirtual(cvar_t *variable, const char *name)
Definition cvar.c:513
static cvar_t curl_useragent
Definition libcurl.c:13
static void Curl_Curl_f(cmd_state_t *cmd)
Definition libcurl.c:1424
static cvar_t sv_curl_serverpackages
Definition libcurl.c:17
static cvar_t curl_useragent_append
Definition libcurl.c:14
static cvar_t curl_maxdownloads
Definition libcurl.c:11
static cvar_t sv_curl_maxspeed
Definition libcurl.c:18
static cvar_t developer_curl
Definition libcurl.c:20
static cvar_t sv_curl_defaulturl
Definition libcurl.c:16

References CF_CLIENT, CF_CLIENT_FROM_SERVER, Cmd_AddCommand(), Curl_Curl_f(), curl_enabled, curl_maxdownloads, curl_maxspeed, curl_useragent, curl_useragent_append, Cvar_RegisterVariable(), Cvar_RegisterVirtual(), developer_curl, sv_curl_defaulturl, sv_curl_maxspeed, and sv_curl_serverpackages.

Referenced by Host_Init().

◆ Curl_Register_predownload()

void Curl_Register_predownload ( void )

Definition at line 315 of file libcurl.c.

316{
318 Curl_CommandWhenDone("cl_begindownloads");
319 Curl_CommandWhenError("cl_begindownloads");
321}

References Curl_CommandWhenDone(), Curl_CommandWhenError(), curl_mutex, Thread_LockMutex, and Thread_UnlockMutex.

Referenced by CL_BeginDownloads(), and Curl_Curl_f().

◆ Curl_RequireFile()

void Curl_RequireFile ( const char * filename)

Definition at line 1779 of file libcurl.c.

1780{
1781 requirement *req = (requirement *) Z_Malloc(sizeof(*requirements));
1782 req->next = requirements;
1783 dp_strlcpy(req->filename, filename, sizeof(req->filename));
1784 requirements = req;
1785}
char filename[MAX_OSPATH]
Definition libcurl.c:1766

References dp_strlcpy, requirement::filename, requirement::next, requirements, and Z_Malloc.

Referenced by SV_SpawnServer().

◆ Curl_Running()

qbool Curl_Running ( void )

Definition at line 1307 of file libcurl.c.

1308{
1309 if(!curl_dll)
1310 return false;
1311
1312 return !List_Is_Empty(&downloads);
1313}

References curl_dll, and List_Is_Empty().

Referenced by Curl_Info_f().

◆ Curl_Select()

bool Curl_Select ( int timeout_ms)

Definition at line 1263 of file libcurl.c.

1264{
1265 CURLMcode err;
1266
1267 if (List_Is_Empty(&downloads))
1268 return false;
1269
1270 err = qcurl_multi_wait(curlm, NULL, 0, timeout_ms, NULL);
1271 if (err == CURLM_OK)
1272 return true;
1273 Con_Printf(CON_ERROR "curl_multi_wait() failed with code %d\n", err);
1274 return false;
1275}
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
Definition console.c:1514
#define CON_ERROR
Definition console.h:102
static CURLMcode(* qcurl_multi_wait)(CURLM *multi_handle, void *, unsigned int extra_nfds, int timeout_ms, int *ret)
Definition libcurl.c:163
@ CURLM_OK
Definition libcurl.c:44

References CON_ERROR, Con_Printf(), curlm, CURLM_OK, List_Is_Empty(), NULL, and qcurl_multi_wait.

Referenced by Sys_Sleep().

◆ Curl_SendRequirements()

void Curl_SendRequirements ( void )

Definition at line 1853 of file libcurl.c.

1854{
1855 // for each requirement, find the pack name
1856 char sendbuffer[4096] = "";
1857 requirement *req;
1858 qbool foundone = false;
1859 const char *p;
1860
1861 for(req = requirements; req; req = req->next)
1862 foundone = Curl_SendRequirement(req->filename, foundone, sendbuffer, sizeof(sendbuffer)) || foundone;
1863
1865 while(COM_ParseToken_Simple(&p, false, false, true))
1866 foundone = Curl_SendRequirement(com_token, foundone, sendbuffer, sizeof(sendbuffer)) || foundone;
1867
1868 if(foundone)
1869 dp_strlcat(sendbuffer, "curl --finish_autodownload\n", sizeof(sendbuffer));
1870
1871 if(strlen(sendbuffer) + 1 < sizeof(sendbuffer))
1872 SV_ClientCommands("%s", sendbuffer);
1873 else
1874 Con_Printf("Could not initiate autodownload due to URL buffer overflow\n");
1875}
char com_token[MAX_INPUTLINE]
Definition common.c:39
qbool COM_ParseToken_Simple(const char **datapointer, qbool returnnewline, qbool parsebackslash, qbool parsecomments)
Definition common.c:463
#define dp_strlcat(dst, src, dsize)
Definition common.h:304
static qbool Curl_SendRequirement(const char *filename, qbool foundone, char *sendbuffer, size_t sendbuffer_len)
Definition libcurl.c:1817
float strlen(string s)
bool qbool
Definition qtypes.h:9
void SV_ClientCommands(const char *fmt,...) DP_FUNC_PRINTF(1)
Definition sv_send.c:135
const char * string
Definition cvar.h:71

References COM_ParseToken_Simple(), com_token, Con_Printf(), Curl_SendRequirement(), dp_strlcat, requirement::filename, requirement::next, requirements, cvar_t::string, strlen(), SV_ClientCommands(), and sv_curl_serverpackages.

Referenced by SV_SendServerinfo().

◆ Curl_Shutdown()

void Curl_Shutdown ( void )

Definition at line 828 of file libcurl.c.

829{
830 if(!curl_dll)
831 return;
836 curl_dll = NULL;
837}
static void CURL_CloseLibrary(void)
Definition libcurl.c:397
void Curl_ClearRequirements(void)
Definition libcurl.c:1795
void Curl_CancelAll(void)
Definition libcurl.c:1284
#define Thread_DestroyMutex(m)
Definition thread.h:16

References Curl_CancelAll(), Curl_ClearRequirements(), CURL_CloseLibrary(), curl_dll, curl_mutex, NULL, and Thread_DestroyMutex.

Referenced by Host_Shutdown().