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. 79aeb8d140


From: Giuseppe Scrivano
Subject: [myserver-commit] [SCM] GNU MyServer branch, master, updated. 79aeb8d140894aa03cb13a843c7fa896dbfc9454
Date: Sun, 11 Oct 2009 21:13:09 +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  79aeb8d140894aa03cb13a843c7fa896dbfc9454 (commit)
       via  23c2e96cb585a7ff8eb25329ffe19c68af7be03f (commit)
       via  6246c8a7ebd7fe19facc1fbf893ac3283bbebb00 (commit)
      from  53919930c2c1cd0766acd07b120dc2ee51bfc2da (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 79aeb8d140894aa03cb13a843c7fa896dbfc9454
Author: Giuseppe Scrivano <address@hidden>
Date:   Sun Oct 11 23:11:27 2009 +0200

    Register a builder for the `mime_magic' plugin.

diff --git a/plugins/src/mime_magic/mime_magic.cpp 
b/plugins/src/mime_magic/mime_magic.cpp
index fe13ef4..e0d37a2 100755
--- a/plugins/src/mime_magic/mime_magic.cpp
+++ b/plugins/src/mime_magic/mime_magic.cpp
@@ -39,7 +39,7 @@ public:
 
   }
 
-  virtual int load (const char *resource)
+  virtual u_long load (const char *resource)
   {
     cookie = magic_open (MAGIC_SYMLINK | MAGIC_MIME_TYPE);
     return magic_load (cookie, NULL);
@@ -114,7 +114,16 @@ EXPORTABLE(int) load (void* server)
        return 0;
 }
 
-EXPORTABLE(int) postLoad(void* server)
+static MimeManagerHandler *builder ()
+{
+  return new XmlMimeHandler ();
+}
+
+void XmlMimeHandler::registerBuilder (MimeManager& manager)
+{
+}
+
+EXPORTABLE(int) postLoad (void* server)
 {
   string name ("mime_magic");
        Server *serverInstance = (Server*)server;
@@ -129,7 +138,7 @@ EXPORTABLE(int) postLoad(void* server)
     }
 
   mimeManager->registerHandler (name, handler);
-
+  mimeManager->registerBuilder (name, builder);
        return 0;
 }
 



commit 23c2e96cb585a7ff8eb25329ffe19c68af7be03f
Author: Giuseppe Scrivano <address@hidden>
Date:   Sun Oct 11 23:03:47 2009 +0200

    Allow virtual hosts to use a different MIME type handler.

diff --git a/myserver/include/conf/mime/mime_manager.h 
b/myserver/include/conf/mime/mime_manager.h
index 9bd7e92..9d30448 100644
--- a/myserver/include/conf/mime/mime_manager.h
+++ b/myserver/include/conf/mime/mime_manager.h
@@ -74,7 +74,7 @@ struct MimeRecord
 class MimeManagerHandler
 {
 public:
-  virtual int load (const char *resource){return 0;}
+  virtual u_long load (const char *resource){return 0;}
   virtual void close (){}
   virtual MimeRecord* getMIME (const char *file){return NULL;}
   virtual MimeRecord* getMIME (string const &file)
diff --git a/myserver/include/conf/mime/xml_mime_handler.h 
b/myserver/include/conf/mime/xml_mime_handler.h
index 1011dc7..d9ca111 100644
--- a/myserver/include/conf/mime/xml_mime_handler.h
+++ b/myserver/include/conf/mime/xml_mime_handler.h
@@ -57,16 +57,15 @@ class XmlMimeHandler : public MimeManagerHandler
 public:
   XmlMimeHandler ();
   virtual ~XmlMimeHandler ();
-  virtual int load (const char *resource){return 0;}
   virtual void close (){}
   virtual MimeRecord* getMIME (const char *file);
   virtual MimeRecord* getMIME (string const &file)
   {return getMIME (file.c_str ());}
   u_long getNumMIMELoaded ();
 
-  u_long loadXML (XmlParser* parser);
-  u_long loadXML (const char *filename);
-  u_long loadXML (string &filename) {return loadXML (filename.c_str ());}
+  virtual u_long load (XmlParser* parser);
+  virtual u_long load (const char *filename);
+  virtual u_long load (string &filename) {return load (filename.c_str ());}
 
   virtual u_long reload ();
   bool isLoaded (){return loaded;}
diff --git a/myserver/include/conf/vhost/vhost_manager.h 
b/myserver/include/conf/vhost/vhost_manager.h
index 28c2dff..a40cce9 100644
--- a/myserver/include/conf/vhost/vhost_manager.h
+++ b/myserver/include/conf/vhost/vhost_manager.h
@@ -31,6 +31,7 @@ public:
   virtual Vhost* getVHost (const char*, const char*, u_short);
   virtual Vhost* getVHostByNumber (int n);
   virtual int addVHost (Vhost*);
+  virtual int load (const char *resource){return 0;}
 };
 
 /*!
diff --git a/myserver/include/conf/vhost/xml_vhost_handler.h 
b/myserver/include/conf/vhost/xml_vhost_handler.h
index 4e8c567..85df4ae 100644
--- a/myserver/include/conf/vhost/xml_vhost_handler.h
+++ b/myserver/include/conf/vhost/xml_vhost_handler.h
@@ -25,7 +25,6 @@
 class XmlVhostHandler : public VhostManagerHandler
 {
 public:
-  void setExternalSource (VhostManagerHandler* extSource);
   XmlVhostHandler (ListenThreads* lt, LogManager* lm);
   ~XmlVhostHandler ();
   int getHostsNumber ();
@@ -42,7 +41,7 @@ public:
   int addVHost (Vhost*);
 
   /*! Load the virtual hosts list from a xml configuration file.  */
-  int loadXMLConfigurationFile (const char *);
+  virtual int load (const char *);
 
   /*! Set the right owner for the log locations.  */
   void changeLocationsOwner ();
@@ -52,7 +51,6 @@ private:
   void loadXMLlogData (string, Vhost*, xmlNode*);
   ListenThreads* listenThreads;
   Mutex mutex;
-  VhostManagerHandler* extSource;
 
   /*! List of virtual hosts. */
   list<Vhost*> hostList;
diff --git a/myserver/src/conf/mime/xml_mime_handler.cpp 
b/myserver/src/conf/mime/xml_mime_handler.cpp
index 0e2c4cc..b4b8f21 100644
--- a/myserver/src/conf/mime/xml_mime_handler.cpp
+++ b/myserver/src/conf/mime/xml_mime_handler.cpp
@@ -163,14 +163,14 @@ u_long XmlMimeHandler::reload ()
   if (!filename.length ())
     return -1;
 
-  return loadXML (getFilename ());
+  return load (getFilename ());
 }
 
 /*!
  * Load the MIME types from a XML file. Returns the number of
  * MIME types loaded successfully.
  */
-u_long XmlMimeHandler::loadXML (const char *fn)
+u_long XmlMimeHandler::load (const char *fn)
 {
   XmlParser parser;
   u_long ret = 0;
@@ -180,7 +180,7 @@ u_long XmlMimeHandler::loadXML (const char *fn)
 
   filename.assign (fn);
 
-  ret = loadXML (&parser);
+  ret = load (&parser);
 
   parser.close ();
 
@@ -191,7 +191,7 @@ u_long XmlMimeHandler::loadXML (const char *fn)
  * Load the MIME types from a XML parser object. Returns the number
  * of MIME types loaded successfully.
  */
-u_long XmlMimeHandler::loadXML (XmlParser* parser)
+u_long XmlMimeHandler::load (XmlParser* parser)
 {
   xmlNodePtr node;
   xmlDocPtr doc;
diff --git a/myserver/src/conf/vhost/xml_vhost_handler.cpp 
b/myserver/src/conf/vhost/xml_vhost_handler.cpp
index e5811af..01af49c 100644
--- a/myserver/src/conf/vhost/xml_vhost_handler.cpp
+++ b/myserver/src/conf/vhost/xml_vhost_handler.cpp
@@ -313,7 +313,7 @@ XmlVhostHandler::loadXMLlogData (string name, Vhost* vh, 
xmlNode* lcur)
  *Returns non-null on errors.
  *\param filename The XML file to open.
  */
-int XmlVhostHandler::loadXMLConfigurationFile (const char *filename)
+int XmlVhostHandler::load (const char *filename)
 {
   XmlParser parser;
   xmlDocPtr doc;
@@ -496,23 +496,33 @@ int XmlVhostHandler::loadXMLConfigurationFile (const char 
*filename)
             }
           else if (!xmlStrcmp (lcur->name, (const xmlChar *)"MIME_FILE"))
             {
+              string hnd ("xml");
+              for (xmlAttr *attrs = lcur->properties; attrs; attrs = 
attrs->next)
+                {
+                  if (!xmlStrcmp (attrs->name, (const xmlChar *)"name")
+                      && attrs->children && attrs->children->content)
+                    hnd.assign((const char*) attrs->children->content);
+                }
+
               if (lcur->children)
                 {
                   const char *filename = (const char*)lcur->children->content;
-                  XmlMimeHandler *xmlHandler = new XmlMimeHandler ();
+                  MimeManagerHandler *handler =
+                    Server::getInstance ()->getMimeManager ()->buildHandler 
(hnd);
+
                   try
                     {
-                      xmlHandler->loadXML (filename);
+                      handler->load (filename);
                     }
                   catch (...)
                     {
-                      delete xmlHandler;
-                      xmlHandler = NULL;
+                      delete handler;
+                      handler = NULL;
                       Server::getInstance ()->log (MYSERVER_LOG_MSG_ERROR,
                                                _("Error loading %s"), 
filename);
 
                     }
-                  vh->setMimeHandler (xmlHandler);
+                  vh->setMimeHandler (handler);
                 }
             }
           else if (!xmlStrcmp (lcur->name, (const xmlChar *)"THROTTLING_RATE"))
diff --git a/myserver/src/server/server.cpp b/myserver/src/server/server.cpp
index 92fe2a0..bd52744 100644
--- a/myserver/src/server/server.cpp
+++ b/myserver/src/server/server.cpp
@@ -263,7 +263,7 @@ int Server::postLoad ()
   /* Load the MIME types.  */
   log (MYSERVER_LOG_MSG_INFO, _("Loading MIME types..."));
 
-  if (int nMIMEtypes = xmlMimeHandler.loadXML (mimeConfigurationFile.c_str ()))
+  if (int nMIMEtypes = xmlMimeHandler.load (mimeConfigurationFile.c_str ()))
     log (MYSERVER_LOG_MSG_INFO, _("Using %i MIME types"), nMIMEtypes);
   else
     log (MYSERVER_LOG_MSG_ERROR, _("Error while loading MIME types"));
@@ -289,7 +289,7 @@ int Server::postLoad ()
   loadPlugins ();
 
   /* Load the virtual hosts configuration from the xml file.  */
-  vhostHandler->loadXMLConfigurationFile (vhostConfigurationFile.c_str ());
+  vhostHandler->load (vhostConfigurationFile.c_str ());
 
   if (path == 0)
     path = new string ();
@@ -460,7 +460,7 @@ void Server::mainLoop ()
                   delete oldvhost;
 
                   /* Load the virtual hosts configuration from the xml file.  
*/
-                  if (vhostHandler->loadXMLConfigurationFile 
(vhostConfigurationFile.c_str ()))
+                  if (vhostHandler->load (vhostConfigurationFile.c_str ()))
                     listenThreads.rollbackFastReboot ();
                   else
                     listenThreads.commitFastReboot ();
diff --git a/myserver/tests/test_mime_manager.cpp 
b/myserver/tests/test_mime_manager.cpp
index 3467276..5ad60c0 100644
--- a/myserver/tests/test_mime_manager.cpp
+++ b/myserver/tests/test_mime_manager.cpp
@@ -54,7 +54,7 @@ public:
 
     CPPUNIT_ASSERT_EQUAL (mm->isLoaded (), false);
 
-    CPPUNIT_ASSERT_EQUAL (mm->loadXML (parser), 2ul);
+    CPPUNIT_ASSERT_EQUAL (mm->load (parser), 2ul);
     CPPUNIT_ASSERT_EQUAL (mm->getNumMIMELoaded (), 2ul);
 
     CPPUNIT_ASSERT_EQUAL (mm->isLoaded (), true);
@@ -66,7 +66,7 @@ public:
   {
     XmlParser *parser = getTestParser ();
     MimeRecord mr;
-    mm->loadXML (parser);
+    mm->load (parser);
 
     CPPUNIT_ASSERT_EQUAL (mm->getNumMIMELoaded (), 2ul);
 



commit 6246c8a7ebd7fe19facc1fbf893ac3283bbebb00
Author: Giuseppe Scrivano <address@hidden>
Date:   Sun Oct 11 22:35:29 2009 +0200

    The `VhostManager' and `MimeManager' classes allow to build instances of 
handlers.

diff --git a/myserver/include/conf/mime/mime_manager.h 
b/myserver/include/conf/mime/mime_manager.h
index f96b46c..9bd7e92 100644
--- a/myserver/include/conf/mime/mime_manager.h
+++ b/myserver/include/conf/mime/mime_manager.h
@@ -86,6 +86,8 @@ public:
 class MimeManager
 {
 public:
+  typedef MimeManagerHandler* (*MAKE_HANDLER)();
+
   MimeManager ();
   ~MimeManager ();
   u_long reload ();
@@ -97,7 +99,12 @@ public:
   void registerHandler (string &name, MimeManagerHandler *handler);
   void setDefaultHandler (string &name);
   void clean ();
+
+  void registerBuilder (string &name, MAKE_HANDLER builder);
+  MimeManagerHandler *buildHandler (string &name);
+
 private:
+  HashMap<string, MAKE_HANDLER> builders;
   MimeManagerHandler *defHandler;
   HashMap<string, MimeManagerHandler*> handlers;
 };
diff --git a/myserver/include/conf/mime/xml_mime_handler.h 
b/myserver/include/conf/mime/xml_mime_handler.h
index 4f37804..1011dc7 100644
--- a/myserver/include/conf/mime/xml_mime_handler.h
+++ b/myserver/include/conf/mime/xml_mime_handler.h
@@ -74,6 +74,7 @@ public:
   int addRecord (MimeRecord *record);
 
   static MimeRecord *readRecord (xmlNodePtr node);
+  static void registerBuilder (MimeManager& manager);
 protected:
   const char *getFilename ();
   void clearRecords ();
diff --git a/myserver/include/conf/vhost/vhost_manager.h 
b/myserver/include/conf/vhost/vhost_manager.h
index b5fcfc4..28c2dff 100644
--- a/myserver/include/conf/vhost/vhost_manager.h
+++ b/myserver/include/conf/vhost/vhost_manager.h
@@ -35,18 +35,25 @@ public:
 
 /*!
  * Proxy class to a VhostManagerHandler object.
-*/
+ */
 class VhostManager
 {
 public:
+  typedef VhostManagerHandler* (*MAKE_HANDLER)(ListenThreads* lt,
+                                               LogManager* lm);
+
   VhostManager ();
   void setHandler (VhostManagerHandler *handler);
 
   /*! Get a pointer to a vhost.  */
-  Vhost* getVHost (const char*,const char*,u_short);
+  Vhost* getVHost (const char*,const char*, u_short);
   Vhost* getVHostByNumber (int n);
+  void registerBuilder (string &name, MAKE_HANDLER builder);
+  VhostManagerHandler *buildHandler (string &name, ListenThreads *lt,
+                                     LogManager *lm);
 
 protected:
+  HashMap<string, MAKE_HANDLER> builders;
   VhostManagerHandler *handler;
 };
 
diff --git a/myserver/include/conf/vhost/xml_vhost_handler.h 
b/myserver/include/conf/vhost/xml_vhost_handler.h
index f48b2c0..4e8c567 100644
--- a/myserver/include/conf/vhost/xml_vhost_handler.h
+++ b/myserver/include/conf/vhost/xml_vhost_handler.h
@@ -46,6 +46,8 @@ public:
 
   /*! Set the right owner for the log locations.  */
   void changeLocationsOwner ();
+
+  static void registerBuilder (VhostManager& manager);
 private:
   void loadXMLlogData (string, Vhost*, xmlNode*);
   ListenThreads* listenThreads;
diff --git a/myserver/include/server/server.h b/myserver/include/server/server.h
index 53e3322..7c94c7c 100644
--- a/myserver/include/server/server.h
+++ b/myserver/include/server/server.h
@@ -143,7 +143,7 @@ public:
   ListenThreads *getListenThreads (){return &listenThreads;}
 
   void *getEnvString (){return envString;}
-  VhostManager *getVhosts (){return &vhostList;}
+  VhostManager *getVhosts (){return &vhostManager;}
   MimeManager *getMimeManager (){return &mimeManager;}
 
   void setProcessPermissions ();
@@ -203,7 +203,7 @@ private:
   CachedFileFactory cachedFiles;
 
   void *envString;
-  VhostManager vhostList;
+  VhostManager vhostManager;
   MimeManager mimeManager;
   HomeDir homeDir;
 
diff --git a/myserver/src/conf/mime/mime_manager.cpp 
b/myserver/src/conf/mime/mime_manager.cpp
index ada7fdf..da93227 100644
--- a/myserver/src/conf/mime/mime_manager.cpp
+++ b/myserver/src/conf/mime/mime_manager.cpp
@@ -217,3 +217,29 @@ void MimeManager::setDefaultHandler (string &name)
 {
   defHandler = handlers.get (name);
 }
+
+/*!
+ * Register a builder function for a mime manager.
+ * \param name manager name.
+ * \param builder Builder routine.
+ */
+void MimeManager::registerBuilder (string &name, MAKE_HANDLER builder)
+{
+  builders.put (name, builder);
+}
+
+/*!
+ * Build an handler given its name.
+ *
+ * \param name handler name.
+ * \return an instance of the requested handler type.
+ */
+MimeManagerHandler *MimeManager::buildHandler (string &name)
+{
+  MAKE_HANDLER builder = builders.get (name);
+
+  if (builder)
+    return builder ();
+
+  return NULL;
+}
diff --git a/myserver/src/conf/mime/xml_mime_handler.cpp 
b/myserver/src/conf/mime/xml_mime_handler.cpp
index 7e047a4..0e2c4cc 100644
--- a/myserver/src/conf/mime/xml_mime_handler.cpp
+++ b/myserver/src/conf/mime/xml_mime_handler.cpp
@@ -31,6 +31,18 @@ along with this program.  If not, see 
<http://www.gnu.org/licenses/>.
 
 using namespace std;
 
+static MimeManagerHandler *builder ()
+{
+  return new XmlMimeHandler ();
+}
+
+void XmlMimeHandler::registerBuilder (MimeManager& manager)
+{
+  string xml ("xml");
+  manager.registerBuilder (xml, builder);
+}
+
+
 /*!
  * Get the name of the used file.
  */
diff --git a/myserver/src/conf/vhost/vhost_manager.cpp 
b/myserver/src/conf/vhost/vhost_manager.cpp
index 868dabe..05ed0a3 100644
--- a/myserver/src/conf/vhost/vhost_manager.cpp
+++ b/myserver/src/conf/vhost/vhost_manager.cpp
@@ -92,3 +92,31 @@ Vhost* VhostManager::getVHostByNumber (int n)
 
   return NULL;
 }
+
+/*!
+ * Register a builder function for a vhost manager.
+ * \param name manager name.
+ * \param builder Builder routine.
+ */
+void VhostManager::registerBuilder (string &name, MAKE_HANDLER builder)
+{
+  builders.put (name, builder);
+}
+
+/*!
+ * Build an handler given its name.
+ *
+ * \param name handler name.
+ * \return an instance of the requested handler type.
+ */
+VhostManagerHandler *VhostManager::buildHandler (string &name,
+                                                 ListenThreads *lt,
+                                                 LogManager *lm)
+{
+  MAKE_HANDLER builder = builders.get (name);
+
+  if (builder)
+    return builder (lt, lm);
+
+  return NULL;
+}
diff --git a/myserver/src/conf/vhost/xml_vhost_handler.cpp 
b/myserver/src/conf/vhost/xml_vhost_handler.cpp
index 4dfc472..e5811af 100644
--- a/myserver/src/conf/vhost/xml_vhost_handler.cpp
+++ b/myserver/src/conf/vhost/xml_vhost_handler.cpp
@@ -23,6 +23,23 @@
 
 #include <include/conf/xml_conf.h>
 
+
+static VhostManagerHandler *builder (ListenThreads* lt, LogManager* lm)
+{
+  return new XmlVhostHandler (lt, lm);
+}
+
+/*!
+ * Register the builder on the vhost manager.
+ *
+ * \param manager Where register the builder.
+ */
+void XmlVhostHandler::registerBuilder (VhostManager& manager)
+{
+  string xml ("xml");
+  manager.registerBuilder (xml, builder);
+}
+
 /*!
  *XmlVhostHandler add function.
  *\param vh The virtual host to add.
diff --git a/myserver/src/server/server.cpp b/myserver/src/server/server.cpp
index d4038fe..92fe2a0 100644
--- a/myserver/src/server/server.cpp
+++ b/myserver/src/server/server.cpp
@@ -279,7 +279,7 @@ int Server::postLoad ()
   listenThreads.initialize ();
 
   vhostHandler = new XmlVhostHandler (&listenThreads, logManager);
-  vhostList.setHandler (vhostHandler);
+  vhostManager.setHandler (vhostHandler);
 
   getProcessServerManager ()->load ();
 
@@ -325,6 +325,9 @@ void Server::loadPlugins ()
 {
   string xml ("xml");
 
+  XmlVhostHandler::registerBuilder (vhostManager);
+  XmlMimeHandler::registerBuilder (mimeManager);
+
   validatorFactory.addValidator (xml, xmlValidator);
   authMethodFactory.addAuthMethod (xml, (AuthMethod*) xmlValidator);
 
@@ -452,7 +455,7 @@ void Server::mainLoop ()
                   listenThreads.initialize ();
 
                   vhostHandler = new XmlVhostHandler (&listenThreads, 
logManager);
-                  vhostList.setHandler (vhostHandler);
+                  vhostManager.setHandler (vhostHandler);
 
                   delete oldvhost;
 
@@ -1068,7 +1071,7 @@ ConnectionPtr Server::addConnectionToList (Socket* s,
   newConnection->setLocalPort (localPort);
   newConnection->setIpAddr (ipAddr);
   newConnection->setLocalIpAddr (localIpAddr);
-  newConnection->host = vhostList.getVHost (0, localIpAddr, localPort);
+  newConnection->host = vhostManager.getVHost (0, localIpAddr, localPort);
   if (newConnection->host == 0)
     {
       connectionsPoolLock.lock ();

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

Summary of changes:
 myserver/include/conf/mime/mime_manager.h       |    9 +++++-
 myserver/include/conf/mime/xml_mime_handler.h   |    8 ++--
 myserver/include/conf/vhost/vhost_manager.h     |   12 ++++++-
 myserver/include/conf/vhost/xml_vhost_handler.h |    6 ++--
 myserver/include/server/server.h                |    4 +-
 myserver/src/conf/mime/mime_manager.cpp         |   26 +++++++++++++++
 myserver/src/conf/mime/xml_mime_handler.cpp     |   20 +++++++++--
 myserver/src/conf/vhost/vhost_manager.cpp       |   28 ++++++++++++++++
 myserver/src/conf/vhost/xml_vhost_handler.cpp   |   39 +++++++++++++++++++---
 myserver/src/server/server.cpp                  |   15 +++++---
 myserver/tests/test_mime_manager.cpp            |    4 +-
 plugins/src/mime_magic/mime_magic.cpp           |   15 +++++++--
 12 files changed, 153 insertions(+), 33 deletions(-)


hooks/post-receive
-- 
GNU MyServer




reply via email to

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