fix compat with IE3. lol.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4538 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
d6e089d87f
commit
c5f51a6801
1 changed files with 24 additions and 12 deletions
|
@ -195,7 +195,7 @@ typedef struct HTTP_active_connections_s {
|
||||||
http_mode_t mode;
|
http_mode_t mode;
|
||||||
qboolean modeswitched;
|
qboolean modeswitched;
|
||||||
qboolean closeaftertransaction;
|
qboolean closeaftertransaction;
|
||||||
qboolean close;
|
char *closereason;
|
||||||
qboolean acceptgzip;
|
qboolean acceptgzip;
|
||||||
|
|
||||||
char *inbuffer;
|
char *inbuffer;
|
||||||
|
@ -258,8 +258,9 @@ void HTTP_RunExisting (void)
|
||||||
|
|
||||||
cl = *link;
|
cl = *link;
|
||||||
|
|
||||||
if (cl->close)
|
if (cl->closereason)
|
||||||
{
|
{
|
||||||
|
IWebPrintf("Closing connection: %s\n", cl->closereason);
|
||||||
|
|
||||||
*link = cl->next;
|
*link = cl->next;
|
||||||
closesocket(cl->datasock);
|
closesocket(cl->datasock);
|
||||||
|
@ -287,7 +288,7 @@ void HTTP_RunExisting (void)
|
||||||
{
|
{
|
||||||
if (cl->inbuffersize>128*1024)
|
if (cl->inbuffersize>128*1024)
|
||||||
{
|
{
|
||||||
cl->close = true; //that's just taking the piss.
|
cl->closereason = "headers larger than 128kb"; //that's just taking the piss.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -306,13 +307,13 @@ void HTTP_RunExisting (void)
|
||||||
{
|
{
|
||||||
if (qerrno != EWOULDBLOCK) //they closed on us. Assume end.
|
if (qerrno != EWOULDBLOCK) //they closed on us. Assume end.
|
||||||
{
|
{
|
||||||
cl->close = true;
|
cl->closereason = "recv error";
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (ammount == 0)
|
if (ammount == 0)
|
||||||
{
|
{
|
||||||
cl->close = true;
|
cl->closereason = "peer closed connection";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -337,7 +338,7 @@ cont:
|
||||||
|
|
||||||
if (!*resource)
|
if (!*resource)
|
||||||
{
|
{
|
||||||
cl->close = true; //even if they forgot to specify a resource, we didn't find an HTTP so we have no option but to close.
|
cl->closereason = "not http"; //even if they forgot to specify a resource, we didn't find an HTTP so we have no option but to close.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,9 +364,15 @@ cont:
|
||||||
if (!strnicmp(buf2, "HTTP/", 5))
|
if (!strnicmp(buf2, "HTTP/", 5))
|
||||||
{
|
{
|
||||||
if (!strncmp(buf2, "HTTP/1.1", 8))
|
if (!strncmp(buf2, "HTTP/1.1", 8))
|
||||||
|
{
|
||||||
HTTPmarkup = 3;
|
HTTPmarkup = 3;
|
||||||
|
cl->closeaftertransaction = false;
|
||||||
|
}
|
||||||
else if (!strncmp(buf2, "HTTP/1", 6))
|
else if (!strncmp(buf2, "HTTP/1", 6))
|
||||||
|
{
|
||||||
HTTPmarkup = 2;
|
HTTPmarkup = 2;
|
||||||
|
cl->closeaftertransaction = true;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
HTTPmarkup = 1; //0.9... lamer.
|
HTTPmarkup = 1; //0.9... lamer.
|
||||||
|
@ -430,6 +437,8 @@ cont:
|
||||||
}
|
}
|
||||||
else if (!strnicmp(msg, "Connection: close", 17))
|
else if (!strnicmp(msg, "Connection: close", 17))
|
||||||
cl->closeaftertransaction = true;
|
cl->closeaftertransaction = true;
|
||||||
|
else if (!strnicmp(msg, "Connection: Keep-Alive", 22))
|
||||||
|
cl->closeaftertransaction = false;
|
||||||
|
|
||||||
while(*msg != '\n')
|
while(*msg != '\n')
|
||||||
{
|
{
|
||||||
|
@ -529,10 +538,11 @@ cont:
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
//fixme: add connection: keep-alive or whatever so that ie3 is happy...
|
||||||
if (HTTPmarkup>=3)
|
if (HTTPmarkup>=3)
|
||||||
sprintf(resource, "HTTP/1.1 200 OK\r\n" "%s%s" "Content-Length: %i\r\n" "Server: "FULLENGINENAME"/0\r\n" "\r\n", strstr(resource, ".htm")?"Content-Type: text/html\r\n":"", gzipped?"Content-Encoding: gzip\r\nCache-Control: public, max-age=86400\r\n":"", (int)VFS_GETLEN(cl->file));
|
sprintf(resource, "HTTP/1.1 200 OK\r\n" "%s%s" "Connection: %s\r\n" "Content-Length: %i\r\n" "Server: "FULLENGINENAME"/0\r\n" "\r\n", strstr(resource, ".htm")?"Content-Type: text/html\r\n":"", gzipped?"Content-Encoding: gzip\r\nCache-Control: public, max-age=86400\r\n":"", cl->closeaftertransaction?"close":"keep-alive", (int)VFS_GETLEN(cl->file));
|
||||||
else if (HTTPmarkup==2)
|
else if (HTTPmarkup==2)
|
||||||
sprintf(resource, "HTTP/1.0 200 OK\r\n" "%s%s" "Content-Length: %i\r\n" "Server: "FULLENGINENAME"/0\r\n" "\r\n", strstr(resource, ".htm")?"Content-Type: text/html\r\n":"", gzipped?"Content-Encoding: gzip\r\nCache-Control: public, max-age=86400\r\n":"", (int)VFS_GETLEN(cl->file));
|
sprintf(resource, "HTTP/1.0 200 OK\r\n" "%s%s" "Connection: %s\r\n" "Content-Length: %i\r\n" "Server: "FULLENGINENAME"/0\r\n" "\r\n", strstr(resource, ".htm")?"Content-Type: text/html\r\n":"", gzipped?"Content-Encoding: gzip\r\nCache-Control: public, max-age=86400\r\n":"", cl->closeaftertransaction?"close":"keep-alive", (int)VFS_GETLEN(cl->file));
|
||||||
else if (HTTPmarkup)
|
else if (HTTPmarkup)
|
||||||
sprintf(resource, "HTTP/0.9 200 OK\r\n\r\n");
|
sprintf(resource, "HTTP/0.9 200 OK\r\n\r\n");
|
||||||
else
|
else
|
||||||
|
@ -570,7 +580,7 @@ notimplemented:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg = NULL;
|
msg = NULL;
|
||||||
cl->close = true;
|
cl->closereason = "unsupported http version";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg)
|
if (msg)
|
||||||
|
@ -615,7 +625,7 @@ notimplemented:
|
||||||
localerrno = qerrno;
|
localerrno = qerrno;
|
||||||
if (localerrno != EWOULDBLOCK)
|
if (localerrno != EWOULDBLOCK)
|
||||||
{
|
{
|
||||||
cl->close = true;
|
cl->closereason = "some error when sending";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (ammount||!cl->outbufferused)
|
else if (ammount||!cl->outbufferused)
|
||||||
|
@ -627,11 +637,11 @@ notimplemented:
|
||||||
cl->modeswitched = true;
|
cl->modeswitched = true;
|
||||||
cl->mode = HTTP_WAITINGFORREQUEST;
|
cl->mode = HTTP_WAITINGFORREQUEST;
|
||||||
if (cl->closeaftertransaction)
|
if (cl->closeaftertransaction)
|
||||||
cl->close = true;
|
cl->closereason = "file sent";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
cl->close = true;
|
cl->closereason = "peer prematurely closed connection";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* case HTTP_RECEIVING:
|
/* case HTTP_RECEIVING:
|
||||||
|
@ -715,6 +725,8 @@ qboolean HTTP_ServerPoll(qboolean httpserverwanted, int portnum) //loop while tr
|
||||||
#ifndef WEBSVONLY
|
#ifndef WEBSVONLY
|
||||||
SockadrToNetadr(&from, &na);
|
SockadrToNetadr(&from, &na);
|
||||||
IWebPrintf("New http connection from %s\n", NET_AdrToString(buf, sizeof(buf), &na));
|
IWebPrintf("New http connection from %s\n", NET_AdrToString(buf, sizeof(buf), &na));
|
||||||
|
#else
|
||||||
|
IWebPrintf("New http connection from %s\n", inet_ntoa(((struct sockaddr_in*)&from)->sin_addr));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
cl = IWebMalloc(sizeof(HTTP_active_connections_t));
|
cl = IWebMalloc(sizeof(HTTP_active_connections_t));
|
||||||
|
|
Loading…
Reference in a new issue