AnyConnect Secure Mobility Client 5.1.17.3394
ClientIfcBase.h
1/**************************************************************************
2* Copyright (c) 2006, 2021-2025 Cisco Systems, Inc.
3* All Rights Reserved. Cisco Highly Confidential.
4***************************************************************************
5*
6* File: ClientIfcBase.h
7* Author: Chris Fitzgerald
8* Date: 08/2007
9*
10***************************************************************************
11* Client Interface Base class implementation for the Client API.
12***************************************************************************/
13
14#ifndef _CLIENTIFCBASE_
15#define _CLIENTIFCBASE_
16
17#include <list>
18#include <vector>
19#include <memory>
20
21#include "ClientIfcCommon.h"
22#include "api.h"
23#if defined(PLATFORM_DARWIN)
24#include "ApprovalStatus.h"
25#endif
26
27#if defined(ANYCONNECT_USE_SNAK)
28#include "SNAK_CertPlugin.h"
29#endif
30
31#if defined(HOST_DATA_SUPPORTED)
32class IHostData;
33#endif
34
36class MsgWithArg;
37class VPNStats;
38class PreferenceInfo;
39class ProxyIfc;
40class CIpcMessage;
41class CertObj;
42class HostEntry;
43class ClientIfcInternal;
44
45#if defined(VPNAPI_TRANSMIGRATION_SUPPORTED)
46class CSharedAccessLock;
47#endif
48
49#if defined(VPNAPI_EVENT_NOTIFICATION_SUPPORTED)
50class CEventNotificationTlv;
51#endif
52
53#if defined(CREDENTIAL_PREFILL_SUPPORTED)
54class CredentialPrefill;
55#endif
56
57#if (defined(ANYCONNECT_USE_SNAK) || defined(PLATFORM_APPLE_SSLVPN)) && !defined(PLATFORM_WIN_APP)
58class ManagedCertificate;
59#endif
60
61#if defined(PROGRAM_DATA_IMPORT_SUPPORTED)
62class IACImporterAsync;
63class IACImporterAsyncCB;
64#endif
65
66class VPN_VPNAPI ClientIfcBase
67{
68 friend class EventMgr;
69 friend class ClientIfcInternal;
70
71protected:
72
73 ClientIfcBase();
74 virtual ~ClientIfcBase();
75
76 /**
77 * Callback used to deliver new statistics related to the VPN
78 * connection.
79 *
80 * When a connection is active, a new set of statistics is
81 * delivered each second.
82 *
83 * @see resetStats(), stopStats() and startStats()
84 *
85 */
86 virtual void StatsCB(VPNStats &stats) = 0;
87
88
89 /**
90 * Callback used to deliver VPN state and state change string.
91 * The stateString delivered by this method is localized.
92 *
93 * See the ::VPNState enum found in api.h for set of valid states.
94 */
95 virtual void StateCB(const VPNState state,
96 const VPNSubState subState,
97 const tstring stateString) = 0;
98
99
100 /**
101 * If a banner needs to be acknowledged, this CB delivers the banner
102 * to the client.
103 *
104 * NOTE: Connection establishment will block until the method
105 * setBannerResponse() is called.
106 *
107 * In a GUI, a banner would typically be displayed in a modal dialog
108 * with an accept or decline button selection.
109 *
110 * @see setBannerResponse() to set the user response to the banner.
111 */
112 virtual void BannerCB(const tstring &banner) = 0;
113
114 /**
115 * If a pre-connect reminder needs to be acknowledged, this CB delivers
116 * the pre-connect reminder to the client.
117 *
118 * NOTE: Connection establishment will block until the method
119 * setPreConnectReminderResponse() is called.
120 *
121 * In a GUI, a pre-connect reminder would typically be displayed in a modal
122 * dialog with an OK button selection.
123 *
124 * @see setPreConnectReminderResponse() to set the user acknowledgement to
125 * the pre-connect reminder message.
126 */
127 virtual void PreConnectReminderCB(const tstring &rtstrPreConnectReminder);
128
129 /**
130 * Messages are delivered via the NoticeCB and can come from multiple
131 * sources. There are four message types (error, warning, info and
132 * status). See the ::MessageType enum in api.h for the list.
133 *
134 * Clients using the API as an embedded application (not
135 * user visible) might want to further characterize
136 * messages. One option here is to use the AnyConnect message
137 * catalog and assign message codes as the translations for
138 * various messages. An application could then track messages based
139 * on its own error code scheme.
140 */
141 virtual void NoticeCB(const tstring &notice,
142 const MessageType type,
143 const bool bSensitive = false) = 0;
144
145#if defined(PLATFORM_DARWIN)
146 /**
147 * This CB is used to deliver service approval status updates
148 */
149 virtual void ServiceStatusCB(const VpnApprovalStatus& status);
150#endif
151
152#if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
153 virtual void CertBannerCB(const tstring &certBannerSummary,
154 const uint32_t nCertBannerCertLen,
155 const uint8_t *pCertBannerCertDer,
156 const std::list<tstring> &confirmReasons,
157 const std::list<CertConfirmReason> &confirmReasonEnums,
158 bool bImportAllowed = true) = 0;
159#endif
160
161 /**
162 * This CB would likely occur only during a connection when it was
163 * detected that the software needed to be upgraded, or when Start
164 * Before Logon (SBL) is being used.
165 *
166 * Unlike the other callback methods, this method provides a default
167 * implementation (calling the system's exit() function).
168 * If clients of the API wish to override this behavior, they are
169 * responsible for ensuring that the current running process exits with
170 * the return code specified by returnCode.
171 *
172 * <b>Caution</b>: IF YOU OVERRIDE THIS METHOD AND DO NOT EXIT WITH
173 * THE PROPER CODE SOFTWARE UPDATE FUNCTIONALITY IN YOUR CLIENT WILL
174 * BREAK
175 */
176 virtual void ExitNoticeCB(const tstring &tstrNotice,
177 const int returnCode);
178
179
180 /**
181 * Under normal operating conditions, this CB is called as soon
182 * as the attach method completes. In case the service (vpn agent)
183 * is not ready, this CB is not called until it is.
184 *
185 * Any API calls made prior to this CB being called will result in a
186 * NoticeCB error message.
187 */
188 virtual void ServiceReadyCB() = 0;
189
190
191
192 /**
193 * This method supports prompting for single or multiple values. All
194 * prompts are considered mandatory.
195 *
196 * The ConnectPromptInfo object contains a list of PromptEntry
197 * instances. The labels and their default values (if any) can be
198 * found in these instances. After the data has been collected from the user
199 * it can be set into these same instances. When ready, the client
200 * application should call the method UserSubmit() to have the
201 * responses read by the API.
202 */
203 virtual void UserPromptCB(ConnectPromptInfo &ConnectPrompt) = 0;
204
205
206 /**
207 * Use this method to provide Window Manager hints to GUI
208 * applications. To receive these hints, the application must
209 * identify itself as a GUI in the attach method. In addition, this
210 * method should be overridden to receive any generated events.
211 *
212 * Event that can be received include those indicating that a user is
213 * starting a second instance of the GUI application. This information
214 * can be used to tell the already running application to un-minimize
215 * itself and let the new program know that it should Quit (since a GUI
216 * is already running).
217 */
218 virtual void WMHintCB(const WMHint hint,
219 const WMHintReason reason);
220
221
222 /**
223 * This method is useful when the connection to the secure gateway
224 * has been established as part of a web-launch of the VPN tunnel.
225 *
226 * If the client application wishes to be notified of the secure
227 * gateway to which the VPN has been established, this method should
228 * be overridden.
229 *
230 * If the client application is started and a tunnel is already active,
231 * this method also delivers the name of the secure gateway host.
232 */
233 virtual void deliverWebLaunchHostCB(const tstring &activeHost);
234
235 /**
236 * This method is called when the preference to block untrusted
237 * servers is enabled and the current VPN server being connected
238 * to is untrusted. Clients should present an error to the user
239 * notifying them that the current connection to rtstrUntrustedServer
240 * is being blocked. The client should also provide a way for the
241 * user to change the preference to block untrusted servers.
242 *
243 * The user response must be indicated using setCertBlockedResponse
244 */
245 virtual void CertBlockedCB(const tstring &rtstrUntrustedServer) = 0;
246
247 /**
248 * This method is called when connections to untrusted VPN servers
249 * is allowed by policies and the current VPN server being connected
250 * to is untrusted. Clients should present a warning to the user
251 * notifying them that the current connection to rtstrUntrustedServer
252 * is unsafe. The reason the VPN server is untrusted is provided in
253 * rltstrCertErrors. The client should provide a way for the user to
254 * connect once, connect and always trust or cancel the connection.
255 * If bAllowImport is set to false then the always trust option should
256 * not be presented to users.
257 *
258 * The user response must be indicated using setCertWarningResponse
259 */
260 virtual void CertWarningCB(const tstring &rtstrUntrustedServer,
261 const std::list<tstring> &rltstrCertErrors,
262 bool bAllowImport) = 0;
263
264#if defined(PLATFORM_WIN_APP)
265 /**
266 * Same as above but also passes the Server certificate DER for details display
267 */
268 virtual void CertWarningCB(const tstring &rtstrUntrustedServer,
269 const std::list<tstring> &rltstrCertErrors,
270 const std::vector<uint8_t> &rvServerCertDER,
271 bool bAllowImport) = 0;
272#endif
273
274 /**
275 * This method should be overridden by the client application to
276 * exercise some control over the delivery of events from the other
277 * protected methods in this class.
278 *
279 * This might be necessary in cases where a GUI/CLI is being written and
280 * the data from this API needs to be delivered in the GUI/CLI or main
281 * thread. In this case, you should override this method and when it
282 * is called by the API post an event to your event queue (message
283 * pump, etc.). After this event executes in your GUI/CLI or main thread,
284 * call the method ClientIfc::ProcessEvents to have events delivered
285 * to your client application.
286 */
287 virtual void EventAvailable();
288
289#if defined(MANUAL_PKCS12_IMPORT_SUPPORTED)
290 virtual void ImportPKCS12ResultCB(const std::vector<uint8_t> &certHash,
291 const tstring &tstrError);
292#endif
293#if defined(PLATFORM_ANDROID)
294 virtual void ClientCertificateCB(std::vector< std::pair<uint32_t, uint8_t*> > certList) = 0;
295 virtual void AgentDetachedCB();
296#endif
297
298#if defined(VPNAPI_EVENT_NOTIFICATION_SUPPORTED)
299 /**
300 * Internal callback between ClientIfcBase and ClientIfc.
301 */
302 virtual void EventNotificationInternalCB(
303 const std::shared_ptr<CEventNotificationTlv>& spEventNtfctnTlv) = 0;
304#endif
305
306
307 /**
308 * Internal methods for use by ClientIfc.
309 */
310
312
313 void ClientIfcTransmigration();
314
315public:
316
317 bool attach(const ClientType clientType = ClientType_GUI,
318 const bool requestFullCapabilities = true,
319 const bool suppressAutoConnect = true,
320 const bool bSuppressEventAvailableCB = false);
321
322 void detach();
323
324 void ProcessEvents();
325
326 bool hasFullCapabilities();
327
328 bool isConnected(bool bSilent = false);
329
330 bool isAvailable();
331
332 std::list<tstring> getHostNames();
333
334 std::list<HostEntry> getHostEntries();
335
336 tstring getDefaultHostName();
337
338 bool connect(
339#if defined(HOST_DATA_SUPPORTED)
340 const IHostData& host);
341#else
342 tstring host);
343#endif
344
345 bool connect(
346#if defined(HOST_DATA_SUPPORTED)
347 const IHostData& host,
348#else
349 tstring host,
350#endif
351 unsigned int origin);
352
353 bool setNewTunnelGroup(const tstring & group);
354
355 void disconnect();
356
357 void disconnect(VPNDisconnectReason disconnectEvent);
358
359 void cancel();
360
361 void resetStats();
362
363 void getState();
364
365 VPNState getCurrentVPNState();
366 VPNSubState getCurrentVPNSubState();
367 VPNSubState getPreviousVPNSubState();
368
369 STATE getCurrentState();
370
371 tstring getStateText();
372 static tstring getNoticeTypeText(MessageType msgType);
373
374 static tstring getStateText(VPNState state,
375 VPNSubState subState = VPNSS_NORMAL,
376 NETENV_STATE netEnvState = NES_NETWORK_ACCESSIBLE,
377 const tstring& tstrConnectedHost = tstring());
378
379 void setNetworkStates(NETENV_STATE netEnvState,
380 NETCTRL_STATE netCtrlState,
381 NETWORK_TYPE netType,
382 bool bACBrowserForCPRemediation,
383 bool bUpdateUI);
384 void refreshOperatingModeForCurrentNetStates();
385 NETENV_STATE getCurrentNetEnvState();
386 NETENV_STATE getPreviousNetEnvState();
387 NETCTRL_STATE getCurrentNetCtrlState();
388 NETWORK_TYPE getCurrentNetType();
389 bool isACBrowserForCPRemediation();
390
391 static tstring getNetCtrlText(NETCTRL_STATE netCtrlState);
392 static tstring getNetEnvText(NETENV_STATE netEnvState,
393 bool bSimple = false);
394 static tstring getNetTypeText(NETWORK_TYPE netType);
395 static tstring getQuarantinedStatusText();
396 static tstring getNetworkStatusSimpleText(const NETENV_STATE netEnvState,
397 const NETCTRL_STATE netCtrlState);
398
399 // can't be static due to requiring operating mode information
400 tstring getNetworkStatusText(const VPNState state,
401 const VPNSubState subState,
402 const NETENV_STATE netEnvState,
403 const NETCTRL_STATE netCtrlState);
404
405 PreferenceInfo& getPreferences();
406
407 bool savePreferences();
408
409 void startStats();
410
411 void stopStats();
412
413 void UserSubmit();
414
415 void setBanner(const tstring &banner);
416 void setBannerResponse(bool bResponse);
417
418 void setPreConnectReminder(const tstring &tstrPreConnectReminder);
419 void setPreConnectReminderResponse();
420
421 bool getUserResponse();
422 bool isUserResponseSet();
423
424 void setCertBlocked(const tstring &tstrUntrustedServer);
425 void setCertWarning(const tstring &rtstrUntrustedServer,
426 const std::list<tstring> &rltstrCertErrors,
427 bool bAllowImport);
428#if defined(PLATFORM_WIN_APP)
429 void setCertWarning(const tstring &rtstrUntrustedServer,
430 const std::list<tstring> &rltstrCertErrors,
431 const std::vector<uint8_t>& rvServerCertDER,
432 bool bAllowImport);
433#endif
434 bool getCertImportResponse();
435
436#if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
437 void setCertBanner(tstring tstrCertBannerSummary,
438 uint32_t nCertBannerCertLen,
439 const uint8_t *pCertBannerCertDer,
440 const std::list<tstring> &confirmReasons,
441 const std::list<CertConfirmReason> &confirmReasonEnums,
442 bool bImportAllowed);
443
444 void setCertBannerResponse(bool bResponse, bool bImportCert);
445 void importServerCert(std::vector<uint8_t> certData);
446 bool setFipsMode(bool bEnableFips);
447#if defined(PLATFORM_ANDROID)
448 bool setStrictMode(bool bEnableStrictMode);
449 bool setRevocationEnabled(bool bRevocationEnabled);
450 bool IsRevocationEnabled();
451#endif // currently supported only for android
452#endif
453
454 void setUserPrompt(ConnectPromptInfo &ConnectPrompt);
455
456#if defined(PLATFORM_ANDROID)
457 void setClientCertResponse(std::vector< std::pair<uint32_t, uint8_t*> > &derList);
458 void setAgentDetached();
459 bool getClientCertificates();
460#endif
461
462#if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID)
463 void setSCEPEnrollInProgress(bool bInProgress);
464 bool isSCEPEnrollInProgress();
465#endif
466
467#if defined(MANUAL_PKCS12_IMPORT_SUPPORTED)
468 void setImportPKCS12Result(const std::vector<uint8_t> &certHash, const tstring &tstrError);
469 bool requestImportPKCS12(const std::vector<uint8_t> &data);
470 std::vector<uint8_t> importPKCS12WithPassword(const std::vector<uint8_t> &data, const tstring &password);
471#endif
472
473 void setCertBlockedResponse(bool bUnlock);
474 void setCertWarningResponse(bool bConnect, bool bImportCert);
475
476 void insertStateToConnectPrompt(ConnectPromptInfo &ConnectPrompt);
477
478 void ExitNotice(const tstring &tstrNotice, const int code = 0);
479
480 void notice(const tstring &tstrNotice,
481 const MessageType type = MsgType_Info,
482 bool bClearLastMsg = false,
483 bool bForce = false,
484 bool bStateMsg = false,
485 bool bSensitiveMsg = false);
486
487 void notice(MsgWithArg &notice,
488 const MessageType type = MsgType_Info,
489 bool bClearLastMsg = false,
490 bool bForce = false,
491 bool bStateMsg = false,
492 bool bSensitiveMsg = false);
493
494 void getStats(void);
495
496 void setStats(VPNStats &stats);
497
498 void exportStats(const tstring &tstrFilePath);
499
500 void initState(VPNState state,
501 VPNState previousState,
502 VPNSubState subState);
503
504 void setState(VPNState state,
505 VPNState previousState,
506 VPNSubState subState = VPNSS_NORMAL,
507 bool bUpdateStateMsg = true,
508 bool bOnlyUpdateUI = false);
509
510#if defined(PLATFORM_DARWIN)
511 void setServiceStatus(const VpnApprovalStatus& status);
512#endif
513
514#if defined(PROGRAM_DATA_IMPORT_SUPPORTED)
515 IACImporterAsync *createACImporter(IACImporterAsyncCB *pCallback);
516#endif
517
518 void setWMHint(WMHint hint,
519 WMHintReason reason);
520
521 bool isLastConnectType (const ConnectPromptType connPromptType);
522
523 bool isOperatingMode(OperatingMode opMode);
524 void setOperatingMode(OperatingMode opMode);
525 void unsetOperatingMode(OperatingMode opMode);
526
527 bool CanRemediateCaptivePortal();
528 bool policyAllowsCaptivePortalRemediation();
529
530 bool isEventShutdown();
531
532 bool isUsingEventModel();
533
534 time_t getLastDisconnectTime();
535
536 ConnectPromptInfo getConnectPromptInfo();
537 void resetConnectPromptPasswordData();
538
539 void setStandaloneConnection(bool isStandalone);
540
541 void deliverActiveHost(const tstring &activeHost,
542 ConnectProtocolType vpnProtocol = PROTOCOL_TYPE_UNKNOWN,
543 bool bActiveHostFriendlyName = false);
544
545 bool isVPNServiceReady();
546
547 // reset last disconnect time indicator.
548 //
549 void resetLastDisconnectTime(time_t time = 1);
550
551 void processMinimize();
552
553 // cert enrollment
554 void setEnrollClientCert(CertObj* pCert);
555
556 // Show user banner for cert import warning on linux
557 // SCEPIfc to ConnectMgr
558 void linuxCertImportWarnUser();
559
560 // Response to cert warning on linux
561 // ConnectMgr to SCEPIfc
562 void linuxCertImportWarnUserResponse(bool bAccept);
563
564 void setDefaultHost(tstring &host);
565
566#if defined(HOST_DATA_SUPPORTED)
567 void setDefaultHostProfile(const IHostData &hostProfile);
568 IHostData* getDefaultHostData();
569#endif
570
571 void setLastVpnError(VPNError vpnError);
572 VPNError getLastVpnError();
573
574#if defined(PLATFORM_ANDROID)
575 bool requestClientCertificates();
576#endif
577
578 bool requestImportLocalization(const tstring tstrLocale,
579 const std::vector<unsigned char> &MoFileData);
580
581 // Start the Automatic Headend Selection operation
582 void startAHS(const unsigned int uiReason,
583 const ProxyIfc& proxy);
584 // statusReturnCode is a long to match the current type of STATUSCODE.
585 // It is not using a STATUSCODE directly so that we do not have to
586 // expose the header files for STATUSCODEs to ClientIfcBase.h
587 void AHSSelectedHost(const unsigned int uiReason,
588 const std::vector<tstring> &headendList,
589 const long statusReturnCode,
590 const tstring& extraInfo);
591 std::vector<tstring> getAHSHostList();
592 unsigned int getAHSState();
593 bool isAHSHasRun();
594 bool IsAHSCachingRestricted();
595
596 bool suppressConnectionErrorPopups();
597
598 tstring getCaptivePortalDetectedMsg();
599
600 void setProxyAuthPrompts(ProxyIfc* pProxy,
601 const tstring& promptMsg);
602
603#if defined(INTERPROCESS_COMMUNICATION_SUPPORTED)
604 bool handleIpcMessage(CIpcMessage *pIpcMessage);
605#if defined(VPNAPI_EVENT_NOTIFICATION_SUPPORTED)
606 void signalDisconnectedToEventNtfctnThread();
607#endif
608#endif
609 bool IsCsdTokenVerified() const;
610
611#if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID)
612 virtual void SCEPEnrollStartCB();
613 virtual void SCEPEnrollExitCB();
614#endif
615
616 void activateConnectMgrTunnelInitiationCompletionEvent();
617 bool isConnectRequestActive();
618 bool isConnectRequestCleanup();
619#if defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
620 bool deleteProfileByName(const tstring &profileName);
621 tstring getProfileContents(const tstring &profileName);
622 bool importProfile(const tstring &profileName, const tstring &profileContents);
623#endif
624
625 bool syncProfileChange(const tstring &profileName);
626
627#if defined(CREDENTIAL_PREFILL_SUPPORTED)
628 bool hasPrefilledCredentials();
629 bool prefillCredentials(ConnectPromptInfo &connectPrompt);
630 void setPrefilledCredentials(CredentialPrefill *prefill);
631#endif
632
633#if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN)
634 std::list<ManagedCertificate *> enumerateCertificates(CertificateType certType);
635 bool deleteCertificates(CertificateType certType, const std::list<std::string> &idList);
636 bool deleteServerCertificates(const std::list<std::string> &idList);
637#endif
638
639#if defined(ANYCONNECT_USE_SNAK) && !defined(PLATFORM_WIN_APP)
640 std::list<ManagedCertificate *> enumerateSNAKCertificates(SNAK_CertType certType);
641 SNAK_CertType getSNAKCertType(CertificateType certType);
642 bool deleteClientCertificates(const std::list<std::string> &idList);
643#endif
644
645#if defined(PLATFORM_APPLE_SSLVPN)
646 bool canUseBackupServers();
647#endif
648
649 tstring getConnectHost();
650
651 tstring getMgmtTunnelHostname();
652
653 VPN_TUNNEL_SCOPE getVpnTunnelScope();
654
655 bool isStandaloneConnection();
656
657 void sendSSoLogoutPrompt(ConnectPromptInfo &cpi);
658
659 void setExternalSSOLogoutUrlFromAgent(const tstring& logoutUrl);
660
661private:
662
663 //
664 // Private Member Data
665 //
666
667#if defined(VPNAPI_TRANSMIGRATION_SUPPORTED)
668 std::shared_ptr<CSharedAccessLock> m_spClientIfcInternalPtrSharedAccessLock;
669#endif
670 std::unique_ptr<ClientIfcInternal> m_upClientIfcInternal;
671
672
673 //
674 // Private Member Methods
675 //
676
677 // Prevent copying by declaring but not defining copy constructor and operator= methods.
678 //
679 ClientIfcBase(const ClientIfcBase& other);
680 ClientIfcBase& operator=(const ClientIfcBase& other);
681};
682
683#endif // _CLIENTIFCBASE_
VPNDisconnectReason
Definition api.h:189
WMHint
Definition api.h:202
WMHintReason
Definition api.h:221
VPNError
Definition api.h:598
ConnectPromptType
Definition api.h:245
VPNSubState
Definition api.h:171
MessageType
Definition api.h:109
@ MsgType_Info
Definition api.h:113
OperatingMode
Definition api.h:546
#define tstring
Definition api.h:35
VPNState
Definition api.h:147
virtual void EventAvailable()
virtual void deliverWebLaunchHostCB(const tstring &activeHost)
virtual void CertBlockedCB(const tstring &rtstrUntrustedServer)=0
virtual void PreConnectReminderCB(const tstring &rtstrPreConnectReminder)
virtual void UserPromptCB(ConnectPromptInfo &ConnectPrompt)=0
virtual void WMHintCB(const WMHint hint, const WMHintReason reason)
virtual void StateCB(const VPNState state, const VPNSubState subState, const tstring stateString)=0
virtual void BannerCB(const tstring &banner)=0
virtual void ExitNoticeCB(const tstring &tstrNotice, const int returnCode)
virtual void ServiceReadyCB()=0
virtual void NoticeCB(const tstring &notice, const MessageType type, const bool bSensitive=false)=0
void ResetQuarantinedReconnect()
virtual void StatsCB(VPNStats &stats)=0
virtual void CertWarningCB(const tstring &rtstrUntrustedServer, const std::list< tstring > &rltstrCertErrors, bool bAllowImport)=0
Definition ConnectPromptInfo.h:38
Definition PreferenceInfo.h:27
Definition VPNStats.h:36
Definition ApprovalStatus.h:36