mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-28 22:52:02 +00:00
Added available demos webpage. Works like current streams. No info is currently provided other than filename. A link is provided from /nowplaying.html.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2406 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
3688b7bca5
commit
f9d403039d
1 changed files with 95 additions and 9 deletions
102
fteqtv/forward.c
102
fteqtv/forward.c
|
@ -472,10 +472,13 @@ void SV_GenerateNowPlayingHTTP(cluster_t *cluster, oproxy_t *dest)
|
|||
if (!cluster->servers)
|
||||
{
|
||||
|
||||
s = "No streams are currently being played";
|
||||
s = "No streams are currently being played<br />";
|
||||
Net_ProxySend(cluster, dest, s, strlen(s));
|
||||
}
|
||||
|
||||
s = "<br /><A href=\"/demos.html\">Available Demos</A>";
|
||||
Net_ProxySend(cluster, dest, s, strlen(s));
|
||||
|
||||
sprintf(buffer, "</BODY>");
|
||||
Net_ProxySend(cluster, dest, buffer, strlen(buffer));
|
||||
}
|
||||
|
@ -534,7 +537,7 @@ qboolean SV_GetHTTPHeaderField(char *s, char *field, char *buffer, int buffersiz
|
|||
return false;
|
||||
}
|
||||
|
||||
void SV_GenerateQTVStub(cluster_t *cluster, oproxy_t *dest, int streamid)
|
||||
void SV_GenerateQTVStub(cluster_t *cluster, oproxy_t *dest, char *streamtype, char *streamid)
|
||||
{
|
||||
char *s;
|
||||
char hostname[64];
|
||||
|
@ -567,11 +570,18 @@ void SV_GenerateQTVStub(cluster_t *cluster, oproxy_t *dest, int streamid)
|
|||
"\n";
|
||||
Net_ProxySend(cluster, dest, s, strlen(s));
|
||||
|
||||
{
|
||||
char *ws;
|
||||
for (ws = streamid; *ws > ' '; ws++)
|
||||
;
|
||||
*ws = '\0';
|
||||
}
|
||||
|
||||
|
||||
sprintf(buffer, "[QTV]\r\n"
|
||||
"Stream: %i@%s\r\n"
|
||||
"Stream: %s%s@%s\r\n"
|
||||
"",
|
||||
streamid, hostname);
|
||||
streamtype, streamid, hostname);
|
||||
|
||||
|
||||
Net_ProxySend(cluster, dest, buffer, strlen(buffer));
|
||||
|
@ -697,6 +707,13 @@ void SV_GenerateAdminHTTP(cluster_t *cluster, oproxy_t *dest, int streamid, char
|
|||
"</HEAD>\n"
|
||||
"<BODY onload=sf()>";
|
||||
|
||||
|
||||
Net_ProxySend(cluster, dest, s, strlen(s));
|
||||
s = "<H1>FTEQTV Admin: ";
|
||||
Net_ProxySend(cluster, dest, s, strlen(s));
|
||||
s = cluster->hostname;
|
||||
Net_ProxySend(cluster, dest, s, strlen(s));
|
||||
s = "</H1>";
|
||||
Net_ProxySend(cluster, dest, s, strlen(s));
|
||||
|
||||
s =
|
||||
|
@ -734,6 +751,46 @@ void SV_GenerateAdminHTTP(cluster_t *cluster, oproxy_t *dest, int streamid, char
|
|||
Net_ProxySend(cluster, dest, s, strlen(s));
|
||||
}
|
||||
|
||||
void SV_GenerateQTVDemoListing(cluster_t *cluster, oproxy_t *dest)
|
||||
{
|
||||
int numdemos = 0;
|
||||
char link[256];
|
||||
char *s;
|
||||
s = "HTTP/1.1 200 OK\n"
|
||||
"Content-Type: text/html\n"
|
||||
"Connection: close\n"
|
||||
"\n"
|
||||
"<HEAD><TITLE>QuakeTV Demos</TITLE></HEAD><BODY>";
|
||||
Net_ProxySend(cluster, dest, s, strlen(s));
|
||||
|
||||
s = "<H1>QTV Demo listing</H1>";
|
||||
Net_ProxySend(cluster, dest, s, strlen(s));
|
||||
|
||||
#ifdef _WIN32
|
||||
{
|
||||
WIN32_FIND_DATA ffd;
|
||||
HANDLE h;
|
||||
h = FindFirstFile("*.mvd", &ffd);
|
||||
do
|
||||
{
|
||||
numdemos++;
|
||||
snprintf(link, sizeof(link), "<A HREF=\"watch.qtv?demo=%s\">%s</A><br/>", ffd.cFileName, ffd.cFileName);
|
||||
Net_ProxySend(cluster, dest, link, strlen(link));
|
||||
} while(FindNextFile(h, &ffd));
|
||||
FindClose(h);
|
||||
}
|
||||
#else
|
||||
s = "QTV Proxy is running on a platform for which file system listing is not coded.<br />Demo listing is not available.";
|
||||
Net_ProxySend(cluster, dest, s, strlen(s));
|
||||
#endif
|
||||
|
||||
sprintf(link, "<P>Total: %i demos</P>", numdemos);
|
||||
Net_ProxySend(cluster, dest, link, strlen(link));
|
||||
|
||||
s = "</BODY>"
|
||||
"</HTML>";
|
||||
Net_ProxySend(cluster, dest, s, strlen(s));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -851,7 +908,11 @@ qboolean SV_ReadPendingProxy(cluster_t *cluster, oproxy_t *pend)
|
|||
}
|
||||
else if (!strncmp(pend->inbuffer+4, "/watch.qtv?sid=", 15))
|
||||
{
|
||||
SV_GenerateQTVStub(cluster, pend, atoi(pend->inbuffer+19));
|
||||
SV_GenerateQTVStub(cluster, pend, "", pend->inbuffer+19);
|
||||
}
|
||||
else if (!strncmp(pend->inbuffer+4, "/watch.qtv?demo=", 16))
|
||||
{
|
||||
SV_GenerateQTVStub(cluster, pend, "file:", pend->inbuffer+20);
|
||||
}
|
||||
else if (!strncmp(pend->inbuffer+4, "/about", 6))
|
||||
{ //redirect them to our funky website
|
||||
|
@ -873,10 +934,15 @@ qboolean SV_ReadPendingProxy(cluster_t *cluster, oproxy_t *pend)
|
|||
}
|
||||
else if (!strncmp(pend->inbuffer+4, "/demos", 6))
|
||||
{
|
||||
s = "HTTP/1.0 302 Found\n"
|
||||
"Location: http://www.fteqw.com/\n"
|
||||
"\n";
|
||||
SV_GenerateQTVDemoListing(cluster, pend);
|
||||
/*
|
||||
s = "HTTP/1.1 200 OK\n"
|
||||
"Content-Type: text/html\n"
|
||||
"Connection: close\n"
|
||||
"\n"
|
||||
"<HTML><HEAD><TITLE>FTEQTV</TITLE></HEAD><BODY>Not Yet Supported</BODY></HTML>";
|
||||
Net_ProxySend(cluster, pend, s, strlen(s));
|
||||
*/
|
||||
}
|
||||
/* else
|
||||
{
|
||||
|
@ -1045,6 +1111,26 @@ qboolean SV_ReadPendingProxy(cluster_t *cluster, oproxy_t *pend)
|
|||
if (pend->flushing)
|
||||
return false;
|
||||
|
||||
|
||||
if (qtv->usequkeworldprotocols)
|
||||
{
|
||||
s = "QTVSV 1\n"
|
||||
"PERROR: This version of QTV is unable to convert QuakeWorld to QTV protocols\n"
|
||||
"\n";
|
||||
Net_ProxySend(cluster, pend, s, strlen(s));
|
||||
pend->flushing = true;
|
||||
return false;
|
||||
}
|
||||
if (cluster->numproxies >= cluster->maxproxies)
|
||||
{
|
||||
s = "QTVSV 1\n"
|
||||
"TERROR: This QTV has reached it's connection limit\n"
|
||||
"\n";
|
||||
Net_ProxySend(cluster, pend, s, strlen(s));
|
||||
pend->flushing = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pend->next = qtv->proxies;
|
||||
qtv->proxies = pend;
|
||||
|
||||
|
|
Loading…
Reference in a new issue