michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #pragma once michael@0: michael@0: #include "CallControlManager.h" michael@0: #include "PhoneDetailsImpl.h" michael@0: #include "CC_SIPCCService.h" michael@0: #include "mozilla/Mutex.h" michael@0: michael@0: michael@0: #include michael@0: #include michael@0: michael@0: namespace CSF michael@0: { michael@0: class CallControlManagerImpl: public CallControlManager, public CC_Observer michael@0: { michael@0: public: michael@0: CallControlManagerImpl(); michael@0: virtual bool destroy(); michael@0: virtual ~CallControlManagerImpl(); michael@0: michael@0: // Observers michael@0: virtual void addCCObserver ( CC_Observer * observer ); michael@0: virtual void removeCCObserver ( CC_Observer * observer ); michael@0: michael@0: virtual void addECCObserver ( ECC_Observer * observer ); michael@0: virtual void removeECCObserver ( ECC_Observer * observer ); michael@0: michael@0: // Config and global setup michael@0: virtual void setMultiClusterMode(bool allowMultipleClusters); michael@0: virtual void setSIPCCLoggingMask(const cc_int32_t mask); michael@0: virtual void setAuthenticationString(const std::string &authString); michael@0: virtual void setSecureCachePath(const std::string &secureCachePath); michael@0: michael@0: // Add local codecs michael@0: virtual void setAudioCodecs(int codecMask); michael@0: virtual void setVideoCodecs(int codecMask); michael@0: michael@0: virtual AuthenticationStatusEnum::AuthenticationStatus getAuthenticationStatus(); michael@0: michael@0: virtual bool registerUser( const std::string& deviceName, const std::string& user, const std::string& password, const std::string& domain ); michael@0: michael@0: virtual bool startP2PMode(const std::string& user); michael@0: michael@0: virtual bool startSDPMode(); michael@0: michael@0: virtual bool disconnect(); michael@0: virtual std::string getPreferredDeviceName(); michael@0: virtual std::string getPreferredLineDN(); michael@0: virtual ConnectionStatusEnum::ConnectionStatus getConnectionStatus(); michael@0: virtual std::string getCurrentServer(); michael@0: michael@0: // Currently controlled device michael@0: virtual CC_DevicePtr getActiveDevice(); michael@0: michael@0: // All known devices michael@0: virtual PhoneDetailsVtrPtr getAvailablePhoneDetails(); michael@0: virtual PhoneDetailsPtr getAvailablePhoneDetails(const std::string& deviceName); michael@0: michael@0: // Media setup michael@0: virtual VideoControlPtr getVideoControl(); michael@0: virtual AudioControlPtr getAudioControl(); michael@0: michael@0: virtual bool setProperty(ConfigPropertyKeysEnum::ConfigPropertyKeys key, std::string& value); michael@0: virtual std::string getProperty(ConfigPropertyKeysEnum::ConfigPropertyKeys key); michael@0: michael@0: private: // Data Storage michael@0: michael@0: // Observers michael@0: mozilla::Mutex m_lock; michael@0: std::set ccObservers; michael@0: std::set eccObservers; michael@0: michael@0: // Config and global setup michael@0: std::string username; michael@0: std::string password; michael@0: std::string authString; michael@0: std::string secureCachePath; michael@0: bool multiClusterMode; michael@0: cc_int32_t sipccLoggingMask; michael@0: michael@0: AuthenticationStatusEnum::AuthenticationStatus authenticationStatus; michael@0: michael@0: std::string preferredDevice; michael@0: std::string preferredLineDN; michael@0: CC_ServicePtr phone; // The generic handle, for simple operations. michael@0: CC_SIPCCServicePtr softPhone; // For setup operations not available on the generic API. michael@0: michael@0: // All known devices michael@0: typedef std::map PhoneDetailsMap; michael@0: PhoneDetailsMap phoneDetailsMap; michael@0: michael@0: // store connection state michael@0: ConnectionStatusEnum::ConnectionStatus connectionState; michael@0: michael@0: public: // Listeners for stacks controlled by CallControlManager michael@0: // CC_Observers michael@0: void onDeviceEvent (ccapi_device_event_e deviceEvent, CC_DevicePtr devicePtr, CC_DeviceInfoPtr info); michael@0: void onFeatureEvent (ccapi_device_event_e deviceEvent, CC_DevicePtr devicePtr, CC_FeatureInfoPtr info); michael@0: void onLineEvent (ccapi_line_event_e lineEvent, CC_LinePtr linePtr, CC_LineInfoPtr info); michael@0: void onCallEvent (ccapi_call_event_e callEvent, CC_CallPtr callPtr, CC_CallInfoPtr info); michael@0: michael@0: private: //member functions michael@0: michael@0: // CC_Observers michael@0: void notifyDeviceEventObservers (ccapi_device_event_e deviceEvent, CC_DevicePtr devicePtr, CC_DeviceInfoPtr info); michael@0: void notifyFeatureEventObservers (ccapi_device_event_e deviceEvent, CC_DevicePtr devicePtr, CC_FeatureInfoPtr info); michael@0: void notifyLineEventObservers (ccapi_line_event_e lineEvent, CC_LinePtr linePtr, CC_LineInfoPtr info); michael@0: void notifyCallEventObservers (ccapi_call_event_e callEvent, CC_CallPtr callPtr, CC_CallInfoPtr info); michael@0: michael@0: // ECC_Observers michael@0: void notifyAvailablePhoneEvent (AvailablePhoneEventType::AvailablePhoneEvent event, michael@0: const PhoneDetailsPtr phoneDetails); michael@0: void notifyAuthenticationStatusChange (AuthenticationStatusEnum::AuthenticationStatus); michael@0: void notifyConnectionStatusChange(ConnectionStatusEnum::ConnectionStatus status); michael@0: void setConnectionState(ConnectionStatusEnum::ConnectionStatus status); michael@0: }; michael@0: michael@0: }