20 #ifndef _CLIENTIFCBASE_
21 #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;
136 #if defined(CREDENTIAL_PREFILL_SUPPORTED)
137 class CredentialPrefill;
140 #if !defined(PLATFORM_APPLE_SSLVPN)
144 #ifdef ANYCONNECT_USE_SNAK
146 class SNAK_StoragePlugin;
147 class SNAK_CertPlugin;
148 class SNAK_SocketPlugin;
149 class SNAK_DeviceInfoPlugin;
150 class SNAKDeviceInfoPluginCBImpl;
151 #endif // ANYCONNECT_USE_SNAK
153 #if defined(ANYCONNECT_USE_SNAK) || defined(PLATFORM_APPLE_SSLVPN)
154 class ManagedCertificate;
155 class ManagedCertHandle;
156 #endif // ANYCONNECT_USE_SNAK || PLATFORM_APPLE_SSLVPN
158 #if defined(PROGRAM_DATA_IMPORT_SUPPORTED)
159 class IACImporterAsync;
160 class IACImporterAsyncCB;
165 friend class EventMgr;
179 virtual void StatsCB(
VPNStats &stats) = 0;
188 virtual void StateCB(
const VPNState state,
190 const tstring stateString) = 0;
205 virtual void BannerCB(
const tstring &banner) = 0;
220 virtual void PreConnectReminderCB(
const tstring &rtstrPreConnectReminder);
234 virtual void NoticeCB(
const tstring ¬ice,
236 const bool bSensitive =
false) = 0;
238 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
239 virtual void CertBannerCB(
const tstring &certBannerSummary,
240 const uint32_t nCertBannerCertLen,
241 const uint8_t *pCertBannerCertDer,
242 const std::list<tstring> &confirmReasons,
243 const std::list<CertConfirmReason> &confirmReasonEnums,
244 bool bImportAllowed =
true) = 0;
262 virtual void ExitNoticeCB(
const tstring &tstrNotice,
263 const int returnCode);
274 virtual void ServiceReadyCB() = 0;
304 virtual void WMHintCB(
const WMHint hint,
319 virtual void deliverWebLaunchHostCB(
const tstring &activeHost);
331 virtual void CertBlockedCB(
const tstring &rtstrUntrustedServer) = 0;
346 virtual void CertWarningCB(
const tstring &rtstrUntrustedServer,
347 const std::list<tstring> &rltstrCertErrors,
348 bool bAllowImport) = 0;
350 #if defined(PLATFORM_WIN_APP)
354 virtual void CertWarningCB(
const tstring &rtstrUntrustedServer,
355 const std::list<tstring> &rltstrCertErrors,
356 const std::vector<uint8_t> &rvServerCertDER,
357 bool bAllowImport) = 0;
373 virtual void EventAvailable();
375 #ifdef MANUAL_PKCS12_IMPORT_SUPPORTED
376 virtual void ImportPKCS12ResultCB(
const std::vector<uint8_t> &certHash,
const tstring &tstrError);
378 #ifdef PLATFORM_ANDROID
379 virtual void ClientCertificateCB(std::vector< std::pair<uint32_t, uint8_t*> > certList) = 0;
380 virtual void AgentDetachedCB();
383 AgentIfc &getAgentIfc();
390 virtual bool attach(ClientType clientType = ClientType_GUI,
391 bool requestFullCapabilities =
true,
392 bool suppressAutoConnect =
true);
394 virtual void detach();
396 virtual void ProcessEvents();
398 virtual bool hasFullCapabilities();
400 virtual bool isConnected();
402 virtual bool isAvailable();
404 virtual std::list<tstring> getHostNames();
406 virtual std::list<HostEntry> getHostEntries();
408 virtual tstring getDefaultHostName();
410 #if defined(HOST_DATA_SUPPORTED)
411 virtual bool connect(
const IHostData& hostData);
413 bool connect(
const IHostData& hostData,
414 unsigned int origin);
416 virtual bool connect(
tstring host);
419 unsigned int origin);
422 virtual bool setNewTunnelGroup(
const tstring & group);
424 virtual void disconnect();
426 virtual void cancel();
428 virtual void resetStats();
430 virtual void getState();
441 NETENV_STATE netEnvState = NES_NETWORK_ACCESSIBLE,
444 void setNetworkStates(NETENV_STATE netEnvState,
445 NETCTRL_STATE netCtrlState,
446 NETWORK_TYPE netType,
447 bool bACBrowserForCPRemediation,
449 void refreshOperatingModeForCurrentNetStates();
450 NETENV_STATE getCurrentNetEnvState();
451 NETENV_STATE getPreviousNetEnvState();
452 NETCTRL_STATE getCurrentNetCtrlState();
453 NETWORK_TYPE getCurrentNetType();
454 bool isACBrowserForCPRemediation();
456 static tstring getNetCtrlText(NETCTRL_STATE netCtrlState);
457 static tstring getNetEnvText(NETENV_STATE netEnvState,
458 bool bSimple =
false);
459 static tstring getNetTypeText(NETWORK_TYPE netType);
460 static tstring getQuarantinedStatusText();
461 static tstring getNetworkStatusSimpleText(
const NETENV_STATE netEnvState,
462 const NETCTRL_STATE netCtrlState);
467 const NETENV_STATE netEnvState,
468 const NETCTRL_STATE netCtrlState);
472 bool savePreferences();
474 virtual void startStats();
476 virtual void stopStats();
478 virtual void UserSubmit();
480 void setBanner(
const tstring &banner);
481 void setBannerResponse(
bool bResponse);
483 void setPreConnectReminder(
const tstring &tstrPreConnectReminder);
484 void setPreConnectReminderResponse();
486 bool getUserResponse();
487 bool isUserResponseSet();
489 void setCertBlocked(
const tstring &tstrUntrustedServer);
490 void setCertWarning(
const tstring &rtstrUntrustedServer,
491 const std::list<tstring> &rltstrCertErrors,
493 #if defined(PLATFORM_WIN_APP)
494 void setCertWarning(
const tstring &rtstrUntrustedServer,
495 const std::list<tstring> &rltstrCertErrors,
496 const std::vector<uint8_t>& rvServerCertDER,
499 bool getCertImportResponse();
501 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
502 void setCertBanner(
tstring tstrCertBannerSummary,
503 uint32_t nCertBannerCertLen,
504 const uint8_t *pCertBannerCertDer,
505 const std::list<tstring> &confirmReasons,
506 const std::list<CertConfirmReason> &confirmReasonEnums,
507 bool bImportAllowed);
509 void setCertBannerResponse(
bool bResponse,
bool bImportCert);
510 void importServerCert(std::vector<uint8_t> certData);
511 bool setFipsMode(
bool bEnableFips);
512 #if defined(PLATFORM_ANDROID)
513 bool setStrictMode(
bool bEnableStrictMode);
514 bool setRevocationEnabled(
bool bRevocationEnabled);
515 bool IsRevocationEnabled();
516 #endif // currently supported only for android
521 #ifdef PLATFORM_ANDROID
522 void setClientCertResponse(std::vector< std::pair<uint32_t, uint8_t*> > &derList);
523 void setAgentDetached();
524 bool getClientCertificates();
527 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID)
528 void setSCEPEnrollInProgress(
bool bInProgress);
529 bool isSCEPEnrollInProgress();
530 #endif // PLATFORM_APPLE_SSLVPN || PLATFORM_ANDROID
532 #ifdef MANUAL_PKCS12_IMPORT_SUPPORTED
533 void setImportPKCS12Result(
const std::vector<uint8_t> &certHash,
const tstring &tstrError);
534 bool requestImportPKCS12(
const std::vector<uint8_t> &data);
535 std::vector<uint8_t> importPKCS12WithPassword(
const std::vector<uint8_t> &data,
const tstring &password);
538 void setCertBlockedResponse(
bool bUnlock);
539 void setCertWarningResponse(
bool bConnect,
bool bImportCert);
543 void ExitNotice(
const tstring &tstrNotice,
const int code = 0);
545 void notice(
const tstring &tstrNotice,
547 bool bClearLastMsg =
false,
549 bool bStateMsg =
false,
550 bool bSensitiveMsg =
false);
552 void notice(MsgWithArg ¬ice,
554 bool bClearLastMsg =
false,
556 bool bStateMsg =
false,
557 bool bSensitiveMsg =
false);
563 void exportStats(
const tstring &tstrFilePath);
568 bool bUpdateStateMsg =
true,
569 bool bOnlyUpdateUI =
false);
571 #ifdef PROGRAM_DATA_IMPORT_SUPPORTED
572 IACImporterAsync *createACImporter(IACImporterAsyncCB *pCallback);
575 void setWMHint(
WMHint hint,
584 bool CanRemediateCaptivePortal();
585 bool policyAllowsCaptivePortalRemediation();
587 bool isEventShutdown();
589 bool isUsingEventModel();
591 time_t getLastDisconnectTime();
594 void resetConnectPromptPasswordData();
596 void setStandaloneConnection(
bool isStandalone);
598 void deliverActiveHost(
const tstring &activeHost,
599 ConnectProtocolType vpnProtocol = PROTOCOL_TYPE_UNKNOWN,
600 bool bActiveHostFriendlyName =
false);
602 bool isVPNServiceReady();
606 void resetLastDisconnectTime(time_t time = 1);
608 void processMinimize();
611 void setEnrollClientCert(CertObj* pCert);
615 void linuxCertImportWarnUser();
619 void linuxCertImportWarnUserResponse(
bool bAccept);
621 void setDefaultHost(
tstring &host);
623 #if defined(HOST_DATA_SUPPORTED)
624 void setDefaultHostProfile(
const IHostData &hostProfile);
625 IHostData* getDefaultHostData();
626 #endif // HOST_DATA_SUPPORTED
628 void setLastVpnError(
VPNError vpnError);
631 #ifdef PLATFORM_ANDROID
632 bool requestClientCertificates();
635 bool requestImportLocalization(
const tstring tstrLocale,
636 const std::vector<unsigned char> &MoFileData);
639 void startAHS(
const unsigned int uiReason,
640 const ProxyIfc& proxy);
644 void AHSSelectedHost(
const unsigned int uiReason,
645 const std::vector<tstring> &headendList,
646 const long statusReturnCode,
648 std::vector<tstring> getAHSHostList();
649 unsigned int getAHSState();
652 bool suppressConnectionErrorPopups();
654 tstring getCaptivePortalDetectedMsg();
656 void setProxyAuthPrompts(ProxyIfc* pProxy,
659 #if defined(INTERPROCESS_COMMUNICATION_SUPPORTED)
660 bool handleIpcMessage(CIpcMessage *pIpcMessage);
662 bool IsCsdTokenVerified()
const;
664 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID)
665 virtual void SCEPEnrollStartCB();
666 virtual void SCEPEnrollExitCB();
667 #endif // PLATFORM_APPLE_SSLVPN || PLATFORM_ANDROID
669 void activateConnectMgrTunnelInitiationCompletionEvent();
670 bool isConnectRequestActive();
671 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
672 bool deleteProfileByName(
const tstring &profileName);
674 bool importProfile(
const tstring &profileName,
const tstring &profileContents);
675 #endif // PLATFORM_ANDROID || PLATFORM_CHROMEBOOK
677 bool syncProfileChange(
const tstring &profileName);
679 #if defined(CREDENTIAL_PREFILL_SUPPORTED)
680 bool hasPrefilledCredentials();
682 void setPrefilledCredentials(CredentialPrefill *prefill);
685 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN)
686 std::list<ManagedCertificate *> enumerateCertificates(CertificateType certType);
687 bool deleteCertificates(CertificateType certType,
const std::list<std::string> &idList);
688 bool deleteServerCertificates(
const std::list<std::string> &idList);
689 #endif // ANYCONNECT_USE_SNAK || PLATFORM_APPLE_SSLVPN
691 #if defined(ANYCONNECT_USE_SNAK)
692 std::list<ManagedCertificate *> enumerateSNAKCertificates(SNAK_CertType certType);
693 SNAK_CertType getSNAKCertType(CertificateType certType);
694 bool deleteClientCertificates(
const std::list<std::string> &idList);
695 #endif // ANYCONNECT_USE_SNAK
697 #if defined(PLATFORM_APPLE_SSLVPN)
698 bool canUseBackupServers();
700 #endif //PLATFORM_APPLE_SSLVPN
706 tstring getMgmtTunnelHostname();
708 VPN_TUNNEL_SCOPE getVpnTunnelScope();
710 bool isStandaloneConnection();
714 void setExternalSSOLogoutUrlFromAgent(
const tstring& logoutUrl);
717 CExecutionContext* m_pExecutionContext;
718 CExecutionContext* m_pExecutionContextMgr;
720 AgentIfc *mo_AgentIfc;
722 ConnectMgr *mo_ConnectMgr;
724 ApiThread *mo_ConnectThread;
726 EventMgr *mo_EventMgr;
728 PreferenceMgr *mo_PreferenceMgr;
734 #if defined(SCRIPTING_SUPPORTED)
735 CScriptingMgr *mo_ScriptingMgr;
736 #endif // SCRIPTING_SUPPORTED
738 #if defined(SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED)
740 bool m_bInformedAgentOfSCEP;
741 #endif // SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED
742 #ifndef PLATFORM_APPLE_SSLVPN
743 CStoragePath* m_pStoragePath;
744 #endif // !PLATFORM_APPLE_SSLVPN
746 #ifdef ANYCONNECT_USE_SNAK
747 PluginLoader *m_pPluginLoader;
748 SNAK_CertPlugin *m_pSNAKCert;
749 SNAK_SocketPlugin *m_pSNAKSocket;
750 SNAK_StoragePlugin *m_pSNAKStorage;
751 SNAK_DeviceInfoPlugin *m_pSNAKDeviceInfo;
752 SNAKDeviceInfoPluginCBImpl *m_pSNAKDeviceInfoCB;
754 bool mb_SNAKInitialized;
757 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN)
758 bool mb_SCEPEnrollInProgress;
759 #endif // PLATFORM_ANDROID || PLATFORM_APPLE_SSLVPN
761 bool mb_PreferenceMgrCreated;
762 bool mb_StandaloneConnection;
763 bool mb_UsingEventModel;
764 bool mb_UserResponse;
765 bool mb_IsUserResponseSet;
766 bool mb_PerformedAutoCertEnrollment;
767 tstring ms_PostEnrollmentConnectHost;
768 bool mb_CaptivePortalMsgDisplayed;
769 bool m_bSuppressMinimizeOnConnect;
770 bool m_bSuppressConnectionErrorPopups;
771 bool m_bLastConnectionAutomatic;
772 bool m_bImportCertResp;
773 bool m_bPrevMsgWasStateMsg;
775 unsigned int mui_OperatingMode;
776 NETENV_STATE m_currentNetEnvState;
777 NETENV_STATE m_previousNetEnvState;
778 NETCTRL_STATE m_currentNetCtrlState;
779 NETWORK_TYPE m_currentNetType;
780 bool m_bACBrowserForCPRemediation;
784 time_t m_disconnectTime;
786 static std::string ms_ThreadName;
788 CManualLock* m_pClientIfcStateLock;
789 CManualLock* m_pClientIfcLock;
790 CManualLock* m_pClientIfcPromptsLock;
791 CManualLock* m_pClientIfcOpModeLock;
792 CManualLock* m_pClientIfcAHSLock;
793 CManualLock* m_pClientIfcConnectModeLock;
794 CManualLock* m_pClientIfcInformAgentOfSCEPLock;
796 std::vector<tstring> msl_AHSSelectedHosts;
797 ApiThread* m_pAHSThread;
798 unsigned int m_uiAHSState;
799 #if defined(CREDENTIAL_PREFILL_SUPPORTED)
800 CredentialPrefill* m_pCredentialPrefill;
804 static volatile bool mb_deleteFirstPass;
806 ConnectMgr &getConnectMgr();
808 ProfileMgr &getProfileMgr();
809 UserPreferences &getUserPreferences();
811 void displayAgentAttachMessage();
813 void setLastDisconnectTime(time_t time);
815 void setCurrentStatePrompts(
const VPNState state,
818 const bool bUpdateStateMsg);
819 void setCurrentStateErrorMessage(
VPNState state, CONNECT_FAILURE_REASON cfr);
820 void getStateMessage(
const VPNState state,
823 const NETENV_STATE neState,
824 MsgWithArg& stateMessage);
827 virtual void OnLoadPreferencesComplete();
828 virtual bool IsPreferenceOverridable(
const PreferenceId ePreferenceId);
829 virtual void OverridePreferenceValue(
const PreferenceId ePreferenceId,
833 void RefreshPreferences(
void);
835 void displayAHSPrompt(
const bool isComplete);
836 void handleAHSPreferences(
const unsigned int uiReason);
837 void setAHSState(
const unsigned int ahsState);
839 bool autoConnectIfEnabled(
const bool suppressAutoConnect);
841 void clearUserSetResponseFlag();
843 bool decodeSSOToken();
845 #if defined(SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED)
846 bool processSCEPIpcMessage(CIpcMessage *pIpcMessage);
847 bool isSCEPRedirect();
848 void processSCEPRedirect();
849 #endif // SCEP_CERTIFICATE_ENROLLMENT_SUPPORTED
851 bool hasConnectCapabilities();
852 bool hasMgmtCapabilities();
857 #ifdef ANYCONNECT_USE_SNAK
858 bool initializeSNAK(
bool bUseExistingInstanceIfAvail);
860 ManagedCertificate *convertSnakToManagedCertificate(
const ManagedCertHandle &snakCert);
865 #endif // _CLIENTIFCBASE_
ConnectPromptType
Definition: api.h:224
Definition: PreferenceInfo.h:27
WMHintReason
Definition: api.h:200
VPNState
Definition: api.h:135
Definition: ClientIfcBase.h:163
#define tstring
Definition: api.h:35
WMHint
Definition: api.h:181
Definition: ConnectPromptInfo.h:37
MessageType
Definition: api.h:104
OperatingMode
Definition: api.h:519
VPNSubState
Definition: api.h:159
PreferenceId
Definition: api.h:274
VPNError
Definition: api.h:571
Definition: VPNStats.h:35
Definition: PreferenceUpdate.h:20