mirror of
https://github.com/nzp-team/fteqw.git
synced 2025-02-17 01:11:18 +00:00
fix crash with HTTP downloading
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2195 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
1d6899434a
commit
3a67c414fb
1 changed files with 36 additions and 32 deletions
|
@ -6,18 +6,6 @@
|
||||||
|
|
||||||
#include "netinc.h"
|
#include "netinc.h"
|
||||||
|
|
||||||
/*
|
|
||||||
Test files/servers.:
|
|
||||||
|
|
||||||
http://mywebpages.comcast.net/jsgeneric/prog5.asm
|
|
||||||
http://mywebpages.comcast.net/jsgeneric/sshot001.jpg
|
|
||||||
http://spike.corecodec.org/ftemqwtest.zip
|
|
||||||
http://www.fuhquake.net/files/releases/v0.31/fuhquake-win32-v0.31.zip
|
|
||||||
http://download.microsoft.com/download/d/c/3/dc37439a-172b-4f20-beac-bab52cdd38bc/Windows-KB833330-ENU.exe
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file does one thing. Connects to servers and grabs the specified file. It doesn't do any uploading whatsoever. Live with it.
|
This file does one thing. Connects to servers and grabs the specified file. It doesn't do any uploading whatsoever. Live with it.
|
||||||
It doesn't use persistant connections.
|
It doesn't use persistant connections.
|
||||||
|
@ -329,31 +317,45 @@ static qboolean HTTP_CL_Run(http_con_t *con)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qboolean HTTP_CL_SingleThink(http_con_t *con)
|
||||||
|
{
|
||||||
|
if (!HTTP_CL_Run(con))
|
||||||
|
{
|
||||||
|
if (con->NotifyFunction)
|
||||||
|
con->NotifyFunction(con->filename, false);
|
||||||
|
|
||||||
|
if (cls.downloadmethod == DL_HTTP)
|
||||||
|
cls.downloadmethod = DL_NONE;
|
||||||
|
closesocket(con->sock);
|
||||||
|
|
||||||
|
if (con->buffer)
|
||||||
|
IWebFree(con->buffer);
|
||||||
|
IWebFree(con);
|
||||||
|
|
||||||
|
//I don't fancy fixing this up.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void HTTP_CL_Think(void)
|
void HTTP_CL_Think(void)
|
||||||
{
|
{
|
||||||
http_con_t *con = httpcl;
|
http_con_t *con = httpcl;
|
||||||
http_con_t *prev = NULL;
|
http_con_t *prev = NULL;
|
||||||
|
http_con_t *oldnext;
|
||||||
|
|
||||||
while (con)
|
while (con)
|
||||||
{
|
{
|
||||||
if (!HTTP_CL_Run(con))
|
oldnext = con->next;
|
||||||
|
|
||||||
|
if (!HTTP_CL_SingleThink(con))
|
||||||
{
|
{
|
||||||
if (con->NotifyFunction)
|
|
||||||
con->NotifyFunction(con->filename, false);
|
|
||||||
|
|
||||||
if (cls.downloadmethod == DL_HTTP)
|
|
||||||
cls.downloadmethod = DL_NONE;
|
|
||||||
closesocket(con->sock);
|
|
||||||
|
|
||||||
if (prev)
|
if (prev)
|
||||||
prev->next = con->next;
|
prev->next = oldnext;
|
||||||
else
|
else
|
||||||
httpcl = con->next;
|
httpcl = oldnext;
|
||||||
|
|
||||||
if (con->buffer)
|
|
||||||
IWebFree(con->buffer);
|
|
||||||
IWebFree(con);
|
|
||||||
|
|
||||||
//I don't fancy fixing this up.
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (!cls.downloadmethod)
|
else if (!cls.downloadmethod)
|
||||||
|
@ -497,12 +499,14 @@ qboolean HTTP_CL_Get(char *url, char *localfile, void (*NotifyFunction)(char *lo
|
||||||
if (slash)
|
if (slash)
|
||||||
*slash = '_';
|
*slash = '_';
|
||||||
|
|
||||||
con->next = httpcl;
|
if (HTTP_CL_SingleThink(con))
|
||||||
httpcl = con;
|
{
|
||||||
|
con->next = httpcl;
|
||||||
|
httpcl = con;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
HTTP_CL_Think();
|
return false;
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue