📄 nasd_config.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 + -