![]() |
AnyConnect Secure Mobility Client 4.8.02045
|
00001 /************************************************************************** 00002 * Copyright (c) 2008, Cisco Systems, All Rights Reserved 00003 *************************************************************************** 00004 * 00005 * File: VpnStatsBase.h 00006 * Date: 01/2008 00007 * 00008 *************************************************************************** 00009 * 00010 * VPN Statistics base class implementation for the Client API. 00011 * 00012 ***************************************************************************/ 00013 #ifndef _VPNSTATSBASE_ 00014 #define _VPNSTATSBASE_ 00015 00016 #include <list> 00017 #if defined(_WIN32) && (_MSC_VER < 1800) 00018 typedef unsigned long uint32_t; 00019 #else 00020 #include <stdint.h> 00021 #endif 00022 00023 #include "ProtocolInfo.h" 00024 #include "RouteInfo.h" 00025 #include "api.h" 00026 00027 00028 // This is the base class for VPNStats. It provides underlying functionality 00029 // and data storage. The intent is to expose only what is needed by a user 00030 // of the API in the VPNStats class. 00031 // 00032 00033 class CStatisticsTlv; 00034 class CStateTlv; 00035 class CSessionInfoTlv; 00036 class CManualLock; 00037 class FirewallInfo; 00038 class CExtensibleStats; 00039 00040 class VPN_VPNAPI VPNStatsBase 00041 { 00042 public: 00043 00044 // various ctor 00045 // 00046 VPNStatsBase(); 00047 VPNStatsBase(const VPNStatsBase &existing); 00048 VPNStatsBase & operator= (const VPNStatsBase &); 00049 00050 virtual ~VPNStatsBase(); 00051 00052 // get a list of Secure Routes. 00053 // Method returns a list of RouteInfo pointers 00054 // 00055 const std::list<RouteInfo *> &getSecureRoutes(); 00056 00057 // Returns the number of applied secure routes for the specified IP protocol. 00058 // This may be different from the number of routes 00059 // pushed to UI, which cannot exceed 200. 00060 // 00061 uint16_t getAppliedSecureRouteCount(bool bIPv6) 00062 { 00063 return (bIPv6 ? m_uiAppliedSecureRouteCountV6 : 00064 m_uiAppliedSecureRouteCountV4); 00065 } 00066 00067 // get a list of Nonsecure Routes. 00068 // Method returns a list of RouteInfo pointers 00069 // 00070 const std::list<RouteInfo *> &getNonsecureRoutes(); 00071 00072 // Returns the number of applied non-secure routes for the specified IP protocol. 00073 // This may be different from the number of routes 00074 // pushed to UI, which cannot exceed 200. 00075 uint16_t getAppliedNonsecureRouteCount(bool bIPv6) 00076 { 00077 return (bIPv6 ? m_uiAppliedNonsecureRouteCountV6 : 00078 m_uiAppliedNonsecureRouteCountV4); 00079 } 00080 00081 // get a list of protocol Info objects. 00082 // Method returns a list of ProtocolInfo pointers 00083 // 00084 const std::list<ProtocolInfo *> &getProtocolInfo(); 00085 00086 // get a list of firewall Info objects. 00087 // Method returns a list of FirewallInfo pointers 00088 // 00089 const std::list<FirewallInfo *> &getFirewallInfo(); 00090 00091 // method used to retireve statistices by name. 00092 // 00093 const tstring &getStatValue(tstring &label); 00094 00095 void setConnectionStatistics(CStatisticsTlv *connectionStats); 00096 00097 bool ClearConnectionStatistics(); 00098 00099 bool ClearVPNSessionStats(); 00100 00101 // these two methods are helpers used to make sure SessionInfo 00102 // is available. 00103 // 00104 bool hasSessionInfo(); 00105 00106 bool IsFirewallInfoEqual (VPNStatsBase &stats); 00107 00108 void setDisconnected(); 00109 00110 // allow for updating state data. Returns the state that should 00111 // be displayed to the user. 00112 // 00113 // TODO: Paul agreed to removing dependency on Gendefs 00114 // he'll perform the actual commit for this 00115 bool setStateInfo(CStateTlv* stateInfo, 00116 STATE& rSessionState, 00117 VPNCON_SUBSTATE& rSessionSubState, 00118 STATE& rMgmtTunSessionState, 00119 VPNCON_SUBSTATE& rMgmtTunSessionSubState, 00120 NETENV_STATE& rNetEnvState, 00121 NETCTRL_STATE& rNetCtrlState, 00122 NETWORK_TYPE& rNetType); 00123 00124 // allow for updating sessionInfo data 00125 // 00126 void setSessionInfo(CSessionInfoTlv *sessionInfo); 00127 00128 // allow for updating strictly TND related data 00129 // 00130 void setTNDInfo(CSessionInfoTlv& sessionInfo); 00131 00132 // set the client operating Mode 00133 // 00134 void setClientOperatingMode(uint32_t operatingMode); 00135 00136 static const tstring::value_type* const* getVpnStatsStringTable(); 00137 00138 void StreamStats(tostream &outStream); 00139 00140 protected: 00141 static const tstring::value_type* const sm_pVpnStatsStringTable[]; 00142 00143 private: 00144 ApiStringMap mo_StatNameValue; 00145 ApiStringMap mo_SessionStats; 00146 00147 tstring ms_CurrentState; 00148 tstring ms_CurrentMgmtTunState; 00149 00150 bool mb_GotSessionInfo; 00151 00152 std::list<RouteInfo *> mlop_SecureRoutes; 00153 uint16_t m_uiAppliedSecureRouteCountV4; 00154 uint16_t m_uiAppliedSecureRouteCountV6; 00155 00156 std::list<RouteInfo *> mlop_NonsecureRoutes; 00157 uint16_t m_uiAppliedNonsecureRouteCountV4; 00158 uint16_t m_uiAppliedNonsecureRouteCountV6; 00159 00160 std::list<ProtocolInfo *> mlop_ProtocolInfo; 00161 00162 std::list<FirewallInfo *> mlop_FirewallInfo; 00163 00164 static CManualLock sm_statsLock; 00165 00166 static tstring EmptyString; 00167 static tstring NotAvailable; 00168 00169 ApiStringMap &getStatsMap(); 00170 ApiStringMap &getSessionStatsMap(); 00171 00172 void setStatValue(tstring &label, tstring value); 00173 void setStatValue(ApiStringMap &map, tstring &label, tstring value); 00174 00175 void synchronizeLists(const VPNStatsBase &existing); 00176 00177 void clearProtocolInfo(); 00178 void clearSecureRoutes(); 00179 void clearNonSecureRoutes(); 00180 void clearFirewallInfo(); 00181 00182 void init(); 00183 00184 void setIndividualStats(CExtensibleStats *stats); 00185 00186 friend VPN_VPNAPI tostream& operator<<(tostream &outStream, 00187 VPNStatsBase &stats); 00188 00189 }; 00190 00191 00192 #endif // _VPNSTATSBASE_