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


From: Giuseppe Scrivano
Subject: [myserver-commit] [SCM] GNU MyServer branch, master, updated. v0.9.2-466-g8dd135c
Date: Thu, 21 Apr 2011 16:45:52 +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  8dd135c0c0c053733cd70dc04c5db204dc9708ad (commit)
       via  e5cd0e11351a8e1cd1cabf6b11e73783bcd383bd (commit)
       via  4ad9c6e0eb2ec22a4d8c23e41878728064d2c7ee (commit)
      from  5352cc50040b0108c1fa8cbe609a1050fbb3741a (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 8dd135c0c0c053733cd70dc04c5db204dc9708ad
Author: Giuseppe Scrivano <address@hidden>
Date:   Thu Apr 21 18:45:48 2011 +0200

    Filters: use modifier filters only if they are supported by the client.

diff --git a/myserver/src/filter/filters_factory.cpp 
b/myserver/src/filter/filters_factory.cpp
index 85fcf9f..999ef45 100644
--- a/myserver/src/filter/filters_factory.cpp
+++ b/myserver/src/filter/filters_factory.cpp
@@ -135,9 +135,6 @@ int FiltersFactory::chain (FiltersChain* c, list<string> 
&l, Stream* out,
     {
       size_t tmp;
 
-      if (accepted && accepted->find (*i) == string::npos)
-        continue;
-
       Filter *n = getFilter ((*i).c_str ());
       if (!n)
         {
@@ -145,11 +142,17 @@ int FiltersFactory::chain (FiltersChain* c, list<string> 
&l, Stream* out,
           return 1;
         }
 
-      if (onlyNotModifiers && n->modifyData ())
+      if (n->modifyData ())
         {
-          delete n;
-          c->clearAllFilters ();
-          return 1;
+          if ((! accepted) || accepted->find (*i) == string::npos)
+            continue;
+
+          if (onlyNotModifiers)
+            {
+              delete n;
+              c->clearAllFilters ();
+              return 1;
+            }
         }
 
       c->addFilter (n, &tmp);



commit e5cd0e11351a8e1cd1cabf6b11e73783bcd383bd
Author: Giuseppe Scrivano <address@hidden>
Date:   Thu Apr 21 18:38:39 2011 +0200

    Http: fix support for filters.

diff --git a/myserver/include/filter/filters_chain.h 
b/myserver/include/filter/filters_chain.h
index 588df2a..b3f5e00 100644
--- a/myserver/include/filter/filters_chain.h
+++ b/myserver/include/filter/filters_chain.h
@@ -48,6 +48,7 @@ public:
   virtual int write (const char *buffer, size_t len, size_t *);
   virtual int flush (size_t *);
   FiltersChain ();
+  FiltersChain (Stream *s);
   ~FiltersChain ();
 protected:
   list <Filter*> filters;
diff --git a/myserver/include/protocol/http/http_data_handler.h 
b/myserver/include/protocol/http/http_data_handler.h
index b0b6e89..cef8c27 100644
--- a/myserver/include/protocol/http/http_data_handler.h
+++ b/myserver/include/protocol/http/http_data_handler.h
@@ -53,7 +53,7 @@ public:
   static void checkDataChunks (HttpThreadContext *, bool *, bool *);
 
   static size_t appendDataToHTTPChannel (HttpThreadContext* td,
-                                         char *buffer,
+                                         const char *buffer,
                                          size_t size,
                                          FiltersChain *chain,
                                          bool useChunks,
@@ -61,7 +61,7 @@ public:
                                          MemoryStream *tmpStream);
 
   static size_t appendDataToHTTPChannel (HttpThreadContext* td,
-                                         char *buffer,
+                                         const char *buffer,
                                          size_t size,
                                          FiltersChain* chain,
                                          bool useChunks);
diff --git a/myserver/src/filter/filters_chain.cpp 
b/myserver/src/filter/filters_chain.cpp
index 7aeef9b..b9c559e 100644
--- a/myserver/src/filter/filters_chain.cpp
+++ b/myserver/src/filter/filters_chain.cpp
@@ -44,14 +44,13 @@ int FiltersChain::read (char* buffer, size_t len, size_t* 
nbr)
 */
 void FiltersChain::setStream (Stream* s)
 {
-  list<Filter*>::iterator i=filters.begin ();
+  list<Filter*>::iterator i = filters.begin ();
+
+  for (; i != filters.end (); i++ )
+    if ((*i)->getParent () == stream)
+      (*i)->setParent (s);
 
-  for ( ; i!=filters.end (); i++ )
-    if ((*i)->getParent ()==stream)
-      {
-        (*i)->setParent (s);
-      }
-  stream=s;
+  stream = s;
 }
 
 /*!
@@ -85,6 +84,14 @@ FiltersChain::FiltersChain ()
   firstFilter = NULL;
 }
 
+
+FiltersChain::FiltersChain (Stream *stream)
+{
+  acceptDuplicates = 1;
+  this->stream = stream;
+  firstFilter = NULL;
+}
+
 /*!
   Set if the chain can cointain duplicates of the same filter on different 
levels.
 */
diff --git a/myserver/src/filter/gzip/gzip.cpp 
b/myserver/src/filter/gzip/gzip.cpp
index 721c769..8ccacdd 100644
--- a/myserver/src/filter/gzip/gzip.cpp
+++ b/myserver/src/filter/gzip/gzip.cpp
@@ -312,17 +312,17 @@ int Gzip::write (const char* buffer, size_t len, size_t 
*nbw)
 
   while (len)
     {
-      size_t nbw_parent;
-      size_t  size = std::min (len, (size_t) 512);
+      size_t nbwParent;
+      size_t size = std::min (len, (size_t) 512);
       u_long ret = compress (buffer, size, tmpBuffer, 1024);
 
       if (ret)
-        parent->write (tmpBuffer, ret, &nbw_parent);
+        parent->write (tmpBuffer, ret, &nbwParent);
 
       written += ret;
       buffer += size;
       len -= size;
-      *nbw += nbw_parent;
+      *nbw += nbwParent;
     }
   return 0;
 }
diff --git a/myserver/src/http_handler/http_file/http_file.cpp 
b/myserver/src/http_handler/http_file/http_file.cpp
index 69bd63a..2c390c2 100644
--- a/myserver/src/http_handler/http_file/http_file.cpp
+++ b/myserver/src/http_handler/http_file/http_file.cpp
@@ -213,7 +213,6 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
   size_t nbr;
   time_t lastMT;
   string tmpTime;
-  u_long dataSent = 0;
 
   try
     {
@@ -322,14 +321,13 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
     if (td->mime)
       {
         HttpRequestHeader::Entry* e = td->request.other.get 
("accept-encoding");
+        memStream.refresh ();
         if (td->mime)
           Server::getInstance ()->getFiltersFactory ()->chain (&chain,
                                                                
td->mime->filters,
                                                                &memStream,
                                                                &nbw, 0,
                                                                e ? &e->value : 
NULL);
-        memStream.refresh ();
-        dataSent += nbw;
       }
 
     useModifiers = chain.hasModifiersFilters ();
@@ -439,9 +437,12 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
 
         memStream.refresh ();
         if (nbr)
-          dataSent += HttpDataHandler::appendDataToHTTPChannel (td,
+          {
+            FiltersChain directChain (chain.getStream ());
+            td->sentData += HttpDataHandler::appendDataToHTTPChannel (td,
                                                     td->buffer->getBuffer (),
-                                                    nbr, &chain, useChunks);
+                                                    nbr, &directChain, 
useChunks);
+          }
       } /* memStream.availableToRead ().  */
 
     /* Flush the rest of the file.  */
@@ -468,10 +469,10 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
 
             bytesToSend -= nbr;
 
-            dataSent += appendDataToHTTPChannel (td, td->buffer->getBuffer (),
-                                                 nbr, &chain, useChunks,
-                                                 td->buffer->getRealLength (),
-                                                 &memStream);
+            td->sentData += appendDataToHTTPChannel (td, td->buffer->getBuffer 
(),
+                                                     nbr, &chain, useChunks,
+                                                     td->buffer->getRealLength 
(),
+                                                     &memStream);
           }
         else /* if (bytesToSend) */
           {
@@ -479,7 +480,7 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
             if (!useChunks)
               {
                 chain.flush (&nbw);
-                dataSent += nbw;
+                td->sentData += nbw;
                 break;
               }
             else
@@ -491,16 +492,17 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
                   write there the HTTP data chunk.
                 */
                 Stream* tmpStream = chain.getStream ();
-                chain.setStream (&memStream);
+                FiltersChain directChain (tmpStream);
                 memStream.refresh ();
+                chain.setStream (&memStream);
                 chain.flush (&nbw);
-
                 chain.setStream (tmpStream);
                 memStream.read (td->buffer->getBuffer (),
                                 td->buffer->getRealLength (), &nbr);
 
-                dataSent += appendDataToHTTPChannel (td, td->buffer->getBuffer 
(),
-                                                     nbr, &chain, useChunks);
+                td->sentData += appendDataToHTTPChannel (td, 
td->buffer->getBuffer (),
+                                                         nbr, &directChain, 
useChunks);
+                chain.getStream ()->write ("0\r\n\r\n", 5, &nbw);
                 break;
               }
           }
@@ -512,13 +514,10 @@ int HttpFile::send (HttpThreadContext* td, const char 
*filenamePath,
   }
   catch (exception & e)
     {
-      td->sentData += dataSent;
       chain.clearAllFilters ();
       return HttpDataHandler::RET_FAILURE;
     }
 
-  /* For logging activity.  */
-  td->sentData += dataSent;
   chain.clearAllFilters ();
 
   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 355ee34..2bd5a8f 100644
--- a/myserver/src/protocol/http/http_data_handler.cpp
+++ b/myserver/src/protocol/http/http_data_handler.cpp
@@ -74,17 +74,18 @@ int HttpDataHandler::unLoad ()
   internally by the function.
  */
 size_t HttpDataHandler::appendDataToHTTPChannel (HttpThreadContext *td,
-                                                 char *buffer,
+                                                 const char *buffer,
                                                  size_t size,
                                                  FiltersChain *chain,
                                                  bool useChunks,
                                                  size_t realBufferSize,
                                                  MemoryStream *tmpStream)
 {
-  size_t nbr, nbw;
+  char tmpBuf[BUFSIZ];
+  size_t nbr, nbw, written = 0, totalNbw = 0;
   Stream *oldStream = chain->getStream ();
 
-  if (!chain->hasModifiersFilters ())
+  if (! chain->hasModifiersFilters () || size == 0)
     return appendDataToHTTPChannel (td, buffer, size, chain, useChunks);
 
   /*
@@ -94,15 +95,34 @@ size_t HttpDataHandler::appendDataToHTTPChannel 
(HttpThreadContext *td,
     chunk content, finally we read from it and send directly to the
     original stream.
    */
-  chain->setStream (tmpStream);
-
-  chain->write (buffer, size, &nbw);
-
-  tmpStream->read (buffer, realBufferSize, &nbr);
+  try
+    {
+      FiltersChain directStream (oldStream);
+      do
+        {
+          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,
+                                                 useChunks);
+        }
+      while (size - written);
 
-  chain->setStream (oldStream);
+    }
+  catch (...)
+    {
+      chain->setStream (oldStream);
+      throw;
+    }
 
-  return appendDataToHTTPChannel (td, buffer, nbr, chain, useChunks);
+  return totalNbw;
 }
 
 /*!
@@ -116,26 +136,17 @@ size_t HttpDataHandler::appendDataToHTTPChannel 
(HttpThreadContext *td,
  */
 size_t
 HttpDataHandler::appendDataToHTTPChannel (HttpThreadContext *td,
-                                          char *buffer,
+                                          const char *buffer,
                                           size_t size,
                                           FiltersChain *chain,
                                           bool useChunks)
 {
   size_t tmp, nbw = 0;
-  if (chain->hasModifiersFilters ())
-    {
-      td->connection->host->warningsLogWrite (_("Http: internal error"));
-      return 0;
-    }
 
   if (useChunks)
     {
       ostringstream chunkHeader;
-      size_t flushNbw = 0;
       chunkHeader << hex << size << "\r\n";
-
-      chain->flush (&flushNbw);
-
       chain->getStream ()->write (chunkHeader.str ().c_str (),
                                   chunkHeader.str ().length (), &tmp);
     }



commit 4ad9c6e0eb2ec22a4d8c23e41878728064d2c7ee
Author: Giuseppe Scrivano <address@hidden>
Date:   Thu Apr 21 15:36:36 2011 +0200

    configuration: Remove `gzip.threshold'

diff --git a/myserver/binaries/myserver.default.xml 
b/myserver/binaries/myserver.default.xml
index 2159b06..4c7cc7a 100755
--- a/myserver/binaries/myserver.default.xml
+++ b/myserver/binaries/myserver.default.xml
@@ -66,9 +66,6 @@
   <!--DEFINE THE ADMINISTRATOR E-MAIL.  -->
   <DEFINE name="server.admin" value="address@hidden" />
 
-  <!--DEFINE THE GZIP COMPRESSION THRESHOLD VALUE.  -->
-  <DEFINE name="gzip.threshold" value="1048576" />
-
   <!--DEFINE IF LINKS SHOULD BE FOLLOWED.  -->
   <DEFINE name="symlinks.follow" value="YES" />
 
diff --git a/myserver/src/GUI/MyServer/GUI/GUIConfig.py 
b/myserver/src/GUI/MyServer/GUI/GUIConfig.py
index 9bac9bf..cfe6fd4 100644
--- a/myserver/src/GUI/MyServer/GUI/GUIConfig.py
+++ b/myserver/src/GUI/MyServer/GUI/GUIConfig.py
@@ -64,7 +64,6 @@ options['log_color.error_bg'] = ('Error log background 
colour.', 'string', )
 
 # Other
 options['connection.timeout'] = ('Timeout for every client\'s connected to 
server. If the client doesn\'t request anything for n seconds the connection 
with the client is closed. Set this to 0 if you don\'t want to use 
keep-alive-connections', 'integer', )
-options['gzip.threshold'] = ('Define the gzip compression threshold value.', 
'integer', )
 options['symlinks.follow'] = ('Define if links should be followed.', 'bool', )
 
 # don't put 'other' or 'unknown' here

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

Summary of changes:
 myserver/binaries/myserver.default.xml             |    3 -
 myserver/include/filter/filters_chain.h            |    1 +
 myserver/include/protocol/http/http_data_handler.h |    4 +-
 myserver/src/GUI/MyServer/GUI/GUIConfig.py         |    1 -
 myserver/src/filter/filters_chain.cpp              |   23 ++++++---
 myserver/src/filter/filters_factory.cpp            |   17 ++++---
 myserver/src/filter/gzip/gzip.cpp                  |    8 ++--
 myserver/src/http_handler/http_file/http_file.cpp  |   33 ++++++-------
 myserver/src/protocol/http/http_data_handler.cpp   |   51 ++++++++++++--------
 9 files changed, 79 insertions(+), 62 deletions(-)


hooks/post-receive
-- 
GNU MyServer



reply via email to

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