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

📄 aaa_data_defs.h

📁 Diameter协议栈
💻 H
📖 第 1 页 / 共 2 页
字号:
   AAA_RunTime runtime;                // runtime configuration   AAA_DataGeneral general;            // general configuration   AAA_DataParser parser;              // parser configuration   AAA_DataTransportMngt transport;    // transport configuration   AAA_DataSessionMngt session;        // session configuration   AAA_DataLog log;                    // logging configuration} AAA_DataRoot;typedef struct {   diameter_unsigned32_t reAuthType;   // re-authentication type   diameter_unsigned32_t resultCode;   // result code} AAA_ReAuthValue;typedef ACE_Singleton<AAA_DataRoot, ACE_Thread_Mutex> AAA_DataRoot_S;#define AAA_CFG_ROOT()            (AAA_DataRoot_S::instance())#define AAA_CFG_RUNTIME()         (&(AAA_DataRoot_S::instance()->runtime))#define AAA_CFG_GENERAL()         (&(AAA_DataRoot_S::instance()->general))#define AAA_CFG_PARSER()          (&(AAA_DataRoot_S::instance()->parser))#define AAA_CFG_TRANSPORT()       (&(AAA_DataRoot_S::instance()->transport))#define AAA_CFG_SESSION()         (&(AAA_DataRoot_S::instance()->session))#define AAA_CFG_AUTH_SESSION()    (&(AAA_DataRoot_S::instance()->session.authSessions))#define AAA_CFG_ACCT_SESSION()    (&(AAA_DataRoot_S::instance()->session.acctSessions))#define AAA_CFG_LOG()             (&(AAA_DataRoot_S::instance()->log))class AAA_BaseException{   public:      typedef enum {          ALLOC_FAILURE = 0,          INVALID_ID_TYPE,          MISSING_SESSION_ID,      } ERROR_CODE;       public:      AAA_BaseException(int code, std::string &desc) :        m_Code(code), m_Description(desc) {      }      AAA_BaseException(int code, const char* desc) :        m_Code(code), m_Description(desc) {      }      int &Code() {          return m_Code;      }      std::string &Description() {          return m_Description;      }   private:      int m_Code;      std::string m_Description;};class AAA_MsgQuery{    public:       AAA_MsgQuery(AAAMessage &msg) :           m_Msg(msg) {       }       bool IsRequest() {           return m_Msg.hdr.flags.r;       }       bool IsAnswer() {           return ! IsRequest();       }       bool IsCapabilities() {           return (m_Msg.hdr.code == AAA_MSGCODE_CAPABILITIES_EXCHG);       }       bool IsReAuth() {           return (m_Msg.hdr.code == AAA_MSGCODE_REAUTH);       }       bool IsWatchDog() {           return (m_Msg.hdr.code == AAA_MSGCODE_WATCHDOG);       }       bool IsPeerDisconnect() {           return (m_Msg.hdr.code == AAA_MSGCODE_DISCONNECT_PEER);       }       diameter_unsigned32_t Code() {           return m_Msg.hdr.code;       }       bool IsBaseProtocol() {           static diameter_unsigned32_t msgBaseProto[] = {               AAA_MSGCODE_ABORTSESSION,               AAA_MSGCODE_SESSIONTERMINATION,               AAA_MSGCODE_CAPABILITIES_EXCHG,               AAA_MSGCODE_WATCHDOG,               AAA_MSGCODE_DISCONNECT_PEER,               AAA_MSGCODE_ACCOUNTING,               AAA_MSGCODE_REAUTH           };           for (int i=0;                i<sizeof(msgBaseProto)/sizeof(diameter_unsigned32_t);                i++) {               if (msgBaseProto[i] == m_Msg.hdr.code) {                   return true;               }           }           return false;       }    private:       AAAMessage &m_Msg;};template <class ARG>class AAA_ProtectedQueue :    private std::list<ARG>{   public:      virtual ~AAA_ProtectedQueue() {      }      virtual void Enqueue(ARG arg) {         ACE_Write_Guard<ACE_RW_Mutex> guard(m_Lock);         std::list<ARG>::push_back(arg);        }      virtual ARG Dequeue() {         ACE_Write_Guard<ACE_RW_Mutex> guard(m_Lock);         ARG a = std::list<ARG>::front();         std::list<ARG>::pop_front();         return a;      }      virtual bool IsEmpty() {         ACE_Read_Guard<ACE_RW_Mutex> guard(m_Lock);         return std::list<ARG>::empty() ? true : false;      }   private:      ACE_RW_Mutex m_Lock;};template <class ARG> class AAA_IterAction {   public:      // return TRUE to delete entry in iteration      // return FALSE to sustain entry      virtual bool operator()(ARG&)=0;         protected:      virtual ~AAA_IterAction() {      }      AAA_IterAction() {      }};template <class INDEX,           class DATA>class AAA_ProtectedMap :    private std::map<INDEX, DATA>{   public:      virtual ~AAA_ProtectedMap() {      }      virtual void Add(INDEX ndx, DATA data) {         ACE_Write_Guard<ACE_RW_Mutex> guard(m_Lock);         std::map<INDEX, DATA>::insert(std::pair             <INDEX, DATA>(ndx, data));      }      virtual bool Lookup(INDEX ndx, DATA &data) {         ACE_Read_Guard<ACE_RW_Mutex> guard(m_Lock);         typename std::map<INDEX, DATA>::iterator i;         i = std::map<INDEX, DATA>::find(ndx);         if (i != std::map<INDEX, DATA>::end()) {             data = i->second;             return (true);         }         return (false);       }      virtual bool Remove(INDEX ndx,                          AAA_IterAction<DATA> &e) {         ACE_Write_Guard<ACE_RW_Mutex> guard(m_Lock);         typename std::map<INDEX, DATA>::iterator i;         i = std::map<INDEX, DATA>::find(ndx);         if (i != std::map<INDEX, DATA>::end()) {             e(i->second);             std::map<INDEX, DATA>::erase(i);             return (true);         }         return (false);      }      virtual bool IsEmpty() {         ACE_Read_Guard<ACE_RW_Mutex> guard(m_Lock);         return std::map<INDEX, DATA>::empty() ? true : false;      }      virtual void Iterate(AAA_IterAction<DATA> &e) {         ACE_Write_Guard<ACE_RW_Mutex> guard(m_Lock);         typename std::map<INDEX, DATA>::iterator i =             std::map<INDEX, DATA>::begin();         while (i != std::map<INDEX, DATA>::end()) {             if (e(i->second)) {                 typename std::map<INDEX, DATA>::iterator h = i;                 i ++;                 std::map<INDEX, DATA>::erase(h);                 continue;             }             i ++;         }      }   private:      ACE_RW_Mutex m_Lock;};template <class ARG>class AAA_ProtectedPtrQueue {   public:      void Enqueue(std::auto_ptr<ARG> a) {         m_Queue.Enqueue(a.release());      }      std::auto_ptr<ARG> Dequeue() {         std::auto_ptr<ARG> arg(m_Queue.Dequeue());         return arg;      }   private:      AAA_ProtectedQueue<ARG*> m_Queue;};template <class ARG>class AAA_ProtectedPtrMap{   public:      void Enqueue(std::auto_ptr<ARG> a) {         m_Queue.Enqueue(a.release());      }      std::auto_ptr<ARG> Dequeue() {         std::auto_ptr<ARG> arg(m_Queue.Dequeue());         return arg;      }   private:      AAA_ProtectedQueue<ARG*> m_Queue;};class AAA_RangedValue{   public:      typedef enum {          DEFAULT_LOW  = 0,          DEFAULT_HIGH = 3,      };   public:      AAA_RangedValue(int level = DEFAULT_LOW,                      int low = DEFAULT_LOW,                       int high = DEFAULT_HIGH) {          Reset(level, low, high);      }            virtual ~AAA_RangedValue() {      }      virtual int operator++() {          m_CurrentLevel += 1;          return (m_CurrentLevel > m_HighThreshold) ? true : false;      }      virtual int operator--() {          m_CurrentLevel -= 1;          return (m_CurrentLevel < m_LowThreshold) ? true : false;      }      virtual int operator()() {          return m_CurrentLevel;      }      virtual bool InRange() {          return ((m_CurrentLevel > m_LowThreshold) &&                  (m_CurrentLevel < m_HighThreshold));      }      void Reset(int level = DEFAULT_LOW,                 int low = DEFAULT_LOW,                  int high = DEFAULT_HIGH) {          m_CurrentLevel = level;          m_LowThreshold = low;          m_HighThreshold = high;      }    private:      int m_CurrentLevel;      int m_LowThreshold;      int m_HighThreshold;};#endif // __AAA_DEFS_H__

⌨️ 快捷键说明

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