AnyConnect Secure Mobility Client 4.8.02045

include/VPNStatsBase.h

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_