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-483


From: Giuseppe Scrivano
Subject: [myserver-commit] [SCM] GNU MyServer branch, master, updated. v0.9.2-483-g473fc00
Date: Sun, 24 Apr 2011 20:44:40 +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  473fc006e45e89815967fb0dc073c45f707f6a93 (commit)
       via  382b5a3c85857290ef497c850a5d6d6ed1128ccc (commit)
      from  9fc8ba318396e6b884ef68601722c338ff70b52c (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 473fc006e45e89815967fb0dc073c45f707f6a93
Author: Giuseppe Scrivano <address@hidden>
Date:   Sun Apr 24 22:44:58 2011 +0200

    HttpHandlers: simplify appendDataToHTTPChannel.

diff --git a/myserver/include/base/mem_buff/mem_buff.h 
b/myserver/include/base/mem_buff/mem_buff.h
index d246812..3e504ae 100644
--- a/myserver/include/base/mem_buff/mem_buff.h
+++ b/myserver/include/base/mem_buff/mem_buff.h
@@ -41,7 +41,7 @@ public:
   MemBuf (MemBuf& srcBuf, int bCopy);
   ~MemBuf ();
 
-  void setExternalBuffer (const void* pAdr, size_t size);
+  void setExternalBuffer (void* pAdr, size_t size);
   int setBuffer (const void* pAdr, size_t size);
   void setLength (size_t newSize);
   void setRealLength (size_t newSize);
diff --git a/myserver/include/filter/memory_stream.h 
b/myserver/include/filter/memory_stream.h
index 65d9d8d..f7514e6 100644
--- a/myserver/include/filter/memory_stream.h
+++ b/myserver/include/filter/memory_stream.h
@@ -42,5 +42,4 @@ private:
   int readSeek;
 };
 
-
 #endif
diff --git a/myserver/include/http_handler/proxy/proxy.h 
b/myserver/include/http_handler/proxy/proxy.h
index 0ccb3f6..2a02ffc 100644
--- a/myserver/include/http_handler/proxy/proxy.h
+++ b/myserver/include/http_handler/proxy/proxy.h
@@ -53,7 +53,6 @@ protected:
                      FiltersChain &out, bool onlyHeader, bool *kaClient);
   int readPayLoad (HttpThreadContext* td,
                    HttpResponseHeader* res,
-                   FiltersChain *out,
                    Socket *client,
                    const char *initBuffer,
                    u_long initBufferSize,
diff --git a/myserver/include/http_handler/scgi/scgi.h 
b/myserver/include/http_handler/scgi/scgi.h
index a77a299..76eb81d 100644
--- a/myserver/include/http_handler/scgi/scgi.h
+++ b/myserver/include/http_handler/scgi/scgi.h
@@ -33,7 +33,6 @@
 # include <include/protocol/http/http_data_handler.h>
 # include <include/base/hash_map/hash_map.h>
 # include <include/base/process/process_server_manager.h>
-# include <include/filter/filters_chain.h>
 # include <string>
 
 using namespace std;
@@ -64,7 +63,7 @@ private:
   static int initialized;
   Socket getScgiConnection ();
   int sendPostData (ScgiContext* ctx);
-  int sendResponse (ScgiContext* ctx, bool onlyHeader, FiltersChain*);
+  int sendResponse (ScgiContext* ctx, bool onlyHeader);
   int buildScgiEnvironmentString (HttpThreadContext*, char*, char*);
   int sendNetString (ScgiContext*, const char*, int);
   ScgiServer* isScgiServerRunning (const char*);
diff --git a/myserver/include/protocol/http/http_data_handler.h 
b/myserver/include/protocol/http/http_data_handler.h
index cd3d013..eb06572 100644
--- a/myserver/include/protocol/http/http_data_handler.h
+++ b/myserver/include/protocol/http/http_data_handler.h
@@ -22,9 +22,10 @@
 
 # include "myserver.h"
 # include <include/protocol/protocol.h>
-# include "include/protocol/http/http_headers.h"
+# include <include/protocol/http/http_headers.h>
+# include <include/protocol/http/http_thread_context.h>
 # include <include/filter/filters_chain.h>
-#include <include/filter/filters_factory.h>
+# include <include/filter/filters_factory.h>
 # include <include/filter/memory_stream.h>
 # include <include/conf/mime/mime_manager.h>
 
@@ -45,39 +46,34 @@ public:
   virtual int load ();
   virtual int unLoad ();
 
-  virtual int send (HttpThreadContext*, const char* exec,
-                    const char* cmdLine = 0, bool execute = false,
+  virtual int send (HttpThreadContext *, const char *exec,
+                    const char *cmdLine = 0, bool execute = false,
                     bool onlyHeader = false);
 
   HttpDataHandler ();
   virtual ~HttpDataHandler ();
 
-  static void chooseEncoding (HttpThreadContext* td,
+  static void chooseEncoding (HttpThreadContext *td,
                                bool disableEncoding = false);
 
-  static size_t appendDataToHTTPChannel (HttpThreadContext* td,
+  static size_t appendDataToHTTPChannel (HttpThreadContext *td,
                                          const char *buffer,
-                                         size_t size,
-                                         FiltersChain &chain,
-                                         size_t realBufferSize,
-                                         MemoryStream &tmpStream);
+                                         size_t size);
 
   static size_t appendDataToHTTPChannel (HttpThreadContext* td,
                                          const char *buffer,
                                          size_t size,
                                          FiltersChain &chain);
 
+
   static size_t beginHTTPResponse (HttpThreadContext *td,
-                                   MemoryStream &memStream,
-                                   FiltersChain &chain);
+                                   MemoryStream &memStream);
 
   static size_t completeHTTPResponse (HttpThreadContext *td,
-                                      MemoryStream &memStream,
-                                      FiltersChain &chain);
+                                      MemoryStream &memStream);
 
   static size_t generateFiltersChain (HttpThreadContext *td,
                                       FiltersFactory *factory,
-                                      FiltersChain &fc,
                                       MimeRecord *mime,
                                       MemoryStream &memStream);
 };
diff --git a/myserver/include/protocol/http/http_thread_context.h 
b/myserver/include/protocol/http/http_thread_context.h
index 51e2cc4..7a6800c 100644
--- a/myserver/include/protocol/http/http_thread_context.h
+++ b/myserver/include/protocol/http/http_thread_context.h
@@ -29,6 +29,7 @@
 # include <include/connection/connection.h>
 # include <include/conf/mime/mime_manager.h>
 # include <include/conf/security/security_token.h>
+# include <include/filter/filters_chain.h>
 
 # ifdef WIN32
 #  include <direct.h>
@@ -66,6 +67,8 @@ struct HttpThreadContext
 
   bool keepalive;
 
+  FiltersChain outputChain;
+
   ConnectionPtr connection;
   MemBuf *buffer;
   MemBuf *auxiliaryBuffer;
@@ -93,6 +96,7 @@ struct HttpThreadContext
   SecurityToken securityToken;
   int permissions;
 
+  ~HttpThreadContext ();
   const char* getVhostDir ();
   const char* getVhostSys ();
   const char* getData (const char *name);
diff --git a/myserver/src/base/mem_buff/mem_buff.cpp 
b/myserver/src/base/mem_buff/mem_buff.cpp
index cbf87cc..81f9751 100644
--- a/myserver/src/base/mem_buff/mem_buff.cpp
+++ b/myserver/src/base/mem_buff/mem_buff.cpp
@@ -266,11 +266,11 @@ int MemBuf::setBuffer (const void* pAdr, size_t size)
   buffer.setExternalBuffer (stackBuffer, 10); // here, you'll use
                                               // the memory from stackBuffer.
  */
-void MemBuf::setExternalBuffer (const void* pAdr, size_t size)
+void MemBuf::setExternalBuffer (void* pAdr, size_t size)
 {
   free ();
   bCanDelete = false;
-  buffer = (char*) pAdr;
+  buffer = (char *) pAdr;
   nRealSize = size;
   nSize = 0;
 }
diff --git a/myserver/src/filter/memory_stream.cpp 
b/myserver/src/filter/memory_stream.cpp
index f8fc4c1..cdfd797 100644
--- a/myserver/src/filter/memory_stream.cpp
+++ b/myserver/src/filter/memory_stream.cpp
@@ -29,7 +29,7 @@ using namespace std;
 /*!
   Inherited from Stream.
  */
-int MemoryStream::read (char* buffer, size_t len, size_t *nbr)
+int MemoryStream::read (char *buffer, size_t len, size_t *nbr)
 {
   char *b;
   *nbr = std::min (len, static_cast<size_t>(data->getLength () - readSeek));
@@ -45,10 +45,10 @@ int MemoryStream::read (char* buffer, size_t len, size_t 
*nbr)
 /*!
   Read directly on the stream.
  */
-int MemoryStream::read (Stream* s, size_t len, size_t *nbr)
+int MemoryStream::read (Stream *s, size_t len, size_t *nbr)
 {
   size_t towrite = *nbr = std::min (len, static_cast<size_t>(data->getLength 
() - readSeek));
-  int ret = s->write (data->getBuffer ()+readSeek, towrite, nbr);
+  int ret = s->write (data->getBuffer () + readSeek, towrite, nbr);
   readSeek += towrite;
   return ret;
 }
@@ -56,7 +56,7 @@ int MemoryStream::read (Stream* s, size_t len, size_t *nbr)
 /*!
   Inherited from Stream.
  */
-int MemoryStream::write (const char* buffer, size_t len, size_t *nbw)
+int MemoryStream::write (const char *buffer, size_t len, size_t *nbw)
 {
   data->addBuffer (buffer, len);
   *nbw = len;
@@ -88,7 +88,7 @@ MemoryStream::MemoryStream (MemBuf* out)
  */
 int MemoryStream::availableToRead ()
 {
-  return data->getLength ()-readSeek;
+  return data->getLength () - readSeek;
 }
 
 /*!
diff --git a/myserver/src/http_handler/cgi/cgi.cpp 
b/myserver/src/http_handler/cgi/cgi.cpp
index 7defe45..cd7f7f2 100644
--- a/myserver/src/http_handler/cgi/cgi.cpp
+++ b/myserver/src/http_handler/cgi/cgi.cpp
@@ -63,7 +63,7 @@ int Cgi::send (HttpThreadContext* td, const char* scriptpath,
   bool nph = false;
   ostringstream cmdLine;
 
-  FiltersChain chain;
+  FiltersChain &chain = td->outputChain;
   Process cgiProc;
 
   StartProcInfo spi;
@@ -339,13 +339,12 @@ int Cgi::sendData (HttpThreadContext* td, Pipe 
&stdOutFile, FiltersChain& chain,
 
       if (nBytesRead)
         td->sentData += HttpDataHandler::appendDataToHTTPChannel (td,
-                                                  
td->auxiliaryBuffer->getBuffer (),
-                                                  nBytesRead,
-                                                  chain);
+                                           td->auxiliaryBuffer->getBuffer (),
+                                                          nBytesRead);
     }
 
   MemoryStream memStream (td->auxiliaryBuffer);
-  td->sentData += completeHTTPResponse (td, memStream, chain);
+  td->sentData += completeHTTPResponse (td, memStream);
 
   return HttpDataHandler::RET_OK;
 }
@@ -462,8 +461,7 @@ int Cgi::sendHeader (HttpThreadContext *td, Pipe 
&stdOutFile,
       /* Flush the buffer.  Data from the header parsing can be present.  */
       td->sentData += HttpDataHandler::appendDataToHTTPChannel (td,
                                td->auxiliaryBuffer->getBuffer () + headerSize,
-                                                    headerOffset - headerSize,
-                                                    chain);
+                                                   headerOffset - headerSize);
     }
 
   return 0;
diff --git a/myserver/src/http_handler/fastcgi/fastcgi.cpp 
b/myserver/src/http_handler/fastcgi/fastcgi.cpp
index 47f56fc..3d9ca72 100644
--- a/myserver/src/http_handler/fastcgi/fastcgi.cpp
+++ b/myserver/src/http_handler/fastcgi/fastcgi.cpp
@@ -63,7 +63,7 @@ int FastCgi::send (HttpThreadContext* td, const char* 
scriptpath,
   FcgiContext con;
   size_t nbr = 0;
   FcgiHeader header;
-  FiltersChain chain;
+  FiltersChain &chain = td->outputChain;
   size_t nbw;
 
   int exit;
@@ -284,7 +284,7 @@ int FastCgi::send (HttpThreadContext* td, const char* 
scriptpath,
       while (! exit);
 
       MemoryStream memStream (td->auxiliaryBuffer);
-      td->sentData += completeHTTPResponse (td, memStream, chain);
+      td->sentData += completeHTTPResponse (td, memStream);
 
       chain.clearAllFilters ();
       con.sock.close ();
@@ -618,8 +618,7 @@ int FastCgi::sendData (FcgiContext* con, u_long dim, u_long 
timeout,
   con->td->sentData +=
     HttpDataHandler::appendDataToHTTPChannel (con->td,
                                               con->td->buffer->getBuffer (),
-                                              con->td->buffer->getLength (),
-                                              *chain);
+                                              con->td->buffer->getLength ());
   return 0;
 }
 
@@ -702,10 +701,10 @@ int FastCgi::handleHeader (FcgiContext* con, 
FiltersChain* chain, bool* response
   /* Flush the buffer if remaining data is present.  */
   if (size - headerSize)
     {
-      size_t nbw = HttpDataHandler::appendDataToHTTPChannel (con->td,
-                                                con->td->buffer->getBuffer () 
+ headerSize,
-                                                size - headerSize,
-                                                *chain);
+      size_t nbw =
+        appendDataToHTTPChannel (con->td,
+                                 con->td->buffer->getBuffer () + headerSize,
+                                 size - headerSize);
       con->td->sentData += nbw;
     }
 
diff --git a/myserver/src/http_handler/http_dir/http_dir.cpp 
b/myserver/src/http_handler/http_dir/http_dir.cpp
index 260e94b..83b7186 100644
--- a/myserver/src/http_handler/http_dir/http_dir.cpp
+++ b/myserver/src/http_handler/http_dir/http_dir.cpp
@@ -323,7 +323,7 @@ int HttpDir::send (HttpThreadContext* td,
   string filename;
   int ret;
   ReadDirectory fd;
-  FiltersChain chain;
+  FiltersChain &chain = td->outputChain;
   int lastSlash = 0;
   char* bufferloop;
   const char* cssFile;
@@ -348,15 +348,13 @@ int HttpDir::send (HttpThreadContext* td,
 
 
       host = td->request.other.get ("host");
-      chain.setStream (td->connection->socket);
       if (! (td->permissions & MYSERVER_PERMISSION_BROWSE))
         return td->http->sendAuth ();
 
-      if (td->mime)
-        Server::getInstance ()->getFiltersFactory ()->chain (&chain,
-                                                             td->mime->filters,
-                                                             
td->connection->socket,
-                                                             &nbw, 1);
+
+      MemoryStream memStream (td->auxiliaryBuffer);
+      generateFiltersChain (td, Server::getInstance ()->getFiltersFactory (),
+                            td->mime, memStream);
 
       lastSlash = td->request.uri.rfind ('/') + 1;
 
@@ -375,7 +373,6 @@ int HttpDir::send (HttpThreadContext* td,
                                                         "is not valid"), 
ignPattern);
 
               fd.findclose ();
-              chain.clearAllFilters ();
               return td->http->raiseHTTPError (500);
             }
         }
@@ -434,8 +431,7 @@ int HttpDir::send (HttpThreadContext* td,
       *td->auxiliaryBuffer << "</head>\r\n";
 
       td->sentData += appendDataToHTTPChannel (td, 
td->auxiliaryBuffer->getBuffer (),
-                                           td->auxiliaryBuffer->getLength (),
-                                           chain);
+                                               td->auxiliaryBuffer->getLength 
());
 
       filename = directory;
       td->auxiliaryBuffer->setLength (0);
@@ -449,8 +445,7 @@ int HttpDir::send (HttpThreadContext* td,
       *td->auxiliaryBuffer << "</h1>\r\n<hr />\r\n";
 
       td->sentData += appendDataToHTTPChannel (td, 
td->auxiliaryBuffer->getBuffer (),
-                                           td->auxiliaryBuffer->getLength (),
-                                           chain);
+                                           td->auxiliaryBuffer->getLength ());
 
       fd.findfirst (filename.c_str ());
 
@@ -464,8 +459,7 @@ int HttpDir::send (HttpThreadContext* td,
       generateHeader (*td->auxiliaryBuffer, sortType, sortReverse, 
formatString);
 
       td->sentData += appendDataToHTTPChannel (td, 
td->auxiliaryBuffer->getBuffer (),
-                                               td->auxiliaryBuffer->getLength 
(),
-                                               chain);
+                                               td->auxiliaryBuffer->getLength 
());
       td->auxiliaryBuffer->setLength (0);
 
       if (FilesUtility::getPathRecursionLevel (td->request.uri) >= 1)
@@ -500,8 +494,7 @@ int HttpDir::send (HttpThreadContext* td,
           *td->auxiliaryBuffer << "</tr>\r\n";
 
           td->sentData += appendDataToHTTPChannel (td, 
td->auxiliaryBuffer->getBuffer (),
-                                                   
td->auxiliaryBuffer->getLength (),
-                                                   chain);
+                                                   
td->auxiliaryBuffer->getLength ());
         }
 
       /* Put all files in a vector.  */
@@ -561,8 +554,7 @@ int HttpDir::send (HttpThreadContext* td,
           td->auxiliaryBuffer->setLength (0);
           generateElement (*td->auxiliaryBuffer, file, linkPrefix, 
formatString);
           td->sentData += appendDataToHTTPChannel (td, 
td->auxiliaryBuffer->getBuffer (),
-                                                   
td->auxiliaryBuffer->getLength (),
-                                                   chain);
+                                                   
td->auxiliaryBuffer->getLength ());
         }
 
       td->auxiliaryBuffer->setLength (0);
@@ -585,8 +577,7 @@ int HttpDir::send (HttpThreadContext* td,
         }
       *td->auxiliaryBuffer << "</address>\r\n</body>\r\n</html>\r\n";
       td->sentData += appendDataToHTTPChannel (td, 
td->auxiliaryBuffer->getBuffer (),
-                                               td->auxiliaryBuffer->getLength 
(),
-                                               chain);
+                                               td->auxiliaryBuffer->getLength 
());
 
       *td->auxiliaryBuffer << end_str;
       /* Changes the \ character in the / character.  */
@@ -595,16 +586,13 @@ int HttpDir::send (HttpThreadContext* td,
         if (*bufferloop == '\\')
           *bufferloop = '/';
 
-      MemoryStream memStream (td->auxiliaryBuffer);
-      td->sentData += completeHTTPResponse (td, memStream, chain);
+      td->sentData += completeHTTPResponse (td, memStream);
     }
   catch (exception & e)
     {
-      chain.clearAllFilters ();
       return HttpDataHandler::RET_FAILURE;
     }
 
-  chain.clearAllFilters ();
   return HttpDataHandler::RET_OK;
 }
 
diff --git a/myserver/src/http_handler/http_file/http_file.cpp 
b/myserver/src/http_handler/http_file/http_file.cpp
index 3bc037e..5acdf15 100644
--- a/myserver/src/http_handler/http_file/http_file.cpp
+++ b/myserver/src/http_handler/http_file/http_file.cpp
@@ -203,7 +203,7 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
   off_t lastByte = td->request.rangeByteEnd;
   bool fastCopyAllowed;
   MemoryStream memStream (td->auxiliaryBuffer);
-  FiltersChain chain;
+  FiltersChain &chain = td->outputChain;
   size_t nbr;
   time_t lastMT;
   string tmpTime;
@@ -300,7 +300,7 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
       }
 
     generateFiltersChain (td, Server::getInstance ()->getFiltersFactory (),
-                          chain, td->mime, memStream);
+                          td->mime, memStream);
 
     fastCopyAllowed = chain.isEmpty ()
       && !(td->http->getProtocolOptions () & Protocol::SSL);
@@ -350,7 +350,7 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
 
     file->seek (firstByte);
 
-    td->sentData += HttpDataHandler::beginHTTPResponse (td, memStream, chain);
+    td->sentData += HttpDataHandler::beginHTTPResponse (td, memStream);
 
     /* Flush the rest of the file.  */
     for (;;)
@@ -374,12 +374,10 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
         bytesToSend -= nbr;
 
         td->sentData += appendDataToHTTPChannel (td, td->buffer->getBuffer (),
-                                                 nbr, chain,
-                                                 td->buffer->getRealLength (),
-                                                 memStream);
+                                                 nbr);
       }/* End for loop.  */
 
-    td->sentData += completeHTTPResponse (td, memStream, chain);
+    td->sentData += completeHTTPResponse (td, memStream);
 
     file->close ();
     delete file;
diff --git a/myserver/src/http_handler/isapi/isapi.cpp 
b/myserver/src/http_handler/isapi/isapi.cpp
index 3ae9523..8621bf5 100644
--- a/myserver/src/http_handler/isapi/isapi.cpp
+++ b/myserver/src/http_handler/isapi/isapi.cpp
@@ -291,8 +291,7 @@ BOOL WINAPI ISAPI_WriteClientExport (HCONN hConn, LPVOID 
Buffer, LPDWORD lpdwByt
             written =
               HttpDataHandler::appendDataToHTTPChannel (ConnInfo->td,
                                                         buffer + headerSize,
-                                                        len,
-                                                        ConnInfo->chain);
+                                                        len);
           ConnInfo->td->sentData += written;
 
           *lpdwBytes = written;
@@ -303,8 +302,7 @@ BOOL WINAPI ISAPI_WriteClientExport (HCONN hConn, LPVOID 
Buffer, LPDWORD lpdwByt
       size_t written =
         HttpDataHandler::appendDataToHTTPChannel (ConnInfo->td,
                                                   (const char *) Buffer,
-                                                  *lpdwBytes,
-                                                  ConnInfo->chain);
+                                                  *lpdwBytes);
       ConnInfo->td->sentData += written;
       *lpdwBytes = written;
     }
@@ -824,8 +822,7 @@ int Isapi::send (HttpThreadContext* td,
         = connTable[connIndex].td->request.other.get ("connection");
 
       MemoryStream memStream (td->auxiliaryBuffer);
-      td->sentData += completeHTTPResponse (td, memStream,
-                                            connTable[connIndex].chain);
+      td->sentData += completeHTTPResponse (td, memStream);
 
       switch (ret)
         {
diff --git a/myserver/src/http_handler/mscgi/mscgi.cpp 
b/myserver/src/http_handler/mscgi/mscgi.cpp
index 0732223..cc59ce4 100644
--- a/myserver/src/http_handler/mscgi/mscgi.cpp
+++ b/myserver/src/http_handler/mscgi/mscgi.cpp
@@ -53,7 +53,7 @@ int MsCgi::send (HttpThreadContext* td, const char* exec, 
const char* cmdLine,
    */
   ostringstream tmpStream;
   string outDataPath;
-  FiltersChain chain;
+  FiltersChain &chain = td->outputChain;
   size_t nbw;
   DynamicLibrary hinstLib;
   CGIMAIN ProcMain = 0;
@@ -132,7 +132,7 @@ int MsCgi::send (HttpThreadContext* td, const char* exec, 
const char* cmdLine,
         }
 
       MemoryStream memStream (td->auxiliaryBuffer);
-      td->sentData += completeHTTPResponse (td, memStream, chain);
+      td->sentData += completeHTTPResponse (td, memStream);
 
       if (!data.error)
         return HttpDataHandler::RET_FAILURE;
@@ -152,7 +152,7 @@ int MsCgi::send (HttpThreadContext* td, const char* exec, 
const char* cmdLine,
 /*!
   Send a chunk of data to the client.
  */
-int MsCgi::write (const char* data, size_t len, MsCgiData* mcd)
+int MsCgi::write (const char *data, size_t len, MsCgiData *mcd)
 {
   if (mcd->error)
     return 1;
@@ -173,7 +173,7 @@ int MsCgi::write (const char* data, size_t len, MsCgiData* 
mcd)
 /*!
   Send the HTTP header.
  */
-int MsCgi::sendHeader (MsCgiData* mcd)
+int MsCgi::sendHeader (MsCgiData *mcd)
 {
   HttpThreadContext* td = mcd->td;
 
diff --git a/myserver/src/http_handler/proxy/proxy.cpp 
b/myserver/src/http_handler/proxy/proxy.cpp
index c2ae6dc..83cb4d5 100644
--- a/myserver/src/http_handler/proxy/proxy.cpp
+++ b/myserver/src/http_handler/proxy/proxy.cpp
@@ -49,7 +49,7 @@ int Proxy::send (HttpThreadContext *td, const char* 
scriptpath,
   Url destUrl (exec, 80);
   ConnectionPtr con = NULL;
   Socket *sock;
-  FiltersChain chain;
+  FiltersChain &chain = td->outputChain;
   HttpRequestHeader req;
   size_t nbw;
   bool keepalive = false;
@@ -220,7 +220,7 @@ int Proxy::flushToClient (HttpThreadContext* td, Socket& 
client,
   if (onlyHeader)
     return HttpDataHandler::RET_OK;
 
-  readPayLoad (td, &td->response, &out, &client,
+  readPayLoad (td, &td->response, &client,
                td->auxiliaryBuffer->getBuffer () + headerLength,
                read - headerLength, td->http->getTimeout (),
                hasTransferEncoding ? &transferEncoding : NULL);
@@ -234,7 +234,6 @@ int Proxy::flushToClient (HttpThreadContext* td, Socket& 
client,
 
   \param td The current HTTP thread context.
   \param res Response obtained by the server.
-  \param out The client chain.
   \param initBuffer Initial read data.
   \param initBufferSize Size of initial data.
   \param timeout Connection timeout.
@@ -247,7 +246,6 @@ int Proxy::flushToClient (HttpThreadContext* td, Socket& 
client,
  */
 int Proxy::readPayLoad (HttpThreadContext* td,
                         HttpResponseHeader* res,
-                        FiltersChain *out,
                         Socket *client,
                         const char *initBuffer,
                         u_long initBufferSize,
@@ -291,7 +289,7 @@ int Proxy::readPayLoad (HttpThreadContext* td,
 
               td->sentData += HttpDataHandler::appendDataToHTTPChannel (td,
                                                        td->buffer->getBuffer 
(),
-                                                       nbr, *out);
+                                                       nbr);
             }
         }
     }
@@ -320,15 +318,16 @@ int Proxy::readPayLoad (HttpThreadContext* td,
           if (length)
             length -= nbr;
 
-          td->sentData += HttpDataHandler::appendDataToHTTPChannel (td, 
td->buffer->getBuffer (),
-                                                    nbr, *out);
+          td->sentData +=
+            HttpDataHandler::appendDataToHTTPChannel (td,
+                                             td->buffer->getBuffer (), nbr);
           if (timedOut || contentLength && length == 0)
             break;
         }
     }
 
   MemoryStream memStream (td->auxiliaryBuffer);
-  td->sentData += completeHTTPResponse (td, memStream, *out);
+  td->sentData += completeHTTPResponse (td, memStream);
 
   return HttpDataHandler::RET_OK;
 }
diff --git a/myserver/src/http_handler/scgi/scgi.cpp 
b/myserver/src/http_handler/scgi/scgi.cpp
index e6583aa..e91be52 100644
--- a/myserver/src/http_handler/scgi/scgi.cpp
+++ b/myserver/src/http_handler/scgi/scgi.cpp
@@ -45,7 +45,7 @@ int Scgi::send (HttpThreadContext* td, const char* scriptpath,
                const char *cgipath, bool execute, bool onlyHeader)
 {
   ScgiContext con;
-  FiltersChain chain;
+  FiltersChain &chain = td->outputChain;
 
   string outDataPath;
 
@@ -166,7 +166,6 @@ int Scgi::send (HttpThreadContext* td, const char* 
scriptpath,
       if (sizeEnvString == -1)
         {
           td->connection->host->warningsLogWrite (_("SCGI: internal error"));
-          chain.clearAllFilters ();
           return td->http->raiseHTTPError (500);
         }
 
@@ -179,7 +178,6 @@ int Scgi::send (HttpThreadContext* td, const char* 
scriptpath,
           td->connection->host->warningsLogWrite
             (_E ("SCGI: error connecting to the process %s"),
              cmdLine.str ().c_str (), &e);
-          chain.clearAllFilters ();
           return td->http->raiseHTTPError (500);
         }
 
@@ -188,15 +186,13 @@ int Scgi::send (HttpThreadContext* td, const char* 
scriptpath,
           && !td->request.contentLength.compare ("0"))
         sendPostData (&con);
 
-      sendResponse (&con, onlyHeader, &chain);
+      sendResponse (&con, onlyHeader);
 
-      chain.clearAllFilters ();
       con.tempOut.close ();
       con.sock.close ();
     }
   catch (exception & e)
     {
-      chain.clearAllFilters ();
       return HttpDataHandler::RET_FAILURE;
     }
 
@@ -207,7 +203,7 @@ int Scgi::send (HttpThreadContext* td, const char* 
scriptpath,
 /*!
   Send the response to the client.
  */
-int Scgi::sendResponse (ScgiContext* ctx, bool onlyHeader, FiltersChain* chain)
+int Scgi::sendResponse (ScgiContext* ctx, bool onlyHeader)
 {
   clock_t initialTicks = getTicks ();
   u_long read = 0;
@@ -265,7 +261,7 @@ int Scgi::sendResponse (ScgiContext* ctx, bool onlyHeader, 
FiltersChain* chain)
   if (read - headerSize)
     td->sentData +=
       appendDataToHTTPChannel (td, td->auxiliaryBuffer->getBuffer () + 
headerSize,
-                               read - headerSize, *chain);
+                               read - headerSize);
 
   if (td->response.getStatusType () == HttpResponseHeader::SUCCESSFUL)
     {
@@ -280,11 +276,11 @@ int Scgi::sendResponse (ScgiContext* ctx, bool 
onlyHeader, FiltersChain* chain)
 
           td->sentData +=
             appendDataToHTTPChannel (td, td->auxiliaryBuffer->getBuffer (),
-                                     nbr, *chain);
+                                     nbr);
         }
 
       MemoryStream memStream (td->auxiliaryBuffer);
-      td->sentData += completeHTTPResponse (td, memStream, *chain);
+      td->sentData += completeHTTPResponse (td, memStream);
     }
 
   return HttpDataHandler::RET_OK;
diff --git a/myserver/src/http_handler/wincgi/wincgi.cpp 
b/myserver/src/http_handler/wincgi/wincgi.cpp
index c1e7473..51e39c4 100644
--- a/myserver/src/http_handler/wincgi/wincgi.cpp
+++ b/myserver/src/http_handler/wincgi/wincgi.cpp
@@ -65,7 +65,7 @@ int WinCgi::send (HttpThreadContext* td, const char* 
scriptpath,
                   const char *cgipath, bool /*execute*/, bool onlyHeader)
 {
 #ifdef WIN32
-  FiltersChain chain;
+  FiltersChain &chain = td->outputChain;
   Process proc;
   size_t nbr;
   char  dataFilePath[MAX_PATH];
@@ -103,15 +103,10 @@ int WinCgi::send (HttpThreadContext* td, const char* 
scriptpath,
       GetShortPathName (outFilePath, dataFilePath, MAX_PATH);
       sprintf (&outFilePath[strlen (outFilePath)],"/out_%i.ini",td->id);
       td->inputData.seek (0);
-      chain.setStream (td->connection->socket);
-      if (td->mime)
-        {
-          Server::getInstance ()->getFiltersFactory ()->chain (&chain,
-                                                          td->mime->filters,
-                                                        td->connection->socket,
-                                                               &nbw, 1);
-          td->sentData += nbw;
-        }
+
+      MemoryStream memStream (td->auxiliaryBuffer);
+      generateFiltersChain (td, Server::getInstance ()->getFiltersFactory (),
+                            td->mime, memStream);
 
       /* The WinCGI protocol uses a .ini file to send data to the new process. 
 */
       DataFileHandle.openFile (dataFilePath, File::FILE_OPEN_ALWAYS
@@ -257,7 +252,6 @@ int WinCgi::send (HttpThreadContext* td, const char* 
scriptpath,
         {
           FilesUtility::deleteFile (outFilePath);
           FilesUtility::deleteFile (dataFilePath);
-          chain.clearAllFilters ();
           return HttpDataHandler::RET_FAILURE;
         }
 
@@ -272,7 +266,6 @@ int WinCgi::send (HttpThreadContext* td, const char* 
scriptpath,
           OutFileHandle.close ();
           FilesUtility::deleteFile (outFilePath);
           FilesUtility::deleteFile (dataFilePath);
-          chain.clearAllFilters ();
           return td->http->raiseHTTPError (500);
         }
 
@@ -291,7 +284,8 @@ int WinCgi::send (HttpThreadContext* td, const char* 
scriptpath,
             }
         }
 
-      HttpHeaders::buildHTTPResponseHeaderStruct (buffer, &td->response, 
&(td->nBytesToRead));
+      HttpHeaders::buildHTTPResponseHeaderStruct (buffer, &td->response,
+                                                  &(td->nBytesToRead));
 
       chooseEncoding (td);
       HttpHeaders::sendHeader (td->response, *chain.getStream (),
@@ -302,14 +296,12 @@ int WinCgi::send (HttpThreadContext* td, const char* 
scriptpath,
           OutFileHandle.close ();
           FilesUtility::deleteFile (outFilePath);
           FilesUtility::deleteFile (dataFilePath);
-          chain.clearAllFilters ();
           return HttpDataHandler::RET_OK;
         }
 
-      td->sentData += HttpDataHandler::appendDataToHTTPChannel (td,
-                                                                buffer + 
headerSize,
-                                                                nBytesRead - 
headerSize,
-                                                                chain);
+      td->sentData +=
+        HttpDataHandler::appendDataToHTTPChannel (td, buffer + headerSize,
+                                                  nBytesRead - headerSize);
 
 
       if (td->response.getStatusType () == HttpResponseHeader::SUCCESSFUL)
@@ -324,24 +316,21 @@ int WinCgi::send (HttpThreadContext* td, const char* 
scriptpath,
 
               td->sentData +=
                 HttpDataHandler::appendDataToHTTPChannel (td, buffer,
-                                                          nBytesRead, chain);
+                                                          nBytesRead);
 
               td->sentData += nbw;
             }
           while (nBytesRead);
         }
 
-      MemoryStream memStream (td->auxiliaryBuffer);
-      td->sentData += completeHTTPResponse (td, memStream, chain);
+      td->sentData += completeHTTPResponse (td, memStream);
 
-      chain.clearAllFilters ();
       OutFileHandle.close ();
       FilesUtility::deleteFile (outFilePath);
       FilesUtility::deleteFile (dataFilePath);
     }
   catch (exception & e)
     {
-      chain.clearAllFilters ();
       return HttpDataHandler::RET_FAILURE;
     }
   return HttpDataHandler::RET_OK;
diff --git a/myserver/src/protocol/http/http_data_handler.cpp 
b/myserver/src/protocol/http/http_data_handler.cpp
index af656e5..74b359e 100644
--- a/myserver/src/protocol/http/http_data_handler.cpp
+++ b/myserver/src/protocol/http/http_data_handler.cpp
@@ -67,25 +67,13 @@ int HttpDataHandler::unLoad ()
   \param td The HTTP thread context.
   \param buffer Data to send.
   \param size Size of the buffer.
-  \param chain Where send data if not append.
-  \param realBufferSize The real dimension of the buffer that can be
-  used by this method.
-  \param tmpStream A support on memory read/write stream used
-  internally by the function.
  */
 size_t HttpDataHandler::appendDataToHTTPChannel (HttpThreadContext *td,
                                                  const char *buffer,
-                                                 size_t size,
-                                                 FiltersChain &chain,
-                                                 size_t realBufferSize,
-                                                 MemoryStream &tmpStream)
+                                                 size_t size)
 {
-  char tmpBuf[BUFSIZ];
-  size_t nbr, nbw, written = 0, totalNbw = 0;
-  Stream *oldStream = chain.getStream ();
-
-  if (! chain.hasModifiersFilters () || size == 0)
-    return appendDataToHTTPChannel (td, buffer, size, chain);
+  if (! td->outputChain.hasModifiersFilters () || size == 0)
+    return appendDataToHTTPChannel (td, buffer, size, td->outputChain);
 
   /*
     This function can't append directly to the chain because we can't
@@ -94,29 +82,36 @@ size_t HttpDataHandler::appendDataToHTTPChannel 
(HttpThreadContext *td,
     chunk content, finally we read from it and send directly to the
     original stream.
    */
+  Stream *oldStream = td->outputChain.getStream ();
+  size_t totalNbw = 0;
   try
     {
+      char tmpBuf[BUFSIZ];
+      size_t nbw;
+      MemBuf memBuf;
+      MemoryStream tmpStream (&memBuf);
       FiltersChain directStream (oldStream);
-      do
+      size_t consumed = 0;
+
+      memBuf.setExternalBuffer (tmpBuf, BUFSIZ);
+      while (consumed < size)
         {
-          if (size - written)
-            {
-              chain.setStream (&tmpStream);
-              chain.write (buffer + written, size - written, &nbw);
-              chain.setStream (oldStream);
-              written += size;
-            }
-
-          tmpStream.read (tmpBuf, BUFSIZ, &nbr);
-          if (nbr)
-            totalNbw += appendDataToHTTPChannel (td, tmpBuf, nbr, 
directStream);
+          size_t available;
+          size_t written = std::min ((size_t) BUFSIZ / 2, size - consumed);
+          td->outputChain.setStream (&tmpStream);
+          td->outputChain.write (buffer + consumed, written, &available);
+          td->outputChain.setStream (oldStream);
+
+          totalNbw += appendDataToHTTPChannel (td, tmpBuf,
+                                               available,
+                                               directStream);
+          tmpStream.refresh ();
+          consumed += written;
         }
-      while (size - written || nbr);
-      tmpStream.refresh ();
     }
   catch (...)
     {
-      chain.setStream (oldStream);
+      td->outputChain.setStream (oldStream);
       throw;
     }
 
@@ -163,7 +158,7 @@ HttpDataHandler::appendDataToHTTPChannel (HttpThreadContext 
*td,
   If it is specified, then the Content-Length must be specified.
  */
 void
-HttpDataHandler::chooseEncoding (HttpThreadContext* td, bool disableEncoding)
+HttpDataHandler::chooseEncoding (HttpThreadContext *td, bool disableEncoding)
 {
   td->keepalive = td->request.isKeepAlive ();
   td->useChunks = false;
@@ -182,8 +177,7 @@ HttpDataHandler::chooseEncoding (HttpThreadContext* td, 
bool disableEncoding)
 */
 size_t
 HttpDataHandler::beginHTTPResponse (HttpThreadContext *td,
-                                    MemoryStream &memStream,
-                                    FiltersChain &chain)
+                                    MemoryStream &memStream)
 {
   size_t ret = 0;
   /*
@@ -200,7 +194,7 @@ HttpDataHandler::beginHTTPResponse (HttpThreadContext *td,
       memStream.refresh ();
       if (nbr)
         {
-          FiltersChain directChain (chain.getStream ());
+          FiltersChain directChain (td->outputChain.getStream ());
           ret += appendDataToHTTPChannel (td, td->buffer->getBuffer (), nbr,
                                           directChain);
         }
@@ -214,13 +208,12 @@ HttpDataHandler::beginHTTPResponse (HttpThreadContext *td,
  */
 size_t
 HttpDataHandler::completeHTTPResponse (HttpThreadContext *td,
-                                       MemoryStream &memStream,
-                                       FiltersChain &chain)
+                                       MemoryStream &memStream)
 {
   size_t ret = 0;
   /* If we don't use chunks we can flush directly.  */
   if (! td->useChunks)
-    chain.flush (&ret);
+    td->outputChain.flush (&ret);
   else
     {
       /*
@@ -230,18 +223,19 @@ HttpDataHandler::completeHTTPResponse (HttpThreadContext 
*td,
         write there the HTTP data chunk.
       */
       size_t nbr, nbw;
-      Stream* tmpStream = chain.getStream ();
+      Stream* tmpStream = td->outputChain.getStream ();
       FiltersChain directChain (tmpStream);
       memStream.refresh ();
-      chain.setStream (&memStream);
-      chain.flush (&nbw);
-      chain.setStream (tmpStream);
+      td->outputChain.setStream (&memStream);
+      td->outputChain.flush (&nbw);
+      td->outputChain.setStream (tmpStream);
+
       memStream.read (td->buffer->getBuffer (),
                       td->buffer->getRealLength (), &nbr);
 
       ret += appendDataToHTTPChannel (td, td->buffer->getBuffer (),
                                       nbr, directChain);
-      chain.getStream ()->write ("0\r\n\r\n", 5, &nbw);
+      td->outputChain.getStream ()->write ("0\r\n\r\n", 5, &nbw);
     }
 
   return ret;
@@ -254,7 +248,6 @@ HttpDataHandler::completeHTTPResponse (HttpThreadContext 
*td,
 size_t
 HttpDataHandler::generateFiltersChain (HttpThreadContext *td,
                                        FiltersFactory *factory,
-                                       FiltersChain &fc,
                                        MimeRecord *mime,
                                        MemoryStream &memStream)
 {
@@ -263,16 +256,16 @@ HttpDataHandler::generateFiltersChain (HttpThreadContext 
*td,
   memStream.refresh ();
 
   if (mime)
-    factory->chain (&fc, mime->filters, &memStream, &nbw, 0, false,
-                    e ? e->value : "");
+    factory->chain (&td->outputChain, mime->filters, &memStream, &nbw, 0,
+                    false, e ? e->value : "");
 
-  if (fc.hasModifiersFilters ())
+  if (td->outputChain.hasModifiersFilters ())
     {
       string filters;
-      fc.getName (filters);
+      td->outputChain.getName (filters);
       td->response.setValue ("content-encoding", filters.c_str ());
     }
 
-  fc.setStream (td->connection->socket);
+  td->outputChain.setStream (td->connection->socket);
   return nbw;
 }
diff --git a/myserver/src/protocol/http/http_thread_context.cpp 
b/myserver/src/protocol/http/http_thread_context.cpp
index dd62990..472f3c4 100644
--- a/myserver/src/protocol/http/http_thread_context.cpp
+++ b/myserver/src/protocol/http/http_thread_context.cpp
@@ -66,3 +66,8 @@ const char *HttpThreadContext::getVhostSys ()
 
   return "";
 }
+
+HttpThreadContext::~HttpThreadContext ()
+{
+  outputChain.clearAllFilters ();
+}
diff --git a/myserver/src/protocol/http/webdav/webdav.cpp 
b/myserver/src/protocol/http/webdav/webdav.cpp
index 5dbd433..f39a1d3 100644
--- a/myserver/src/protocol/http/webdav/webdav.cpp
+++ b/myserver/src/protocol/http/webdav/webdav.cpp
@@ -286,7 +286,7 @@ int WebDAV::propfind (HttpThreadContext* td)
   try
     {
       size_t nbw, nbw2;
-      FiltersChain chain;
+      FiltersChain &chain = td->outputChain;
       list<string> filters;
       FiltersFactory *ff = Server::getInstance ()->getFiltersFactory ();
       vector <const char *> propReq;
@@ -333,14 +333,13 @@ int WebDAV::propfind (HttpThreadContext* td)
 
           td->sentData +=
             HttpDataHandler::appendDataToHTTPChannel (td, 
td->buffer->getBuffer (),
-                                                      nbr, chain);
+                                                      nbr);
           if (nbr != td->buffer->getRealLength ())
             break;
         }
 
       MemoryStream memStream (td->auxiliaryBuffer);
-      td->sentData += HttpDataHandler::completeHTTPResponse (td, memStream,
-                                                             chain);
+      td->sentData += HttpDataHandler::completeHTTPResponse (td, memStream);
 
       return HttpDataHandler::RET_OK;
     }
@@ -577,7 +576,7 @@ int WebDAV::lock (HttpThreadContext* td)
       Sha1 sha1;
       vector <const char*> propReq;
       size_t nbw, nbw2;
-      FiltersChain chain;
+      FiltersChain &chain = td->outputChain;
       list<string> filters;
       FiltersFactory *ff = Server::getInstance ()->getFiltersFactory ();
 
@@ -641,11 +640,11 @@ int WebDAV::lock (HttpThreadContext* td)
 
           td->sentData +=
             HttpDataHandler::appendDataToHTTPChannel (td, 
td->buffer->getBuffer (),
-                                                      nbr, chain);
+                                                      nbr);
         }
 
       MemoryStream memStream (td->auxiliaryBuffer);
-      td->sentData += HttpDataHandler::completeHTTPResponse (td, memStream, 
chain);
+      td->sentData += HttpDataHandler::completeHTTPResponse (td, memStream);
 
       return HttpDataHandler::RET_OK;
     }



commit 382b5a3c85857290ef497c850a5d6d6ed1128ccc
Author: Giuseppe Scrivano <address@hidden>
Date:   Sun Apr 24 14:46:28 2011 +0200

    HttpFile: cleanup.

diff --git a/myserver/src/http_handler/http_file/http_file.cpp 
b/myserver/src/http_handler/http_file/http_file.cpp
index 8f39261..3bc037e 100644
--- a/myserver/src/http_handler/http_file/http_file.cpp
+++ b/myserver/src/http_handler/http_file/http_file.cpp
@@ -267,18 +267,7 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
     if (etagHeader && !etagHeader->value.compare (etag))
       return td->http->sendHTTPNonModified ();
     else
-      {
-        HttpResponseHeader::Entry *e = td->response.other.get ("etag");
-        if (e)
-          e->value.assign (etag);
-        else
-          {
-            e = new HttpResponseHeader::Entry ();
-            e->name.assign ("etag");
-            e->value.assign (etag);
-            td->response.other.put (e->name, e);
-          }
-      }
+      td->response.setValue ("etag", etag.c_str ());
 
     if (lastByte == 0)
       lastByte = filesize;
@@ -371,25 +360,23 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
         /* Check if there are other bytes to send.  */
         if (! bytesToSend)
           break;
-        else
-          {
-            /* Read from the file the bytes to send.  */
-            size_t size = std::min (td->buffer->getRealLength (), bytesToSend);
-
-            file->read (td->buffer->getBuffer (), size, &nbr);
-            if (nbr == 0)
-              {
-                bytesToSend = 0;
-                continue;
-              }
 
-            bytesToSend -= nbr;
+        /* Read from the file the bytes to send.  */
+        size_t size = std::min (td->buffer->getRealLength (), bytesToSend);
 
-            td->sentData += appendDataToHTTPChannel (td, td->buffer->getBuffer 
(),
-                                                     nbr, chain,
-                                                     td->buffer->getRealLength 
(),
-                                                     memStream);
+        file->read (td->buffer->getBuffer (), size, &nbr);
+        if (nbr == 0)
+          {
+            bytesToSend = 0;
+            continue;
           }
+
+        bytesToSend -= nbr;
+
+        td->sentData += appendDataToHTTPChannel (td, td->buffer->getBuffer (),
+                                                 nbr, chain,
+                                                 td->buffer->getRealLength (),
+                                                 memStream);
       }/* End for loop.  */
 
     td->sentData += completeHTTPResponse (td, memStream, chain);

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

Summary of changes:
 myserver/include/base/mem_buff/mem_buff.h          |    2 +-
 myserver/include/filter/memory_stream.h            |    1 -
 myserver/include/http_handler/proxy/proxy.h        |    1 -
 myserver/include/http_handler/scgi/scgi.h          |    3 +-
 myserver/include/protocol/http/http_data_handler.h |   26 +++----
 .../include/protocol/http/http_thread_context.h    |    4 +
 myserver/src/base/mem_buff/mem_buff.cpp            |    4 +-
 myserver/src/filter/memory_stream.cpp              |   10 +-
 myserver/src/http_handler/cgi/cgi.cpp              |   12 +--
 myserver/src/http_handler/fastcgi/fastcgi.cpp      |   15 ++--
 myserver/src/http_handler/http_dir/http_dir.cpp    |   36 +++-----
 myserver/src/http_handler/http_file/http_file.cpp  |   49 ++++-------
 myserver/src/http_handler/isapi/isapi.cpp          |    9 +--
 myserver/src/http_handler/mscgi/mscgi.cpp          |    8 +-
 myserver/src/http_handler/proxy/proxy.cpp          |   15 ++--
 myserver/src/http_handler/scgi/scgi.cpp            |   16 ++--
 myserver/src/http_handler/wincgi/wincgi.cpp        |   35 +++-----
 myserver/src/protocol/http/http_data_handler.cpp   |   89 +++++++++-----------
 myserver/src/protocol/http/http_thread_context.cpp |    5 +
 myserver/src/protocol/http/webdav/webdav.cpp       |   13 ++--
 20 files changed, 149 insertions(+), 204 deletions(-)


hooks/post-receive
-- 
GNU MyServer



reply via email to

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