AnyConnect Secure Mobility Client 5.0.01242

include/ClientIfcBase.h

00001 /**************************************************************************
00002 *   Copyright (c) 2006, 2021-2022 Cisco Systems, Inc.
00003 *   All Rights Reserved. Cisco Highly Confidential.
00004 ***************************************************************************
00005 *
00006 *   File:   ClientIfcBase.h
00007 *   Author: Chris Fitzgerald
00008 *   Date:   08/2007
00009 *
00010 ***************************************************************************
00011 *   Client Interface Base class implementation for the Client API.
00012 ***************************************************************************/
00013 
00014 #ifndef _CLIENTIFCBASE_
00015 #define _CLIENTIFCBASE_
00016 
00017 #include <list>
00018 #include <vector>
00019 #include <memory>
00020 
00021 #include "api.h"
00022 #include "ClientIfcCommon.h" // Include prior to conditional compile directives, but after api.h.
00023 
00024 #if defined(ANYCONNECT_USE_SNAK)
00025 #include "SNAK_CertPlugin.h"
00026 #endif
00027 
00028 #if defined(HOST_DATA_SUPPORTED)
00029 class IHostData;
00030 #endif
00031 
00032 class ConnectPromptInfo;
00033 class MsgWithArg;
00034 class VPNStats;
00035 class PreferenceInfo;
00036 class ProxyIfc;
00037 class CIpcMessage;
00038 class CertObj;
00039 class HostEntry;
00040 class CEventNotificationTlv;
00041 class ClientIfcInternal;
00042 
00043 #if defined(CREDENTIAL_PREFILL_SUPPORTED)
00044 class CredentialPrefill;
00045 #endif
00046 
00047 #if (defined(ANYCONNECT_USE_SNAK) || defined(PLATFORM_APPLE_SSLVPN)) && !defined(PLATFORM_WIN_APP)
00048 class ManagedCertificate;
00049 #endif // ANYCONNECT_USE_SNAK || PLATFORM_APPLE_SSLVPN
00050 
00051 #if defined(PROGRAM_DATA_IMPORT_SUPPORTED)
00052 class IACImporterAsync;
00053 class IACImporterAsyncCB;
00054 #endif
00055 
00056 class VPN_VPNAPI ClientIfcBase
00057 {
00058     friend class EventMgr;
00059     friend class ClientIfcInternal;
00060 
00061     protected:
00062 
00063         ClientIfcBase();
00064         virtual ~ClientIfcBase();
00065 
00066         /**
00067         * Callback used to deliver new statistics related to the VPN
00068         * connection.
00069         *
00070         * When a connection is active, a new set of statistics is
00071         * delivered each second.
00072         *
00073         * @see resetStats(), stopStats() and startStats()
00074         *
00075         */
00076         virtual void StatsCB(VPNStats &stats) = 0;
00077 
00078 
00079         /**
00080         * Callback used to deliver VPN state and state change string.
00081         * The stateString delivered by this method is localized.
00082         *
00083         * See the ::VPNState enum found in api.h for set of valid states.
00084         */
00085         virtual void StateCB(const VPNState state,
00086                              const VPNSubState subState,
00087                              const tstring stateString) = 0;
00088 
00089 
00090         /**
00091         * If a banner needs to be acknowledged, this CB delivers the banner
00092         * to the client.
00093         *
00094         * NOTE: Connection establishment will block until the method
00095         * setBannerResponse() is called.
00096         *
00097         * In a GUI, a banner would typically be displayed in a modal dialog
00098         * with an accept or decline button selection.
00099         *
00100         * @see setBannerResponse() to set the user response to the banner.
00101         */
00102         virtual void BannerCB(const tstring &banner) = 0;
00103 
00104         /**
00105          * If a pre-connect reminder needs to be acknowledged, this CB delivers
00106          * the pre-connect reminder to the client. 
00107          *
00108          * NOTE: Connection establishment will block until the method
00109          * setPreConnectReminderResponse() is called.
00110          *
00111          * In a GUI, a pre-connect reminder would typically be displayed in a modal
00112          * dialog with an OK button selection.
00113          *
00114          * @see setPreConnectReminderResponse() to set the user acknowledgement to
00115          * the pre-connect reminder message.
00116          */  
00117         virtual void PreConnectReminderCB(const tstring &rtstrPreConnectReminder);
00118 
00119         /**
00120         * Messages are delivered via the NoticeCB and can come from multiple
00121         * sources.  There are four message types (error, warning, info and
00122         * status).  See the ::MessageType enum in api.h for the list.
00123         *
00124         * Clients using the API as an embedded application (not
00125         * user visible) might want to further characterize
00126         * messages.  One option here is to use the AnyConnect message
00127         * catalog and assign message codes as the translations for
00128         * various messages.  An application could then track messages based
00129         * on its own error code scheme.
00130         */    
00131         virtual void NoticeCB(const tstring &notice,
00132                               const MessageType type,
00133                               const bool bSensitive = false) = 0;
00134 
00135 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
00136         virtual void CertBannerCB(const tstring &certBannerSummary,
00137                                   const uint32_t nCertBannerCertLen,
00138                                   const uint8_t *pCertBannerCertDer,
00139                                   const std::list<tstring> &confirmReasons,
00140                                   const std::list<CertConfirmReason> &confirmReasonEnums,
00141                                   bool bImportAllowed = true) = 0;
00142 #endif
00143 
00144         /**
00145         * This CB would likely occur only during a connection when it was
00146         * detected that the software needed to be upgraded, or when Start
00147         * Before Logon (SBL) is being used.
00148         *
00149         * Unlike the other callback methods, this method provides a default
00150         * implementation (calling the system's exit() function).
00151         * If clients of the API wish to override this behavior, they are
00152         * responsible for ensuring that the current running process exits with
00153         * the return code specified by returnCode.
00154         *
00155         * <b>Caution</b>: IF YOU OVERRIDE THIS METHOD AND DO NOT EXIT WITH
00156         * THE PROPER CODE SOFTWARE UPDATE FUNCTIONALITY IN YOUR CLIENT WILL
00157         * BREAK
00158         */
00159         virtual void ExitNoticeCB(const tstring &tstrNotice,
00160                                   const int returnCode);
00161 
00162 
00163         /**
00164         * Under normal operating conditions, this CB is called as soon
00165         * as the attach method completes.  In case the service (vpn agent)
00166         * is not ready, this CB is not called until it is.
00167         *
00168         * Any API calls made prior to this CB being called will result in a
00169         * NoticeCB error message.
00170         */
00171         virtual void ServiceReadyCB() = 0;
00172 
00173 
00174 
00175         /**
00176         * This method supports prompting for single or multiple values.  All
00177         * prompts are considered mandatory.
00178         *
00179         * The ConnectPromptInfo object contains a list of PromptEntry
00180         * instances.  The labels and their default values (if any) can be
00181         * found in these instances.  After the data has been collected from the user
00182         * it can be set into these same instances.  When ready, the client
00183         * application should call the method UserSubmit() to have the
00184         * responses read by the API.
00185         */
00186         virtual void UserPromptCB(ConnectPromptInfo &ConnectPrompt) = 0;
00187 
00188 
00189         /**
00190         * Use this method to provide Window Manager hints to GUI
00191         * applications.  To receive these hints, the application must
00192         * identify itself as a GUI in the attach method.  In addition, this
00193         * method should be overridden to receive any generated events.
00194         *
00195         * Event that can be received include those indicating that a user is
00196         * starting a second instance of the GUI application.  This information
00197         * can be used to tell the already running application to un-minimize
00198         * itself and let the new program know that it should Quit (since a GUI
00199         * is already running).
00200         */
00201         virtual void WMHintCB(const WMHint hint,
00202                               const WMHintReason reason);
00203 
00204 
00205         /**
00206         * This method is useful when the connection to the secure gateway
00207         * has been established as part of a web-launch of the VPN tunnel.
00208         *
00209         * If the client application wishes to be notified of the secure
00210         * gateway to which the VPN has been established, this method should
00211         * be overridden.
00212         *
00213         * If the client application is started and a tunnel is already active,
00214         * this method also delivers the name of the secure gateway host.
00215         */
00216         virtual void deliverWebLaunchHostCB(const tstring &activeHost);
00217 
00218         /**
00219         * This method is called when the preference to block untrusted
00220         * servers is enabled and the current VPN server being connected
00221         * to is untrusted. Clients should present an error to the user
00222         * notifying them that the current connection to rtstrUntrustedServer
00223         * is being blocked. The client should also provide a way for the
00224         * user to change the preference to block untrusted servers.
00225         *
00226         * The user response must be indicated using setCertBlockedResponse
00227         */
00228         virtual void CertBlockedCB(const tstring &rtstrUntrustedServer) = 0;
00229 
00230         /**
00231         * This method is called when connections to untrusted VPN servers
00232         * is allowed by policies and the current VPN server being connected
00233         * to is untrusted. Clients should present a warning to the user
00234         * notifying them that the current connection to rtstrUntrustedServer
00235         * is unsafe. The reason the VPN server is untrusted is provided in
00236         * rltstrCertErrors. The client should provide a way for the user to
00237         * connect once, connect and always trust or cancel the connection.
00238         * If bAllowImport is set to false then the always trust option should
00239         * not be presented to users.
00240         *
00241         * The user response must be indicated using setCertWarningResponse
00242         */
00243         virtual void CertWarningCB(const tstring &rtstrUntrustedServer,
00244                                    const std::list<tstring> &rltstrCertErrors,
00245                                    bool bAllowImport) = 0;
00246 
00247 #if defined(PLATFORM_WIN_APP)
00248         /**
00249         * Same as above but also passes the Server certificate DER for details display
00250         */
00251         virtual void CertWarningCB(const tstring &rtstrUntrustedServer,
00252                                    const std::list<tstring> &rltstrCertErrors,
00253                                    const std::vector<uint8_t> &rvServerCertDER,
00254                                    bool bAllowImport) = 0;
00255 #endif
00256 
00257         /**
00258         * This method should be overridden by the client application to
00259         * exercise some control over the delivery of events from the other
00260         * protected methods in this class.
00261         *
00262         * This might be necessary in cases where a GUI/CLI is being written and
00263         * the data from this API needs to be delivered in the GUI/CLI or main
00264         * thread.  In this case, you should override this method and when it
00265         * is called by the API post an event to your event queue (message
00266         * pump, etc.).  After this event executes in your GUI/CLI or main thread,
00267         * call the method ClientIfc::ProcessEvents to have events delivered
00268         * to your client application.
00269         */
00270         virtual void EventAvailable();
00271 
00272 #ifdef MANUAL_PKCS12_IMPORT_SUPPORTED
00273         virtual void ImportPKCS12ResultCB(const std::vector<uint8_t> &certHash,
00274                                           const tstring &tstrError);
00275 #endif        
00276 #ifdef PLATFORM_ANDROID
00277         virtual void ClientCertificateCB(std::vector< std::pair<uint32_t, uint8_t*> > certList) = 0;
00278         virtual void AgentDetachedCB();
00279 #endif
00280 
00281         /**
00282         * Internal callback between ClientIfcBase and ClientIfc.
00283         */
00284         virtual void EventNotificationInternalCB(
00285             const std::shared_ptr<CEventNotificationTlv>& spEventNtfctnTlv) = 0;
00286 
00287 
00288         /**
00289         * Internal method for use by ClientIfc.
00290         */
00291         void ClientIfcTransmigration();
00292 
00293     public:
00294 
00295         bool attach(const ClientType clientType = ClientType_GUI,
00296                     const bool requestFullCapabilities = true,
00297                     const bool suppressAutoConnect = true,
00298                     const bool bSuppressEventAvailableCB = false);
00299 
00300         void detach();
00301 
00302         void ProcessEvents();
00303 
00304         bool hasFullCapabilities();
00305 
00306         bool isConnected(bool bSilent = false);
00307 
00308         bool isAvailable();
00309 
00310         std::list<tstring> getHostNames();
00311 
00312         std::list<HostEntry> getHostEntries();
00313 
00314         tstring getDefaultHostName();
00315 
00316         bool connect(
00317 #if defined(HOST_DATA_SUPPORTED)
00318             const IHostData& host);
00319 #else
00320             tstring host);
00321 #endif
00322 
00323         bool connect(
00324 #if defined(HOST_DATA_SUPPORTED)
00325             const IHostData& host,
00326 #else
00327             tstring host,
00328 #endif
00329             unsigned int origin);
00330 
00331         bool setNewTunnelGroup(const tstring & group);
00332 
00333         void disconnect();
00334 
00335         void cancel();
00336 
00337         void resetStats();
00338 
00339         void getState();
00340 
00341         VPNState getCurrentState();
00342         VPNSubState getCurrentSubState();
00343         VPNSubState getPreviousSubState();
00344 
00345         tstring getStateText();
00346         static tstring getNoticeTypeText(MessageType msgType);
00347 
00348         static tstring getStateText(VPNState state,
00349                                     VPNSubState subState = VPNSS_NORMAL,
00350                                     NETENV_STATE netEnvState = NES_NETWORK_ACCESSIBLE,
00351                                     const tstring& tstrConnectedHost = tstring());
00352 
00353         void setNetworkStates(NETENV_STATE netEnvState, 
00354                               NETCTRL_STATE netCtrlState,
00355                               NETWORK_TYPE netType,
00356                               bool bACBrowserForCPRemediation,
00357                               bool bUpdateUI);
00358         void refreshOperatingModeForCurrentNetStates();
00359         NETENV_STATE getCurrentNetEnvState();
00360         NETENV_STATE getPreviousNetEnvState();
00361         NETCTRL_STATE getCurrentNetCtrlState();
00362         NETWORK_TYPE getCurrentNetType();
00363         bool isACBrowserForCPRemediation();
00364 
00365         static tstring getNetCtrlText(NETCTRL_STATE netCtrlState);
00366         static tstring getNetEnvText(NETENV_STATE netEnvState,
00367                                      bool bSimple = false);
00368         static tstring getNetTypeText(NETWORK_TYPE netType);
00369         static tstring getQuarantinedStatusText();
00370         static tstring getNetworkStatusSimpleText(const NETENV_STATE netEnvState,
00371                                                   const NETCTRL_STATE netCtrlState);
00372 
00373         // can't be static due to requiring operating mode information
00374         tstring getNetworkStatusText(const VPNState state,
00375                                      const VPNSubState subState,
00376                                      const NETENV_STATE netEnvState,
00377                                      const NETCTRL_STATE netCtrlState);
00378 
00379         PreferenceInfo &getPreferences();
00380 
00381         bool savePreferences();
00382 
00383         void startStats();
00384 
00385         void stopStats();
00386 
00387         void UserSubmit();
00388 
00389         void setBanner(const tstring &banner);
00390         void setBannerResponse(bool bResponse);
00391 
00392         void setPreConnectReminder(const tstring &tstrPreConnectReminder);
00393         void setPreConnectReminderResponse();
00394 
00395         bool getUserResponse();
00396         bool isUserResponseSet();
00397 
00398         void setCertBlocked(const tstring &tstrUntrustedServer);
00399         void setCertWarning(const tstring &rtstrUntrustedServer,
00400                             const std::list<tstring> &rltstrCertErrors,
00401                             bool bAllowImport);
00402 #if defined(PLATFORM_WIN_APP)
00403         void setCertWarning(const tstring &rtstrUntrustedServer,
00404                             const std::list<tstring> &rltstrCertErrors,
00405                             const std::vector<uint8_t>& rvServerCertDER,
00406                             bool bAllowImport);
00407 #endif
00408         bool getCertImportResponse();
00409 
00410 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
00411         void setCertBanner(tstring tstrCertBannerSummary,
00412                            uint32_t nCertBannerCertLen,
00413                            const uint8_t *pCertBannerCertDer,
00414                            const std::list<tstring> &confirmReasons,
00415                            const std::list<CertConfirmReason> &confirmReasonEnums,
00416                            bool bImportAllowed);
00417 
00418         void setCertBannerResponse(bool bResponse, bool bImportCert);
00419         void importServerCert(std::vector<uint8_t> certData);
00420         bool setFipsMode(bool bEnableFips);
00421 #if defined(PLATFORM_ANDROID)
00422         bool setStrictMode(bool bEnableStrictMode);
00423         bool setRevocationEnabled(bool bRevocationEnabled);
00424         bool IsRevocationEnabled();
00425 #endif // currently supported only for android
00426 #endif
00427 
00428         void setUserPrompt(ConnectPromptInfo &ConnectPrompt);
00429 
00430 #ifdef PLATFORM_ANDROID
00431         void setClientCertResponse(std::vector< std::pair<uint32_t, uint8_t*> > &derList);
00432         void setAgentDetached();
00433         bool getClientCertificates();
00434 #endif
00435 
00436 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID)
00437         void setSCEPEnrollInProgress(bool bInProgress);
00438         bool isSCEPEnrollInProgress();
00439 #endif // PLATFORM_APPLE_SSLVPN || PLATFORM_ANDROID
00440 
00441 #ifdef MANUAL_PKCS12_IMPORT_SUPPORTED
00442         void setImportPKCS12Result(const std::vector<uint8_t> &certHash, const tstring &tstrError);
00443         bool requestImportPKCS12(const std::vector<uint8_t> &data);
00444         std::vector<uint8_t> importPKCS12WithPassword(const std::vector<uint8_t> &data, const tstring &password);
00445 #endif
00446 
00447         void setCertBlockedResponse(bool bUnlock);
00448         void setCertWarningResponse(bool bConnect, bool bImportCert);
00449 
00450         void insertStateToConnectPrompt(ConnectPromptInfo &ConnectPrompt);
00451 
00452         void ExitNotice(const tstring &tstrNotice, const int code = 0);
00453 
00454         void notice(const tstring &tstrNotice,
00455                     const MessageType type = MsgType_Info,
00456                     bool bClearLastMsg = false,
00457                     bool bForce = false,
00458                     bool bStateMsg = false,
00459                     bool bSensitiveMsg = false);
00460 
00461         void notice(MsgWithArg &notice,
00462                     const MessageType type = MsgType_Info,
00463                     bool bClearLastMsg = false,
00464                     bool bForce = false,
00465                     bool bStateMsg = false,
00466                     bool bSensitiveMsg = false);
00467 
00468         void getStats(void);
00469 
00470         void setStats(VPNStats &stats);
00471 
00472         void exportStats(const tstring &tstrFilePath);
00473 
00474         void initState(VPNState state,
00475                        VPNState previousState,
00476                        VPNSubState subState);
00477 
00478         void setState(VPNState state,
00479                       VPNState previousState,
00480                       VPNSubState subState = VPNSS_NORMAL,
00481                       bool bUpdateStateMsg = true,
00482                       bool bOnlyUpdateUI = false);
00483 
00484 #ifdef PROGRAM_DATA_IMPORT_SUPPORTED
00485         IACImporterAsync *createACImporter(IACImporterAsyncCB *pCallback);
00486 #endif
00487 
00488         void setWMHint(WMHint hint,
00489                        WMHintReason reason);
00490 
00491         bool isLastConnectType (const ConnectPromptType connPromptType);
00492 
00493         bool isOperatingMode(OperatingMode opMode);
00494         void setOperatingMode(OperatingMode opMode);
00495         void unsetOperatingMode(OperatingMode opMode);
00496 
00497         bool CanRemediateCaptivePortal();
00498         bool policyAllowsCaptivePortalRemediation();
00499 
00500         bool isEventShutdown();
00501 
00502         bool isUsingEventModel();
00503 
00504         time_t getLastDisconnectTime();
00505 
00506         ConnectPromptInfo getConnectPromptInfo();
00507         void resetConnectPromptPasswordData();
00508 
00509         void setStandaloneConnection(bool isStandalone);
00510 
00511         void deliverActiveHost(const tstring &activeHost,
00512                                ConnectProtocolType vpnProtocol = PROTOCOL_TYPE_UNKNOWN,
00513                                bool bActiveHostFriendlyName = false);
00514 
00515         bool isVPNServiceReady();
00516 
00517         // reset last disconnect time indicator.
00518         //
00519         void resetLastDisconnectTime(time_t time = 1);
00520 
00521         void processMinimize();
00522         
00523         // cert enrollment
00524         void setEnrollClientCert(CertObj* pCert);
00525 
00526         // Show user banner for cert import warning on linux
00527         // SCEPIfc to ConnectMgr
00528         void linuxCertImportWarnUser();
00529 
00530         // Response to cert warning on linux
00531         // ConnectMgr to SCEPIfc
00532         void linuxCertImportWarnUserResponse(bool bAccept);
00533 
00534         void setDefaultHost(tstring &host);
00535 
00536 #if defined(HOST_DATA_SUPPORTED)
00537         void setDefaultHostProfile(const IHostData &hostProfile);
00538         IHostData* getDefaultHostData();
00539 #endif // HOST_DATA_SUPPORTED
00540 
00541         void setLastVpnError(VPNError vpnError);
00542         VPNError getLastVpnError();
00543 
00544 #ifdef PLATFORM_ANDROID
00545         bool requestClientCertificates();
00546 #endif
00547 
00548         bool requestImportLocalization(const tstring tstrLocale,
00549                                        const std::vector<unsigned char> &MoFileData);
00550 
00551         // Start the Automatic Headend Selection operation
00552         void startAHS(const unsigned int uiReason, 
00553                       const ProxyIfc& proxy);
00554         // statusReturnCode is a long to match the current type of STATUSCODE.
00555         // It is not using a STATUSCODE directly so that we do not have to
00556         // expose the header files for STATUSCODEs to ClientIfcBase.h
00557         void AHSSelectedHost(const unsigned int uiReason,
00558                              const std::vector<tstring> &headendList,
00559                              const long statusReturnCode,
00560                              const tstring& extraInfo);
00561         std::vector<tstring> getAHSHostList();
00562         unsigned int getAHSState();
00563         bool isAHSHasRun();
00564 
00565         bool suppressConnectionErrorPopups();
00566 
00567         tstring getCaptivePortalDetectedMsg();        
00568 
00569         void setProxyAuthPrompts(ProxyIfc* pProxy,
00570                                  const tstring& promptMsg);
00571 
00572 #if defined(INTERPROCESS_COMMUNICATION_SUPPORTED)
00573         bool handleIpcMessage(CIpcMessage *pIpcMessage);
00574 #endif
00575         bool IsCsdTokenVerified() const;
00576 
00577 #if defined(PLATFORM_APPLE_SSLVPN) || defined(PLATFORM_ANDROID)
00578         virtual void SCEPEnrollStartCB();
00579         virtual void SCEPEnrollExitCB();
00580 #endif // PLATFORM_APPLE_SSLVPN || PLATFORM_ANDROID
00581         
00582         void activateConnectMgrTunnelInitiationCompletionEvent();
00583         bool isConnectRequestActive();
00584 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_CHROMEBOOK)
00585         bool deleteProfileByName(const tstring &profileName);
00586         tstring getProfileContents(const tstring &profileName);
00587         bool importProfile(const tstring &profileName, const tstring &profileContents);
00588 #endif // PLATFORM_ANDROID || PLATFORM_CHROMEBOOK
00589 
00590         bool syncProfileChange(const tstring &profileName);
00591 
00592 #if defined(CREDENTIAL_PREFILL_SUPPORTED)
00593         bool hasPrefilledCredentials();
00594         bool prefillCredentials(ConnectPromptInfo &connectPrompt);
00595         void setPrefilledCredentials(CredentialPrefill *prefill);
00596 #endif
00597 
00598 #if defined(PLATFORM_ANDROID) || defined(PLATFORM_APPLE_SSLVPN)
00599         std::list<ManagedCertificate *> enumerateCertificates(CertificateType certType);
00600         bool deleteCertificates(CertificateType certType, const std::list<std::string> &idList);
00601         bool deleteServerCertificates(const std::list<std::string> &idList);
00602 #endif // ANYCONNECT_USE_SNAK || PLATFORM_APPLE_SSLVPN        
00603 
00604 #if defined(ANYCONNECT_USE_SNAK) && !defined(PLATFORM_WIN_APP)
00605         std::list<ManagedCertificate *> enumerateSNAKCertificates(SNAK_CertType certType);
00606         SNAK_CertType getSNAKCertType(CertificateType certType);
00607         bool deleteClientCertificates(const std::list<std::string> &idList);
00608 #endif // ANYCONNECT_USE_SNAK
00609 
00610 #if defined(PLATFORM_APPLE_SSLVPN)
00611         bool canUseBackupServers();
00612     
00613 #endif //PLATFORM_APPLE_SSLVPN
00614 
00615         tstring getConnectHost();
00616 
00617         tstring getMgmtTunnelHostname();
00618 
00619         VPN_TUNNEL_SCOPE getVpnTunnelScope();
00620 
00621         bool isStandaloneConnection();
00622 
00623         void sendSSoLogoutPrompt(ConnectPromptInfo &cpi);
00624 
00625         void setExternalSSOLogoutUrlFromAgent(const tstring& logoutUrl);
00626 
00627     private:
00628 
00629         //
00630         // Private Member Data
00631         //
00632 
00633         ClientIfcInternal* m_pClientIfcInternal;
00634 
00635 
00636         //
00637         // Private Member Methods
00638         //
00639 
00640         ClientIfcBase(const ClientIfcBase& other);
00641         ClientIfcBase& operator=(const ClientIfcBase& other);
00642 
00643 };
00644 
00645 
00646 #endif // _CLIENTIFCBASE_