myserver-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myserver-commit] [SCM] GNU MyServer branch, master, updated. v0.9.2-484


From: Giuseppe Scrivano
Subject: [myserver-commit] [SCM] GNU MyServer branch, master, updated. v0.9.2-484-g8539d2f
Date: Sun, 24 Apr 2011 23:54:25 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU MyServer".

The branch, master has been updated
       via  8539d2f58209a68e932680002527bef816bdb199 (commit)
      from  473fc006e45e89815967fb0dc073c45f707f6a93 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------


commit 8539d2f58209a68e932680002527bef816bdb199
Author: Giuseppe Scrivano <address@hidden>
Date:   Mon Apr 25 01:20:08 2011 +0200

    HttpHandlers: support filters.

diff --git a/myserver/include/http_handler/cgi/cgi.h 
b/myserver/include/http_handler/cgi/cgi.h
index 8a1f4c5..bf96a74 100644
--- a/myserver/include/http_handler/cgi/cgi.h
+++ b/myserver/include/http_handler/cgi/cgi.h
@@ -37,10 +37,10 @@ public:
                     const char* exec = 0, bool execute = false,
                     bool onlyHeader = false);
 private:
-  int sendData (HttpThreadContext* td, Pipe &stdOutFile, FiltersChain& chain,
-                Process& cgiProc, bool onlyHeader, bool nph);
-  int sendHeader (HttpThreadContext* td, Pipe &stdOutFile, FiltersChain& chain,
-                  Process& cgiProc, bool onlyHeader, bool nph, u_long 
procStartTime,
+  int sendData (HttpThreadContext* td, Pipe &stdOutFile, Process& cgiProc,
+                bool onlyHeader, bool nph);
+  int sendHeader (HttpThreadContext* td, Pipe &stdOutFile, Process& cgiProc,
+                  bool onlyHeader, bool nph, u_long procStartTime,
                   int *ret);
 };
 #endif
diff --git a/myserver/include/http_handler/mscgi/mscgi.h 
b/myserver/include/http_handler/mscgi/mscgi.h
index dc14423..b491742 100644
--- a/myserver/include/http_handler/mscgi/mscgi.h
+++ b/myserver/include/http_handler/mscgi/mscgi.h
@@ -59,7 +59,7 @@ public:
                     bool onlyHeader = false);
 
   int write (const char*, size_t, MsCgiData*);
-  int sendHeader (MsCgiData*);
+  int sendHeader (MsCgiData *);
 
 private:
   static DynamicLibrary mscgiModule;
diff --git a/myserver/src/http_handler/cgi/cgi.cpp 
b/myserver/src/http_handler/cgi/cgi.cpp
index cd7f7f2..0b9d912 100644
--- a/myserver/src/http_handler/cgi/cgi.cpp
+++ b/myserver/src/http_handler/cgi/cgi.cpp
@@ -63,7 +63,6 @@ int Cgi::send (HttpThreadContext* td, const char* scriptpath,
   bool nph = false;
   ostringstream cmdLine;
 
-  FiltersChain &chain = td->outputChain;
   Process cgiProc;
 
   StartProcInfo spi;
@@ -126,8 +125,6 @@ int Cgi::send (HttpThreadContext* td, const char* 
scriptpath,
       tmpScriptPath.assign (scriptpath);
       FilesUtility::splitPath (tmpScriptPath, td->scriptDir, td->scriptFile);
 
-      chain.setStream (td->connection->socket);
-
       if (execute)
         {
           const char *args = 0;
@@ -183,7 +180,6 @@ int Cgi::send (HttpThreadContext* td, const char* 
scriptpath,
                   td->scriptPath.assign ("");
                   td->scriptFile.assign ("");
                   td->scriptDir.assign ("");
-                  chain.clearAllFilters ();
                   return td->http->raiseHTTPError (500);
                 }
 
@@ -264,17 +260,15 @@ int Cgi::send (HttpThreadContext* td, const char* 
scriptpath,
       stdInFile.close ();
       stdOutFile.closeWrite ();
 
-      sendData (td, stdOutFile, chain, cgiProc, onlyHeader, nph);
+      sendData (td, stdOutFile, cgiProc, onlyHeader, nph);
 
       stdOutFile.close ();
       cgiProc.terminateProcess ();
-      chain.clearAllFilters ();
     }
   catch (exception & e)
     {
       stdOutFile.close ();
       stdInFile.close ();
-      chain.clearAllFilters ();
       return HttpDataHandler::RET_FAILURE;
     }
 
@@ -284,8 +278,8 @@ int Cgi::send (HttpThreadContext* td, const char* 
scriptpath,
 /*
   Read data from the CGI process and send it back to the client.
  */
-int Cgi::sendData (HttpThreadContext* td, Pipe &stdOutFile, FiltersChain& 
chain,
-                   Process &cgiProc, bool onlyHeader, bool nph)
+int Cgi::sendData (HttpThreadContext* td, Pipe &stdOutFile, Process &cgiProc,
+                   bool onlyHeader, bool nph)
 {
   size_t nbw = 0;
   size_t nBytesRead = 0;
@@ -296,21 +290,13 @@ int Cgi::sendData (HttpThreadContext* td, Pipe 
&stdOutFile, FiltersChain& chain,
 
   procStartTime = getTicks ();
 
-  if (sendHeader (td, stdOutFile, chain, cgiProc, onlyHeader, nph,
-                  procStartTime, &ret))
+  if (sendHeader (td, stdOutFile, cgiProc, onlyHeader, nph, procStartTime,
+                  &ret))
     return ret;
 
   if (!nph && onlyHeader)
     return HttpDataHandler::RET_OK;
 
-  /* Create the output filters chain.  */
-  if (td->mime)
-    {
-      FiltersFactory *ff = Server::getInstance ()->getFiltersFactory ();
-      ff->chain (&chain, td->mime->filters, td->connection->socket, &nbw, 1);
-      td->sentData += nbw;
-    }
-
   /* Send the rest of the data until we can read from the pipe.  */
   for (;;)
     {
@@ -353,9 +339,8 @@ int Cgi::sendData (HttpThreadContext* td, Pipe &stdOutFile, 
FiltersChain& chain,
   Send the HTTP header.
   \return nonzero if the reply is already complete.
  */
-int Cgi::sendHeader (HttpThreadContext *td, Pipe &stdOutFile,
-                     FiltersChain &chain, Process &cgiProc, bool onlyHeader,
-                     bool nph, u_long procStartTime, int *ret)
+int Cgi::sendHeader (HttpThreadContext *td, Pipe &stdOutFile, Process &cgiProc,
+                     bool onlyHeader, bool nph, u_long procStartTime, int *ret)
 {
   u_long headerSize = 0;
   bool headerCompleted = false;
@@ -450,9 +435,18 @@ int Cgi::sendHeader (HttpThreadContext *td, Pipe 
&stdOutFile,
               return 1;
             }
 
+          MemoryStream memStream (td->auxiliaryBuffer);
+          generateFiltersChain (td, Server::getInstance ()->getFiltersFactory 
(),
+                                td->mime, memStream);
+
           chooseEncoding (td);
-          HttpHeaders::sendHeader (td->response, *chain.getStream (),
+          HttpHeaders::sendHeader (td->response, *td->outputChain.getStream (),
                                    *td->buffer, td);
+
+          if (onlyHeader)
+            return 0;
+
+          td->sentData += HttpDataHandler::beginHTTPResponse (td, memStream);
         }
     }
 
diff --git a/myserver/src/http_handler/fastcgi/fastcgi.cpp 
b/myserver/src/http_handler/fastcgi/fastcgi.cpp
index 3d9ca72..969dded 100644
--- a/myserver/src/http_handler/fastcgi/fastcgi.cpp
+++ b/myserver/src/http_handler/fastcgi/fastcgi.cpp
@@ -93,14 +93,6 @@ int FastCgi::send (HttpThreadContext* td, const char* 
scriptpath,
       FilesUtility::splitPath (tmp, td->cgiRoot, td->cgiFile);
       tmp.assign (scriptpath);
       FilesUtility::splitPath (tmp, td->scriptDir, td->scriptFile);
-      chain.setStream (td->connection->socket);
-
-      if (td->mime)
-        Server::getInstance ()->getFiltersFactory ()->chain (&chain,
-                                                             td->mime->filters,
-                                                             
td->connection->socket,
-                                                             &nbw,
-                                                             1);
 
       td->buffer->setLength (0);
       td->auxiliaryBuffer->getAt (0) = '\0';
@@ -185,7 +177,6 @@ int FastCgi::send (HttpThreadContext* td, const char* 
scriptpath,
           td->connection->host->warningsLogWrite
               (_("FastCGI: cannot connect to the %s process"),
                cmdLine.str ().c_str ());
-          chain.clearAllFilters ();
           return td->http->raiseHTTPError (500);
         }
 
@@ -286,12 +277,10 @@ int FastCgi::send (HttpThreadContext* td, const char* 
scriptpath,
       MemoryStream memStream (td->auxiliaryBuffer);
       td->sentData += completeHTTPResponse (td, memStream);
 
-      chain.clearAllFilters ();
       con.sock.close ();
     }
   catch (exception & e)
     {
-      chain.clearAllFilters ();
       return HttpDataHandler::RET_FAILURE;
     }
 
@@ -631,7 +620,7 @@ int FastCgi::sendData (FcgiContext* con, u_long dim, u_long 
timeout,
   \return 0 on success.
  */
 int FastCgi::handleHeader (FcgiContext* con, FiltersChain* chain, bool* 
responseCompleted,
-         bool onlyHeader)
+                           bool onlyHeader)
 {
   char* buffer = con->td->buffer->getBuffer ();
   u_long size = con->td->buffer->getLength ();
@@ -679,14 +668,21 @@ int FastCgi::handleHeader (FcgiContext* con, 
FiltersChain* chain, bool* response
         }
     }
 
-    {
-      string *location = con->td->response.getValue ("Location", NULL);
-      if (location)
-        {
-          *responseCompleted = true;
-          return con->td->http->sendHTTPRedirect (location->c_str ());
-        }
-    }
+  {
+    string *location = con->td->response.getValue ("Location", NULL);
+    if (location)
+      {
+        *responseCompleted = true;
+        return con->td->http->sendHTTPRedirect (location->c_str ());
+      }
+  }
+
+  char tmpBuf[1024];
+  MemBuf memBuf;
+  MemoryStream memStream (&memBuf);
+  memBuf.setExternalBuffer (tmpBuf, sizeof (tmpBuf));
+  generateFiltersChain (con->td, Server::getInstance ()->getFiltersFactory (),
+                        con->td->mime, memStream);
 
   chooseEncoding (con->td);
   if (HttpHeaders::sendHeader (con->td->response, *con->td->connection->socket,
@@ -696,8 +692,14 @@ int FastCgi::handleHeader (FcgiContext* con, FiltersChain* 
chain, bool* response
       return 1;
     }
 
+
   con->headerSent = true;
 
+  if (onlyHeader)
+    return 0;
+
+  con->td->sentData += HttpDataHandler::beginHTTPResponse (con->td, memStream);
+
   /* Flush the buffer if remaining data is present.  */
   if (size - headerSize)
     {
diff --git a/myserver/src/http_handler/http_dir/http_dir.cpp 
b/myserver/src/http_handler/http_dir/http_dir.cpp
index 83b7186..e155641 100644
--- a/myserver/src/http_handler/http_dir/http_dir.cpp
+++ b/myserver/src/http_handler/http_dir/http_dir.cpp
@@ -384,6 +384,8 @@ int HttpDir::send (HttpThreadContext* td,
       if (onlyHeader)
         return HttpDataHandler::RET_OK;
 
+      td->sentData += HttpDataHandler::beginHTTPResponse (td, memStream);
+
       sortIndex = td->request.uriOpts.find ("sort=");
 
       if (sortIndex != string::npos && sortIndex + 5 < 
td->request.uriOpts.length ())
diff --git a/myserver/src/http_handler/http_file/http_file.cpp 
b/myserver/src/http_handler/http_file/http_file.cpp
index 5acdf15..5370841 100644
--- a/myserver/src/http_handler/http_file/http_file.cpp
+++ b/myserver/src/http_handler/http_file/http_file.cpp
@@ -322,9 +322,7 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
     */
     if (onlyHeader)
       {
-        file->close ();
         delete file;
-        chain.clearAllFilters ();
         return HttpDataHandler::RET_OK;
       }
 
diff --git a/myserver/src/http_handler/isapi/isapi.cpp 
b/myserver/src/http_handler/isapi/isapi.cpp
index 8621bf5..27be49a 100644
--- a/myserver/src/http_handler/isapi/isapi.cpp
+++ b/myserver/src/http_handler/isapi/isapi.cpp
@@ -212,7 +212,7 @@ BOOL WINAPI ISAPI_WriteClientExport (HCONN hConn, LPVOID 
Buffer, LPDWORD lpdwByt
   if (ConnInfo == NULL)
     return HttpDataHandler::RET_FAILURE;
 
-  buffer= (char*)ConnInfo->td->buffer->getBuffer ();
+  buffer= (char *) ConnInfo->td->buffer->getBuffer ();
   HttpRequestHeader::Entry *connection = ConnInfo->td->request.other.get 
("connection");
 
   if (ConnInfo == NULL)
@@ -270,6 +270,14 @@ BOOL WINAPI ISAPI_WriteClientExport (HCONN hConn, LPVOID 
Buffer, LPDWORD lpdwByt
             (ConnInfo->td->buffer->getBuffer (), &ConnInfo->td->response,
              &(ConnInfo->td->nBytesToRead));
 
+          char tmpBuf[1024];
+          MemBuf memBuf;
+          MemoryStream memStream (&memBuf);
+          memBuf.setExternalBuffer (tmpBuf, sizeof (tmpBuf));
+          HttpDataHandler::generateFiltersChain (ConnInfo->td,
+                       Server::getInstance ()->getFiltersFactory (),
+                                ConnInfo->td->mime, memStream);
+
           HttpDataHandler::chooseEncoding (ConnInfo->td);
           if (HttpHeaders::sendHeader (ConnInfo->td->response,
                                        *ConnInfo->td->connection->socket,
@@ -286,6 +294,9 @@ BOOL WINAPI ISAPI_WriteClientExport (HCONN hConn, LPVOID 
Buffer, LPDWORD lpdwByt
               == HttpResponseHeader::SUCCESSFUL)
             return 0;
 
+          ConnInfo->td->sentData +=
+            HttpDataHandler::beginHTTPResponse (ConnInfo->td, memStream);
+
           size_t written = 0;
           if (len)
             written =
@@ -711,18 +722,6 @@ int Isapi::send (HttpThreadContext* td,
           return td->http->raiseHTTPError (500);
         }
 
-      connTable[connIndex].chain.setStream (td->connection->socket);
-      if (td->mime)
-        {
-          size_t nbw;
-          if (td->mime)
-            Server::getInstance ()->getFiltersFactory ()->chain (
-                                             &(connTable[connIndex].chain),
-                                             td->mime->filters,
-                                             td->connection->socket,
-                                             &nbw, 1);
-        }
-
       connTable[connIndex].connection = td->connection;
       connTable[connIndex].td = td;
       connTable[connIndex].onlyHeader = onlyHeader;
@@ -739,7 +738,6 @@ int Isapi::send (HttpThreadContext* td,
         {
           td->connection->host->warningsLogWrite (_("ISAPI: internal error"));
           appHnd.close ();
-          connTable[connIndex].chain.clearAllFilters ();
           return td->http->raiseHTTPError (500);
         }
 
@@ -747,7 +745,6 @@ int Isapi::send (HttpThreadContext* td,
         {
           td->connection->host->warningsLogWrite (_("ISAPI: internal error"));
           appHnd.close ();
-          connTable[connIndex].chain.clearAllFilters ();
           return td->http->raiseHTTPError (500);
         }
 
@@ -756,7 +753,6 @@ int Isapi::send (HttpThreadContext* td,
         {
           td->connection->host->warningsLogWrite (_("ISAPI: version not 
supported"));
           appHnd.close ();
-          connTable[connIndex].chain.clearAllFilters ();
           return td->http->raiseHTTPError (500);
         }
 
@@ -809,7 +805,6 @@ int Isapi::send (HttpThreadContext* td,
         {
           td->connection->host->warningsLogWrite (_("ISAPI: cannot find 
entry-point"));
           appHnd.close ();
-          connTable[connIndex].chain.clearAllFilters ();
           return td->http->raiseHTTPError (500);
         }
 
@@ -843,13 +838,11 @@ int Isapi::send (HttpThreadContext* td,
       ostringstream tmps;
       tmps << connTable[connIndex].dataSent;
       connTable[connIndex].td->response.contentLength.assign (tmps.str ());
-      connTable[connIndex].chain.clearAllFilters ();
       connTable[connIndex].Allocated = 0;
 
     }
   catch (exception & e)
     {
-      connTable[connIndex].chain.clearAllFilters ();
       return HttpDataHandler::RET_FAILURE;
     }
 
diff --git a/myserver/src/http_handler/mscgi/mscgi.cpp 
b/myserver/src/http_handler/mscgi/mscgi.cpp
index cc59ce4..065d30e 100644
--- a/myserver/src/http_handler/mscgi/mscgi.cpp
+++ b/myserver/src/http_handler/mscgi/mscgi.cpp
@@ -73,6 +73,7 @@ int MsCgi::send (HttpThreadContext* td, const char* exec, 
const char* cmdLine,
   data.error = false;
   data.filtersChain = &chain;
   data.headerSent = false;
+  MemoryStream memStream (td->auxiliaryBuffer);
 
   if (!(td->permissions & MYSERVER_PERMISSION_EXECUTE))
     return td->http->sendAuth ();
@@ -94,12 +95,6 @@ int MsCgi::send (HttpThreadContext* td, const char* exec, 
const char* cmdLine,
       Env::buildEnvironmentString (td,data.envString);
       chain.setStream (td->connection->socket);
 
-      if (td->mime)
-        Server::getInstance ()->getFiltersFactory ()->chain (&chain,
-                                                             td->mime->filters,
-                                                             
td->connection->socket,
-                                                             &nbw, 1);
-
       try
         {
           hinstLib.loadLibrary (exec, 0);
@@ -131,14 +126,11 @@ int MsCgi::send (HttpThreadContext* td, const char* exec, 
const char* cmdLine,
           return td->http->raiseHTTPError (data.errorPage);
         }
 
-      MemoryStream memStream (td->auxiliaryBuffer);
       td->sentData += completeHTTPResponse (td, memStream);
 
       if (!data.error)
         return HttpDataHandler::RET_FAILURE;
 
-      chain.clearAllFilters ();
-
     }
   catch (exception & e)
     {
@@ -183,11 +175,21 @@ int MsCgi::sendHeader (MsCgiData *mcd)
   if (mcd->headerSent)
     return 0;
 
+  MemoryStream memStream (td->auxiliaryBuffer);
+  generateFiltersChain (td, Server::getInstance ()->getFiltersFactory (),
+                        td->mime, memStream);
+
   chooseEncoding (mcd->td);
   HttpHeaders::sendHeader (td->response, *td->connection->socket,
-                           *td->auxiliaryBuffer, td);
+                           *td->buffer, td);
 
   mcd->headerSent = true;
+
+  if (mcd->onlyHeader)
+    return 0;
+
+  td->sentData += HttpDataHandler::beginHTTPResponse (td, memStream);
+
   return 0;
 }
 
diff --git a/myserver/src/http_handler/proxy/proxy.cpp 
b/myserver/src/http_handler/proxy/proxy.cpp
index 83cb4d5..ec5c737 100644
--- a/myserver/src/http_handler/proxy/proxy.cpp
+++ b/myserver/src/http_handler/proxy/proxy.cpp
@@ -126,14 +126,6 @@ int Proxy::send (HttpThreadContext *td, const char* 
scriptpath,
       if (td->request.uriOptsPtr)
         td->inputData.fastCopyToSocket (sock, 0, td->auxiliaryBuffer, &nbw);
 
-      chain.setStream (td->connection->socket);
-      if (td->mime)
-        Server::getInstance ()->getFiltersFactory ()->chain (&chain,
-                                                             td->mime->filters,
-                                                             
td->connection->socket,
-                                                             &nbw,
-                                                             1);
-
 
       flushToClient (td, *sock, chain, onlyHeader, &keepalive);
 
@@ -211,6 +203,14 @@ int Proxy::flushToClient (HttpThreadContext* td, Socket& 
client,
       transferEncoding.assign (*tmp);
     }
 
+
+  char tmpBuf[1024];
+  MemBuf memBuf;
+  MemoryStream memStream (&memBuf);
+  memBuf.setExternalBuffer (tmpBuf, sizeof (tmpBuf));
+  generateFiltersChain (td, Server::getInstance ()->getFiltersFactory (),
+                        td->mime, memStream);
+
   /* At this point we can modify the response struct before send it to the
      client.  */
 
@@ -220,6 +220,8 @@ int Proxy::flushToClient (HttpThreadContext* td, Socket& 
client,
   if (onlyHeader)
     return HttpDataHandler::RET_OK;
 
+  td->sentData += HttpDataHandler::beginHTTPResponse (td, memStream);
+
   readPayLoad (td, &td->response, &client,
                td->auxiliaryBuffer->getBuffer () + headerLength,
                read - headerLength, td->http->getTimeout (),
diff --git a/myserver/src/http_handler/scgi/scgi.cpp 
b/myserver/src/http_handler/scgi/scgi.cpp
index e91be52..54f82d5 100644
--- a/myserver/src/http_handler/scgi/scgi.cpp
+++ b/myserver/src/http_handler/scgi/scgi.cpp
@@ -69,18 +69,6 @@ int Scgi::send (HttpThreadContext* td, const char* 
scriptpath,
       tmp.assign (scriptpath);
       FilesUtility::splitPath (tmp, td->scriptDir, td->scriptFile);
 
-      chain.setStream (td->connection->socket);
-      if (td->mime)
-        {
-          size_t nbw;
-          if (td->mime)
-            Server::getInstance ()->getFiltersFactory ()->chain (&chain,
-                                                                 
td->mime->filters,
-                                                                 
td->connection->socket,
-                                                                 &nbw,
-                                                                 1);
-        }
-
       td->buffer->setLength (0);
       td->auxiliaryBuffer->getAt (0) = '\0';
 
@@ -205,12 +193,13 @@ int Scgi::send (HttpThreadContext* td, const char* 
scriptpath,
  */
 int Scgi::sendResponse (ScgiContext* ctx, bool onlyHeader)
 {
+  HttpThreadContext* td = ctx->td;
   clock_t initialTicks = getTicks ();
   u_long read = 0;
   u_long headerSize = 0;
   u_long tmpHeaderSize = 0;
   size_t nbw, nbr;
-  HttpThreadContext* td = ctx->td;
+  MemoryStream memStream (td->auxiliaryBuffer);
 
   for (;;)
     {
@@ -251,13 +240,18 @@ int Scgi::sendResponse (ScgiContext* ctx, bool onlyHeader)
                                                 &td->response,
                                                 &(td->nBytesToRead));
 
+  generateFiltersChain (td, Server::getInstance ()->getFiltersFactory (),
+                        td->mime, memStream);
+
   chooseEncoding (td);
   HttpHeaders::sendHeader (td->response, *td->connection->socket,
-                           *td->auxiliaryBuffer, td);
+                           *td->buffer, td);
 
   if (onlyHeader)
     return HttpDataHandler::RET_OK;
 
+  td->sentData += HttpDataHandler::beginHTTPResponse (td, memStream);
+
   if (read - headerSize)
     td->sentData +=
       appendDataToHTTPChannel (td, td->auxiliaryBuffer->getBuffer () + 
headerSize,
@@ -279,7 +273,6 @@ int Scgi::sendResponse (ScgiContext* ctx, bool onlyHeader)
                                      nbr);
         }
 
-      MemoryStream memStream (td->auxiliaryBuffer);
       td->sentData += completeHTTPResponse (td, memStream);
     }
 
diff --git a/myserver/src/http_handler/wincgi/wincgi.cpp 
b/myserver/src/http_handler/wincgi/wincgi.cpp
index 51e39c4..0686be7 100644
--- a/myserver/src/http_handler/wincgi/wincgi.cpp
+++ b/myserver/src/http_handler/wincgi/wincgi.cpp
@@ -104,7 +104,10 @@ int WinCgi::send (HttpThreadContext* td, const char* 
scriptpath,
       sprintf (&outFilePath[strlen (outFilePath)],"/out_%i.ini",td->id);
       td->inputData.seek (0);
 
-      MemoryStream memStream (td->auxiliaryBuffer);
+      char tmpBuf[1024];
+      MemBuf memBuf;
+      MemoryStream memStream (&memBuf);
+      memBuf.setExternalBuffer (tmpBuf, sizeof (tmpBuf));
       generateFiltersChain (td, Server::getInstance ()->getFiltersFactory (),
                             td->mime, memStream);
 
@@ -215,7 +218,7 @@ int WinCgi::send (HttpThreadContext* td, const char* 
scriptpath,
       DataFileHandle.writeToFile (buffer, (size_t) strlen (buffer), &nbr);
 
       /*
-       *Compute the local offset from the GMT time
+        Compute the local offset from the GMT time
        */
       tm tmpTm;
       ltime = 100;
@@ -231,7 +234,7 @@ int WinCgi::send (HttpThreadContext* td, const char* 
scriptpath,
       DataFileHandle.close ();
 
       /*
-       *Create the out file.
+        Create the out file.
        */
       if (! FilesUtility::nodeExists (outFilePath))
         OutFileHandle.openFile (outFilePath, File::FILE_OPEN_ALWAYS
@@ -289,7 +292,7 @@ int WinCgi::send (HttpThreadContext* td, const char* 
scriptpath,
 
       chooseEncoding (td);
       HttpHeaders::sendHeader (td->response, *chain.getStream (),
-                               *td->buffer, td);
+                               *td->auxiliaryBuffer, td);
 
       if (onlyHeader)
         {
@@ -299,6 +302,8 @@ int WinCgi::send (HttpThreadContext* td, const char* 
scriptpath,
           return HttpDataHandler::RET_OK;
         }
 
+      td->sentData += HttpDataHandler::beginHTTPResponse (td, memStream);
+
       td->sentData +=
         HttpDataHandler::appendDataToHTTPChannel (td, buffer + headerSize,
                                                   nBytesRead - headerSize);
diff --git a/myserver/src/protocol/http/http_data_handler.cpp 
b/myserver/src/protocol/http/http_data_handler.cpp
index 74b359e..ca9e556 100644
--- a/myserver/src/protocol/http/http_data_handler.cpp
+++ b/myserver/src/protocol/http/http_data_handler.cpp
@@ -179,6 +179,7 @@ size_t
 HttpDataHandler::beginHTTPResponse (HttpThreadContext *td,
                                     MemoryStream &memStream)
 {
+  char tmpBuf[BUFSIZ];
   size_t ret = 0;
   /*
     Flush initial data.  This is data that filters could have added
@@ -187,19 +188,20 @@ HttpDataHandler::beginHTTPResponse (HttpThreadContext *td,
   */
   if (memStream.availableToRead ())
     {
-      size_t nbr;
-      memStream.read (td->buffer->getBuffer (),
-                      td->buffer->getRealLength (), &nbr);
-
-      memStream.refresh ();
-      if (nbr)
+      for (;;)
         {
+          size_t nbr;
+          memStream.read (tmpBuf, BUFSIZ, &nbr);
+          if (nbr == 0)
+            break;
+
           FiltersChain directChain (td->outputChain.getStream ());
-          ret += appendDataToHTTPChannel (td, td->buffer->getBuffer (), nbr,
-                                          directChain);
+          ret += appendDataToHTTPChannel (td, tmpBuf, nbr, directChain);
         }
     }
 
+  memStream.refresh ();
+
   return ret;
 }
 
diff --git a/myserver/src/protocol/http/webdav/webdav.cpp 
b/myserver/src/protocol/http/webdav/webdav.cpp
index f39a1d3..d61b281 100644
--- a/myserver/src/protocol/http/webdav/webdav.cpp
+++ b/myserver/src/protocol/http/webdav/webdav.cpp
@@ -286,11 +286,8 @@ int WebDAV::propfind (HttpThreadContext* td)
   try
     {
       size_t nbw, nbw2;
-      FiltersChain &chain = td->outputChain;
-      list<string> filters;
-      FiltersFactory *ff = Server::getInstance ()->getFiltersFactory ();
       vector <const char *> propReq;
-
+      FiltersFactory *ff = Server::getInstance ()->getFiltersFactory ();
       /* Obtain the payload.  */
       XmlParser p;
       if (p.open (td->inputData.getFilename (), 0) < 0)
@@ -299,12 +296,19 @@ int WebDAV::propfind (HttpThreadContext* td)
       /* Obtain xml entities in the payload.  */
       getElements (xmlDocGetRootElement (p.getDoc ()), &propReq);
 
-      ff->chain (&chain, filters, td->connection->socket, &nbw, 1);
+      char tmpBuf[1024];
+      MemBuf memBuf;
+      MemoryStream memStream (&memBuf);
+      memBuf.setExternalBuffer (tmpBuf, sizeof (tmpBuf));
+      HttpDataHandler::generateFiltersChain (td, ff, td->mime, memStream);
 
       td->response.httpStatus = 207;
 
       HttpDataHandler::chooseEncoding (td);
-      HttpHeaders::sendHeader (td->response, *chain.getStream (), *td->buffer, 
td);
+      HttpHeaders::sendHeader (td->response, *td->outputChain.getStream (),
+                               *td->buffer, td);
+
+      td->sentData += HttpDataHandler::beginHTTPResponse (td, memStream);
 
       /* Determine the Depth.  */
       MemBuf tmp;
@@ -338,7 +342,6 @@ int WebDAV::propfind (HttpThreadContext* td)
             break;
         }
 
-      MemoryStream memStream (td->auxiliaryBuffer);
       td->sentData += HttpDataHandler::completeHTTPResponse (td, memStream);
 
       return HttpDataHandler::RET_OK;

-----------------------------------------------------------------------

Summary of changes:
 myserver/include/http_handler/cgi/cgi.h           |    8 ++--
 myserver/include/http_handler/mscgi/mscgi.h       |    2 +-
 myserver/src/http_handler/cgi/cgi.cpp             |   40 ++++++++-----------
 myserver/src/http_handler/fastcgi/fastcgi.cpp     |   42 +++++++++++----------
 myserver/src/http_handler/http_dir/http_dir.cpp   |    2 +
 myserver/src/http_handler/http_file/http_file.cpp |    2 -
 myserver/src/http_handler/isapi/isapi.cpp         |   31 ++++++---------
 myserver/src/http_handler/mscgi/mscgi.cpp         |   22 ++++++-----
 myserver/src/http_handler/proxy/proxy.cpp         |   18 +++++----
 myserver/src/http_handler/scgi/scgi.cpp           |   23 ++++-------
 myserver/src/http_handler/wincgi/wincgi.cpp       |   13 ++++--
 myserver/src/protocol/http/http_data_handler.cpp  |   18 +++++----
 myserver/src/protocol/http/webdav/webdav.cpp      |   17 +++++---
 13 files changed, 117 insertions(+), 121 deletions(-)


hooks/post-receive
-- 
GNU MyServer



reply via email to

[Prev in Thread] Current Thread [Next in Thread]