[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