📄 diameter_nasreq_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_nasreq_client_fsm.hxx Client Statemachine definition for Diameter NASREQ Application Written by Yoshihiro Ohba Created May 1, 2004.*/#ifndef __NASREQ_CLIENT_FSM_H__#define __NASREQ_CLIENT_FSM_H__#include "framework.h"#include "diameter_nasreq_parser.hxx"#include "diameter_nasreq_authinfo.hxx"/*! * Windows specific export declarations */#ifdef WIN32 #if defined(DIAMETER_NASREQ_CLIENT_EXPORT) #define DIAMETER_NASREQ_CLIENT_EXPORTS __declspec(dllexport) #else #define DIAMETER_NASREQ_CLIENT_EXPORTS __declspec(dllimport) #endif#else #define DIAMETER_NASREQ_CLIENT_EXPORTS #define DIAMETER_NASREQ_CLIENT_EXPORTS#endiftypedef AAA_JobHandle<AAA_GroupedJob> DiameterJobHandle;class DiameterNasreqClientSession;/// State machine for Diameter NASREQ 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_NASREQ_CLIENT_EXPORTS DiameterNasreqClientStateMachine : public AAA_StateMachine<DiameterNasreqClientStateMachine>, public AAA_EventQueueJob{ friend class DiameterJobMultiplexor; public: /// Constructor. DiameterNasreqClientStateMachine(DiameterNasreqClientSession& s, DiameterJobHandle &h); ~DiameterNasreqClientStateMachine() { handle.Job().Remove(this); } enum { // EvSgStartLocalMethod, EvSgStart=-1, EvRxAuthInfo=-2, EvRxAA_Answer=-3, EvSgSessionTimeout=-4, EvSgAuthLifetimeTimeout=-5, EvSgAuthGracePeriodTimeout=-6, EvSgTimeout=-7, EvSgDisconnect=-8 }; /// 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 DiameterNasreqClientSession& 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 AA-Request. void SendAA_Request(); /// This virtual function is called when a continuation of the /// authentication is signaled to the application. virtual void SignalContinue(DiameterNasreqAuthenticationInfo &authInfo)=0; /// This virtual function is called when an authentication success /// is signaled to the application. virtual void SignalSuccess()=0; /// This virtual function is called when an authentication failure /// is signaled to the application. virtual void SignalFailure()=0; /// This is called by the application when authentication info is /// passed to the NAS. void ForwardAuthenticationInfo (DiameterNasreqAuthenticationInfo &authenticationInfo); /// 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. AUTH_REQUEST_TYPE_AUTHORIZE_AUTHENTICATE is set by /// default. virtual void SetAuthRequestType (AAA_ScholarAttribute<diameter_enumerated_t> &authRequestType) { authRequestType = AUTH_REQUEST_TYPE_AUTHORIZE_AUTHENTICATE; } /// 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 Nas-Port AVP contents. virtual void SetNasPort (AAA_ScholarAttribute<diameter_unsigned32_t> &nasPort) { } /// This function is used for setting Nas-Port-Type AVP contents. virtual void SetNasPortType (AAA_ScholarAttribute<diameter_enumerated_t> &nasPortType) { } /// 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 Port-Limit AVP contents. virtual void SetPortLimit (AAA_ScholarAttribute<diameter_unsigned32_t> &portLimit) { } /// 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 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 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 /// contents. virtual void SetFramedCompression (AAA_VectorAttribute<diameter_enumerated_t> &framedCompression) { } /// This function is used for setting Framed-Interface-Id AVP /// contents. virtual void SetFramedInterfaceId (AAA_ScholarAttribute<diameter_unsigned64_t> &framedInterfaceId) { } /// This function is used for setting Framed-IP-Address AVP /// contents. virtual void SetFramedIpAddress (AAA_ScholarAttribute<diameter_octetstring_t> &framedIpAddress) { } /// This function is used for setting Framed-IPv6-Prefix AVP /// contents. virtual void SetFramedIpv6Prefix (AAA_VectorAttribute<diameter_octetstring_t> &framedIpv6Prefix) { } /// This function is used for setting Framed-IP-Netmask AVP /// contents. virtual void SetFramedIpNetmask (AAA_ScholarAttribute<diameter_octetstring_t> &framedIpNetmask) { } /// This function is used for setting Framed-MTU AVP contents. virtual void SetFramedMtu (AAA_ScholarAttribute<diameter_unsigned32_t> &framedMtu) { } /// This function is used for setting Framed-Protocol AVP contents. virtual void SetFramedProtocol (AAA_ScholarAttribute<diameter_enumerated_t> &framedProtocol) { } /// This function is used for setting Login-IP-Host AVP contents. virtual void SetLoginIpHost (AAA_VectorAttribute<diameter_octetstring_t> &loginIpHost) { } /// This function is used for setting Login-IPv6-Host AVP contents. virtual void SetLoginIpv6Host (AAA_VectorAttribute<diameter_octetstring_t> &loginIpv6Host) { }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -