⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nasd_config.h

📁 Diameter协议栈
💻 H
字号:
/* BEGIN_COPYRIGHT                                                        *//*                                                                        *//* Open Diameter: Open-source software for the Diameter and               *//*                Diameter related protocols                              *//*                                                                        *//* Copyright (C) 2002-2004 Open Diameter Project                          *//*                                                                        *//* This library is free software; you can redistribute it and/or modify   *//* it under the terms of the GNU Lesser General Public License as         *//* published by the Free Software Foundation; either version 2.1 of the   *//* License, or (at your option) any later version.                        *//*                                                                        *//* This library is distributed in the hope that it will be useful,        *//* but WITHOUT ANY WARRANTY; without even the implied warranty of         *//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU      *//* Lesser General Public License for more details.                        *//*                                                                        *//* You should have received a copy of the GNU Lesser General Public       *//* License along with this library; if not, write to the Free Software    *//* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307    *//* USA.                                                                   *//*                                                                        *//* In addition, when you copy and redistribute some or the entire part of *//* the source code of this software with or without modification, you     *//* MUST include this copyright notice in each copy.                       *//*                                                                        *//* If you make any changes that are appeared to be useful, please send    *//* sources that include the changed part to                               *//* diameter-developers@lists.sourceforge.net so that we can reflect your  *//* changes to one unified version of this software.                       *//*                                                                        *//* END_COPYRIGHT                                                          */#ifndef __NASD_CONFIG_H__#define __NASD_CONFIG_H__#include "od_utl_xml_parser.h"#include "nasd_defs.h"template <class ELEMENT_PARSER>class NASD_ParserMultiElement{   public:      virtual ~NASD_ParserMultiElement() {      }      NASD_ParserMultiElement(const char *name) :          m_ElementParser(name) {      }      ELEMENT_PARSER &operator()(void) {         return m_ElementParser;      }      virtual void populate(DOMNode *n) {         DOMNode *found, *child = n->getFirstChild();         while (child) {            if (m_ElementParser.populate(child, &found) != 0) {                break;            }            child = found->getNextSibling();         }      }   private:      ELEMENT_PARSER m_ElementParser;};template <class ELEMENT>class NASD_ParserElement :    public OD_Utl_XMLElementParser{   public:      NASD_ParserElement(const char *name) :          OD_Utl_XMLElementParser(name) {      }      virtual int svc(DOMNode *n) {         std::string apName;         std::string enableVar;         bool bEnabled = false;         OD_Utl_XMLDataString name("name", apName);         name.populate(n->getFirstChild());         OD_Utl_XMLDataString enabled("enabled", enableVar);         if (enabled.populate(n->getFirstChild()) == 0) {             bEnabled = (enableVar == "true") ? true : false;                  }         ELEMENT e(apName.data(), bEnabled);         e.populate(n->getFirstChild());         return (0);      }};class NASD_ParserElementWithNameCheck :   public OD_Utl_XMLElementParserWithData<bool>{   public:      NASD_ParserElementWithNameCheck(const char *name,                                       bool bEnabled,                                      const char *check) :         OD_Utl_XMLElementParserWithData<bool>(name, bEnabled),         m_NameCheck(check) {      }      virtual int operator()(DOMNode *n) = 0;      virtual int svc(DOMNode *n) {         if (m_Name == m_NameCheck) {            return (*this)(n);         }         return (0);      }   protected:      std::string m_NameCheck;};class NASD_ParserAp8021xEntry :    public NASD_ParserElementWithNameCheck{   public:      NASD_ParserAp8021xEntry(const char *name,                               bool bEnabled) :         NASD_ParserElementWithNameCheck            (name, bEnabled, "eap_8021X") {      }      virtual int operator()(DOMNode *n) {         return (0);      }};class NASD_ParserApPanaEntry :    public NASD_ParserElementWithNameCheck{    public:      NASD_ParserApPanaEntry(const char *name,                              bool bEnabled) :         NASD_ParserElementWithNameCheck            (name, bEnabled, "pana") {      }      virtual int operator()(DOMNode *n) {         std::auto_ptr<NASD_MapElement>             pana(new NASD_ApPanaData);         NASD_ApPanaData &panaRef = (NASD_ApPanaData&)(*pana);         OD_Utl_XMLDataString cfgfile("cfg_file",                        panaRef.Protocol().CfgFile());         cfgfile.populate(n->getFirstChild());         OD_Utl_XMLDataString epscript("ep_script",                        panaRef.Protocol().EpScript());         epscript.populate(n->getFirstChild());         ACE_UINT32 dhcpBootstrap = 0;         OD_Utl_XMLDataUInt32 dhcp("dhcp_bootstrap",                                    dhcpBootstrap);         dhcp.populate(n->getFirstChild());         panaRef.Protocol().DhcpBootstrap() = dhcpBootstrap ? true : false;         panaRef.Name() = m_Name;         panaRef.Enabled() = m_Payload;         NASD_APPROTO_TBL().Register(pana);         return 0;      }};class NASD_ParserAccessProtocols :    public OD_Utl_XMLElementParser{   public:      NASD_ParserAccessProtocols(const char *name) :          OD_Utl_XMLElementParser(name) {      }      virtual int svc(DOMNode *n) {         // Add other access protocol parsers here         NASD_ParserMultiElement< NASD_ParserElement<NASD_ParserApPanaEntry> >                             panaEntries("access_entry");         panaEntries.populate(n);         NASD_ParserMultiElement< NASD_ParserElement<NASD_ParserAp8021xEntry> >                             ap8021xEntries("access_entry");         ap8021xEntries.populate(n);         return 0;      }};class NASD_ParserLocalEapAuthEntry :    public NASD_ParserElementWithNameCheck{    public:      NASD_ParserLocalEapAuthEntry(const char *name,                                     bool bEnabled) :         NASD_ParserElementWithNameCheck            (name, bEnabled, "local_eap_auth") {      }      virtual int operator()(DOMNode *n) {         std::auto_ptr<NASD_MapElement>             stEap(new NASD_AaaLocalEapAuthData);         NASD_AaaLocalEapAuthData &stEapRef =             (NASD_AaaLocalEapAuthData&)(*stEap);         OD_Utl_XMLDataString secret("shared_secret_file",                        stEapRef.Protocol().SharedSecretFile());         secret.populate(n->getFirstChild());         OD_Utl_XMLDataString ident("identity",                        stEapRef.Protocol().Identity());         ident.populate(n->getFirstChild());         stEapRef.Name() = m_Name;         stEapRef.Enabled() = m_Payload;         NASD_AAAPROTO_TBL().Register(stEap);         return 0;      }};class NASD_ParserDiameterEapEntry :    public NASD_ParserElementWithNameCheck{    public:      NASD_ParserDiameterEapEntry(const char *name,                                   bool bEnabled) :         NASD_ParserElementWithNameCheck            (name, bEnabled, "diameter_eap") {      }      virtual int operator()(DOMNode *n) {         std::auto_ptr<NASD_MapElement>             diamEap(new NASD_AaaDiameterEapData);         NASD_AaaDiameterEapData &diamEapRef =             (NASD_AaaDiameterEapData&)(*diamEap);         OD_Utl_XMLDataString cfgfile("diameter_cfg_file",                        diamEapRef.Protocol().DiameterCfgFile());         cfgfile.populate(n->getFirstChild());         diamEapRef.Name() = m_Name;         diamEapRef.Enabled() = m_Payload;         NASD_AAAPROTO_TBL().Register(diamEap);         return 0;      }};class NASD_ParserAaaProtocols :    public OD_Utl_XMLElementParser{   public:      NASD_ParserAaaProtocols(const char *name) :          OD_Utl_XMLElementParser(name) {      }      virtual int svc(DOMNode *n) {         // Add other aaa protocol parsers here         NASD_ParserMultiElement< NASD_ParserElement<NASD_ParserLocalEapAuthEntry> >                             stEntries("aaa_entry");         NASD_ParserMultiElement< NASD_ParserElement<NASD_ParserDiameterEapEntry> >                             diamEntries("aaa_entry");         stEntries.populate(n);         diamEntries.populate(n);         return 0;      }};class NASD_ParserScriptPolicy :    public NASD_ParserElementWithNameCheck{    public:      NASD_ParserScriptPolicy(const char *name,                               bool bEnabled) :         NASD_ParserElementWithNameCheck             (name, bEnabled, "script") {      }      virtual int operator()(DOMNode *n) {         std::auto_ptr<NASD_MapElement>             script(new NASD_PolicyScriptData);         NASD_PolicyScriptData &scriptRef =             (NASD_PolicyScriptData&)(*script);         OD_Utl_XMLDataString sfile("file",                        scriptRef.Policy().ScriptFile());         sfile.populate(n->getFirstChild());         scriptRef.Name() = m_Name;         NASD_POLICY_TBL().Register(script);         return 0;      }};class NASD_ParserAccessPolicies :    public OD_Utl_XMLElementParser{   public:      NASD_ParserAccessPolicies(const char *name) :          OD_Utl_XMLElementParser(name) {      }      virtual int svc(DOMNode *n) {         // Add other aaa protocol parsers here         NASD_ParserMultiElement< NASD_ParserElement<NASD_ParserScriptPolicy> >                             scriptPolicy("policy_entry");         scriptPolicy.populate(n);         return 0;      }};class NASD_ParserCallRoutePolicies :   public OD_Utl_XMLElementParser{   public:      NASD_ParserCallRoutePolicies(const char *name) :          OD_Utl_XMLElementParser(name),         m_RteEntry(0) {      }      virtual int svc(DOMNode *n) {         std::string policyName;         OD_Utl_XMLDataString pname("access_policy",                                    policyName);         pname.populate(n);         if (m_RteEntry) {            m_RteEntry->PolicyList().push_front(policyName);         }         return 0;      }      NASD_RouteEntry *&RouteEntry() {         return m_RteEntry;      }   protected:      NASD_RouteEntry *m_RteEntry;};class NASD_ParserCallRouteEntry :   public OD_Utl_XMLElementParser{   public:      NASD_ParserCallRouteEntry(const char *name) :	 OD_Utl_XMLElementParser(name),         m_IsDefaultRte(false) {      }      virtual int svc(DOMNode *n) {         std::auto_ptr<NASD_MapElement>             rte(new NASD_RouteEntry);         NASD_RouteEntry &rteRef = (NASD_RouteEntry&)(*rte);         if (! m_IsDefaultRte) {             OD_Utl_XMLDataString nai("nai",                                       rteRef.Nai());             nai.populate(n->getFirstChild());	 }         else {             rteRef.Nai() = "default_route";	 }         NASD_ParserMultiElement< NASD_ParserCallRoutePolicies >                                   policies("access_policy");         policies().RouteEntry() = (NASD_RouteEntry*)rte.get();         policies.populate(n);                  OD_Utl_XMLDataString aaa("aaa_protocol",                                   rteRef.AaaProtocol());         aaa.populate(n->getFirstChild());         if (m_IsDefaultRte) {             NASD_CALLROUTE_TBL().DefaultRoute() = rteRef;	 }	 else {             NASD_CALLROUTE_TBL().Register(rte);	 }         return 0;      }      bool &IsDefaultRte() {         return m_IsDefaultRte;      }   protected:      bool m_IsDefaultRte;};class NASD_ParserCallRouting :    public OD_Utl_XMLElementParser{   public:      NASD_ParserCallRouting(const char *name) :          OD_Utl_XMLElementParser(name) {      }      virtual int svc(DOMNode *n) {         // Add other aaa protocol parsers here         NASD_ParserMultiElement< NASD_ParserCallRouteEntry >                             routeEntry("call_route_entry");         routeEntry.populate(n);         NASD_ParserMultiElement< NASD_ParserCallRouteEntry >                             routeDef("call_route_default");         routeDef().IsDefaultRte() = true;         routeDef.populate(n);         return 0;      }};class NASD_ParserCallMngt : public OD_Utl_XMLElementParser{   public:      NASD_ParserCallMngt(const char *name) :         OD_Utl_XMLElementParser(name) {      }      virtual int svc(DOMNode *n) {         OD_Utl_XMLDataUInt32 tcount("thread_count",                 (ACE_UINT32&)NASD_CALLMNGT_DATA()->ThreadCount());         tcount.populate(n->getFirstChild());         NASD_ParserAccessProtocols ap("access_protocols");         ap.populate(n->getFirstChild());         NASD_ParserAaaProtocols aaa("aaa_protocols");         aaa.populate(n->getFirstChild());         NASD_ParserAccessPolicies policy("access_policies");         policy.populate(n->getFirstChild());         NASD_ParserCallRouting call("call_routing");         call.populate(n->getFirstChild());         return (0);      }};class NASD_CfgLoader{   public:      NASD_CfgLoader(const char *name) {         Open(name);      }   protected:      int Open(const char *name) {         OD_Utl_XMLTreeParser parser;         NASD_ParserCallMngt root("call_management");         return parser.open(name, root);      }};#endif // __NASD_CONFIG_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -