![]() |
AnyConnect Secure Mobility Client 5.1.9.113
|
00001 /******************************************************************************\ 00002 * This sample is supplied as is with no implied warranty. 00003 * It is designed to assist you in using the Cisco AnyConnect VPN API. 00004 * It is assumed that you will build a production application and 00005 * refer to this sample as a reference only. 00006 \*****************************************************************************/ 00007 00008 #ifndef _CLICLIENTIMPL_ 00009 #define _CLICLIENTIMPL_ 00010 00011 #include <mutex> 00012 #include <stdio.h> 00013 #include <stdlib.h> 00014 #include "ClientIfc.h" 00015 00016 enum RequestType 00017 { 00018 REQ_CONNECT, 00019 REQ_GROUPLIST, 00020 REQ_STATE, 00021 REQ_STATISTICS, 00022 REQ_DISCONNECT, 00023 REQ_END 00024 }; 00025 00026 /** 00027 * This is an example application demonstrating the implementation of the 00028 * AnyConnect API 00029 */ 00030 00031 class CLIClientImpl : public ClientIfc 00032 { 00033 public: 00034 00035 CLIClientImpl(); 00036 virtual ~CLIClientImpl(); 00037 00038 // The following methods are for support and not considered part of 00039 // the main API interface. 00040 00041 void printHostList(); 00042 00043 void printDefaultHost(); 00044 00045 void connect(std::string host, std::string user, 00046 std::string password, std::string group); 00047 00048 void disconnect(); 00049 00050 void showGroups(std::string host); 00051 00052 /** 00053 * This method demonstrates accessing the statistics data delivered 00054 * via the ClientIfc::StatsCB method. 00055 */ 00056 void getStats(); 00057 00058 /** 00059 * Method with example of parsing ConnectPromptInfo. 00060 * 00061 * This method is triggered by an API call on the method 00062 * UserPromptCB(ConnectPromptInfo &). 00063 */ 00064 void setUserData(ConnectPromptInfo &ConnectPrompt); 00065 00066 void printGroupList(ConnectPromptInfo &ConnectPrompt); 00067 00068 std::wstring convertMultiByteToWide(const std::string &sInputData); 00069 00070 void EventAvailable(); 00071 void ProcessEvents(); 00072 00073 void SetRequestType(RequestType e_RequestType); 00074 00075 protected: 00076 00077 void StatsCB(VPNStats &stats); 00078 00079 void StateCB(const VPNState state, 00080 const VPNSubState subState, 00081 const tstring stateString); 00082 00083 void BannerCB(const tstring &banner); 00084 00085 void PreConnectReminderCB(const tstring &rtstrPreConnectReminder); 00086 00087 void NoticeCB(const tstring ¬ice, 00088 const MessageType type, 00089 const bool bSensitive = false); 00090 00091 void ExitNoticeCB(const tstring ¬ice, 00092 const int returnCode); 00093 00094 void ServiceReadyCB(); 00095 00096 void UserPromptCB(ConnectPromptInfo &ConnectPrompt); 00097 00098 void CertBlockedCB(const tstring &rtstrUntrustedServer); 00099 void CertWarningCB(const tstring &rtstrUntrustedServer, 00100 const std::list<tstring> &rltstrCertErrors, 00101 bool bAllowImport); 00102 00103 00104 private: 00105 00106 RequestType me_RequestType; 00107 00108 tstring ms_user, 00109 ms_pswd, 00110 ms_group; 00111 00112 std::mutex mtx; 00113 volatile bool mb_exit; 00114 volatile bool mb_eventAvailable; 00115 bool mb_ConnectingStateReceived; 00116 }; 00117 00118 00119 #endif // _CLICLIENTIMPL_