Commit graph

9 commits

Author SHA1 Message Date
Yamagi Burmeister
ec6e0ee392 Provide a write callback to cURL.
If we're passing file handles to libcurl to write the data into, the
game may crash under Windows due to incompatible C runtimes between cURL
and quake2. This is even mentioned in the official cURL doku.
2019-01-03 17:42:22 +01:00
Yamagi Burmeister
2199b67a39 Limit the number of parallel downloads to just 1.
Since the moment I took a very first look at the download code I wasn't
a friend of parallel downloads. There're several reasons for that:

- Parallel downloading needs some ugly hacks. For example downloading a
  pak file has a high chance to make asset downloads running in parallel
  unnecessary.
- Parallel downloads are hard to debug.
- There's just no need for them. I've tested several connection, 1
  GBit/s LAN, 50 MBit/s DSL, 6 MBit/s DSL, and there wasn't a
  significant difference between 1, 4 or even 16 parallel downloads.

I'm leaving the parallel download code in place. I someone really wants
parallel downloads he can bump the MAX_HTTP_HANDLES define.
2019-01-03 17:40:06 +01:00
Yamagi Burmeister
95c1bb9972 Some alterations to the libcurl search pathes.
- On Linux try libcurl.so last, because that one is for linking only.
- Support libcurl.dll on Windows.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
537e6d8de3 Port the server side of HTTP downloading from q2dos. 2018-12-20 18:01:38 +01:00
Yamagi Burmeister
5b44c9f3b4 Make the (new and old) download code UTF-8 compatible.
- Replace all remove() with Sys_Remove().
- Implement Sys_Rename() and replace all rename() with it.

This is believed to close #348.
2018-12-20 18:01:38 +01:00
Daniel Gibson
49bb6bf9f0 Don't leak download queue entries, remove them as soon ans file is done.
Until now download queues entries were created for each file, but only
removed in the unlikely event of changed download server. This leaked
about 4200 byte per file. Fix this by:

- Create a new function CL_RemoveFromQueue() that removes a queue entry
  and call it everytime when a download either finished, failed or
  aborted.
- Retire the 'download done' state, just the queue entries associated
  with a download handle to NULL to communicate that the handle is
  unused.
- Cleanup the full queue at shutdown.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
da8bb7f7ee Add header guards and all necessary includes to download.h. 2018-12-20 18:01:38 +01:00
Yamagi Burmeister
f0d244e7b4 Rename cl_http.c to curl/download.c and http.h to download.h.
This is more in line with our file structure and other changes that
added functionality to the client.
2018-12-20 18:01:38 +01:00
Yamagi Burmeister
c0a6e4270f Load libcurl.so at runtime.
Loading libcurl at runtime instead of linking it at compile time makes
things a lot easier and more reliable on Windows. On other platform
libcurl can be installed as optional dependency instead as an hard one.
2018-12-20 18:01:38 +01:00