xmlconfig.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:8k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *  
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of RealNetworks Community Source License 
  8.  * Version 1.0 (the "License"). You may not use this file except in 
  9.  * compliance with the License executed by both you and RealNetworks.  You 
  10.  * may obtain a copy of the License at  
  11.  * http://www.helixcommunity.org/content/rcsl.  You may also obtain a 
  12.  * copy of the License by contacting RealNetworks directly.  Please see the 
  13.  * License for the rights, obligations and limitations governing use of the 
  14.  * contents of the file. 
  15.  *  
  16.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  17.  * developer of the Original Code and owns the copyrights in the portions 
  18.  * it created. 
  19.  *  
  20.  * This file, and the files included with this file, is distributed and made 
  21.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  22.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  23.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  24.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.  
  25.  * 
  26.  * Technology Compatibility Kit Test Suite(s) Location: 
  27.  *    http://www.helixcommunity.org/content/tck 
  28.  * 
  29.  * Contributor(s): 
  30.  *  
  31.  * ***** END LICENSE BLOCK ***** */ 
  32. //   $Id: xmlconfig.h,v 1.3 2003/03/19 14:59:11 ehyche Exp $
  33. #ifndef _XMLCONFIG_H_
  34. #define _XMLCONFIG_H_
  35. #include "hxslist.h"
  36. #include "hxstack.h"
  37. #include "dict.h"
  38. #include "hxcfg.h"
  39. #include "hxmon.h"
  40. #include "hxcomm.h"
  41. #include "hxstrutl.h"
  42. class XMLTag;
  43. class Process;
  44. class ServerRegistry;
  45. class HXRegistry;
  46. class CBigByteQueue;
  47. #define AL_TAGIFY 1
  48. typedef enum
  49. {
  50.     CfgList,
  51.     CfgVar
  52. } XMLConfigType;
  53. typedef enum
  54. {
  55.     CfgVarInt,
  56.     CfgVarString,
  57.     CfgVarBool
  58. } XMLConfigVarType;
  59. struct XMLConfigAlias
  60. {
  61.     const char* from;
  62.     const char* to;
  63.     const char* attr1;
  64.     const char* attr2;
  65.     const char* attr3;
  66.     UINT32 flags;
  67. };
  68. class XMLConfigString
  69. {
  70.     char* m_pData;
  71.     int len;
  72.  
  73. public:
  74.     XMLConfigString(XMLConfigString& Old)
  75.     {
  76. m_pData = new char[256];
  77. len = Old.len;
  78.         memcpy(m_pData, Old.m_pData, (len + 1 <= 256 ? len + 1 : 256)); /* Flawfinder: ignore */
  79.     }
  80.     XMLConfigString()
  81.     {
  82. m_pData = new char[256];
  83. len = 0;
  84. m_pData[0] = 0;
  85.     }
  86.     ~XMLConfigString()
  87.     {
  88. delete[] m_pData;
  89.     }
  90.     const char* CharStar()
  91.     {
  92. return m_pData;
  93.     }
  94.     const char* Top()
  95.     {
  96. int i = len;
  97. while (i && m_pData[i] != '.')
  98. {
  99.     i--;
  100. }
  101. if (m_pData[i] == '.')
  102. {
  103.     i++;
  104. }
  105. return &(m_pData[i]);
  106.     }
  107.     void AddLevel(const char* pNew)
  108.     {
  109. if (len)
  110. {
  111.     len += SafeSprintf(&(m_pData[len]), 256 - len,
  112. ".%s", pNew);
  113. }
  114. else
  115. {
  116.     len = SafeSprintf(m_pData, 256,
  117. "%s", pNew);
  118. }
  119.     }
  120.     void RemoveLevel()
  121.     {
  122. int i = len;
  123. while (i > 0 && m_pData[i] != '.')
  124. {
  125.     i--;
  126. }
  127. m_pData[i] = 0;
  128. len = i;
  129.     }   
  130. };
  131. class XMLPropInfo
  132. {
  133. public:
  134.     char* m_pName;
  135.     HXPropType m_Type;
  136.     XMLPropInfo()
  137. : m_pName(0)
  138.     {
  139.     }
  140.     ~XMLPropInfo()
  141.     {
  142. if (m_pName)
  143. {
  144.     delete[] m_pName;
  145. }
  146.     }
  147. };
  148. class XMLConfig : public IHXRegConfig,
  149.                   public IHXActivePropUserResponse
  150. {
  151. public:
  152.     XMLConfig(IHXRegistry2* pRegistry, IHXErrorMessages* pMessages, const char* szserverversion,
  153.                      UINT32 dwMajor, UINT32 dwMinor);
  154.     virtual ~XMLConfig();
  155.     /*
  156.      * Com stuff.
  157.      */
  158.     STDMETHOD(QueryInterface) (REFIID riid, void** ppvObj);
  159.     STDMETHOD_(ULONG32,AddRef)  (THIS);
  160.     STDMETHOD_(ULONG32,Release) (THIS);
  161.     /*
  162.      * IHXRegConfig stuff.
  163.      */
  164.     STDMETHOD(WriteKey) (THIS_
  165. const char* pKeyName);
  166.     /************************************************************************
  167.     * Called with status result on completion of set request.
  168.     */
  169.     STDMETHOD(SetActiveIntDone)   (THIS_
  170.     HX_RESULT res,
  171.     const char* pName,
  172.     UINT32 ul,
  173.     IHXBuffer* pInfo[],
  174.     UINT32 ulNumInfo);
  175.     STDMETHOD(SetActiveStrDone)   (THIS_
  176.     HX_RESULT res,
  177.     const char* pName,
  178.     IHXBuffer* pBuffer,
  179.     IHXBuffer* pInfo[],
  180.     UINT32 ulNumInfo);
  181.     STDMETHOD(SetActiveBufDone)   (THIS_
  182.     HX_RESULT res,
  183.     const char* pName,
  184.     IHXBuffer* pBuffer,
  185.     IHXBuffer* pInfo[],
  186.     UINT32 ulNumInfo);
  187.     STDMETHOD(DeleteActivePropDone) (THIS_
  188.     HX_RESULT res,
  189.     const char* pName,
  190.     IHXBuffer* pInfo[],
  191.     UINT32 ulNumInfo);
  192.     /*
  193.      * Uber reconfigure the server.
  194.      */
  195.     HX_RESULT Reconfigure(IHXReconfigServerResponse* pResp);
  196.     /*
  197.      * Reconfigure from file.
  198.      */
  199.     HX_RESULT Reconfigure(const char* pFilename);
  200.     /*
  201.      * Reconfigure from registry.
  202.      */
  203.     HX_RESULT ReconfigureFromReg(const char* pKeyname);
  204.     IHXReconfigServerResponse* m_pReconfigureResponse;
  205.     class XMLConfigListNode;
  206.     class XMLConfigList : public CHXSimpleList
  207.     {
  208.     public:
  209. ~XMLConfigList();
  210. XMLConfigListNode* m_parentnode;
  211. friend class XMLConfig;
  212.     };
  213.     class XMLConfigListNode
  214.     {
  215.     public:
  216. XMLConfigListNode() : m_pList(NULL), m_name(NULL), m_value(NULL),
  217.                       m_vserver(-1) {};
  218. XMLConfigList* m_pList;
  219. char* m_name;
  220. char* m_value;
  221. XMLConfigType m_type;
  222. UINT32 m_num;
  223. XMLConfigListNode* m_parent;
  224. UINT32 m_int;
  225. BOOL   m_bool;
  226. INT32  m_vserver;
  227. char* get_registry_name(INT32 vserver = -1);
  228. ~XMLConfigListNode();
  229. friend class XMLConfig;
  230.     };
  231.     CHXStack m_pListStack;
  232.     XMLConfigList* m_pList;
  233.     HX_RESULT Write(const char* name, const char* filename);
  234.     HX_RESULT Read(char* filename, char* pServRegKey, BOOL bIncludedFile = FALSE);
  235. //    STDMETHOD(Read) (THIS_ char* filename, char* pServRegKey, BOOL bIncludedFile = FALSE);
  236.     HX_RESULT WriteToFile(const char* pKeyName, const char* pFilename);
  237.     void _AddPropsToList(CHXSimpleList* pList, const char* pRoot, IHXRegistry2* pReg);
  238.     void _RemovePropFromList(CHXSimpleList* pList, const char* pName);
  239.     char* _GetPropValueString(const char* pName, IHXRegistry2* pReg);
  240.     void _CleanList(CHXSimpleList* pList);
  241.     void AppendPropsToFile(FILE* fp, XMLConfigString level,
  242. CHXSimpleList* pList, int indent_per_level,
  243. IHXRegistry2* hxreg,
  244. const char* pBase);
  245.     void _AppendPropToFile(FILE* fp, XMLConfigString level,
  246.      int indent_per_level,
  247.      IHXRegistry2* hxreg,
  248.      const char* pBase);
  249.     void _IndentFile(FILE* fp, int indent_per_level,
  250.  XMLConfigString level,
  251.  const char* pBase);
  252.     int _PropExists(XMLConfigString* p, IHXRegistry2* preg);
  253.     HX_RESULT _ResetProp(XMLConfigString*, const char*,
  254. IHXRegistry2*);
  255.     void MaybeSendReconfigResponse();
  256.     void _HandlePropsRemovedFromFile(
  257. XMLConfigString*, CHXSimpleList*,
  258. IHXRegistry2*);
  259.     IHXBuffer* _GetDefaultValString(
  260. const char*, IHXRegistry2*);
  261.     int _GetDefaultValInt(
  262. const char*, INT32*, IHXRegistry2*);
  263. protected:
  264. //Default Constructor
  265.     XMLConfig();
  266.     HX_RESULT init(IHXRegistry2* pRegistry, IHXErrorMessages* pMessages, const char* szserverversion,
  267.                    UINT32 dwMajor, UINT32 dwMinor);
  268. //Properties
  269.     char* m_filename;
  270. private:
  271.     INT32 m_lRefCount;
  272.     IHXRegistry2* m_pRegistry;
  273.     IHXErrorMessages* m_pMessages;
  274.     char* m_szServerversion;
  275.     UINT32 m_ulMajor;
  276.     UINT32 m_ulMinor;
  277.     UINT32 m_ActiveSetsOutstanding;
  278.     Dict m_alias_dict;
  279.     INT32 m_vserver;
  280.     
  281.     HX_RESULT DumpConfig(const char* name, int indent, FILE* outfile,
  282.  IHXRegistry2* hxreg);
  283.     BOOL Expand(XMLTag*, CBigByteQueue* queue);
  284.     void ExpandAttribute(XMLTag*, const char* attribute);
  285.     void DumpList(XMLConfigList* list, int indent);
  286.     void StuffRegistry(XMLConfigList* list);
  287.     XMLConfigVarType GetVarType(XMLConfigListNode* node);
  288. };
  289. #endif