a qtvplay bug fixed.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2815 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
9d5b7f8d63
commit
5bfa1829d6
2 changed files with 42 additions and 12 deletions
|
@ -30,7 +30,12 @@ int cls_lasttype;
|
||||||
void CL_PlayDemo(char *demoname);
|
void CL_PlayDemo(char *demoname);
|
||||||
char lastdemoname[256];
|
char lastdemoname[256];
|
||||||
|
|
||||||
extern cvar_t qtv_workaroundeztv;
|
extern cvar_t qtvcl_forceversion1;
|
||||||
|
|
||||||
|
unsigned char demobuffer[1024*16];
|
||||||
|
int demobuffersize;
|
||||||
|
int demopreparsedbytes;
|
||||||
|
qboolean disablepreparse;
|
||||||
|
|
||||||
#define BUFFERTIME 0.1
|
#define BUFFERTIME 0.1
|
||||||
/*
|
/*
|
||||||
|
@ -179,7 +184,11 @@ int demo_preparsedemo(unsigned char *buffer, int bytes)
|
||||||
break;
|
break;
|
||||||
length = (buffer[ofs+0]<<0) + (buffer[ofs+1]<<8) + (buffer[ofs+2]<<16) + (buffer[ofs+3]<<24);
|
length = (buffer[ofs+0]<<0) + (buffer[ofs+1]<<8) + (buffer[ofs+2]<<16) + (buffer[ofs+3]<<24);
|
||||||
if (length > MAX_OVERALLMSGLEN)
|
if (length > MAX_OVERALLMSGLEN)
|
||||||
|
{
|
||||||
|
disablepreparse = true;
|
||||||
|
Con_Printf("Error looking ahead at demo\n");
|
||||||
return parsed;
|
return parsed;
|
||||||
|
}
|
||||||
ofs+=4;
|
ofs+=4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -207,9 +216,6 @@ int demo_preparsedemo(unsigned char *buffer, int bytes)
|
||||||
return parsed;
|
return parsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char demobuffer[1024*16];
|
|
||||||
int demobuffersize;
|
|
||||||
int demopreparsedbytes;
|
|
||||||
int readdemobytes(int *readpos, void *data, int len)
|
int readdemobytes(int *readpos, void *data, int len)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -232,7 +238,10 @@ int readdemobytes(int *readpos, void *data, int len)
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
{
|
{
|
||||||
demobuffersize += i;
|
demobuffersize += i;
|
||||||
demopreparsedbytes += demo_preparsedemo(demobuffer+demopreparsedbytes, demobuffersize-demopreparsedbytes);
|
if (disablepreparse)
|
||||||
|
demopreparsedbytes = demobuffersize;
|
||||||
|
else
|
||||||
|
demopreparsedbytes += demo_preparsedemo(demobuffer+demopreparsedbytes, demobuffersize-demopreparsedbytes);
|
||||||
}
|
}
|
||||||
else if (i < 0)
|
else if (i < 0)
|
||||||
{ //0 means no data available yet
|
{ //0 means no data available yet
|
||||||
|
@ -1473,6 +1482,7 @@ vfsfile_t *qtvrequest;
|
||||||
void CL_QTVPoll (void)
|
void CL_QTVPoll (void)
|
||||||
{
|
{
|
||||||
char *s, *e, *colon;
|
char *s, *e, *colon;
|
||||||
|
char *tail = NULL;
|
||||||
int len;
|
int len;
|
||||||
qboolean streamavailable = false;
|
qboolean streamavailable = false;
|
||||||
qboolean saidheader = false;
|
qboolean saidheader = false;
|
||||||
|
@ -1505,15 +1515,35 @@ void CL_QTVPoll (void)
|
||||||
for (s = qtvrequestbuffer; *s; s++)
|
for (s = qtvrequestbuffer; *s; s++)
|
||||||
{
|
{
|
||||||
if (s[0] == '\n' && s[1] == '\n')
|
if (s[0] == '\n' && s[1] == '\n')
|
||||||
|
{
|
||||||
|
tail = s+2;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
if (s[0] == '\r' && s[1] == '\n' && s[2] == '\r' && s[3] == '\n')
|
||||||
|
{
|
||||||
|
tail = s+4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (s[0] == '\r' && s[1] == '\n' && s[2] == '\n')
|
||||||
|
{
|
||||||
|
tail = s+3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (s[0] == '\n' && s[1] == '\r' && s[2] == '\n')
|
||||||
|
{
|
||||||
|
tail = s+3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!*s)
|
if (!tail)
|
||||||
return;
|
return;
|
||||||
s[1] = '\0'; //make sure its null terminated before the data payload
|
s[1] = '\0'; //make sure its null terminated before the data payload
|
||||||
s = qtvrequestbuffer;
|
s = qtvrequestbuffer;
|
||||||
for (e = s; *e; )
|
for (e = s; *e; )
|
||||||
{
|
{
|
||||||
if (*e == '\n')
|
if (*e == '\r')
|
||||||
|
*e = '\0';
|
||||||
|
else if (*e == '\n')
|
||||||
{
|
{
|
||||||
*e = '\0';
|
*e = '\0';
|
||||||
colon = strchr(s, ':');
|
colon = strchr(s, ':');
|
||||||
|
@ -1610,7 +1640,7 @@ void CL_QTVPoll (void)
|
||||||
{
|
{
|
||||||
CL_QTVPlay(qtvrequest);
|
CL_QTVPlay(qtvrequest);
|
||||||
qtvrequest = NULL;
|
qtvrequest = NULL;
|
||||||
demo_resetcache(qtvrequestsize - (e-qtvrequestbuffer), e);
|
demo_resetcache(qtvrequestsize - (tail-qtvrequestbuffer), tail);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1725,7 +1755,7 @@ void CL_QTVPlay_f (void)
|
||||||
else
|
else
|
||||||
host = NULL;
|
host = NULL;
|
||||||
|
|
||||||
if (qtv_workaroundeztv.value)
|
if (qtvcl_forceversion1.value)
|
||||||
{
|
{
|
||||||
connrequest = "QTV\n"
|
connrequest = "QTV\n"
|
||||||
"VERSION: 1.0\n";
|
"VERSION: 1.0\n";
|
||||||
|
@ -1784,7 +1814,7 @@ void CL_QTVList_f (void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qtv_workaroundeztv.value)
|
if (qtvcl_forceversion1.value)
|
||||||
{
|
{
|
||||||
connrequest = "QTV\n"
|
connrequest = "QTV\n"
|
||||||
"VERSION: 1.0\n";
|
"VERSION: 1.0\n";
|
||||||
|
|
|
@ -73,7 +73,7 @@ cvar_t cl_predict_players2 = SCVAR("cl_predict_players2", "1");
|
||||||
cvar_t cl_solid_players = SCVAR("cl_solid_players", "1");
|
cvar_t cl_solid_players = SCVAR("cl_solid_players", "1");
|
||||||
cvar_t cl_noblink = SCVAR("cl_noblink", "0");
|
cvar_t cl_noblink = SCVAR("cl_noblink", "0");
|
||||||
cvar_t cl_servername = SCVAR("cl_servername", "none");
|
cvar_t cl_servername = SCVAR("cl_servername", "none");
|
||||||
cvar_t qtv_workaroundeztv = SCVAR("qtv_workaroundeztv", "0");
|
cvar_t qtvcl_forceversion1 = SCVAR("qtvcl_forceversion1", "0");
|
||||||
|
|
||||||
cvar_t cl_demospeed = FCVAR("cl_demospeed", "demo_setspeed", "1", 0);
|
cvar_t cl_demospeed = FCVAR("cl_demospeed", "demo_setspeed", "1", 0);
|
||||||
|
|
||||||
|
@ -2904,7 +2904,7 @@ void CL_Init (void)
|
||||||
Cvar_Register (&ruleset_allow_overlongsounds, cl_controlgroup);
|
Cvar_Register (&ruleset_allow_overlongsounds, cl_controlgroup);
|
||||||
Cvar_Register (&ruleset_allow_larger_models, cl_controlgroup);
|
Cvar_Register (&ruleset_allow_larger_models, cl_controlgroup);
|
||||||
|
|
||||||
Cvar_Register (&qtv_workaroundeztv, cl_controlgroup);
|
Cvar_Register (&qtvcl_forceversion1, cl_controlgroup);
|
||||||
#ifdef WEBCLIENT
|
#ifdef WEBCLIENT
|
||||||
Cmd_AddCommand ("ftp", CL_FTP_f);
|
Cmd_AddCommand ("ftp", CL_FTP_f);
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue