[prev in list] [next in list] [prev in thread] [next in thread] 

List:       helix-server-cvs
Subject:    [Server-cvs] engine/config xmlregconfig.cpp,1.3,1.3.482.1
From:       yijil () helixcommunity ! org
Date:       2013-03-25 10:41:32
[Download RAW message or body]

Update of /cvsroot/server/engine/config
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv15541/server/engine/config


Modified Files:
      Tag: SERVER_VHOST_YIJI_2
	xmlregconfig.cpp 
Log Message:
Committed to: SERVER_VHOST_YIJI_2

Reviewed by: Xiaocheng

Synopsis
========
Configure file and Error log(including updates for common part) for vhost support

Branches: SERVER_VHOST_YIJI_2

Reviewer: Anyone

Description
===========
I. Configuration
In current server design, when server starts, it will load rmserver.cfg file, and \
save it to our server registry. In registry, every item in rmserver.cfg will under \
root config, when any updates from admin page, it will cause items bellow config be \
write back it rmserver.cfg.

In the version for vhost, there exists one configure file for every account. We put \
every configure file data of different vhost (for example Account) under \
vhost.Account in registry.

Use a map to manage multiple vhost configure file, it will have interfaces to \
search/save XMLConfig object by account name.

II. Error log
In version supporting vhost, it needs to separate logs according to vhost account.

Add a new interface "IHXErrorMessage2" for saving vhost log. When other parts want to \
save vhost error log, they don`t need to change other parts, only need query \
interface IHXErrorMessage2 and call IHXErrorMessage2::ReportByVhost().

There CR also include delete or add vhost account.

III. Files Affected
==============
common/include/hxiids.h
common/include/hxerror.h
common/include/hxcfg.h
server/engine/core/proc_container.cpp
server/engine/core/server_context.cpp
server/engine/core/pub/error_sink_handler.h
server/engine/core/pub/proc_container.h
server/engine/context/errhand.cpp
server/engine/context/pub/errhand.h
server/engine/context/pub/error_sink_ctrl.h
server/engine/config/config.cpp
server/engine/config/xmlregconfig.cpp
server/engine/config/pub/xmlregconfig.h
server/log/tmplgpln/base_log.cpp
server/log/tmplgpln/base_log.h
server/log/tmplgpln/error_log.cpp
server/log/tmplgpln/error_log.h
server/log/tmplgpln/tmplgpln.cpp
server/log/tmplgpln/tmplgpln.h

Testing Performed
=================



Index: xmlregconfig.cpp
===================================================================
RCS file: /cvsroot/server/engine/config/xmlregconfig.cpp,v
retrieving revision 1.3
retrieving revision 1.3.482.1
diff -u -d -r1.3 -r1.3.482.1
--- xmlregconfig.cpp	10 Mar 2003 17:42:01 -0000	1.3
+++ xmlregconfig.cpp	25 Mar 2013 10:41:19 -0000	1.3.482.1
@@ -40,6 +40,7 @@
 #include "hxstrutl.h"
 #include "servreg.h"
 #include "server_version.h"
+#include "dict.h"
 #ifdef _WIN32
 #include "reg.h"
 #endif
@@ -76,7 +77,7 @@
 #ifdef _WIN32
     if (m_winregkey)
     {
-	delete[] m_winregkey;
+        delete[] m_winregkey;
     }
 #endif     
 }
@@ -92,9 +93,9 @@
     }
     else if (IsEqualIID(riid, IID_IHXRegConfig))
     {
-	AddRef();
-	*ppvObj = (IHXRegConfig*)this;
-	return HXR_OK;
+        AddRef();
+        *ppvObj = (IHXRegConfig*)this;
+        return HXR_OK;
     }
 
     *ppvObj = NULL;
@@ -168,10 +169,134 @@
      */
     if (hr != HXR_OK && m_winregkey)
     {
-	WinRegistry winreg(m_proc, m_registry);
-	winreg.Nuke(m_winregkey);
-	return winreg.Import(pKeyName, m_winregkey);
+        WinRegistry winreg(m_proc, m_registry);
+        winreg.Nuke(m_winregkey);
+        return winreg.Import(pKeyName, m_winregkey);
     }
 #endif
     return hr;
 }
+
+XMLManager::XMLManager() : m_ulRefCount(0)
+{
+    m_pConfigFileMap = new Dict();
+}
+
+XMLManager::~XMLManager()
+{
+    for (Dict_iterator di(m_pConfigFileMap); (*di) != 0; ++di)
+    {
+        XMLConfig* pConfig = (XMLConfig*)((Dict_entry*)*di)->obj;
+        HX_RELEASE(pConfig);
+    }
+    m_pConfigFileMap->empty();
+    HX_DELETE(m_pConfigFileMap);
+}
+
+STDMETHODIMP
+XMLManager::QueryInterface(REFIID riid, void** ppvObj)
+{
+    if(IsEqualIID(riid, IID_IUnknown))
+    {
+        AddRef();
+        *ppvObj = (IUnknown*)(IHXXMLConfigManager*)this;
+        return HXR_OK;
+    }
+    else if (IsEqualIID(riid, IID_IHXXMLConfigManager))
+    {
+        AddRef();
+        *ppvObj = (IHXXMLConfigManager*)this;
+        return HXR_OK;
+    }
+
+    *ppvObj = NULL;
+    return HXR_NOINTERFACE;
+}
+
+STDMETHODIMP_(UINT32)
+XMLManager::AddRef()
+{
+    return InterlockedIncrement(&m_ulRefCount);
+}
+
+STDMETHODIMP_(UINT32)
+XMLManager::Release()
+{
+    if (InterlockedDecrement(&m_ulRefCount) > 0)
+    {
+        return m_ulRefCount;
+    }
+
+    delete this;
+    return 0;
+}
+
+HXBOOL
+XMLManager::AddConfig(const char* pVhostAccount, XMLConfig* pConfig)
+{
+    if (!pVhostAccount || !pConfig)
+    {
+        return FALSE;
+    }
+
+    Dict_entry* pe = m_pConfigFileMap->find(pVhostAccount);
+    if (pe && pe->obj)
+    {
+        return FALSE;
+    }
+
+    HX_ADDREF(pConfig);
+    m_pConfigFileMap->enter(pVhostAccount, pConfig);
+    return TRUE;
+}
+
+STDMETHODIMP
+XMLManager::AddConfig(THIS_ const char* pVhostAccount, IHXValues*  pValues, \
IHXRegistry* pRegistry) +{
+    if (!pVhostAccount || !pValues || !pRegistry)
+    {
+        return HXR_FAIL;
+    }
+
+    Dict_entry* pe = m_pConfigFileMap->find(pVhostAccount);
+    if (pe && pe->obj)
+    {
+        RemoveConfig(pVhostAccount);
+    }
+    //Interface used for vhost API, will be implemented later
+    return HXR_OK;
+}
+
+STDMETHODIMP
+XMLManager::RemoveConfig(THIS_ const char* pVhostAccount)
+{
+    if (!pVhostAccount)
+    {
+        return HXR_FAIL;
+    }
+
+    XMLConfig* pConfig = (XMLConfig*)m_pConfigFileMap->remove(pVhostAccount);
+    HX_RELEASE(pConfig);
+
+    return HXR_OK;
+}
+
+STDMETHODIMP
+XMLManager::WriteKey(THIS_ const char* pVhostAccount)
+{
+    if (!pVhostAccount)
+    {
+        return HXR_FAIL;
+    }
+
+    Dict_entry* pe = m_pConfigFileMap->find(pVhostAccount);
+    if (pe && pe->obj)
+    {
+        CHXString sKeyName = "vhost.";
+        sKeyName += pVhostAccount;
+        XMLConfig* pConfig = (XMLConfig*)pe->obj;
+        pConfig->WriteKey((const char *)sKeyName);
+    }
+
+    return HXR_OK;
+}


_______________________________________________
Server-cvs mailing list
Server-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/server-cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic