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

📄 aaa_session_client.cxx

📁 Diameter协议栈
💻 CXX
📖 第 1 页 / 共 2 页
字号:
          AAA_SESSION_AUTH_EV_SSAR_OK, false, true },        { AAA_ERR_NOSERVICE, AAA_SESSION_AUTH_EV_SSAA_NOSVC,           0, true, false },        { AAA_ERR_MSG_UNPROCESSED, AAA_SESSION_AUTH_EV_SSAA_ERROR,           0, true, false },        { AAA_ERR_FAILURE, AAA_SESSION_AUTH_EV_SSAA_FAIL,           AAA_SESSION_AUTH_EV_SSAR_FAIL, false, true }    };    Attributes().MsgIdRxMessage(*msg);    AAAReturnCode rc = (msg->hdr.flags.r) ? RequestMsg(*msg) : AnswerMsg(*msg);    for (int i=0; i < sizeof(RxHandlerAry)/sizeof(RxHandler); i++) {        if (RxHandlerAry[i].m_Rc == rc) {            if (msg->hdr.flags.r) {               if (! RxHandlerAry[i].m_ValidOnRequestMsg) {                   AAA_LOG(LM_INFO, "(%P|%t) Invalid return value (INCOMPLETE, NOSERVICE or UNPROCESSED) in request msg\n");                   break;               }               if (RxHandlerAry[i].m_ReqEvent != 0) {                   m_Fsm.Notify(RxHandlerAry[i].m_ReqEvent);               }            }            else {               if ((RxHandlerAry[i].m_StatefulOnly) &&                    (Attributes().AuthSessionState()() !=                     AAA_SESSION_STATE_MAINTAINED)) {                   AAA_LOG(LM_INFO, "(%P|%t) Invalid return value (NOSERVICE or UNPROCESSED) in stateless session\n");                   break;               }               if (RxHandlerAry[i].m_AnsEvent != 0) {                   m_Fsm.Notify(RxHandlerAry[i].m_AnsEvent);               }            }            return (AAA_ERR_SUCCESS);        }    }    return (AAA_ERR_FAILURE);}AAAReturnCode AAA_ClientAuthSession::Send(std::auto_ptr<AAAMessage> msg) {    if (! m_Fsm.IsRunning()) {        return (AAA_ERR_FAILURE);    }    if ((m_Fsm.State() == AAA_SESSION_AUTH_ST_IDLE) &&        (! Attributes().AuthSessionState().IsNegotiated())) {         // send the session state hint         AAA_EnumAvpContainerWidget sessionStateAvp(msg->acl);         sessionStateAvp.AddAvp             (AAA_AVPNAME_AUTHSESSIONSTATE) =         Attributes().AuthSessionState()();    }    // send hint for session timeout    if (! Attributes().SessionTimeout().IsNegotiated()) {        AAA_UInt32AvpContainerWidget sessToutAvp(msg->acl);        diameter_unsigned32_t *tout = sessToutAvp.GetAvp                (AAA_AVPNAME_SESSIONTIMEOUT);        if (! tout) {            sessToutAvp.AddAvp(AAA_AVPNAME_SESSIONTIMEOUT) =                    Attributes().SessionTimeout()();        }        else if (Attributes().SessionTimeout()() < *tout) {            AAA_LOG(LM_INFO, "(%P|%t) !!! WARNING !!! application session timeout\n");            AAA_LOG(LM_INFO, "(%P|%t)                 greater than configuration or callback, overriding\n");            *tout = Attributes().SessionTimeout()();        }        else {            AAA_LOG(LM_INFO, "(%P|%t) Using applications session timeout settings\n");            Attributes().SessionTimeout() = *tout;	}    }    // send hint for authorization lifetime    if (! Attributes().AuthLifetime().IsNegotiated()) {        AAA_UInt32AvpContainerWidget authLifetimeAvp(msg->acl);        diameter_unsigned32_t *tout = authLifetimeAvp.GetAvp                (AAA_AVPNAME_AUTHLIFETIME);        if (! tout) {           authLifetimeAvp.AddAvp(AAA_AVPNAME_AUTHLIFETIME) =                    Attributes().AuthLifetime()();        }        else if (Attributes().AuthLifetime()() < *tout) {           AAA_LOG(LM_INFO, "(%P|%t) !!! WARNING !!! application authorization lifetime\n");           AAA_LOG(LM_INFO, "(%P|%t)                 greater than configuration or callback, overriding\n");            *tout = Attributes().AuthLifetime()();        }        else {            AAA_LOG(LM_INFO, "(%P|%t) Using applications auth lifetime settings\n");            Attributes().AuthLifetime() = *tout;	}    }    m_Fsm.Notify(AAA_SESSION_AUTH_EV_TX_SSAR, msg);    return (AAA_ERR_SUCCESS);}AAAReturnCode AAA_ClientAuthSession::End(){    if (m_Fsm.IsRunning()) {        AAA_SESSION_EV_AUTH ev = (Attributes().AuthSessionState()() ==                                   AAA_SESSION_STATE_MAINTAINED) ?                                   AAA_SESSION_AUTH_EV_ABORT :                                  AAA_SESSION_AUTH_EV_STOP;        m_Fsm.Notify(ev);    }    return (AAA_ERR_SUCCESS);}AAAReturnCode AAA_ClientAuthSession::Reset(){    m_Fsm.Stop();    AAA_AuthSession::Reset();    AAA_SESSION_DB().Remove(Attributes().SessionId());    return (AAA_ERR_SUCCESS);}AAA_ClientAcctSession::AAA_ClientAcctSession(AAA_Task &task, diameter_unsigned32_t id,  char *optionalValue) :    m_Task(task),    m_ApplicationId(id),    m_SubSessionId(0){    // assign diameter id    std::string &sid = m_SessionId.DiameterId();    sid = AAA_CFG_TRANSPORT()->identity + ".";    sid += AAA_CFG_TRANSPORT()->realm;    if (optionalValue) {        m_SessionId.OptionalValue() = optionalValue;    }    // add to session database    AAA_SESSION_DB().Add(m_SessionId, *this);    m_SessionId.Dump();}AAA_ClientAcctSession::~AAA_ClientAcctSession() {    // remove from session id    AAA_SESSION_DB().Remove(m_SessionId);}        AAAReturnCode AAA_ClientAcctSession::RegisterSubSession(AAA_AcctSession &s){    if (m_SubSessionMap.find(s.Attributes().SubSessionId()()) ==        m_SubSessionMap.end()) {        s.Attributes().SessionId() = m_SessionId;        s.Attributes().SubSessionId() = ++ m_SubSessionId;        m_SubSessionMap.insert	    (std::pair<diameter_unsigned64_t, AAA_AcctSession*>	     (m_SubSessionId, &s));        return (AAA_ERR_SUCCESS);    }    return (AAA_ERR_FAILURE);}AAAReturnCode AAA_ClientAcctSession::RemoveSubSession(diameter_unsigned64_t &id){    AAA_SubSessionMap::iterator i = m_SubSessionMap.find(id);    if (i != m_SubSessionMap.end()) {        m_SubSessionMap.erase(i);        return (AAA_ERR_SUCCESS);    }    return (AAA_ERR_FAILURE);}AAAReturnCode AAA_ClientAcctSession::Send(std::auto_ptr<AAAMessage> msg){    // stub, should not be used    return (AAA_ERR_FAILURE);}void AAA_ClientAcctSession::RxRequest(std::auto_ptr<AAAMessage> msg){      AAA_UInt64AvpContainerWidget subSessionIdAvp(msg->acl);    diameter_unsigned64_t *subSid = subSessionIdAvp.GetAvp                 (AAA_AVPNAME_ACCTSUBSID);    if (subSid) {        AAA_SubSessionMap::iterator i = m_SubSessionMap.find(*subSid);        if (i != m_SubSessionMap.end()) {            i->second->RxRequest(msg);            return;        }    }    AAA_LOG(LM_INFO, "(%P|%t) WARNING: Sub session id not found\n");}void AAA_ClientAcctSession::RxAnswer(std::auto_ptr<AAAMessage> msg){    AAA_UInt64AvpContainerWidget subSessionIdAvp(msg->acl);    diameter_unsigned64_t *subSid = subSessionIdAvp.GetAvp                 (AAA_AVPNAME_ACCTSUBSID);    if (subSid) {        AAA_SubSessionMap::iterator i = m_SubSessionMap.find(*subSid);        if (i != m_SubSessionMap.end()) {            i->second->RxAnswer(msg);            return;        }    }    AAA_LOG(LM_INFO, "(%P|%t) WARNING: Sub session id not found\n");}void AAA_ClientAcctSession::RxError(std::auto_ptr<AAAMessage> msg){    AAA_UInt64AvpContainerWidget subSessionIdAvp(msg->acl);    diameter_unsigned64_t *subSid = subSessionIdAvp.GetAvp                 (AAA_AVPNAME_ACCTSUBSID);    if (subSid) {        AAA_SubSessionMap::iterator i = m_SubSessionMap.find(*subSid);        if (i != m_SubSessionMap.end()) {            i->second->RxError(msg);            return;        }    }    AAA_LOG(LM_INFO, "(%P|%t) WARNING: Sub session id not found\n");}

⌨️ 快捷键说明

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