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