1
0
Fork 0
forked from fte/fteqw

There. Happy now?

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3017 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2008-06-25 08:29:14 +00:00
parent 4dfdca03f5
commit 64c9a31e6b

View file

@ -48,6 +48,7 @@ static void HTMLprintf(char *outb, int outl, char *fmt, ...)
va_list val; va_list val;
char qfmt[8192*4]; char qfmt[8192*4];
char *inb = qfmt; char *inb = qfmt;
unsigned char inchar;
va_start(val, fmt); va_start(val, fmt);
vsnprintf(qfmt, sizeof(qfmt), fmt, val); vsnprintf(qfmt, sizeof(qfmt), fmt, val);
@ -58,7 +59,8 @@ static void HTMLprintf(char *outb, int outl, char *fmt, ...)
outl -= 5; outl -= 5;
while (outl > 0 && *inb) while (outl > 0 && *inb)
{ {
if (*inb == '<') inchar = qfont_table[*(unsigned char*)inb];
if (inchar == '<')
{ {
*outb++ = '&'; *outb++ = '&';
*outb++ = 'l'; *outb++ = 'l';
@ -66,7 +68,7 @@ static void HTMLprintf(char *outb, int outl, char *fmt, ...)
*outb++ = ';'; *outb++ = ';';
outl -= 4; outl -= 4;
} }
else if (*inb == '>') else if (inchar == '>')
{ {
*outb++ = '&'; *outb++ = '&';
*outb++ = 'g'; *outb++ = 'g';
@ -74,7 +76,7 @@ static void HTMLprintf(char *outb, int outl, char *fmt, ...)
*outb++ = ';'; *outb++ = ';';
outl -= 4; outl -= 4;
} }
else if (*inb == '\n') else if (inchar == '\n')
{ {
*outb++ = '<'; *outb++ = '<';
*outb++ = 'b'; *outb++ = 'b';
@ -83,7 +85,7 @@ static void HTMLprintf(char *outb, int outl, char *fmt, ...)
*outb++ = '>'; *outb++ = '>';
outl -= 5; outl -= 5;
} }
else if (*inb == '&') else if (inchar == '&')
{ {
*outb++ = '&'; *outb++ = '&';
*outb++ = 'a'; *outb++ = 'a';
@ -94,7 +96,7 @@ static void HTMLprintf(char *outb, int outl, char *fmt, ...)
} }
else else
{ {
*outb++ = qfont_table[*(unsigned char*)inb]; *outb++ = inchar;
outl -= 1; outl -= 1;
} }
inb++; inb++;
@ -258,6 +260,7 @@ static qboolean HTTPSV_GetHeaderField(char *s, char *field, char *buffer, int bu
{ {
*e = '\0'; *e = '\0';
colon = strchr(s, ':'); colon = strchr(s, ':');
*e = '\n';
if (!colon) if (!colon)
{ {
if (!strncmp(field, s, fieldnamelen)) if (!strncmp(field, s, fieldnamelen))
@ -279,7 +282,7 @@ static qboolean HTTPSV_GetHeaderField(char *s, char *field, char *buffer, int bu
colon++; colon++;
while (buffersize > 2) while (buffersize > 2)
{ {
if (*colon == '\r' || *colon == '\n') if (!*colon || *colon == '\r' || *colon == '\n')
break; break;
*buffer++ = *colon++; *buffer++ = *colon++;
buffersize--; buffersize--;
@ -380,6 +383,62 @@ static void HTTPSV_GenerateQTVStub(cluster_t *cluster, oproxy_t *dest, char *str
Net_ProxySend(cluster, dest, buffer, strlen(buffer)); Net_ProxySend(cluster, dest, buffer, strlen(buffer));
} }
static void HTTPSV_GenerateQWSVStub(cluster_t *cluster, oproxy_t *dest, char *method, char *streamid)
{
char *s;
char buffer[1024];
char fname[256];
s = fname;
while (*streamid > ' ')
{
if (s > fname + sizeof(fname)-4) //4 cos I'm too lazy to work out what the actual number should be
break;
if (*streamid == '%')
{
*s = 0;
streamid++;
if (*streamid <= ' ')
break;
else if (*streamid >= 'a' && *streamid <= 'f')
*s += 10 + *streamid-'a';
else if (*streamid >= 'A' && *streamid <= 'F')
*s += 10 + *streamid-'A';
else if (*streamid >= '0' && *streamid <= '9')
*s += *streamid-'0';
*s <<= 4;
streamid++;
if (*streamid <= ' ')
break;
else if (*streamid >= 'a' && *streamid <= 'f')
*s += 10 + *streamid-'a';
else if (*streamid >= 'A' && *streamid <= 'F')
*s += 10 + *streamid-'A';
else if (*streamid >= '0' && *streamid <= '9')
*s += *streamid-'0';
s++;
}
else
*s++ = *streamid++;
}
*s = 0;
streamid = fname;
HTTPSV_SendHTTPHeader(cluster, dest, "200", "text/x-quaketvident", false);
snprintf(buffer, sizeof(buffer), "[QTV]\r\n"
"%s: %s\r\n"
"",
method, streamid);
Net_ProxySend(cluster, dest, buffer, strlen(buffer));
}
static char *HTTPSV_ParsePOST(char *post, char *buffer, int buffersize) static char *HTTPSV_ParsePOST(char *post, char *buffer, int buffersize)
{ {
while(*post && *post != '&') while(*post && *post != '&')
@ -747,6 +806,14 @@ void HTTPSV_GetMethod(cluster_t *cluster, oproxy_t *pend)
{ {
HTTPSV_GenerateQTVStub(cluster, pend, "file:", (char*)pend->inbuffer+20); HTTPSV_GenerateQTVStub(cluster, pend, "file:", (char*)pend->inbuffer+20);
} }
else if (!strncmp((char*)pend->inbuffer+4, "/watch.qtv?join=", 16))
{
HTTPSV_GenerateQWSVStub(cluster, pend, "Join", (char*)pend->inbuffer+16);
}
else if (!strncmp((char*)pend->inbuffer+4, "/watch.qtv?obsv=", 16))
{
HTTPSV_GenerateQWSVStub(cluster, pend, "Observe", (char*)pend->inbuffer+16);
}
// else if (!strncmp((char*)pend->inbuffer+4, "/demo/", 6)) // else if (!strncmp((char*)pend->inbuffer+4, "/demo/", 6))
// { //fixme: make this send the demo as an http download // { //fixme: make this send the demo as an http download
// HTTPSV_GenerateQTVStub(cluster, pend, "file:", (char*)pend->inbuffer+10); // HTTPSV_GenerateQTVStub(cluster, pend, "file:", (char*)pend->inbuffer+10);