19 #ifndef _CLIENTIFCBASE_
20 #define _CLIENTIFCBASE_
33 #if !defined(PLATFORM_APPLE_SSLVPN) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_WIN_APP)
34 #define SCRIPTING_SUPPORTED
36 #if !defined(PLATFORM_WIN_APP)
37 #define INTERPROCESS_COMMUNICATION_SUPPORTED
46 #if defined(_WIN32) || defined(_WIN32_WCE) || defined(PLATFORM_DARWIN) || defined(PLATFORM_LINUX) || defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN)
47 #define SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED
56 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_CHROMEBOOK)
57 #define HOST_DATA_SUPPORTED
66 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PRODUCT_TYPE_SSA)
67 #define MANUAL_PKCS12_IMPORT_SUPPORTED
76 #if defined(PLATFORM_ANDROID)
77 #define PROGRAM_DATA_IMPORT_SUPPORTED
86 #if defined(PLATFORM_ANDROID)
87 #define CREDENTIAL_PREFILL_SUPPORTED
90 #if defined(MANUAL_PKCS12_IMPORT_SUPPORTED) && !defined(__GENDEFS_H)
91 #if defined(HAVE_STDINT_H)
94 typedef unsigned char uint8_t;
95 #endif // HAVE_STDINT_H
96 #endif // MANUAL_PKCS12_IMPORT_SUPPORTED
99 #include "PreferenceUpdate.h"
101 #if defined(PLATFORM_WIN_APP)
102 typedef unsigned char uint8_t;
105 #if defined(HOST_DATA_SUPPORTED)
106 #include "IHostData.h"
109 #if defined(ANYCONNECT_USE_SNAK)
110 #include "Utility/PluginLoader.h"
111 #include "SNAK_CertPlugin.h"
112 #include "SNAK_SocketPlugin.h"
113 #include "SNAK_StoragePlugin.h"
126 class UserPreferences;
133 class CExecutionContext;
137 #if defined(CREDENTIAL_PREFILL_SUPPORTED)
138 class CredentialPrefill;
141 #if !defined(PLATFORM_APPLE_SSLVPN)
145 #ifdef ANYCONNECT_USE_SNAK
147 class SNAK_StoragePlugin;
148 class SNAK_CertPlugin;
149 class SNAK_SocketPlugin;
150 class SNAK_DeviceInfoPlugin;
151 class SNAKDeviceInfoPluginCBImpl;
152 #endif // ANYCONNECT_USE_SNAK
154 #if defined(ANYCONNECT_USE_SNAK) || defined(PLATFORM_APPLE_SSLVPN)
155 class ManagedCertificate;
156 class ManagedCertHandle;
157 #endif // ANYCONNECT_USE_SNAK || PLATFORM_APPLE_SSLVPN
159 #if defined(PROGRAM_DATA_IMPORT_SUPPORTED)
160 class IACImporterAsync;
161 class IACImporterAsyncCB;
166 friend class EventMgr;
180 virtual void StatsCB(
VPNStats &stats) = 0;
189 virtual void StateCB(
const VPNState state,
191 const tstring stateString) = 0;
206 virtual void BannerCB(
const tstring &banner) = 0;
221 virtual void PreConnectReminderCB(
const tstring &rtstrPreConnectReminder);
235 virtual void NoticeCB(
const tstring ¬ice,
237 const bool bSensitive =
false) = 0;
239 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
240 virtual void CertBannerCB(
const tstring &certBannerSummary,
241 const uint32_t nCertBannerCertLen,
242 const uint8_t *pCertBannerCertDer,
243 const std::list<tstring> &confirmReasons,
244 const std::list<CertConfirmReason> &confirmReasonEnums,
245 bool bImportAllowed =
true) = 0;
263 virtual void ExitNoticeCB(
const tstring &tstrNotice,
264 const int returnCode);
275 virtual void ServiceReadyCB() = 0;
305 virtual void WMHintCB(
const WMHint hint,
320 virtual void deliverWebLaunchHostCB(
const tstring &activeHost);
332 virtual void CertBlockedCB(
const tstring &rtstrUntrustedServer) = 0;
347 virtual void CertWarningCB(
const tstring &rtstrUntrustedServer,
348 const std::list<tstring> &rltstrCertErrors,
349 bool bAllowImport) = 0;
351 #if defined(PLATFORM_WIN_APP)
355 virtual void CertWarningCB(
const tstring &rtstrUntrustedServer,
356 const std::list<tstring> &rltstrCertErrors,
357 const std::vector<uint8_t> &rvServerCertDER,
358 bool bAllowImport) = 0;
374 virtual void EventAvailable();
376 #ifdef MANUAL_PKCS12_IMPORT_SUPPORTED
377 virtual void ImportPKCS12ResultCB(
const std::vector<uint8_t> &certHash,
const tstring &tstrError);
379 #ifdef PLATFORM_ANDROID
380 virtual void ClientCertificateCB(std::vector< std::pair<uint32_t, uint8_t*> > certList) = 0;
381 virtual void AgentDetachedCB();
384 AgentIfc &getAgentIfc();
391 virtual bool attach(ClientType clientType = ClientType_GUI,
392 bool requestFullCapabilities =
true,
393 bool suppressAutoConnect =
true);
395 virtual void detach();
397 virtual void ProcessEvents();
399 virtual bool hasFullCapabilities();
401 virtual bool isConnected();
403 virtual bool isAvailable();
405 virtual std::list<tstring> getHostNames();
407 virtual std::list<HostEntry> getHostEntries();
409 virtual tstring getDefaultHostName();
411 #if defined(HOST_DATA_SUPPORTED)
412 virtual bool connect(
const IHostData& hostData);
414 bool connect(
const IHostData& hostData,
415 unsigned int origin);
417 virtual bool connect(
tstring host);
420 unsigned int origin);
423 virtual bool setNewTunnelGroup(
const tstring & group);
425 virtual void disconnect();
427 virtual void cancel();
429 virtual void resetStats();
431 virtual void getState();
442 NETENV_STATE netEnvState = NES_NETWORK_ACCESSIBLE,
445 void setNetworkStates(NETENV_STATE netEnvState,
446 NETCTRL_STATE netCtrlState,
447 NETWORK_TYPE netType,
448 bool bACBrowserForCPRemediation,
450 void refreshOperatingModeForCurrentNetStates();
451 NETENV_STATE getCurrentNetEnvState();
452 NETENV_STATE getPreviousNetEnvState();
453 NETCTRL_STATE getCurrentNetCtrlState();
454 NETWORK_TYPE getCurrentNetType();
455 bool isACBrowserForCPRemediation();
457 static tstring getNetCtrlText(NETCTRL_STATE netCtrlState);
458 static tstring getNetEnvText(NETENV_STATE netEnvState,
459 bool bSimple =
false);
460 static tstring getNetTypeText(NETWORK_TYPE netType);
461 static tstring getQuarantinedStatusText();
462 static tstring getNetworkStatusSimpleText(
const NETENV_STATE netEnvState,
463 const NETCTRL_STATE netCtrlState);
468 const NETENV_STATE netEnvState,
469 const NETCTRL_STATE netCtrlState);
473 bool savePreferences();
475 virtual void startStats();
477 virtual void stopStats();
479 virtual void UserSubmit();
481 void setBanner(
const tstring &banner);
482 void setBannerResponse(
bool bResponse);
484 void setPreConnectReminder(
const tstring &tstrPreConnectReminder);
485 void setPreConnectReminderResponse();
487 bool getUserResponse();
488 bool isUserResponseSet();
490 void setCertBlocked(
const tstring &tstrUntrustedServer);
491 void setCertWarning(
const tstring &rtstrUntrustedServer,
492 const std::list<tstring> &rltstrCertErrors,
494 #if defined(PLATFORM_WIN_APP)
495 void setCertWarning(
const tstring &rtstrUntrustedServer,
496 const std::list<tstring> &rltstrCertErrors,
497 const std::vector<uint8_t>& rvServerCertDER,
500 bool getCertImportResponse();
502 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
503 void setCertBanner(
tstring tstrCertBannerSummary,
504 uint32_t nCertBannerCertLen,
505 const uint8_t *pCertBannerCertDer,
506 const std::list<tstring> &confirmReasons,
507 const std::list<CertConfirmReason> &confirmReasonEnums,
508 bool bImportAllowed);
510 void setCertBannerResponse(
bool bResponse,
bool bImportCert);
511 void importServerCert(std::vector<uint8_t> certData);
512 bool setFipsMode(
bool bEnableFips);
513 #if defined(PLATFORM_ANDROID)
514 bool setStrictMode(
bool bEnableStrictMode);
515 bool setRevocationEnabled(
bool bRevocationEnabled);
516 bool IsRevocationEnabled();
517 #endif // currently supported only for android
522 #ifdef PLATFORM_ANDROID
523 void setClientCertResponse(std::vector< std::pair<uint32_t, uint8_t*> > &derList);
524 void setAgentDetached();
525 bool getClientCertificates();
528 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID)
529 void setSCEPEnrollInProgress(
bool bInProgress);
530 bool isSCEPEnrollInProgress();
531 #endif // PLATFORM_APPLE_SSLVPN || PLATFORM_ANDROID
533 #ifdef MANUAL_PKCS12_IMPORT_SUPPORTED
534 void setImportPKCS12Result(
const std::vector<uint8_t> &certHash,
const tstring &tstrError);
535 bool requestImportPKCS12(
const std::vector<uint8_t> &data);
536 std::vector<uint8_t> importPKCS12WithPassword(
const std::vector<uint8_t> &data,
const tstring &password);
539 void setCertBlockedResponse(
bool bUnlock);
540 void setCertWarningResponse(
bool bConnect,
bool bImportCert);
544 void ExitNotice(
const tstring &tstrNotice,
const int code = 0);
546 void notice(
const tstring &tstrNotice,
548 bool bClearLastMsg =
false,
550 bool bStateMsg =
false,
551 bool bSensitiveMsg =
false);
553 void notice(MsgWithArg ¬ice,
555 bool bClearLastMsg =
false,
557 bool bStateMsg =
false,
558 bool bSensitiveMsg =
false);
564 void exportStats(
const tstring &tstrFilePath);
569 bool bUpdateStateMsg =
true,
570 bool bOnlyUpdateUI =
false);
572 #ifdef PROGRAM_DATA_IMPORT_SUPPORTED
573 IACImporterAsync *createACImporter(IACImporterAsyncCB *pCallback);
576 void setWMHint(
WMHint hint,
585 bool CanRemediateCaptivePortal();
586 bool policyAllowsCaptivePortalRemediation();
588 bool isEventShutdown();
590 bool isUsingEventModel();
592 time_t getLastDisconnectTime();
595 void resetConnectPromptPasswordData();
597 void setStandaloneConnection(
bool isStandalone);
599 void deliverActiveHost(
const tstring &activeHost,
600 ConnectProtocolType vpnProtocol = PROTOCOL_TYPE_UNKNOWN,
601 bool bActiveHostFriendlyName =
false);
603 bool isVPNServiceReady();
607 void resetLastDisconnectTime(time_t time = 1);
609 void processMinimize();
612 void setEnrollClientCert(CertObj* pCert);
616 void linuxCertImportWarnUser();
620 void linuxCertImportWarnUserResponse(
bool bAccept);
622 void setDefaultHost(
tstring &host);
624 #if defined(HOST_DATA_SUPPORTED)
625 void setDefaultHostProfile(
const IHostData &hostProfile);
626 IHostData* getDefaultHostData();
627 #endif // HOST_DATA_SUPPORTED
629 void setLastVpnError(
VPNError vpnError);
632 #ifdef PLATFORM_ANDROID
633 bool requestClientCertificates();
636 bool requestImportLocalization(
const tstring tstrLocale,
637 const std::vector<unsigned char> &MoFileData);
640 void startAHS(
const unsigned int uiReason,
641 const ProxyIfc& proxy);
645 void AHSSelectedHost(
const unsigned int uiReason,
646 const std::vector<tstring> &headendList,
647 const long statusReturnCode,
649 std::vector<tstring> getAHSHostList();
650 unsigned int getAHSState();
653 bool suppressConnectionErrorPopups();
655 tstring getCaptivePortalDetectedMsg();
657 void setProxyAuthPrompts(ProxyIfc* pProxy,
660 #if defined(INTERPROCESS_COMMUNICATION_SUPPORTED)
661 bool handleIpcMessage(CIpcMessage *pIpcMessage);
663 bool IsCsdTokenVerified()
const;
665 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID)
666 virtual void SCEPEnrollStartCB();
667 virtual void SCEPEnrollExitCB();
668 #endif // PLATFORM_APPLE_SSLVPN || PLATFORM_ANDROID
670 void activateConnectMgrTunnelInitiationCompletionEvent();
671 bool isConnectRequestActive();
672 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
673 bool deleteProfileByName(
const tstring &profileName);
675 bool importProfile(
const tstring &profileName,
const tstring &profileContents);
676 #endif // PLATFORM_ANDROID || PLATFORM_CHROMEBOOK
678 bool syncProfileChange(
const tstring &profileName);
680 #if defined(CREDENTIAL_PREFILL_SUPPORTED)
681 bool hasPrefilledCredentials();
683 void setPrefilledCredentials(CredentialPrefill *prefill);
686 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN)
687 std::list<ManagedCertificate *> enumerateCertificates(CertificateType certType);
688 bool deleteCertificates(CertificateType certType,
const std::list<std::string> &idList);
689 bool deleteServerCertificates(
const std::list<std::string> &idList);
690 #endif // ANYCONNECT_USE_SNAK || PLATFORM_APPLE_SSLVPN
692 #if defined(ANYCONNECT_USE_SNAK)
693 std::list<ManagedCertificate *> enumerateSNAKCertificates(SNAK_CertType certType);
694 SNAK_CertType getSNAKCertType(CertificateType certType);
695 bool deleteClientCertificates(
const std::list<std::string> &idList);
696 #endif // ANYCONNECT_USE_SNAK
698 #if defined(PLATFORM_APPLE_SSLVPN)
699 bool canUseBackupServers();
701 #endif //PLATFORM_APPLE_SSLVPN
707 tstring getMgmtTunnelHostname();
709 VPN_TUNNEL_SCOPE getVpnTunnelScope();
711 bool isStandaloneConnection();
715 void setExternalSSOLogoutUrlFromAgent(
const tstring& logoutUrl);
723 CExecutionContext* m_pExecutionContext;
724 CExecutionContext* m_pExecutionContextMgr;
726 AgentIfc *mo_AgentIfc;
728 ConnectMgr *mo_ConnectMgr;
730 ApiThread *mo_ConnectThread;
732 EventMgr *mo_EventMgr;
734 PreferenceMgr *mo_PreferenceMgr;
740 #if defined(SCRIPTING_SUPPORTED)
741 CScriptingMgr *mo_ScriptingMgr;
742 #endif // SCRIPTING_SUPPORTED
744 #if defined(SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED)
746 bool m_bInformedAgentOfSCEP;
747 #endif // SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED
748 #ifndef PLATFORM_APPLE_SSLVPN
749 CStoragePath* m_pStoragePath;
750 #endif // !PLATFORM_APPLE_SSLVPN
752 #ifdef ANYCONNECT_USE_SNAK
753 PluginLoader *m_pPluginLoader;
754 SNAK_CertPlugin *m_pSNAKCert;
755 SNAK_SocketPlugin *m_pSNAKSocket;
756 SNAK_StoragePlugin *m_pSNAKStorage;
757 SNAK_DeviceInfoPlugin *m_pSNAKDeviceInfo;
758 SNAKDeviceInfoPluginCBImpl *m_pSNAKDeviceInfoCB;
760 bool mb_SNAKInitialized;
763 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN)
764 bool mb_SCEPEnrollInProgress;
765 #endif // PLATFORM_ANDROID || PLATFORM_APPLE_SSLVPN
767 bool mb_PreferenceMgrCreated;
768 bool mb_StandaloneConnection;
769 bool mb_UsingEventModel;
770 bool mb_UserResponse;
771 bool mb_IsUserResponseSet;
772 bool mb_PerformedAutoCertEnrollment;
773 tstring ms_PostEnrollmentConnectHost;
774 bool mb_CaptivePortalMsgDisplayed;
775 bool m_bSuppressMinimizeOnConnect;
776 bool m_bSuppressConnectionErrorPopups;
777 bool m_bLastConnectionAutomatic;
778 bool m_bImportCertResp;
779 bool m_bPrevMsgWasStateMsg;
781 unsigned int mui_OperatingMode;
782 NETENV_STATE m_currentNetEnvState;
783 NETENV_STATE m_previousNetEnvState;
784 NETCTRL_STATE m_currentNetCtrlState;
785 NETWORK_TYPE m_currentNetType;
786 bool m_bACBrowserForCPRemediation;
790 time_t m_disconnectTime;
792 static std::string ms_ThreadName;
794 CManualLock* m_pClientIfcStateLock;
795 CManualLock* m_pClientIfcLock;
796 CManualLock* m_pClientIfcPromptsLock;
797 CManualLock* m_pClientIfcOpModeLock;
798 CManualLock* m_pClientIfcAHSLock;
799 CManualLock* m_pClientIfcConnectModeLock;
800 CManualLock* m_pClientIfcInformAgentOfSCEPLock;
802 std::vector<tstring> msl_AHSSelectedHosts;
803 ApiThread* m_pAHSThread;
804 unsigned int m_uiAHSState;
805 #if defined(CREDENTIAL_PREFILL_SUPPORTED)
806 CredentialPrefill* m_pCredentialPrefill;
812 std::unique_ptr<CAppLog> m_upAppLogger;
816 static volatile bool mb_deleteFirstPass;
822 ConnectMgr &getConnectMgr();
824 ProfileMgr &getProfileMgr();
825 UserPreferences &getUserPreferences();
827 void displayAgentAttachMessage();
829 void setLastDisconnectTime(time_t time);
831 void setCurrentStatePrompts(
const VPNState state,
834 const bool bUpdateStateMsg);
835 void setCurrentStateErrorMessage(
VPNState state, CONNECT_FAILURE_REASON cfr);
836 void getStateMessage(
const VPNState state,
839 const NETENV_STATE neState,
840 MsgWithArg& stateMessage);
843 virtual void OnLoadPreferencesComplete();
844 virtual bool IsPreferenceOverridable(
const PreferenceId ePreferenceId);
845 virtual void OverridePreferenceValue(
const PreferenceId ePreferenceId,
849 void RefreshPreferences(
void);
851 void displayAHSPrompt(
const bool isComplete);
852 void handleAHSPreferences(
const unsigned int uiReason);
853 void setAHSState(
const unsigned int ahsState);
855 bool autoConnectIfEnabled(
const bool suppressAutoConnect);
857 void clearUserSetResponseFlag();
859 bool decodeSSOToken();
861 #if defined(SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED)
862 bool processSCEPIpcMessage(CIpcMessage *pIpcMessage);
863 bool isSCEPRedirect();
864 void processSCEPRedirect();
865 #endif // SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED
867 bool hasConnectCapabilities();
868 bool hasMgmtCapabilities();
873 #ifdef ANYCONNECT_USE_SNAK
874 bool initializeSNAK(
bool bUseExistingInstanceIfAvail);
876 ManagedCertificate *convertSnakToManagedCertificate(
const ManagedCertHandle &snakCert);
881 #endif // _CLIENTIFCBASE_
ConnectPromptType
Definition: api.h:228
Definition: PreferenceInfo.h:27
WMHintReason
Definition: api.h:204
VPNState
Definition: api.h:139
Definition: ClientIfcBase.h:164
#define tstring
Definition: api.h:35
WMHint
Definition: api.h:185
Definition: ConnectPromptInfo.h:37
MessageType
Definition: api.h:108
OperatingMode
Definition: api.h:523
VPNSubState
Definition: api.h:163
PreferenceId
Definition: api.h:278
VPNError
Definition: api.h:575
Definition: VPNStats.h:35
Definition: PreferenceUpdate.h:20