1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/media/webrtc/signaling/src/callcontrol/CallControlManagerImpl.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,122 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +#pragma once 1.9 + 1.10 +#include "CallControlManager.h" 1.11 +#include "PhoneDetailsImpl.h" 1.12 +#include "CC_SIPCCService.h" 1.13 +#include "mozilla/Mutex.h" 1.14 + 1.15 + 1.16 +#include <set> 1.17 +#include <map> 1.18 + 1.19 +namespace CSF 1.20 +{ 1.21 + class CallControlManagerImpl: public CallControlManager, public CC_Observer 1.22 + { 1.23 + public: 1.24 + CallControlManagerImpl(); 1.25 + virtual bool destroy(); 1.26 + virtual ~CallControlManagerImpl(); 1.27 + 1.28 + // Observers 1.29 + virtual void addCCObserver ( CC_Observer * observer ); 1.30 + virtual void removeCCObserver ( CC_Observer * observer ); 1.31 + 1.32 + virtual void addECCObserver ( ECC_Observer * observer ); 1.33 + virtual void removeECCObserver ( ECC_Observer * observer ); 1.34 + 1.35 + // Config and global setup 1.36 + virtual void setMultiClusterMode(bool allowMultipleClusters); 1.37 + virtual void setSIPCCLoggingMask(const cc_int32_t mask); 1.38 + virtual void setAuthenticationString(const std::string &authString); 1.39 + virtual void setSecureCachePath(const std::string &secureCachePath); 1.40 + 1.41 + // Add local codecs 1.42 + virtual void setAudioCodecs(int codecMask); 1.43 + virtual void setVideoCodecs(int codecMask); 1.44 + 1.45 + virtual AuthenticationStatusEnum::AuthenticationStatus getAuthenticationStatus(); 1.46 + 1.47 + virtual bool registerUser( const std::string& deviceName, const std::string& user, const std::string& password, const std::string& domain ); 1.48 + 1.49 + virtual bool startP2PMode(const std::string& user); 1.50 + 1.51 + virtual bool startSDPMode(); 1.52 + 1.53 + virtual bool disconnect(); 1.54 + virtual std::string getPreferredDeviceName(); 1.55 + virtual std::string getPreferredLineDN(); 1.56 + virtual ConnectionStatusEnum::ConnectionStatus getConnectionStatus(); 1.57 + virtual std::string getCurrentServer(); 1.58 + 1.59 + // Currently controlled device 1.60 + virtual CC_DevicePtr getActiveDevice(); 1.61 + 1.62 + // All known devices 1.63 + virtual PhoneDetailsVtrPtr getAvailablePhoneDetails(); 1.64 + virtual PhoneDetailsPtr getAvailablePhoneDetails(const std::string& deviceName); 1.65 + 1.66 + // Media setup 1.67 + virtual VideoControlPtr getVideoControl(); 1.68 + virtual AudioControlPtr getAudioControl(); 1.69 + 1.70 + virtual bool setProperty(ConfigPropertyKeysEnum::ConfigPropertyKeys key, std::string& value); 1.71 + virtual std::string getProperty(ConfigPropertyKeysEnum::ConfigPropertyKeys key); 1.72 + 1.73 + private: // Data Storage 1.74 + 1.75 + // Observers 1.76 + mozilla::Mutex m_lock; 1.77 + std::set<CC_Observer *> ccObservers; 1.78 + std::set<ECC_Observer *> eccObservers; 1.79 + 1.80 + // Config and global setup 1.81 + std::string username; 1.82 + std::string password; 1.83 + std::string authString; 1.84 + std::string secureCachePath; 1.85 + bool multiClusterMode; 1.86 + cc_int32_t sipccLoggingMask; 1.87 + 1.88 + AuthenticationStatusEnum::AuthenticationStatus authenticationStatus; 1.89 + 1.90 + std::string preferredDevice; 1.91 + std::string preferredLineDN; 1.92 + CC_ServicePtr phone; // The generic handle, for simple operations. 1.93 + CC_SIPCCServicePtr softPhone; // For setup operations not available on the generic API. 1.94 + 1.95 + // All known devices 1.96 + typedef std::map<std::string, PhoneDetailsImplPtr> PhoneDetailsMap; 1.97 + PhoneDetailsMap phoneDetailsMap; 1.98 + 1.99 + // store connection state 1.100 + ConnectionStatusEnum::ConnectionStatus connectionState; 1.101 + 1.102 + public: // Listeners for stacks controlled by CallControlManager 1.103 + // CC_Observers 1.104 + void onDeviceEvent (ccapi_device_event_e deviceEvent, CC_DevicePtr devicePtr, CC_DeviceInfoPtr info); 1.105 + void onFeatureEvent (ccapi_device_event_e deviceEvent, CC_DevicePtr devicePtr, CC_FeatureInfoPtr info); 1.106 + void onLineEvent (ccapi_line_event_e lineEvent, CC_LinePtr linePtr, CC_LineInfoPtr info); 1.107 + void onCallEvent (ccapi_call_event_e callEvent, CC_CallPtr callPtr, CC_CallInfoPtr info); 1.108 + 1.109 + private: //member functions 1.110 + 1.111 + // CC_Observers 1.112 + void notifyDeviceEventObservers (ccapi_device_event_e deviceEvent, CC_DevicePtr devicePtr, CC_DeviceInfoPtr info); 1.113 + void notifyFeatureEventObservers (ccapi_device_event_e deviceEvent, CC_DevicePtr devicePtr, CC_FeatureInfoPtr info); 1.114 + void notifyLineEventObservers (ccapi_line_event_e lineEvent, CC_LinePtr linePtr, CC_LineInfoPtr info); 1.115 + void notifyCallEventObservers (ccapi_call_event_e callEvent, CC_CallPtr callPtr, CC_CallInfoPtr info); 1.116 + 1.117 + // ECC_Observers 1.118 + void notifyAvailablePhoneEvent (AvailablePhoneEventType::AvailablePhoneEvent event, 1.119 + const PhoneDetailsPtr phoneDetails); 1.120 + void notifyAuthenticationStatusChange (AuthenticationStatusEnum::AuthenticationStatus); 1.121 + void notifyConnectionStatusChange(ConnectionStatusEnum::ConnectionStatus status); 1.122 + void setConnectionState(ConnectionStatusEnum::ConnectionStatus status); 1.123 + }; 1.124 + 1.125 +}