[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[myserver-commit] [3099] Fixed different bugs and added some optimizatio
From: |
Giuseppe Scrivano |
Subject: |
[myserver-commit] [3099] Fixed different bugs and added some optimizations. |
Date: |
Sun, 24 May 2009 18:42:34 +0000 |
Revision: 3099
http://svn.sv.gnu.org/viewvc/?view=rev&root=myserver&revision=3099
Author: gscrivano
Date: 2009-05-24 18:42:33 +0000 (Sun, 24 May 2009)
Log Message:
-----------
Fixed different bugs and added some optimizations.
Modified Paths:
--------------
trunk/myserver/include/http_handler/proxy/proxy.h
trunk/myserver/include/protocol/http/http_headers.h
trunk/myserver/src/http_handler/cgi/cgi.cpp
trunk/myserver/src/http_handler/fastcgi/fastcgi.cpp
trunk/myserver/src/http_handler/http_file/http_file.cpp
trunk/myserver/src/http_handler/isapi/isapi.cpp
trunk/myserver/src/http_handler/mscgi/mscgi.cpp
trunk/myserver/src/http_handler/proxy/proxy.cpp
trunk/myserver/src/http_handler/scgi/scgi.cpp
trunk/myserver/src/http_handler/wincgi/wincgi.cpp
trunk/myserver/src/protocol/http/http.cpp
trunk/myserver/src/protocol/http/http_data_read.cpp
trunk/myserver/src/protocol/http/http_headers.cpp
Modified: trunk/myserver/include/http_handler/proxy/proxy.h
===================================================================
--- trunk/myserver/include/http_handler/proxy/proxy.h 2009-05-24 18:42:26 UTC
(rev 3098)
+++ trunk/myserver/include/http_handler/proxy/proxy.h 2009-05-24 18:42:33 UTC
(rev 3099)
@@ -47,7 +47,8 @@
u_long initBufferSize,
int timeout,
bool useChunks = false,
- bool keepalive = false);
+ bool keepalive = false,
+ string *serverTransferEncoding = NULL);
static int timeout;
};
Modified: trunk/myserver/include/protocol/http/http_headers.h
===================================================================
--- trunk/myserver/include/protocol/http/http_headers.h 2009-05-24 18:42:26 UTC
(rev 3098)
+++ trunk/myserver/include/protocol/http/http_headers.h 2009-05-24 18:42:33 UTC
(rev 3099)
@@ -66,8 +66,8 @@
static void buildDefaultHTTPResponseHeader (HttpResponseHeader*);
static void buildDefaultHTTPRequestHeader (HttpRequestHeader*);
- static void buildHTTPResponseHeader (char *, HttpResponseHeader*);
- static void buildHTTPRequestHeader (char *, HttpRequestHeader*);
+ static u_long buildHTTPResponseHeader (char*, HttpResponseHeader*);
+ static u_long buildHTTPRequestHeader (char*, HttpRequestHeader*);
protected:
static int readReqAuthLine (HttpRequestHeader *request,
Modified: trunk/myserver/src/http_handler/cgi/cgi.cpp
===================================================================
--- trunk/myserver/src/http_handler/cgi/cgi.cpp 2009-05-24 18:42:26 UTC (rev
3098)
+++ trunk/myserver/src/http_handler/cgi/cgi.cpp 2009-05-24 18:42:33 UTC (rev
3099)
@@ -550,10 +550,10 @@
return 1;
}
- HttpHeaders::buildHTTPResponseHeader(td->buffer->getBuffer(),
- &td->response);
+ u_long hdrLen =
HttpHeaders::buildHTTPResponseHeader(td->buffer->getBuffer(),
+ &td->response);
- td->buffer->setLength((u_int)strlen(td->buffer->getBuffer()));
+ td->buffer->setLength(hdrLen);
if (chain.getStream ()->write(td->buffer->getBuffer(),
static_cast<int> (td->buffer->getLength()),
Modified: trunk/myserver/src/http_handler/fastcgi/fastcgi.cpp
===================================================================
--- trunk/myserver/src/http_handler/fastcgi/fastcgi.cpp 2009-05-24 18:42:26 UTC
(rev 3098)
+++ trunk/myserver/src/http_handler/fastcgi/fastcgi.cpp 2009-05-24 18:42:33 UTC
(rev 3099)
@@ -800,11 +800,11 @@
return 0;
}
- HttpHeaders::buildHTTPResponseHeader(con->td->secondaryBuffer->getBuffer(),
- &con->td->response);
+ u_long hdrLen =
HttpHeaders::buildHTTPResponseHeader(con->td->secondaryBuffer->getBuffer(),
+ &con->td->response);
if(con->td->connection->socket->send(con->td->secondaryBuffer->getBuffer(),
-
static_cast<int>(strlen(con->td->secondaryBuffer->getBuffer())),
+ hdrLen,
0) == SOCKET_ERROR )
{
*responseCompleted = true;
Modified: trunk/myserver/src/http_handler/http_file/http_file.cpp
===================================================================
--- trunk/myserver/src/http_handler/http_file/http_file.cpp 2009-05-24
18:42:26 UTC (rev 3098)
+++ trunk/myserver/src/http_handler/http_file/http_file.cpp 2009-05-24
18:42:33 UTC (rev 3099)
@@ -486,10 +486,11 @@
}
}
- HttpHeaders::buildHTTPResponseHeader(td->buffer->getBuffer(),
- &td->response);
+ u_long hdrLen =
HttpHeaders::buildHTTPResponseHeader(td->buffer->getBuffer(),
+ &td->response);
- td->buffer->setLength((u_long)strlen(td->buffer->getBuffer()));
+ td->buffer->setLength(hdrLen);
+
if(!td->appendOutputs)
{
/* Send the HTTP header. */
Modified: trunk/myserver/src/http_handler/isapi/isapi.cpp
===================================================================
--- trunk/myserver/src/http_handler/isapi/isapi.cpp 2009-05-24 18:42:26 UTC
(rev 3098)
+++ trunk/myserver/src/http_handler/isapi/isapi.cpp 2009-05-24 18:42:33 UTC
(rev 3099)
@@ -290,12 +290,11 @@
else
ConnInfo->td->response.connection.assign("Close");
- HttpHeaders::buildHTTPResponseHeader(
-
(char*)ConnInfo->td->secondaryBuffer->getBuffer(),&(ConnInfo->td->response));
+ u_long hdrLen = HttpHeaders::buildHTTPResponseHeader
((char*)ConnInfo->td->secondaryBuffer->getBuffer(),
+
&(ConnInfo->td->response));
if(ConnInfo->connection->socket->send(
- (char*)ConnInfo->td->secondaryBuffer->getBuffer(),
-
(int)strlen((char*)ConnInfo->td->secondaryBuffer->getBuffer()), 0)==-1)
+ (char*)ConnInfo->td->secondaryBuffer->getBuffer(),
hdrLen, 0)==-1)
return 0;
}
/*! Save the headerSent status. */
Modified: trunk/myserver/src/http_handler/mscgi/mscgi.cpp
===================================================================
--- trunk/myserver/src/http_handler/mscgi/mscgi.cpp 2009-05-24 18:42:26 UTC
(rev 3098)
+++ trunk/myserver/src/http_handler/mscgi/mscgi.cpp 2009-05-24 18:42:33 UTC
(rev 3099)
@@ -220,8 +220,8 @@
char *buffer = td->secondaryBuffer->getBuffer();
ConnectionPtr s = td->connection;
- HttpHeaders::buildHTTPResponseHeader(buffer, &(td->response));
- if(s->socket->send(buffer, (int)strlen(buffer), 0) == SOCKET_ERROR)
+ u_long hdrLen = HttpHeaders::buildHTTPResponseHeader(buffer,
&(td->response));
+ if(s->socket->send(buffer, hdrLen, 0) == SOCKET_ERROR)
return 1;
}
Modified: trunk/myserver/src/http_handler/proxy/proxy.cpp
===================================================================
--- trunk/myserver/src/http_handler/proxy/proxy.cpp 2009-05-24 18:42:26 UTC
(rev 3098)
+++ trunk/myserver/src/http_handler/proxy/proxy.cpp 2009-05-24 18:42:33 UTC
(rev 3099)
@@ -85,8 +85,8 @@
req.setValue ("Host", host.str ().c_str ());
- HttpHeaders::buildHTTPRequestHeader (td->secondaryBuffer->getBuffer (),
- &req);
+ u_long hdrLen = HttpHeaders::buildHTTPRequestHeader
(td->secondaryBuffer->getBuffer (),
+ &req);
if (sock.connect (destUrl.getHost ().c_str (), destUrl.getPort ()))
return td->http->raiseHTTPError (500);
@@ -98,8 +98,7 @@
return td->http->raiseHTTPError (500);
}
- if (sock.write (td->secondaryBuffer->getBuffer (),
- strlen (td->secondaryBuffer->getBuffer ()), &nbw))
+ if (sock.write (td->secondaryBuffer->getBuffer (), hdrLen, &nbw))
{
sock.close ();
return td->http->raiseHTTPError (500);
@@ -174,15 +173,25 @@
else
td->response.setValue ("Via", via);
+ string transferEncoding;
+ bool hasTransferEncoding = false;
+ tmp = td->response.getValue ("Transfer-Encoding", NULL);
+ if (tmp)
+ {
+ hasTransferEncoding = false;
+ transferEncoding.assign (*tmp);
+ }
+
+
if (useChunks)
td->response.setValue ("Transfer-Encoding", "chunked");
- HttpHeaders::buildHTTPResponseHeader (td->buffer->getBuffer (),
- &td->response);
+ u_long hdrLen = HttpHeaders::buildHTTPResponseHeader (td->buffer->getBuffer
(),
+ &td->response);
if (out.getStream ()->write (td->buffer->getBuffer (),
- strlen (td->buffer->getBuffer ()),
+ hdrLen,
&nbw))
return 0;
@@ -198,7 +207,8 @@
read - headerLength,
timeout,
useChunks,
- keepalive);
+ keepalive,
+ hasTransferEncoding ? &transferEncoding : NULL);
if (ret != -1)
td->sentData += ret;
@@ -236,6 +246,8 @@
*\param useChunks Use chunked transfer encoding
*with the client.
*\param keepalive The connection is keep-alive.
+ *\param serverTransferEncoding Transfer-Encoding
+ *used by the server.
*
*\return -1 on error.
*\return Otherwise the number of bytes transmitted.
@@ -248,18 +260,18 @@
u_long initBufferSize,
int timeout,
bool useChunks,
- bool keepalive)
+ bool keepalive,
+ string *serverTransferEncoding)
{
- u_long contentLength = -1;
+ u_long contentLength = 0;
u_long nbr = 0, nbw = 0, length = 0, inPos = 0;
u_long bufferDataSize = 0;
u_long written = 0;
- HttpResponseHeader::Entry *encoding = res->other.get ("Transfer-Encoding");
/* Only the chunked transfer encoding is supported. */
- if(encoding && !encoding->value->compare("chunked"))
+ if(serverTransferEncoding && serverTransferEncoding->compare("chunked"))
return -1;
if (res->contentLength.length ())
@@ -276,9 +288,9 @@
: td->buffer->getRealLength() - 1 ) - td->nHeaderChars;
/* If it is specified a transfer encoding read data using it. */
- if(encoding)
+ if(serverTransferEncoding)
{
- if(!encoding->value->compare("chunked"))
+ if(!serverTransferEncoding->compare("chunked"))
{
for (;;)
{
@@ -294,7 +306,7 @@
1))
return -1;
- if (nbr == 0)
+ if (!nbr)
break;
if (HttpDataHandler::appendDataToHTTPChannel (td,
@@ -314,24 +326,31 @@
else for(;;)
{
+ u_long len = td->buffer->getRealLength() - 1;
+
+ if (contentLength && length < len)
+ len = length;
+
+ if (len == 0)
+ break;
+
if(HttpDataRead::readContiguousPrimitivePostData (initBuffer,
&inPos,
initBufferSize,
client,
td->buffer->getBuffer(),
-
td->buffer->getRealLength() - 1,
+ len,
&nbr,
timeout))
{
return -1;
}
- if(nbr <= length)
+ if (contentLength == 0 && nbr == 0)
+ break;
+
+ if (length)
length -= nbr;
- else
- {
- return -1;
- }
if (nbr && HttpDataHandler::appendDataToHTTPChannel (td,
td->buffer->getBuffer
(),
@@ -344,7 +363,7 @@
written += nbr;
- if(!length)
+ if(contentLength && length == 0)
break;
}
Modified: trunk/myserver/src/http_handler/scgi/scgi.cpp
===================================================================
--- trunk/myserver/src/http_handler/scgi/scgi.cpp 2009-05-24 18:42:26 UTC
(rev 3098)
+++ trunk/myserver/src/http_handler/scgi/scgi.cpp 2009-05-24 18:42:33 UTC
(rev 3099)
@@ -295,11 +295,10 @@
&td->response,
&(td->nBytesToRead));
}
- HttpHeaders::buildHTTPResponseHeader(td->buffer->getBuffer(),
- &td->response);
+ u_long hdrLen =
HttpHeaders::buildHTTPResponseHeader(td->buffer->getBuffer(),
+ &td->response);
- if(chain->write(td->buffer->getBuffer(), strlen(td->buffer->getBuffer()),
- &nbw))
+ if(chain->write(td->buffer->getBuffer(), hdrLen, &nbw))
return -1;
}
Modified: trunk/myserver/src/http_handler/wincgi/wincgi.cpp
===================================================================
--- trunk/myserver/src/http_handler/wincgi/wincgi.cpp 2009-05-24 18:42:26 UTC
(rev 3098)
+++ trunk/myserver/src/http_handler/wincgi/wincgi.cpp 2009-05-24 18:42:33 UTC
(rev 3099)
@@ -373,10 +373,10 @@
/*!
*Send the header if it is not appending.
*/
- HttpHeaders::buildHTTPResponseHeader(td->buffer->getBuffer(),
- &td->response);
+ u_long hdrLen =
HttpHeaders::buildHTTPResponseHeader(td->buffer->getBuffer(),
+ &td->response);
if(chain.getStream ()->write((const char*)td->buffer->getBuffer(),
- (int)strlen((const
char*)td->buffer->getBuffer()),
+ hdrLen,
&nbw2))
{
OutFileHandle.close();
@@ -411,9 +411,10 @@
chain.clearAllFilters();
return 1;
}
-
+
td->outputData.writeToFile((char*)(buffer + headerSize),
- nBytesRead - headerSize,&nbw2);
+ nBytesRead - headerSize,
+ &nbw2);
nbw += nbw2;
}
Modified: trunk/myserver/src/protocol/http/http.cpp
===================================================================
--- trunk/myserver/src/protocol/http/http.cpp 2009-05-24 18:42:26 UTC (rev
3098)
+++ trunk/myserver/src/protocol/http/http.cpp 2009-05-24 18:42:33 UTC (rev
3099)
@@ -1530,11 +1530,10 @@
td->response.contentLength.assign(size.str());
}
}
- HttpHeaders::buildHTTPResponseHeader(td->buffer->getBuffer(),
- &td->response);
- if(td->connection->socket->send(td->buffer->getBuffer(),
- (u_long)strlen(td->buffer->getBuffer()), 0)
- == -1)
+ u_long hdrLen =
HttpHeaders::buildHTTPResponseHeader(td->buffer->getBuffer(),
+ &td->response);
+
+ if(td->connection->socket->send(td->buffer->getBuffer(), hdrLen, 0) == -1)
return 0;
if(errorBodyLength &&
(td->connection->socket->send(errorBodyMessage.str().c_str(),
Modified: trunk/myserver/src/protocol/http/http_data_read.cpp
===================================================================
--- trunk/myserver/src/protocol/http/http_data_read.cpp 2009-05-24 18:42:26 UTC
(rev 3098)
+++ trunk/myserver/src/protocol/http/http_data_read.cpp 2009-05-24 18:42:33 UTC
(rev 3099)
@@ -68,7 +68,6 @@
u_long timeout)
{
int ret;
- u_long nbtrSocket = 0;
*nbr = 0;
if(inBufferSize - *inBufferPos)
{
@@ -83,13 +82,8 @@
if(outBufferSize == *nbr)
return 0;
- nbtrSocket = inSocket->bytesToRead();
+ ret = inSocket->recv(outBuffer + *nbr, outBufferSize - *nbr, 0, timeout);
- if(!nbtrSocket)
- return 0;
-
- ret = inSocket->recv(outBuffer + *nbr, min(nbtrSocket, outBufferSize -
*nbr), 0, timeout);
-
if(ret == -1)
return -1;
@@ -211,7 +205,10 @@
if(nbw != nbr)
return -1;
- *outNbr += nbw;
+ if (out)
+ *outNbr += nbw;
+ else
+ *outNbr += nbr;
/* Read final chunk \r\n. */
if(readContiguousPrimitivePostData(inBuffer,
@@ -243,7 +240,7 @@
*/
int HttpDataRead::readPostData(HttpThreadContext* td, int* httpRetCode)
{
- int contentLength = -1;
+ int contentLength = 0;
u_long nbw = 0;
u_long bufferDataSize = 0;
Modified: trunk/myserver/src/protocol/http/http_headers.cpp
===================================================================
--- trunk/myserver/src/protocol/http/http_headers.cpp 2009-05-24 18:42:26 UTC
(rev 3098)
+++ trunk/myserver/src/protocol/http/http_headers.cpp 2009-05-24 18:42:33 UTC
(rev 3099)
@@ -41,9 +41,11 @@
*Builds an HTTP header string starting from an HttpResponseHeader structure.
*\param str The buffer where write the HTTP header.
*\param response the HttpResponseHeader where the HTTP data is.
+ *
+ *\return The number of bytes written to STR.
*/
-void HttpHeaders::buildHTTPResponseHeader(char *str,
- HttpResponseHeader* response)
+u_long HttpHeaders::buildHTTPResponseHeader (char *str,
+ HttpResponseHeader* response)
{
/*
*Here we build the HTTP response header.
@@ -51,234 +53,248 @@
*Every directive ends with a \r\n sequence.
*/
char *pos = str;
- const int MAX = MYSERVER_KB(8);
- if(response->httpStatus != 200)
+ const int MAX = MYSERVER_KB (8);
+ if (response->httpStatus != 200)
{
- if(response->errorType.length() == 0)
+ if (response->errorType.length () == 0)
{
- HttpErrors::getErrorMessage(response->httpStatus, response->errorType);
+ HttpErrors::getErrorMessage (response->httpStatus, response->errorType);
}
- pos += sprintf(str, "%s %i %s\r\nStatus: %s\r\n", response->ver.c_str(),
- response->httpStatus, response->errorType.c_str(),
- response->errorType.c_str() );
+ pos += sprintf (str, "%s %i %s\r\nStatus: %s\r\n", response->ver.c_str (),
+ response->httpStatus, response->errorType.c_str (),
+ response->errorType.c_str () );
}
else
- pos += sprintf(str,"%s 200 OK\r\n",response->ver.c_str());
+ pos += sprintf (str,"%s 200 OK\r\n",response->ver.c_str ());
- if(response->serverName.length())
- {
- pos += myserver_strlcpy(pos, "Server: ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, response->serverName.c_str(),
MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
- }
+ if (response->serverName.length ())
+ {
+ pos += myserver_strlcpy (pos, "Server: ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, response->serverName.c_str (),
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
+ }
else
- {
- pos += myserver_strlcpy(pos, "Server: GNU MyServer ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, MYSERVER_VERSION, MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
- }
+ {
+ pos += myserver_strlcpy (pos, "Server: GNU MyServer ",
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, MYSERVER_VERSION, MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
+ }
- if(response->lastModified.length())
- {
- pos += myserver_strlcpy(pos,"Last-Modified: ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, response->lastModified.c_str(),
- MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos,"\r\n", MAX-(long)(pos-str));
- }
- if(response->connection.length())
- {
- pos += myserver_strlcpy(pos,"Connection: ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, response->connection.c_str(),
- MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
- }
+ if (response->lastModified.length ())
+ {
+ pos += myserver_strlcpy (pos,"Last-Modified: ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, response->lastModified.c_str (),
+ MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos,"\r\n", MAX-(long)(pos-str));
+ }
+
+ if (response->connection.length ())
+ {
+ pos += myserver_strlcpy (pos,"Connection: ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, response->connection.c_str (),
+ MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
+ }
else
- {
- pos += myserver_strlcpy(pos, "Connection: Close\r\n", MAX-(long)(pos-str));
- }
- if(response->contentLength.length())
- {
- /*
- *Do not specify the Content-Length field if it is used
- *the chunked Transfer-Encoding.
- */
- HttpResponseHeader::Entry *e = response->other.get("Transfer-Encoding");
+ {
+ pos += myserver_strlcpy (pos, "Connection: Close\r\n",
MAX-(long)(pos-str));
+ }
- if(!e || (e && e->value->find("chunked",0) == string::npos ))
+ if (response->contentLength.length ())
{
- pos += myserver_strlcpy(pos, "Content-Length: ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, response->contentLength.c_str(),
MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
+ /*
+ *Do not specify the Content-Length field if it is used
+ *the chunked Transfer-Encoding.
+ */
+ HttpResponseHeader::Entry *e = response->other.get ("Transfer-Encoding");
+
+ if (!e || (e && e->value->find ("chunked", 0) == string::npos ))
+ {
+ pos += myserver_strlcpy (pos, "Content-Length: ",
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, response->contentLength.c_str (),
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
+ }
}
- }
- if(response->cookie.length())
- {
- string cookie;
- const char *token = response->cookie.c_str();
- int max = response->cookie.length();
- while(token)
+
+ if (response->cookie.length ())
{
- int len = getCharInString(token, "\n", max);
- if(len == -1 || *token=='\n')
+ string cookie;
+ const char *token = response->cookie.c_str ();
+ int max = response->cookie.length ();
+ while (token)
+ {
+ int len = getCharInString (token, "\n", max);
+ if (len == -1 || *token=='\n')
break;
- cookie.assign("Set-Cookie: ");
- cookie.append(token, len);
- cookie.append("\r\n");
- pos += myserver_strlcpy(pos, cookie.c_str(), MAX-(long)(pos-str));
- token+=len+1;
+ cookie.assign ("Set-Cookie: ");
+ cookie.append (token, len);
+ cookie.append ("\r\n");
+ pos += myserver_strlcpy (pos, cookie.c_str (), MAX-(long)(pos-str));
+ token += len + 1;
+ }
}
- }
- if(response->mimeVer.length())
- {
- pos += myserver_strlcpy(pos, "MIME-Version: ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, response->mimeVer.c_str(),
MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
- }
- if(response->contentType.length())
- {
- pos += myserver_strlcpy(pos, "Content-Type: ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, response->contentType.c_str(),
MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
- }
- if(response->date.length())
- {
- pos += myserver_strlcpy(pos, "Date: ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, response->date.c_str(), MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
- }
- if(response->dateExp.length())
- {
- pos += myserver_strlcpy(pos, "Expires: ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, response->dateExp.c_str(),
MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
- }
- if(response->auth.length())
- {
- pos += myserver_strlcpy(pos, "WWW-Authenticate: ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, response->auth.c_str(), MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
- }
-
- if(response->location.length())
- {
- pos += myserver_strlcpy(pos, "Location: ", MAX - (long)(pos - str));
- pos += myserver_strlcpy(pos, response->location.c_str(),
- MAX - (long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX - (long)(pos - str));
- }
- if(response->other.size())
- {
- HashMap<string, HttpResponseHeader::Entry*>::Iterator it =
- response->other.begin();
- for(; it != response->other.end(); it++)
+ if (response->mimeVer.length ())
{
- HttpResponseHeader::Entry *e = *it;
- if(e)
+ pos += myserver_strlcpy (pos, "MIME-Version: ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, response->mimeVer.c_str (),
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
+ }
+
+ if (response->contentType.length ())
+ {
+ pos += myserver_strlcpy (pos, "Content-Type: ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, response->contentType.c_str (),
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
+ }
+
+ if (response->date.length ())
+ {
+ pos += myserver_strlcpy(pos, "Date: ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy(pos, response->date.c_str (),
MAX-(long)(pos-str));
+ pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
+ }
+
+ if (response->dateExp.length ())
+ {
+ pos += myserver_strlcpy (pos, "Expires: ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, response->dateExp.c_str (),
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
+ }
+
+ if (response->auth.length ())
+ {
+ pos += myserver_strlcpy(pos, "WWW-Authenticate: ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy(pos, response->auth.c_str (),
MAX-(long)(pos-str));
+ pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
+ }
+
+ if (response->location.length ())
+ {
+ pos += myserver_strlcpy (pos, "Location: ", MAX - (long)(pos - str));
+ pos += myserver_strlcpy (pos, response->location.c_str (),
+ MAX - (long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX - (long)(pos - str));
+ }
+
+ if (response->other.size ())
+ {
+ HashMap<string, HttpResponseHeader::Entry*>::Iterator it =
+ response->other.begin();
+ for (; it != response->other.end(); it++)
{
- pos += myserver_strlcpy(pos, e->name->c_str(), MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, ": ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, e->value->c_str(), MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
+ HttpResponseHeader::Entry *e = *it;
+ if (e)
+ {
+ pos += myserver_strlcpy (pos, e->name->c_str (),
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, ": ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, e->value->c_str (),
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
+ }
}
-
}
- }
/*
*MyServer supports the bytes range.
*/
- pos += myserver_strlcpy(pos, "Accept-Ranges: bytes\r\n",
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "Accept-Ranges: bytes\r\n",
MAX-(long)(pos-str));
/*
*The HTTP header ends with a \r\n sequence.
*/
- pos += myserver_strlcpy(pos, "\r\n\0\0\0\0\0", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n\0\0\0", MAX-(long)(pos-str));
+
+ return (pos - str);
}
/*!
*Builds an HTTP header string starting from an HttpRequestHeader structure.
*\param str The buffer where write the HTTP header.
*\param request the HttpRequestHeader where the HTTP data is.
+ *
+ *\return The number of bytes written to STR.
*/
-void HttpHeaders::buildHTTPRequestHeader(char * str,HttpRequestHeader* request)
+u_long HttpHeaders::buildHTTPRequestHeader (char * str,HttpRequestHeader*
request)
{
char *pos = str;
const int MAX = MYSERVER_KB(8);
/* First line. */
- pos += myserver_strlcpy(pos, request->cmd.c_str(), MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, " ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, request->uri.c_str(), MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, " ", MAX-(long)(pos-str));
- if(request->uriOpts.length() > 0)
+ pos += myserver_strlcpy (pos, request->cmd.c_str (), MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, " ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, request->uri.c_str (), MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, " ", MAX-(long)(pos-str));
+
+ if (request->uriOpts.length () > 0)
{
- pos += myserver_strlcpy(pos, "?", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, request->uriOpts.c_str(),
MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, " ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "?", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, request->uriOpts.c_str (),
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, " ", MAX-(long)(pos-str));
}
- pos += myserver_strlcpy(pos, request->ver.c_str(), MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
+
+ pos += myserver_strlcpy (pos, request->ver.c_str (), MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
/* Authorization. */
- if(request->auth.length() > 0)
+ if (request->auth.length () > 0)
{
- pos += myserver_strlcpy(pos, "Authorization: ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, request->auth.c_str(), MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "Authorization: ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, request->auth.c_str (), MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
}
/* Content-Length. */
- if(request->contentLength.length() > 0)
+ if (request->contentLength.length () > 0)
{
- pos += myserver_strlcpy(pos, "Content-Length: ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, request->contentLength.c_str(),
MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "Content-Length: ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, request->contentLength.c_str (),
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
}
/* Range. */
- if(request->rangeType.length() > 0)
+ if (request->rangeType.length () > 0)
{
char buffer[12];
- pos += myserver_strlcpy(pos, "Range: ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, request->rangeType.c_str(),
MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, " ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "Range: ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, request->rangeType.c_str (),
MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, " ", MAX-(long)(pos-str));
- if(request->rangeByteBegin != (u_long)-1)
+ if (request->rangeByteBegin != (u_long)-1)
{
sprintf(buffer, "%lu", request->rangeByteBegin);
- pos += myserver_strlcpy(pos, buffer, MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, buffer, MAX-(long)(pos-str));
}
- pos += myserver_strlcpy(pos, "-", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "-", MAX-(long)(pos-str));
- if(request->rangeByteEnd != (u_long)-1)
+ if (request->rangeByteEnd != (u_long)-1)
{
sprintf(buffer, "%lu", request->rangeByteEnd);
- pos += myserver_strlcpy(pos, buffer, MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, buffer, MAX-(long)(pos-str));
}
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
}
- if(request->other.size())
+ if (request->other.size())
{
HashMap<string, HttpRequestHeader::Entry*>::Iterator it =
request->other.begin();
for(; it != request->other.end(); it++)
{
HttpRequestHeader::Entry *e = *it;
- if(e)
+ if (e)
{
- pos += myserver_strlcpy(pos, e->name->c_str(), MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, ": ", MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, e->value->c_str(), MAX-(long)(pos-str));
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, e->name->c_str (), MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, ": ", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, e->value->c_str (), MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n", MAX-(long)(pos-str));
}
}
}
- pos += myserver_strlcpy(pos, "\r\n", MAX-(long)(pos-str));
+ pos += myserver_strlcpy (pos, "\r\n\0\0\0", MAX-(long)(pos-str));
+ return (pos - str);
}
@@ -356,16 +372,16 @@
u_long nLinechars = 0;
u_long nLines = 0;
- if(res == 0)
+ if (res == 0)
return 0;
/*
*Count the number of lines in the header.
*/
for(i = 0; res[i]; i++)
{
- if(res[i]=='\n')
+ if (res[i]=='\n')
{
- if((res[i+2] == '\n') || (res[i+1] == '\0') || (res[i+1] == '\n'))
+ if ((res[i+2] == '\n') || (res[i+1] == '\0') || (res[i+1] == '\n'))
break;
nLines++;
}
@@ -375,7 +391,7 @@
*If a line contains more than 4160 characters we consider the
*header invalid.
*/
- if(nLinechars >= 4160)
+ if (nLinechars >= 4160)
return 0;
nLinechars++;
}
@@ -454,14 +470,14 @@
validRequest = validHTTPRequest(input, inputSize, &nLines, &maxTotchars);
/* Invalid header. */
- if(validRequest!=200)
+ if (validRequest!=200)
{
/* Incomplete header. */
- if(validRequest==-1)
+ if (validRequest==-1)
return -1;
/* Keep trace of first line for logging. */
tokenOff = getEndLine(input, HTTP_REQUEST_URI_DIM);
- if(tokenOff > 0)
+ if (tokenOff > 0)
request->uri.assign( input, min(HTTP_REQUEST_URI_DIM, tokenOff) );
else
request->uri.assign(input, HTTP_REQUEST_URI_DIM );
@@ -471,11 +487,11 @@
/* Get the first token, this is the HTTP command.*/
tokenOff = getCharInString(token, cmdSeps, HTTP_REQUEST_CMD_DIM);
- if(tokenOff == -1)
+ if (tokenOff == -1)
{
/* Keep trace of first line for logging. */
tokenOff = getEndLine(token, HTTP_REQUEST_URI_DIM);
- if(tokenOff > 0)
+ if (tokenOff > 0)
request->uri.assign(input, min(HTTP_REQUEST_URI_DIM, tokenOff) );
else
request->uri.assign(input, HTTP_REQUEST_URI_DIM );
@@ -483,22 +499,22 @@
do
{
- if(tokenOff== -1 )
+ if (tokenOff== -1 )
return 400;
/* Copy the HTTP field(this is the command if we are on the first line).
*/
- myserver_strlcpy(command, token, min(commandSize, tokenOff + 1) );
+ myserver_strlcpy (command, token, min(commandSize, tokenOff + 1) );
token += tokenOff;
- if(*token == ':')
+ if (*token == ':')
token++;
while(*token == ' ')
token++;
nLineControlled++;
lineControlled = 0;
- if(nLineControlled == 1)
+ if (nLineControlled == 1)
{
int containOpts = 0;
u_long lenToken = tokenOff;
@@ -513,23 +529,23 @@
tokenOff = getEndLine(token,
HTTP_REQUEST_VER_DIM + HTTP_REQUEST_URI_DIM+10);
lenToken = tokenOff;
- if(tokenOff == -1)
+ if (tokenOff == -1)
{
request->ver.clear();
request->cmd.clear();
tokenOff = getEndLine(input, HTTP_REQUEST_URI_DIM);
- if(tokenOff > 0)
+ if (tokenOff > 0)
request->uri.assign(input, min(HTTP_REQUEST_URI_DIM, tokenOff) );
else
request->uri.assign(input, HTTP_REQUEST_URI_DIM );
return 400;
}
- if(tokenOff > maxUri)
+ if (tokenOff > maxUri)
{
request->ver.clear();
request->cmd.clear();
tokenOff = getEndLine(input, HTTP_REQUEST_URI_DIM);
- if(tokenOff > 0)
+ if (tokenOff > 0)
request->uri.assign(input, min(HTTP_REQUEST_URI_DIM, tokenOff) );
else
request->uri.assign(input, HTTP_REQUEST_URI_DIM );
@@ -540,12 +556,12 @@
max--;
for(i=0; ((int)i < max) && (i < HTTP_REQUEST_URI_DIM); i++)
{
- if(token[i] == '?')
+ if (token[i] == '?')
{
containOpts = 1;
break;
}
- else if(token[i] == ' ')
+ else if (token[i] == ' ')
{
break;
}
@@ -555,14 +571,14 @@
*If a uri was specified store it. If it wasn't specified
*return an invalid header value.
*/
- if(i)
+ if (i)
request->uri.assign(token, i);
else
{
request->ver.clear();
request->cmd.clear();
tokenOff = getEndLine(input, HTTP_REQUEST_URI_DIM);
- if(tokenOff > 0)
+ if (tokenOff > 0)
request->uri.assign(input, min(HTTP_REQUEST_URI_DIM, tokenOff) );
else
request->uri.assign(input, HTTP_REQUEST_URI_DIM );
@@ -570,7 +586,7 @@
}
/* If the uri contains some query data determine how long it is. */
- if(containOpts)
+ if (containOpts)
{
j = getEndLine(&token[i], HTTP_REQUEST_URI_DIM);
for(j = 0; ((int)(i+j+1)<max) && (j<HTTP_REQUEST_URI_OPTS_DIM-1);j++)
@@ -592,7 +608,7 @@
*/
for(j = 0; j < 10; j++)
{
- if(token[i]==' ')
+ if (token[i]==' ')
i++;
else
break;
@@ -601,12 +617,12 @@
*If there are more than 10 black spaces store the entire line
*for logging then return an invalid header value.
*/
- if(j == 10)
+ if (j == 10)
{
request->ver.clear();
request->cmd.clear();
tokenOff = getEndLine(input, HTTP_REQUEST_URI_DIM);
- if(tokenOff > 0)
+ if (tokenOff > 0)
request->uri.assign(input, min(HTTP_REQUEST_URI_DIM, tokenOff) );
else
request->uri.assign(input, HTTP_REQUEST_URI_DIM );
@@ -620,19 +636,19 @@
i++;
/* Save the HTTP version. */
- if(i-j)
+ if (i-j)
request->ver.assign(&token[j], i-j);
/*
*If the version is not specified or it is too long store
*some information for logging then return an invalid header value.
*/
- if((!j) || ( (i-j) == HTTP_REQUEST_VER_DIM ))
+ if ((!j) || ( (i-j) == HTTP_REQUEST_VER_DIM ))
{
request->ver.clear();
request->cmd.clear();
tokenOff = getEndLine(input, HTTP_REQUEST_URI_DIM);
- if(tokenOff > 0)
+ if (tokenOff > 0)
request->uri.assign(input, min(HTTP_REQUEST_URI_DIM, tokenOff) );
else
request->uri.assign(input, HTTP_REQUEST_URI_DIM );
@@ -640,7 +656,7 @@
}
/* Store if the requested uri terminates with a slash character. */
- request->uriEndsWithSlash = request->uri[(request->uri.length())-1]=='/';
+ request->uriEndsWithSlash = request->uri[(request->uri.length
())-1]=='/';
/*
*Do not maintain any slash character if the uri has them at
@@ -651,7 +667,7 @@
}else
/* Authorization. */
- if(!strcmpi(command,"Authorization"))
+ if (!strcmpi(command,"Authorization"))
{
int ret = readReqAuthLine (request, connection, token, &tokenOff);
if (ret)
@@ -659,32 +675,32 @@
lineControlled = 1;
}else
/* Content-Length. */
- if(!strcmpi(command, (char*)"Content-Length"))
+ if (!strcmpi(command, (char*)"Content-Length"))
{
tokenOff = getEndLine(token, HTTP_REQUEST_CONTENT_LENGTH_DIM);
- if(tokenOff==-1)
+ if (tokenOff==-1)
return 400;
lineControlled = 1;
request->contentLength.assign(token,tokenOff);
}else
/* Range. */
- if(!strcmpi(command, (char*)"Range"))
+ if (!strcmpi(command, (char*)"Range"))
{
int ret = readReqRangeLine (request, connection, token, &tokenOff);
if (ret)
return ret;
lineControlled = 1;
}else
- if(!lineControlled)
+ if (!lineControlled)
{
tokenOff = getEndLine(token, maxTotchars);
- if(tokenOff==-1)
+ if (tokenOff==-1)
return 400;
{
string cmdStr(command);
HttpRequestHeader::Entry *old = request->other.get(cmdStr);
- if(old)
+ if (old)
{
old->value->append(", ");
old->value->append(token,
@@ -695,7 +711,7 @@
else
{
HttpRequestHeader::Entry *e = new HttpRequestHeader::Entry();
- if(e)
+ if (e)
{
e->name->assign(command, HTTP_RESPONSE_OTHER_DIM);
e->value->assign(token,
@@ -737,7 +753,7 @@
rangeByteEnd[0] = '\0';
int tokenOff = getEndLine(token, HTTP_REQUEST_RANGE_TYPE_DIM + 30);
- if(tokenOff ==-1)
+ if (tokenOff ==-1)
return 400;
*lenOut = tokenOff;
@@ -769,19 +785,19 @@
}
while((*(++localToken) != '\r' )&&(i<12));
- for(i=0;i < static_cast<int>(request->rangeType.length()); i++)
- if(request->rangeType[i] == '=')
+ for(i=0;i < static_cast<int>(request->rangeType.length ()); i++)
+ if (request->rangeType[i] == '=')
request->rangeType[i] = '\0';
- for(i = 0; i < static_cast<int>(strlen(rangeByteBegin)); i++)
- if(rangeByteBegin[i] == '=')
+ for(i = 0; i < static_cast<int>(strlen (rangeByteBegin)); i++)
+ if (rangeByteBegin[i] == '=')
rangeByteBegin[i] = '\0';
- for(i = 0; i < static_cast<int>(strlen(rangeByteEnd)); i++)
- if(rangeByteEnd[i]== '=')
+ for(i = 0; i < static_cast<int>(strlen (rangeByteEnd)); i++)
+ if (rangeByteEnd[i]== '=')
rangeByteEnd[i]='\0';
- if(rangeByteBegin[0] == 0)
+ if (rangeByteBegin[0] == 0)
{
request->rangeByteBegin=0;
}
@@ -789,14 +805,14 @@
{
request->rangeByteBegin = (u_long)atol(rangeByteBegin);
}
- if(rangeByteEnd[0] == '\r')
+ if (rangeByteEnd[0] == '\r')
{
request->rangeByteEnd = 0;
}
else
{
request->rangeByteEnd = (u_long)atol(rangeByteEnd);
- if(request->rangeByteEnd < request->rangeByteBegin)
+ if (request->rangeByteEnd < request->rangeByteBegin)
return 400;
}
@@ -820,14 +836,14 @@
token++;
int tokenOff = getCharInString(token, " ", HTTP_REQUEST_AUTH_DIM);
- if(tokenOff==-1)
+ if (tokenOff==-1)
return 400;
request->auth.assign(token, tokenOff);
connection->setLogin("");
connection->setPassword("");
- if(!request->auth.compare("Basic"))
+ if (!request->auth.compare("Basic"))
{
u_long i;
const char *base64 = &token[6];
@@ -839,7 +855,7 @@
char password[32];
CBase64Utils base64Utils;
- if(len == -1)
+ if (len == -1)
return 400;
login[0] = password[0] = '\0';
@@ -873,7 +889,7 @@
delete lsecondaryBufferOr;
*lenOut = tokenOff = getEndLine(token, 100);
}
- else if(!request->auth.compare("Digest"))
+ else if (!request->auth.compare("Digest"))
{
char *digestBuff;
char *digestToken;
@@ -895,100 +911,100 @@
memcpy(digestBuff, token, tokenOff);
digestBuff[tokenOff]='\0';
digestToken = strtok( digestBuff, "=" );
- if(!digestToken)
+ if (!digestToken)
return 400;
do
{
StrTrim(digestToken, (char*)" ");
- if(!strcmpi(digestToken, (char*)"nonce"))
+ if (!strcmpi(digestToken, (char*)"nonce"))
{
digestToken = strtok( NULL, (char*)"," );
- if(digestToken)
+ if (digestToken)
{
StrTrim(digestToken, (char*)"\" ");
- myserver_strlcpy(request->digestNonce,digestToken,48+1);
+ myserver_strlcpy (request->digestNonce,digestToken,48+1);
}
}
- else if(!strcmpi(digestToken, (char*)"opaque"))
+ else if (!strcmpi(digestToken, (char*)"opaque"))
{
digestToken = strtok( NULL, (char*)"," );
- if(digestToken)
+ if (digestToken)
{
StrTrim(digestToken, (char*)"\" ");
- myserver_strlcpy(request->digestOpaque,digestToken,48+1);
+ myserver_strlcpy (request->digestOpaque,digestToken,48+1);
}
}
- else if(!strcmpi(digestToken, (char*)"uri"))
+ else if (!strcmpi(digestToken, (char*)"uri"))
{
digestToken = strtok( NULL, (char*)"\r\n," );
- if(digestToken)
+ if (digestToken)
{
StrTrim(digestToken, (char*)"\" ");
- myserver_strlcpy(request->digestUri,digestToken,1024+1);
+ myserver_strlcpy (request->digestUri,digestToken,1024+1);
}
}
- else if(!strcmpi(digestToken, (char*)"method"))
+ else if (!strcmpi(digestToken, (char*)"method"))
{
digestToken = strtok( NULL, (char*)"\r\n," );
- if(digestToken)
+ if (digestToken)
{
StrTrim(digestToken, (char*)"\" ");
- myserver_strlcpy(request->digestMethod,digestToken,16+1);
+ myserver_strlcpy (request->digestMethod,digestToken,16+1);
}
}
- else if(!strcmpi(digestToken, (char*)"qop"))
+ else if (!strcmpi(digestToken, (char*)"qop"))
{
digestToken = strtok( NULL, (char*)"\r\n," );
- if(digestToken)
+ if (digestToken)
{
StrTrim(digestToken,(char*)"\" ");
- myserver_strlcpy(request->digestQop,digestToken,16+1);
+ myserver_strlcpy (request->digestQop,digestToken,16+1);
}
}
- else if(!strcmpi(digestToken, (char*)"realm"))
+ else if (!strcmpi(digestToken, (char*)"realm"))
{
digestToken = strtok( NULL, (char*)"\r\n," );
- if(digestToken)
+ if (digestToken)
{
StrTrim(digestToken, (char*)"\" ");
- myserver_strlcpy(request->digestRealm,digestToken,48+1);
+ myserver_strlcpy (request->digestRealm,digestToken,48+1);
}
}
- else if(!strcmpi(digestToken, (char*)"cnonce"))
+ else if (!strcmpi(digestToken, (char*)"cnonce"))
{
digestToken = strtok( NULL, (char*)"\r\n," );
- if(digestToken)
+ if (digestToken)
{
StrTrim(digestToken, (char*)" \"");
- myserver_strlcpy(request->digestCnonce, digestToken, 48+1);
+ myserver_strlcpy (request->digestCnonce, digestToken, 48+1);
}
}
- else if(!strcmpi(digestToken, (char*)"username"))
+ else if (!strcmpi(digestToken, (char*)"username"))
{
digestToken = strtok( NULL, (char*)"\r\n," );
- if(digestToken)
+ if (digestToken)
{
StrTrim(digestToken, (char*)"\" ");
- myserver_strlcpy(request->digestUsername, digestToken, 48+1);
+ myserver_strlcpy (request->digestUsername, digestToken,
48+1);
connection->setLogin(digestToken);
}
}
- else if(!strcmpi(digestToken, (char*)"response"))
+ else if (!strcmpi(digestToken, (char*)"response"))
{
digestToken = strtok( NULL, "\r\n," );
- if(digestToken)
+ if (digestToken)
{
StrTrim(digestToken, (char*)"\" ");
- myserver_strlcpy(request->digestResponse,digestToken,48+1);
+ myserver_strlcpy (request->digestResponse,digestToken,48+1);
}
}
- else if(!strcmpi(digestToken, (char*)"nc"))
+ else if (!strcmpi(digestToken, (char*)"nc"))
{
digestToken = strtok( NULL, (char*)"\r\n," );
- if(digestToken)
+ if (digestToken)
{
StrTrim(digestToken, (char*)"\" ");
- myserver_strlcpy(request->digestNc,digestToken,10+1);
+ myserver_strlcpy (request->digestNc,digestToken,10+1);
}
}
else
@@ -1040,14 +1056,14 @@
int nLineControlled = 0;
/* Control if the HTTP header is a valid header. */
- if(input[0] == 0)
+ if (input[0] == 0)
return 0;
validResponse = validHTTPResponse(input,&nLines, &maxTotchars);
- if(validResponse)
+ if (validResponse)
{
newInput = new char[maxTotchars + 1];
- if(!newInput)
+ if (!newInput)
return 0;
/*
* FIXME:
@@ -1063,7 +1079,7 @@
token = (char*) input;
/* Check if is specified the first line containing the HTTP status. */
- if((input[0] == 'H') && (input[1] == 'T') && (input[2] == 'T')
+ if ((input[0] == 'H') && (input[1] == 'T') && (input[2] == 'T')
&&(input[3] == 'P') && (input[4] == '/'))
{
containStatusLine = 1;
@@ -1073,7 +1089,7 @@
token = strtok( token, ": ,\t\n\r" );
do
{
- if(!token)
+ if (!token)
break;
/*
*Reset the flag lineControlled.
@@ -1083,26 +1099,26 @@
/*
*Copy the HTTP command.
*/
- myserver_strlcpy(command, token, 96);
+ myserver_strlcpy (command, token, 96);
nLineControlled++;
- if((nLineControlled == 1) && containStatusLine)
+ if ((nLineControlled == 1) && containStatusLine)
{
lineControlled = 1;
/* Copy the HTTP version. */
response->ver.assign(command);
token = strtok( NULL, " ,\t\n\r" );
- if(token)
+ if (token)
response->httpStatus = atoi(token);
token = strtok( NULL, "\r\n\0" );
- if(token)
+ if (token)
response->errorType.assign(token);
}else
/* Server. */
- if(!strcmpi(command,"Server"))
+ if (!strcmpi(command,"Server"))
{
token = strtok( NULL, "\r\n\0" );
lineControlled = 1;
@@ -1110,11 +1126,11 @@
while(token && *token == ' ')
token++;
- if(token)
+ if (token)
response->serverName.assign(token);
}else
/* Location */
- if(!strcmpi(command,"Location"))
+ if (!strcmpi(command,"Location"))
{
token = strtok( NULL, "\r\n\0" );
lineControlled = 1;
@@ -1122,11 +1138,11 @@
while(token && *token == ' ')
token++;
- if(token)
+ if (token)
response->location.assign(token);
}else
/* Last-Modified. */
- if(!strcmpi(command,"Last-Modified"))
+ if (!strcmpi(command,"Last-Modified"))
{
token = strtok( NULL, "\r\n\0" );
lineControlled = 1;
@@ -1134,11 +1150,11 @@
while(token && *token == ' ')
token++;
- if(token)
+ if (token)
response->lastModified.assign(token);
}else
/* Status. */
- if(!strcmpi(command,"Status"))
+ if (!strcmpi(command,"Status"))
{
token = strtok( NULL, "\r\n\0" );
lineControlled = 1;
@@ -1147,12 +1163,12 @@
token++;
/*! If the response status is different from 200 don't modify it. */
- if(response->httpStatus == 200)
- if(token)
+ if (response->httpStatus == 200)
+ if (token)
response->httpStatus = atoi(token);
}else
/* Date. */
- if(!strcmpi(command,"Date"))
+ if (!strcmpi(command,"Date"))
{
token = strtok( NULL, "\r\n\0" );
lineControlled = 1;
@@ -1160,11 +1176,11 @@
while(token && *token == ' ')
token++;
- if(token)
+ if (token)
response->date.assign(token);
}else
/* Content-Type. */
- if(!strcmpi(command,"Content-Type"))
+ if (!strcmpi(command,"Content-Type"))
{
token = strtok( NULL, "\r\n\0" );
lineControlled = 1;
@@ -1172,11 +1188,11 @@
while(token && *token == ' ')
token++;
- if(token)
+ if (token)
response->contentType.assign(token);
}else
/* MIME-Version. */
- if(!strcmpi(command,"MIME-Version"))
+ if (!strcmpi(command,"MIME-Version"))
{
token = strtok( NULL, "\r\n\0" );
lineControlled = 1;
@@ -1184,11 +1200,11 @@
while(token && *token == ' ')
token++;
- if(token)
+ if (token)
response->mimeVer.assign(token);
}else
/* Set-Cookie. */
- if(!strcmpi(command,"Set-Cookie"))
+ if (!strcmpi(command,"Set-Cookie"))
{
token = strtok( NULL, "\r\n\0" );
lineControlled = 1;
@@ -1196,7 +1212,7 @@
while(token && *token == ' ')
token++;
- if(token)
+ if (token)
{
/* Divide multiple cookies. */
response->cookie.append(token );
@@ -1204,7 +1220,7 @@
}
}else
/* Content-Length. */
- if(!strcmpi(command,"Content-Length"))
+ if (!strcmpi(command,"Content-Length"))
{
token = strtok( NULL, "\r\n\0" );
lineControlled = 1;
@@ -1215,42 +1231,42 @@
response->contentLength.assign(token);
}else
/* Connection. */
- if(!strcmpi(command,"Connection"))
+ if (!strcmpi(command,"Connection"))
{
token = strtok( NULL, "\r\n\0" );
lineControlled = 1;
- if(token)
+ if (token)
response->connection.assign(token);
}else
/* Expires. */
- if(!strcmpi(command,"Expires"))
+ if (!strcmpi(command,"Expires"))
{
token = strtok( NULL, "\r\n\0" );
lineControlled = 1;
- if(token)
+ if (token)
response->dateExp.assign(token);
}
/*
*If the line is not controlled arrive with the token
*at the end of the line.
*/
- if( (!lineControlled) && ((!containStatusLine) || (nLineControlled != 1)))
+ if ( (!lineControlled) && ((!containStatusLine) || (nLineControlled !=
1)))
{
token = strtok(NULL, "\r\n");
while(token && *token == ' ')
token++;
- if(token)
+ if (token)
{
HttpResponseHeader::Entry *e;
- if(strlen(command) > HTTP_RESPONSE_OTHER_DIM ||
- strlen(token) > HTTP_RESPONSE_OTHER_DIM)
+ if (strlen (command) > HTTP_RESPONSE_OTHER_DIM ||
+ strlen (token) > HTTP_RESPONSE_OTHER_DIM)
return 0;
e = new HttpResponseHeader::Entry();
- if(e)
+ if (e)
{
e->name->assign(command);
e->value->assign(token);
@@ -1258,7 +1274,7 @@
HttpResponseHeader::Entry *old = 0;
string cmdString(command);
old = response->other.put(cmdString, e);
- if(old)
+ if (old)
delete old;
}
}
@@ -1294,16 +1310,16 @@
nLinechars = 0;
u_long nLines = 0;
- if(req == 0)
+ if (req == 0)
return 400;
for(;i < MYSERVER_KB(8); i++)
{
- if(req[i] == '\n')
+ if (req[i] == '\n')
{
- if(req[i + 2] == '\n')
+ if (req[i + 2] == '\n')
{
- if((i + 3) > size)
+ if ((i + 3) > size)
return 400;
break;
}
@@ -1311,20 +1327,20 @@
*If the lines number is greater than 25 we consider
*the header invalid.
*/
- if(nLines >= 25)
+ if (nLines >= 25)
return 400;
nLinechars = 0;
nLines++;
}
- else if(req[i]=='\0')
+ else if (req[i]=='\0')
return -1;
/*
*If a line contains more than 2048 characters then the header is
considered invalid.
*/
- if(nLinechars >= 2048)
+ if (nLinechars >= 2048)
{
- if(nLines == 0)
+ if (nLines == 0)
return 414;
return 400;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [myserver-commit] [3099] Fixed different bugs and added some optimizations.,
Giuseppe Scrivano <=