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