📄 diameter_eap_client_fsm.hxx
字号:
/* 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 *//* $Id: *//* diameter_eap_client_fsm.hxx Client Statemachine definition for Diameter EAP Application Written by Yoshihiro Ohba Created December 4, 2003.*/#ifndef __EAP_CLIENT_FSM_H__#define __EAP_CLIENT_FSM_H__#include "framework.h"#include "diameter_eap_parser.hxx"/*! * Windows specific export declarations */#ifdef WIN32 #if defined(DIAMETER_EAP_CLIENT_EXPORT) #define DIAMETER_EAP_CLIENT_EXPORTS __declspec(dllexport) #else #define DIAMETER_EAP_CLIENT_EXPORTS __declspec(dllimport) #endif#else #define DIAMETER_EAP_CLIENT_EXPORTS #define DIAMETER_EAP_CLIENT_EXPORTS#endiftypedef AAA_JobHandle<AAA_GroupedJob> DiameterJobHandle;class DiameterEapClientSession;/// State machine for Diameter EAP clients. It has many member/// functions for enforcement of attributes (i.e., EnforceXYZ) and /// for setting attributes (i.e., SetXYX). Arguments of enforcement/// functions are not enveloped with AAA_ScholorAttribute or/// AAA_VectorAttributes since they are intended to be unmodified.class DIAMETER_EAP_CLIENT_EXPORTS DiameterEapClientStateMachine : public AAA_StateMachine<DiameterEapClientStateMachine>, public AAA_EventQueueJob{ friend class DiameterJobMultiplexor; public: /// Constructor. DiameterEapClientStateMachine(DiameterEapClientSession& s, DiameterJobHandle &h); ~DiameterEapClientStateMachine() { handle.Job().Remove(this); } enum { // EvSgStartLocalMethod, EvSgStart=-1, EvRxEapResponse=-2, EvRxDEA=-3, EvRxAA_Answer=-4, EvSgSessionTimeout=-5, EvSgAuthLifetimeTimeout=-6, EvSgAuthGracePeriodTimeout=-7, EvSgTimeout=-8, EvSgDisconnect=-9 }; /// Reimplemented from AAA_StateMachine // void Start() throw (AAA_Error); /// Store an event and notify the session. inline void Notify(AAA_Event ev) { // Enqueue the event. if (AAA_EventQueueJob::Enqueue(ev) <= 0) Abort(); if (handle.Job().Schedule(this) < 0) Abort(); } inline DiameterEapClientSession& Session() { return session; } /// This is used for aborting the state machine. Usually called /// when Notify() fails. virtual void Abort()=0; /// This is used for constructing and sending a /// Diameter-EAP-Request. void SendDER(); /// This virtual function is called when an EAP-Response message is /// passed to the EAP passthrough authenticator. virtual void SignalContinue(std::string &eapMsg)=0; /// This virtual function is called when an AAA success is signaled /// to the EAP passthrough authenticator. An EAP-Success message is /// contained in the argument if any. virtual void SignalSuccess(std::string &eapMsg)=0; /// This virtual function is called when an AAA success is signaled /// to the EAP passthrough authenticator. An EAP-Failure message is /// contained in the argument if any. virtual void SignalFailure(std::string &eapMsg)=0; /// This is called by application when EAP-Response is forwarded /// from passthrough EAP authenticator. void ForwardResponse(std::string &eapMsg); /// This virtual function is called when a RADIUS AA-Request needs /// to be sent as part of authorization. virtual void SendAA_Request() {} /// This virtual function is called when the current authorization /// lifetime is expired. XXX: this should also be called when an Re-Auth /// Request is received from the server. virtual void SignalReauthentication()=0; /// This virtual function is called when the session lifetime or the /// auth grace period is expired, or a disconect event is received /// from libdiameter. virtual void SignalDisconnect()=0; inline AAA_JobData& JobData() { return *handle.Job().Data(); } template <class T> inline T& JobData(Type2Type<T>) { return (T&)*handle.Job().Data(); } // Insert-AVP member functions. /// This function is used for setting Destination-Realm AVP /// contents. virtual void SetDestinationRealm (AAA_ScholarAttribute<diameter_utf8string_t> &destinationRealm) { } /// This function is used for setting Destination-Host AVP /// contents. virtual void SetDestinationHost (AAA_ScholarAttribute<diameter_utf8string_t> &destinationHost) { } /// This function is used for setting Auth-Request-Type AVP /// contents. virtual void SetAuthRequestType (AAA_ScholarAttribute<diameter_enumerated_t> &authRequestType) { authRequestType = AUTH_REQUEST_TYPE_AUTHORIZE_AUTHENTICATE; } /// This function is used for setting Nas-Port AVP contents. virtual void SetNasPort (AAA_ScholarAttribute<diameter_unsigned32_t> &nasPort) { } /// This function is used for setting Nas-Port-Id AVP contents. virtual void SetNasPortId (AAA_ScholarAttribute<diameter_utf8string_t> &nasPortId) { } /// This function is used for setting Origin-State-Id AVP contents. virtual void SetOriginStateId (AAA_ScholarAttribute<diameter_unsigned32_t> &originStateId) { } /// This function is used for setting Nas-Identifier AVP contents. virtual void SetNasIdentifier (AAA_ScholarAttribute<diameter_utf8string_t> &nasIdentifier) { } /// This function is used for setting Nas-IP-Address AVP contents. virtual void SetNasIpAddress (AAA_ScholarAttribute<diameter_octetstring_t> &nasIpAddress) { } /// This function is used for setting Nas-IPv6-Address AVP contents. virtual void SetNasIpv6Address (AAA_ScholarAttribute<diameter_octetstring_t> &nasIpv6Address) { } /// This function is used for setting User-Name AVP contents. virtual void SetUserName(AAA_ScholarAttribute<diameter_utf8string_t> &userName) { } /// This function is used for setting Service-Type AVP contents. virtual void SetServiceType(AAA_ScholarAttribute<diameter_enumerated_t> &serviceType) { } /// This function is used for setting Idle-Timeout AVP contents. virtual void SetIdleTimeout(AAA_ScholarAttribute<diameter_unsigned32_t> &idleTimeout) { } /// This function is used for setting State AVP contents. virtual void SetState(AAA_ScholarAttribute<diameter_octetstring_t> &state) { } /// This function is used for setting Authorization-Lifetime AVP /// contents. virtual void SetAuthorizationLifetime (AAA_ScholarAttribute<diameter_unsigned32_t> &authorizationLifetime) { } /// This function is used for setting Auth-Grace-Period AVP /// contents. virtual void SetAuthGracePeriod (AAA_ScholarAttribute<diameter_unsigned32_t> &authGracePeriod) { } /// This function is used for setting Auth-Session-State AVP /// contents. virtual void SetAuthSessionState (AAA_ScholarAttribute<diameter_enumerated_t> &authSessionState) { } /// This function is used for setting Session-Timeout AVP contents. virtual void SetSessionTimeout (AAA_ScholarAttribute<diameter_unsigned32_t> &sessionTimeout) { } /// This function is used for setting Class AVP contents. virtual void SetClass (AAA_VectorAttribute<diameter_octetstring_t> &classInDER) { } /// This function is used for setting Port-Limit AVP contents. virtual void SetPortLimit(AAA_ScholarAttribute<diameter_unsigned32_t> &portLimit) { } /// This function is used for setting Callback-Number AVP contents. virtual void SetCallbackNumber (AAA_ScholarAttribute<diameter_utf8string_t> &callbackNumber) { } /// This function is used for setting Called-Station-Id AVP /// contents. virtual void SetCalledStationId (AAA_ScholarAttribute<diameter_utf8string_t> &calledStationId) { } /// This function is used for setting Called-Station-Id AVP /// contents. virtual void SetCallingStationId (AAA_ScholarAttribute<diameter_utf8string_t> &callingStationId) { } /// This function is used for setting Originating-Line-Info AVP /// contents. virtual void SetOriginatingLineInfo (AAA_ScholarAttribute<diameter_octetstring_t> &originatingLineInfo) { } /// This function is used for setting Connect-Info AVP contents. virtual void SetConnectInfo (AAA_ScholarAttribute<diameter_utf8string_t> &connectInfo) { } /// This function is used for setting Framed-Compression AVP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -