Bug 848423 - Change nearly all WebRTC instances of linked_ptr<> to nsRefPtr<> r=ehugg
☠☠ backed out by 1d028bd354d0 ☠ ☠
authorAdam Roach [:abr] <adam@nostrum.com>
Wed, 06 Mar 2013 12:40:48 -0600
changeset 124131 ad01bb8a6742f8b1d9549bdab2be1c9aa045565b
parent 124130 98e3a2192918342df9eb0c96a5e358ea53152efe
child 124132 e2f80c264f1055545d3b68df3f5948349856cd02
push id1408
push userjwalker@mozilla.com
push dateFri, 08 Mar 2013 16:48:59 +0000
treeherderfx-team@af5f267cd6a1 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersehugg
bugs848423
milestone22.0a1
Bug 848423 - Change nearly all WebRTC instances of linked_ptr<> to nsRefPtr<> r=ehugg
media/webrtc/signaling/include/CC_Call.h
media/webrtc/signaling/include/CC_CallInfo.h
media/webrtc/signaling/include/CC_CallServerInfo.h
media/webrtc/signaling/include/CC_Common.h
media/webrtc/signaling/include/CC_Device.h
media/webrtc/signaling/include/CC_DeviceInfo.h
media/webrtc/signaling/include/CC_FeatureInfo.h
media/webrtc/signaling/include/CC_Line.h
media/webrtc/signaling/include/CC_LineInfo.h
media/webrtc/signaling/include/CC_Service.h
media/webrtc/signaling/include/CSFAudioControl.h
media/webrtc/signaling/include/CSFVideoControl.h
media/webrtc/signaling/include/CallControlManager.h
media/webrtc/signaling/include/PhoneDetails.h
media/webrtc/signaling/include/SharedPtr.h
media/webrtc/signaling/src/callcontrol/CallControlManagerImpl.cpp
media/webrtc/signaling/src/callcontrol/PhoneDetailsImpl.h
media/webrtc/signaling/src/media/CSFAudioControlWrapper.h
media/webrtc/signaling/src/media/CSFVideoControlWrapper.h
media/webrtc/signaling/src/peerconnection/PeerConnectionCtx.h
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCall.cpp
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCall.h
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCallInfo.cpp
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCallInfo.h
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCallServerInfo.h
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCDevice.cpp
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCDevice.h
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCDeviceInfo.cpp
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCDeviceInfo.h
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCFeatureInfo.h
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCLine.cpp
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCLine.h
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCLineInfo.cpp
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCLineInfo.h
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCService.cpp
media/webrtc/signaling/src/softphonewrapper/CC_SIPCCService.h
--- a/media/webrtc/signaling/include/CC_Call.h
+++ b/media/webrtc/signaling/include/CC_Call.h
@@ -1,26 +1,30 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #pragma once
 
 #include "CC_Common.h"
 #include "ECC_Types.h"
+#include "mozilla/RefPtr.h"
 
 extern "C"
 {
 #include "ccapi_types.h"
 }
 
 namespace CSF
 {
     class ECC_API CC_Call
     {
+    public:
+        NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CC_Call)
+
     protected:
         CC_Call () { }
 
     public:
         virtual ~CC_Call () {}
 
 		virtual void setRemoteWindow (VideoWindowHandle window) = 0;
 
@@ -280,11 +284,12 @@ namespace CSF
 
         virtual void addStream(cc_media_stream_id_t stream_id, cc_media_track_id_t track_id, cc_media_type_t media_type) = 0;
 
         virtual void removeStream(cc_media_stream_id_t stream_id, cc_media_track_id_t track_id, cc_media_type_t media_type) = 0;
 
         virtual const std::string& getPeerConnection() const = 0;
 
         virtual void addICECandidate(const std::string & candidate, const std::string & mid, unsigned short level) = 0;
+
     };
 }
 
--- a/media/webrtc/signaling/include/CC_CallInfo.h
+++ b/media/webrtc/signaling/include/CC_CallInfo.h
@@ -15,16 +15,18 @@ extern "C"
 #include "CC_CallTypes.h"
 #include "peer_connection_types.h"
 
 namespace CSF
 {
 
 	class ECC_API CC_CallInfo
     {
+    public:
+        NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CC_CallInfo)
     protected:
         CC_CallInfo() { }
 
     public:
         //Base class needs dtor to be declared as virtual
         virtual ~CC_CallInfo() {};
 
         /**
--- a/media/webrtc/signaling/include/CC_CallServerInfo.h
+++ b/media/webrtc/signaling/include/CC_CallServerInfo.h
@@ -12,16 +12,18 @@ extern "C"
 {
 #include "ccapi_types.h"
 }
 
 namespace CSF
 {
     class ECC_API CC_CallServerInfo
     {
+    public:
+        NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CC_CallServerInfo)
     protected:
         CC_CallServerInfo() { }
 
     public:
         //Base class needs dtor to be declared as virtual
         virtual ~CC_CallServerInfo() {};
 
         /**
--- a/media/webrtc/signaling/include/CC_Common.h
+++ b/media/webrtc/signaling/include/CC_Common.h
@@ -13,22 +13,22 @@
 #define ECC_API _declspec(dllimport)
 #else
 #define ECC_API
 #endif
 #endif
 
 namespace CSF
 {
-    DECLARE_PTR(CallControlManager)
-    DECLARE_PTR_VECTOR(PhoneDetails)
-    DECLARE_PTR(CC_Service)
-    DECLARE_PTR(VideoControl)
-    DECLARE_PTR(AudioControl)
-    DECLARE_PTR_VECTOR(CC_Device)
-    DECLARE_PTR(CC_DeviceInfo)
-    DECLARE_PTR(CC_CallServerInfo)
-    DECLARE_PTR(CC_FeatureInfo)
-    DECLARE_PTR_VECTOR(CC_Line)
-    DECLARE_PTR(CC_LineInfo)
-    DECLARE_PTR_VECTOR(CC_Call)
-    DECLARE_PTR(CC_CallInfo)
+    DECLARE_NS_PTR(CallControlManager)
+    DECLARE_NS_PTR_VECTOR(PhoneDetails)
+    DECLARE_NS_PTR(CC_Service)
+    DECLARE_NS_PTR(VideoControl)
+    DECLARE_NS_PTR(AudioControl)
+    DECLARE_NS_PTR_VECTOR(CC_Device)
+    DECLARE_NS_PTR(CC_DeviceInfo)
+    DECLARE_NS_PTR(CC_CallServerInfo)
+    DECLARE_NS_PTR(CC_FeatureInfo)
+    DECLARE_NS_PTR_VECTOR(CC_Line)
+    DECLARE_NS_PTR(CC_LineInfo)
+    DECLARE_NS_PTR_VECTOR(CC_Call)
+    DECLARE_NS_PTR(CC_CallInfo)
 }
--- a/media/webrtc/signaling/include/CC_Device.h
+++ b/media/webrtc/signaling/include/CC_Device.h
@@ -11,16 +11,18 @@ extern "C"
 #include "ccapi_types.h"
 }
 
 namespace CSF
 {
 
     class ECC_API CC_Device
     {
+    public:
+        NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CC_Device)
     protected:
         CC_Device() {}
 
     public:
         virtual ~CC_Device() {}
 
         virtual std::string toString() = 0;
 
--- a/media/webrtc/signaling/include/CC_DeviceInfo.h
+++ b/media/webrtc/signaling/include/CC_DeviceInfo.h
@@ -12,16 +12,18 @@ extern "C"
 {
 #include "ccapi_types.h"
 }
 
 namespace CSF
 {
     class ECC_API CC_DeviceInfo
     {
+    public:
+        NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CC_DeviceInfo)
     protected:
         CC_DeviceInfo() { }
 
     public:
         //Base class needs dtor to be declared as virtual
         virtual ~CC_DeviceInfo() {};
 
         /**
--- a/media/webrtc/signaling/include/CC_FeatureInfo.h
+++ b/media/webrtc/signaling/include/CC_FeatureInfo.h
@@ -10,16 +10,18 @@ extern "C"
 {
 #include "ccapi_types.h"
 }
 
 namespace CSF
 {
     class ECC_API CC_FeatureInfo
     {
+    public:
+        NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CC_FeatureInfo)
     protected:
         CC_FeatureInfo() { }
 
     public:
         //Base class needs dtor to be declared as virtual
         virtual ~CC_FeatureInfo() {};
 
         /**
--- a/media/webrtc/signaling/include/CC_Line.h
+++ b/media/webrtc/signaling/include/CC_Line.h
@@ -10,16 +10,18 @@ extern "C"
 {
 #include "ccapi_types.h"
 }
 
 namespace CSF
 {
     class ECC_API CC_Line
     {
+    public:
+        NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CC_Line)
     protected:
         CC_Line () { }
 
     public:
         virtual ~CC_Line () {};
 
         virtual std::string toString() = 0;
 
--- a/media/webrtc/signaling/include/CC_LineInfo.h
+++ b/media/webrtc/signaling/include/CC_LineInfo.h
@@ -13,16 +13,18 @@ extern "C"
 {
 #include "ccapi_types.h"
 }
 
 namespace CSF
 {
     class ECC_API CC_LineInfo
     {
+    public:
+        NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CC_LineInfo)
     protected:
         CC_LineInfo() { }
 
     public:
         //Base class needs dtor to be declared as virtual
         virtual ~CC_LineInfo() {};
 
         /**
--- a/media/webrtc/signaling/include/CC_Service.h
+++ b/media/webrtc/signaling/include/CC_Service.h
@@ -14,16 +14,18 @@ extern "C"
 #include "ccapi_types.h"
 #include "ccapi_service.h"
 }
 
 namespace CSF
 {
     class ECC_API CC_Service
     {
+    public:
+        NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CC_Service)
     protected:
     	CC_Service() {}
     public:
         virtual ~CC_Service() {};
 
     public:
         /**
          * Clients use CC_Observer to receive CCAPI events (Device, Line, Call) from the service.
--- a/media/webrtc/signaling/include/CSFAudioControl.h
+++ b/media/webrtc/signaling/include/CSFAudioControl.h
@@ -3,20 +3,21 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #pragma once
 
 #include "CC_Common.h"
 
 namespace CSF
 {
-	DECLARE_PTR(AudioControl);
+        DECLARE_NS_PTR(AudioControl)
 	class ECC_API AudioControl
 	{
 	public:
+                NS_INLINE_DECL_THREADSAFE_REFCOUNTING(AudioControl)
 		// device names are in UTF-8 encoding
 
 		virtual std::vector<std::string> getRecordingDevices() = 0;
 		virtual std::vector<std::string> getPlayoutDevices() = 0;
 
 		virtual std::string getRecordingDevice() = 0;
 		virtual std::string getPlayoutDevice() = 0;
 
--- a/media/webrtc/signaling/include/CSFVideoControl.h
+++ b/media/webrtc/signaling/include/CSFVideoControl.h
@@ -7,20 +7,21 @@
 #include "CC_Common.h"
 #include "ECC_Types.h"
 
 #include <string>
 #include <vector>
 
 namespace CSF
 {
-	DECLARE_PTR(VideoControl);
+	DECLARE_NS_PTR(VideoControl)
 	class ECC_API VideoControl
 	{
 	public:
+                NS_INLINE_DECL_THREADSAFE_REFCOUNTING(VideoControl)
 		virtual ~VideoControl() {};
 
 		virtual void setVideoMode( bool enable ) = 0;
 
 		// window type is platform-specific
 		virtual void setPreviewWindow( VideoWindowHandle window, int top, int left, int bottom, int right, RenderScaling style ) = 0;
 		virtual void showPreviewWindow( bool show ) = 0;
 
--- a/media/webrtc/signaling/include/CallControlManager.h
+++ b/media/webrtc/signaling/include/CallControlManager.h
@@ -29,30 +29,31 @@
  *  @li Call Control events are raised to the CSF::CC_Observer interface.
  *  @li Audio/Video device selection and global media configuration is performed via CSF::AudioControl
  *      and CSF::VideoControl.  Per-call media operations (mute, volume, etc) are integrated onto
  *      the CSF::CC_Call and CSF::CC_CallInfo interfaces.
  */
 
 namespace CSF
 {
-	DECLARE_PTR(CallControlManager)
+	DECLARE_NS_PTR(CallControlManager)
 	/**
 	 * CallControlManager
 	 *
 	 * The class is partitioned into several blocks of functionality:
 	 * - Create/Destroy - Initialisation and clean shutdown.
 	 * 					  Destroy is optional if the destructor is used properly.
 	 * - Observer - Register for events when any state changes.  Optional but strongly advised.
 	 *
 	 * Methods are generally synchronous (at present).
 	 */
     class ECC_API CallControlManager
     {
     public:
+        NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CallControlManager)
 		/**
 		 *  Use create() to create a CallControlManager instance.
 		 *
 		 *  CallControlManager cleans up its resources in its destructor, implicitly disconnect()in if required.
 		 *  Use the destroy() method if you need to force a cleanup earlier.  It is a bad idea to continue using
 		 *  CallControlManager or any of its related objects after destroy().
 		 */
         static CallControlManagerPtr create();
--- a/media/webrtc/signaling/include/PhoneDetails.h
+++ b/media/webrtc/signaling/include/PhoneDetails.h
@@ -6,20 +6,21 @@
 
 #include <string>
 
 #include "CC_Common.h"
 #include "ECC_Types.h"
 
 namespace CSF
 {
-	DECLARE_PTR_VECTOR(PhoneDetails);
+	DECLARE_NS_PTR_VECTOR(PhoneDetails);
 	class ECC_API PhoneDetails
 	{
 	public:
+                NS_INLINE_DECL_THREADSAFE_REFCOUNTING(PhoneDetails)
 		virtual ~PhoneDetails() {}
 		/**
 		 * Get the device name (the CUCM device name) and the free text description.
 		 */
 		virtual std::string getName() const = 0;
 		virtual std::string getDescription() const = 0;
 
 		/**
--- a/media/webrtc/signaling/include/SharedPtr.h
+++ b/media/webrtc/signaling/include/SharedPtr.h
@@ -1,16 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #pragma once
 
 #include <vector>
 #include "base/linked_ptr.h"
+#include "nsAutoPtr.h"
 
 #ifndef DECLARE_PTR
 #define DECLARE_PTR(className)\
     class className;\
     typedef linked_ptr<className> className##Ptr;
 #endif
 
 
@@ -20,8 +21,24 @@
     typedef std::vector<className##Ptr> className##Vtr;\
     typedef linked_ptr<className##Vtr> className##Vtr##Ptr;
 #endif
 
 
 #ifndef NULL_PTR
 #define NULL_PTR(className) linked_ptr<className>()
 #endif
+
+// NSPR Variations of the above, to help with migration
+// from linked_ptr to nsRefPtr
+#ifndef DECLARE_NS_PTR
+#define DECLARE_NS_PTR(className)\
+    class className;\
+    typedef nsRefPtr<className> className##Ptr;
+#endif
+
+
+#ifndef DECLARE_NS_PTR_VECTOR
+#define DECLARE_NS_PTR_VECTOR(className)\
+    DECLARE_NS_PTR(className)\
+    typedef std::vector<className##Ptr> className##Vtr;\
+    typedef linked_ptr<className##Vtr> className##Vtr##Ptr;
+#endif
--- a/media/webrtc/signaling/src/callcontrol/CallControlManagerImpl.cpp
+++ b/media/webrtc/signaling/src/callcontrol/CallControlManagerImpl.cpp
@@ -229,18 +229,18 @@ bool CallControlManagerImpl::disconnect(
     CSFLogInfo(logTag, "disconnect()");
     if(phone == NULL)
         return true;
 
     connectionState = ConnectionStatusEnum::eIdle;
     phone->removeCCObserver(this);
     phone->stop();
     phone->destroy();
-    phone.reset();
-    softPhone.reset();
+    phone = nullptr;
+    softPhone = nullptr;
 
     return true;
 }
 
 std::string CallControlManagerImpl::getPreferredDeviceName()
 {
     return preferredDevice;
 }
@@ -270,28 +270,28 @@ CC_DevicePtr CallControlManagerImpl::get
 }
 
 // All known devices
 PhoneDetailsVtrPtr CallControlManagerImpl::getAvailablePhoneDetails()
 {
   PhoneDetailsVtrPtr result = PhoneDetailsVtrPtr(new PhoneDetailsVtr());
   for(PhoneDetailsMap::iterator it = phoneDetailsMap.begin(); it != phoneDetailsMap.end(); it++)
   {
-    PhoneDetailsPtr details = it->second;
+    PhoneDetailsPtr details = it->second.get();
     result->push_back(details);
   }
   return result;
 }
 
 PhoneDetailsPtr CallControlManagerImpl::getAvailablePhoneDetails(const std::string& deviceName)
 {
     PhoneDetailsMap::iterator it = phoneDetailsMap.find(deviceName);
     if(it != phoneDetailsMap.end())
     {
-        return it->second;
+        return it->second.get();
     }
     return PhoneDetailsPtr();
 }
 // Media setup
 VideoControlPtr CallControlManagerImpl::getVideoControl()
 {
     if(phone != NULL)
         return phone->getVideoControl();
--- a/media/webrtc/signaling/src/callcontrol/PhoneDetailsImpl.h
+++ b/media/webrtc/signaling/src/callcontrol/PhoneDetailsImpl.h
@@ -3,17 +3,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #pragma once
 
 #include "PhoneDetails.h"
 
 namespace CSF
 {
-	DECLARE_PTR(PhoneDetailsImpl);
+	DECLARE_NS_PTR(PhoneDetailsImpl);
 	class PhoneDetailsImpl: public PhoneDetails
 	{
 	public:
 		virtual std::string getName() const {return name; }
 		virtual std::string getDescription() const {return description; }
 		virtual int getModel() const {return model;}
 		virtual std::string getModelDescription() const {return modelDescription; }
 		virtual bool isSoftPhone();
--- a/media/webrtc/signaling/src/media/CSFAudioControlWrapper.h
+++ b/media/webrtc/signaling/src/media/CSFAudioControlWrapper.h
@@ -4,17 +4,17 @@
 
 #pragma once
 
 #include "CC_Common.h"
 #include "CSFAudioControl.h"
 
 namespace CSF
 {
-	DECLARE_PTR(AudioControlWrapper);
+        DECLARE_NS_PTR(AudioControlWrapper)
 	class ECC_API AudioControlWrapper : public AudioControl
 	{
 	public:
 		// device names are in UTF-8 encoding
 
 		AudioControlWrapper(AudioControl * audioControl){_realAudioControl = audioControl;};
 		virtual std::vector<std::string> getRecordingDevices();
 		virtual std::vector<std::string> getPlayoutDevices();
--- a/media/webrtc/signaling/src/media/CSFVideoControlWrapper.h
+++ b/media/webrtc/signaling/src/media/CSFVideoControlWrapper.h
@@ -10,19 +10,19 @@
 
 #if __cplusplus
 
 #include <string>
 #include <vector>
 
 namespace CSF
 {
+    DECLARE_NS_PTR(VideoControlWrapper)
     typedef void *VideoWindowHandle;
 
-	DECLARE_PTR(VideoControlWrapper);
 	class ECC_API VideoControlWrapper : public VideoControl
 	{
 	public:
 		VideoControlWrapper(VideoControl * videoControl){_realVideoControl = videoControl;};
 
 		virtual void setVideoMode( bool enable );
 
 		// window type is platform-specific
--- a/media/webrtc/signaling/src/peerconnection/PeerConnectionCtx.h
+++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionCtx.h
@@ -5,18 +5,23 @@
 #ifndef peerconnectionctx_h___h__
 #define peerconnectionctx_h___h__
 
 #include <string>
 
 #include "mozilla/Attributes.h"
 #include "CallControlManager.h"
 #include "CC_Device.h"
+#include "CC_DeviceInfo.h"
 #include "CC_Call.h"
+#include "CC_CallInfo.h"
+#include "CC_Line.h"
+#include "CC_LineInfo.h"
 #include "CC_Observer.h"
+#include "CC_FeatureInfo.h"
 
 #include "StaticPtr.h"
 #include "PeerConnectionImpl.h"
 
 namespace mozilla {
 class PeerConnectionCtxShutdown;
 }
 
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCall.cpp
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCall.cpp
@@ -121,17 +121,17 @@ void CC_SIPCCCall::sendIFrame()
     }
 }
 
 CC_CallInfoPtr CC_SIPCCCall::getCallInfo ()
 {
     cc_callinfo_ref_t callInfo = CCAPI_Call_getCallInfo(callHandle);
     CC_SIPCCCallInfoPtr callInfoPtr = CC_SIPCCCallInfo::wrap(callInfo);
     callInfoPtr->setMediaData( pMediaData);
-    return callInfoPtr;
+    return callInfoPtr.get();
 }
 
 
 //
 // Operations - The following function are actions that can be taken the execute an operation on the Call, ie calls
 //              down to pSIPCC to originate a call, end a call etc.
 //
 
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCall.h
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCall.h
@@ -18,21 +18,22 @@ namespace CSF
 {
     struct StreamInfo
     {
 		// a bit of overkill having a structure just for video, but we may have other properties later
     	bool isVideo;
     };
     typedef std::map<int, StreamInfo> StreamMapType;
 
-    DECLARE_PTR(CC_SIPCCCallMediaData);
+    DECLARE_NS_PTR(CC_SIPCCCallMediaData);
 
     class CC_SIPCCCallMediaData
 	{
 	public:
+        NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CC_SipCCCAllMediaData)
 		CC_SIPCCCallMediaData():
           remoteWindow(NULL),
           streamMapMutex("CC_SIPCCCallMediaData"),
           audioMuteState(false),
           videoMuteState(false),
           volume(-1){}
 		CC_SIPCCCallMediaData(VideoWindowHandle remoteWindow,
             bool audioMuteState, bool videoMuteState, int volume):
@@ -49,17 +50,17 @@ namespace CSF
         bool audioMuteState;
         bool videoMuteState;
         int volume;
     private:
         CC_SIPCCCallMediaData(const CC_SIPCCCallMediaData&);
         CC_SIPCCCallMediaData& operator=(const CC_SIPCCCallMediaData&);
 	};
 
-	DECLARE_PTR(CC_SIPCCCall);
+	DECLARE_NS_PTR(CC_SIPCCCall);
     class CC_SIPCCCall : public CC_Call
     {
 
     CSF_DECLARE_WRAP(CC_SIPCCCall, cc_call_handle_t);
     private:
         cc_call_handle_t callHandle;
         CC_SIPCCCall (cc_call_handle_t aCallHandle);
         CC_SIPCCCallMediaDataPtr  pMediaData;
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCallInfo.cpp
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCallInfo.cpp
@@ -281,17 +281,17 @@ string CC_SIPCCCallInfo::getCallingParty
 string CC_SIPCCCallInfo::getAlternateNumber()
 {
     return CCAPI_CallInfo_getAlternateNumber(callinfo_ref);
 }
 
 CC_LinePtr CC_SIPCCCallInfo::getline ()
 {
     cc_lineid_t lineId = CCAPI_CallInfo_getLine(callinfo_ref);
-    return CC_SIPCCLine::wrap(lineId);
+    return CC_SIPCCLine::wrap(lineId).get();
 }
 
 string CC_SIPCCCallInfo::getOriginalCalledPartyName()
 {
     return CCAPI_CallInfo_getOriginalCalledPartyName(callinfo_ref);
 }
 
 string CC_SIPCCCallInfo::getOriginalCalledPartyNumber()
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCallInfo.h
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCallInfo.h
@@ -13,17 +13,17 @@
 
 extern "C" {
     void CCAPI_CallListener_onCallEvent(ccapi_call_event_e eventType, cc_call_handle_t handle, cc_callinfo_ref_t info);
 }
 
 namespace CSF
 {
 
-	DECLARE_PTR(CC_SIPCCCallInfo);
+	DECLARE_NS_PTR(CC_SIPCCCallInfo);
     class CC_SIPCCCallInfo : public CC_CallInfo
     {
 
     private:
     	cc_callinfo_ref_t callinfo_ref;
 
         CC_SIPCCCallInfo (cc_callinfo_ref_t callinfo);
 
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCallServerInfo.h
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCCallServerInfo.h
@@ -6,17 +6,17 @@
 #define _CC_SIPCC_CALLSERVERINFO_H
 
 #include "CC_CallServerInfo.h"
 
 #include "common/Wrapper.h"
 
 namespace CSF
 {
-	DECLARE_PTR(CC_SIPCCCallServerInfo);
+	DECLARE_NS_PTR(CC_SIPCCCallServerInfo);
     class CC_SIPCCCallServerInfo : public CC_CallServerInfo
     {
     private:
         cc_callserver_ref_t callserverinfo_ref;
 
         CC_SIPCCCallServerInfo (cc_callserver_ref_t aCallServerInfo);
 
         CSF_DECLARE_WRAP(CC_SIPCCCallServerInfo, cc_callserver_ref_t);
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCDevice.cpp
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCDevice.cpp
@@ -26,30 +26,31 @@ using namespace CSF;
 CSF_IMPLEMENT_WRAP(CC_SIPCCDevice, cc_device_handle_t);
 
 CC_DevicePtr CC_SIPCCDevice::createDevice ()
 {
     cc_device_handle_t deviceHandle = CCAPI_Device_getDeviceID();
 
     CC_SIPCCDevicePtr pSIPCCDevice = CC_SIPCCDevice::wrap(deviceHandle);
 
-    return pSIPCCDevice;
+    return pSIPCCDevice.get();
 }
 
 CC_SIPCCDevice::CC_SIPCCDevice (cc_device_handle_t aDeviceHandle)
 : deviceHandle(aDeviceHandle)
 {
 	enableVideo(true);
 	enableCamera(true);
 }
 
 CC_DeviceInfoPtr CC_SIPCCDevice::getDeviceInfo ()
 {
     cc_deviceinfo_ref_t deviceInfoRef = CCAPI_Device_getDeviceInfo(deviceHandle);
-    CC_DeviceInfoPtr deviceInfoPtr = CC_SIPCCDeviceInfo::wrap(deviceInfoRef);
+    CC_DeviceInfoPtr deviceInfoPtr =
+        CC_SIPCCDeviceInfo::wrap(deviceInfoRef).get();
 
     //A call to CCAPI_Device_getDeviceInfo() needs a matching call to CCAPI_Device_releaseDeviceInfo()
     //However, the CC_SIPCCDeviceInfo() ctor/dtor does a retain/release internally, so I need to explicitly release
     //here to match up with the call to CCAPI_Device_getDeviceInfo().
 
     CCAPI_Device_releaseDeviceInfo(deviceInfoRef);
 
     //CCAPI_Device_getDeviceInfo() --> requires release be called.
@@ -68,17 +69,17 @@ std::string CC_SIPCCDevice::toString()
     result = tmpString;
     return result;
 }
 
 CC_CallPtr CC_SIPCCDevice::createCall ()
 {
     cc_call_handle_t callHandle = CCAPI_Device_CreateCall(deviceHandle);
 
-    return CC_SIPCCCall::wrap(callHandle);
+    return CC_SIPCCCall::wrap(callHandle).get();
 }
 
 void CC_SIPCCDevice::enableVideo(bool enable)
 {
     CCAPI_Device_enableVideo(deviceHandle, enable);
 }
 
 void CC_SIPCCDevice::enableCamera(bool enable)
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCDevice.h
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCDevice.h
@@ -6,17 +6,17 @@
 #define _CC_SIPCC_DEVICE_H
 
 #include "CC_Device.h"
 #include "common/Wrapper.h"
 #include <map>
 
 namespace CSF
 {
-	DECLARE_PTR(CC_SIPCCDevice);
+	DECLARE_NS_PTR(CC_SIPCCDevice);
     class CC_SIPCCDevice : public CC_Device
     {
     private:
     	CSF_DECLARE_WRAP(CC_SIPCCDevice, cc_device_handle_t);
         static CC_DevicePtr create (const std::string & phoneConfigFileNameStr);
 
         CC_SIPCCDevice (cc_device_handle_t aDeviceHandle);
 
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCDeviceInfo.cpp
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCDeviceInfo.cpp
@@ -54,17 +54,17 @@ vector<CC_CallPtr> CC_SIPCCDeviceInfo::g
 
     cc_call_handle_t handles[MAX_SUPPORTED_NUM_CALLS] = {};
     cc_uint16_t numHandles = csf_countof(handles);
 
     CCAPI_DeviceInfo_getCalls(deviceinfo_ref, handles, &numHandles) ;
 
     for (int i=0; i<numHandles; i++)
     {
-        CC_CallPtr callPtr = CC_SIPCCCall::wrap(handles[i]);
+        CC_CallPtr callPtr = CC_SIPCCCall::wrap(handles[i]).get();
         callsVector.push_back(callPtr);
     }
 
     return callsVector;
 }
 
 vector<CC_LinePtr> CC_SIPCCDeviceInfo::getLines ()
 {
@@ -72,17 +72,17 @@ vector<CC_LinePtr> CC_SIPCCDeviceInfo::g
 
     cc_lineid_t lines[MAX_SUPPORTED_NUM_LINES] = {};
     cc_uint16_t numLines = csf_countof(lines);
 
     CCAPI_DeviceInfo_getLines(deviceinfo_ref, lines, &numLines) ;
 
     for (int i=0; i<numLines; i++)
     {
-        CC_LinePtr linePtr = CC_SIPCCLine::wrap(lines[i]);
+        CC_LinePtr linePtr = CC_SIPCCLine::wrap(lines[i]).get();
         linesVector.push_back(linePtr);
     }
 
     return linesVector;
 }
 
 vector<CC_FeatureInfoPtr> CC_SIPCCDeviceInfo::getFeatures ()
 {
@@ -90,17 +90,18 @@ vector<CC_FeatureInfoPtr> CC_SIPCCDevice
 
     cc_featureinfo_ref_t features[MAX_SUPPORTED_NUM_FEATURES] = {};
     cc_uint16_t numFeatureInfos = csf_countof(features);
 
     CCAPI_DeviceInfo_getFeatures(deviceinfo_ref, features, &numFeatureInfos);
 
     for (int i=0; i<numFeatureInfos; i++)
     {
-        CC_FeatureInfoPtr featurePtr = CC_SIPCCFeatureInfo::wrap(features[i]);
+        CC_FeatureInfoPtr featurePtr =
+          CC_SIPCCFeatureInfo::wrap(features[i]).get();
         featuresVector.push_back(featurePtr);
     }
 
     return featuresVector;
 }
 
 vector<CC_CallServerInfoPtr> CC_SIPCCDeviceInfo::getCallServers ()
 {
@@ -108,17 +109,18 @@ vector<CC_CallServerInfoPtr> CC_SIPCCDev
 
     cc_callserver_ref_t callServers[MAX_SUPPORTED_NUM_CALL_SERVERS] = {};
     cc_uint16_t numCallServerInfos = csf_countof(callServers);
 
     CCAPI_DeviceInfo_getCallServers(deviceinfo_ref, callServers, &numCallServerInfos);
 
     for (int i=0; i<numCallServerInfos; i++)
     {
-        CC_CallServerInfoPtr callServerPtr = CC_SIPCCCallServerInfo::wrap(callServers[i]);
+        CC_CallServerInfoPtr callServerPtr =
+          CC_SIPCCCallServerInfo::wrap(callServers[i]).get();
         callServersVector.push_back(callServerPtr);
     }
 
     return callServersVector;
 }
 
 cc_service_state_t CC_SIPCCDeviceInfo::getServiceState()
 {
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCDeviceInfo.h
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCDeviceInfo.h
@@ -6,17 +6,17 @@
 #define _CC_SIPCC_DEVICEINFO_H
 
 #include "CC_DeviceInfo.h"
 
 #include "common/Wrapper.h"
 
 namespace CSF
 {
-	DECLARE_PTR(CC_SIPCCDeviceInfo);
+	DECLARE_NS_PTR(CC_SIPCCDeviceInfo);
     class CC_SIPCCDeviceInfo : public CC_DeviceInfo
     {
     private:
         CC_SIPCCDeviceInfo (cc_deviceinfo_ref_t aDeviceInfo);
         cc_deviceinfo_ref_t deviceinfo_ref;
 
         CSF_DECLARE_WRAP(CC_SIPCCDeviceInfo, cc_deviceinfo_ref_t);
 
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCFeatureInfo.h
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCFeatureInfo.h
@@ -6,17 +6,17 @@
 #define _CC_SIPCC_FEATUREINFO_H
 
 #include "CC_FeatureInfo.h"
 
 #include "common/Wrapper.h"
 
 namespace CSF
 {
-	DECLARE_PTR(CC_SIPCCFeatureInfo);
+	DECLARE_NS_PTR(CC_SIPCCFeatureInfo);
     class CC_SIPCCFeatureInfo : public CC_FeatureInfo
     {
     private:
         cc_featureinfo_ref_t featureinfo_ref;
         CC_SIPCCFeatureInfo (cc_featureinfo_ref_t aFeatureInfo);
         CSF_DECLARE_WRAP(CC_SIPCCFeatureInfo, cc_featureinfo_ref_t);
 
     public:
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCLine.cpp
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCLine.cpp
@@ -24,17 +24,17 @@ CSF_IMPLEMENT_WRAP(CC_SIPCCLine, cc_line
 cc_lineid_t CC_SIPCCLine::getID()
 {
     return lineId;
 }
 
 CC_LineInfoPtr CC_SIPCCLine::getLineInfo ()
 {
     cc_lineinfo_ref_t lineInfoRef = CCAPI_Line_getLineInfo(lineId);
-    CC_LineInfoPtr lineInfoPtr = CC_SIPCCLineInfo::wrap(lineInfoRef);
+    CC_LineInfoPtr lineInfoPtr = CC_SIPCCLineInfo::wrap(lineInfoRef).get();
 
     //A call to CCAPI_Line_getLineInfo() needs a matching call to CCAPI_Line_releaseLineInfo()
     //However, the CC_SIPCCLineInfo() ctor/dtor does a retain/release internally, so I need to explicitly release
     //here to match up with the call to CCAPI_Line_getLineInfo().
 
     CCAPI_Line_releaseLineInfo(lineInfoRef);
 
     //CCAPI_Line_getLineInfo() --> requires release be called.
@@ -44,12 +44,12 @@ CC_LineInfoPtr CC_SIPCCLine::getLineInfo
 
     return lineInfoPtr;
 }
 
 CC_CallPtr CC_SIPCCLine::createCall ()
 {
     cc_call_handle_t callHandle = CCAPI_Line_CreateCall(lineId);
 
-    return CC_SIPCCCall::wrap(callHandle);
+    return CC_SIPCCCall::wrap(callHandle).get();
 }
 
 
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCLine.h
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCLine.h
@@ -8,17 +8,17 @@
 #include "CC_Line.h"
 #include <map>
 
 #include "common/csf_common.h"
 #include "common/Wrapper.h"
 
 namespace CSF
 {
-	DECLARE_PTR(CC_SIPCCLine);
+	DECLARE_NS_PTR(CC_SIPCCLine);
     class CC_SIPCCLine : public CC_Line
     {
     private:
         CSF_DECLARE_WRAP(CC_SIPCCLine, cc_lineid_t);
 
         cc_lineid_t lineId;
         CC_SIPCCLine (cc_lineid_t aLineId) : lineId(aLineId) { }
 
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCLineInfo.cpp
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCLineInfo.cpp
@@ -99,17 +99,17 @@ vector<CC_CallPtr> CC_SIPCCLineInfo::get
 
     cc_call_handle_t handles[MAX_SUPPORTED_NUM_CALLS] = {};
     int numCalls = csf_countof(handles);
 
     CCAPI_LineInfo_getCalls(linePtr->getID(), handles, &numCalls) ;
 
     for (int i=0; i<numCalls; i++)
     {
-        CC_CallPtr callPtr = CC_SIPCCCall::wrap(handles[i]);
+        CC_CallPtr callPtr = CC_SIPCCCall::wrap(handles[i]).get();
         callsVector.push_back(callPtr);
     }
 
     return callsVector;
 }
 
 vector<CC_CallPtr> CC_SIPCCLineInfo::getCallsByState (CC_LinePtr linePtr, cc_call_state_t state)
 {
@@ -117,17 +117,17 @@ vector<CC_CallPtr> CC_SIPCCLineInfo::get
 
     cc_call_handle_t handles[MAX_SUPPORTED_NUM_CALLS] = {};
     int numCalls = csf_countof(handles);
 
     CCAPI_LineInfo_getCallsByState(linePtr->getID(), state, handles, &numCalls) ;
 
     for (int i=0; i<numCalls; i++)
     {
-        CC_CallPtr callPtr = CC_SIPCCCall::wrap(handles[i]);
+        CC_CallPtr callPtr = CC_SIPCCCall::wrap(handles[i]).get();
         callsVector.push_back(callPtr);
     }
 
     return callsVector;
 }
 
 bool CC_SIPCCLineInfo::getMWIStatus()
 {
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCLineInfo.h
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCLineInfo.h
@@ -6,17 +6,17 @@
 #define _CC_SIPCC_LINEINFO_H
 
 #include "CC_LineInfo.h"
 
 #include "common/Wrapper.h"
 
 namespace CSF
 {
-	DECLARE_PTR(CC_SIPCCLineInfo);
+	DECLARE_NS_PTR(CC_SIPCCLineInfo);
     class CC_SIPCCLineInfo : public CC_LineInfo
     {
     public:
         ~CC_SIPCCLineInfo ();
 
     private:
         cc_lineinfo_ref_t lineinfo;
         CC_SIPCCLineInfo (cc_lineinfo_ref_t lineinfo);
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCService.cpp
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCService.cpp
@@ -475,64 +475,64 @@ bool CC_SIPCCService::isStarted()
 	return bStarted;
 }
 
 // !!! Note that accessing *Ptr instances from multiple threads can
 // lead to deadlocks, crashes, and spinning threads. Calls to this
 // method are not safe except from ccapp_thread.
 CC_DevicePtr CC_SIPCCService::getActiveDevice()
 {
-    return CC_SIPCCDevice::wrap(CCAPI_Device_getDeviceID());
+    return CC_SIPCCDevice::wrap(CCAPI_Device_getDeviceID()).get();
 }
 
 // !!! Note that accessing *Ptr instances from multiple threads can
 // lead to deadlocks, crashes, and spinning threads. Calls to this
 // method are not safe except from ccapp_thread.
 vector<CC_DevicePtr> CC_SIPCCService::getDevices()
 {
 	vector<CC_DevicePtr> devices;
 
 	CC_SIPCCDevicePtr pDevice = CC_SIPCCDevice::wrap(CCAPI_Device_getDeviceID());
 	if(pDevice != NULL)
 	{
-        devices.push_back(pDevice);
+        devices.push_back(pDevice.get());
     }
 
     return devices;
 }
 
 // !!! Note that accessing *Ptr instances from multiple threads can
 // lead to deadlocks, crashes, and spinning threads. Calls to this
 // method are not safe except from ccapp_thread.
 AudioControlPtr CC_SIPCCService::getAudioControl ()
 {
 	if(audioControlWrapper != NULL)
 	{
-		return audioControlWrapper;
+		return audioControlWrapper.get();
 	}
 	else
 	{
 		audioControlWrapper = AudioControlWrapperPtr(new AudioControlWrapper(VcmSIPCCBinding::getAudioControl()));
-		return audioControlWrapper;
+		return audioControlWrapper.get();
 	}
 }
 
 // !!! Note that accessing *Ptr instances from multiple threads can
 // lead to deadlocks, crashes, and spinning threads. Calls to this
 // method are not safe except from ccapp_thread.
 VideoControlPtr CC_SIPCCService::getVideoControl ()
 {
 	if(videoControlWrapper != NULL)
 	{
-		return videoControlWrapper;
+		return videoControlWrapper.get();
 	}
 	else
 	{
 		videoControlWrapper = VideoControlWrapperPtr(new VideoControlWrapper(VcmSIPCCBinding::getVideoControl()));
-		return videoControlWrapper;
+		return videoControlWrapper.get();
 	}
 }
 
 
 void CC_SIPCCService::applyLoggingMask (int newMask)
 {
     if (newMask >> _maxBitValueMaskedLoggingEntries > 0)
     {
@@ -621,39 +621,39 @@ void CC_SIPCCService::onDeviceEvent(ccap
         CSFLogError( logTag, "Unable to notify call observers for device handle (%u), as failed to create CC_DeviceInfoPtr", handle);
         return;
     }
 
     CSFLogInfo( logTag, "onDeviceEvent( %s, %s, [%s] )",
       device_event_getname(type),
       devicePtr->toString().c_str(),
       infoPtr->getDeviceName().c_str());
-    _self->notifyDeviceEventObservers(type, devicePtr, infoPtr);
+    _self->notifyDeviceEventObservers(type, devicePtr.get(), infoPtr.get());
 }
 
 void CC_SIPCCService::onFeatureEvent(ccapi_device_event_e type, cc_deviceinfo_ref_t /* device_info */, cc_featureinfo_ref_t feature_info)
 {
 
     if (_self == NULL)
      {
          CSFLogError( logTag, "CC_SIPCCService::_self is NULL. Unable to notify observers of device event.");
          return;
      }
 
      mozilla::MutexAutoLock lock(_self->m_lock);
 
      cc_device_handle_t hDevice = CCAPI_Device_getDeviceID();
-     CC_DevicePtr devicePtr = CC_SIPCCDevice::wrap(hDevice);
+     CC_DevicePtr devicePtr = CC_SIPCCDevice::wrap(hDevice).get();
      if (devicePtr == NULL)
      {
          CSFLogError( logTag, "Unable to notify device observers for device handle (%u), as failed to create CC_DevicePtr", hDevice);
          return;
      }
 
-     CC_FeatureInfoPtr infoPtr = CC_SIPCCFeatureInfo::wrap(feature_info);
+     CC_FeatureInfoPtr infoPtr = CC_SIPCCFeatureInfo::wrap(feature_info).get();
      if (infoPtr  == NULL)
      {
          CSFLogError( logTag, "Unable to notify call observers for feature info handle (%u), as failed to create CC_FeatureInfoPtr", feature_info);
          return;
      }
 
      CSFLogInfo( logTag, "onFeatureEvent( %s, %s, [%s] )",
          device_event_getname(type),
@@ -667,24 +667,24 @@ void CC_SIPCCService::onLineEvent(ccapi_
     if (_self == NULL)
     {
         CSFLogError( logTag, "CC_SIPCCService::_self is NULL. Unable to notify observers of line event.");
         return;
     }
 
     mozilla::MutexAutoLock lock(_self->m_lock);
 
-    CC_LinePtr linePtr = CC_SIPCCLine::wrap(line);
+    CC_LinePtr linePtr = CC_SIPCCLine::wrap(line).get();
     if (linePtr == NULL)
     {
         CSFLogError( logTag, "Unable to notify line observers for line lineId (%u), as failed to create CC_LinePtr", line);
         return;
     }
 
-    CC_LineInfoPtr infoPtr = CC_SIPCCLineInfo::wrap(info);
+    CC_LineInfoPtr infoPtr = CC_SIPCCLineInfo::wrap(info).get();
     if (infoPtr == NULL)
     {
         CSFLogError( logTag, "Unable to notify line observers for line lineId (%u), as failed to create CC_LineInfoPtr", line);
         return;
     }
 
     CSFLogInfo( logTag, "onLineEvent(%s, %s, [%d|%s]",
         line_event_getname(eventType), linePtr->toString().c_str(),
@@ -717,17 +717,17 @@ void CC_SIPCCService::onCallEvent(ccapi_
     }
 
     infoPtr->setMediaData(callPtr->getMediaData());
 
 	set<CSF::CC_CallCapabilityEnum::CC_CallCapability> capSet = infoPtr->getCapabilitySet();
     CSFLogInfo( logTag, "onCallEvent(%s, %s, [%s|%s]",
         call_event_getname(eventType), callPtr->toString().c_str(),
     	call_state_getname(infoPtr->getCallState()), CC_CallCapabilityEnum::toString(capSet).c_str());
-    _self->notifyCallEventObservers(eventType, callPtr, infoPtr);
+    _self->notifyCallEventObservers(eventType, callPtr.get(), infoPtr.get());
 }
 
 void CC_SIPCCService::addCCObserver ( CC_Observer * observer )
 {
 	mozilla::MutexAutoLock lock(m_lock);
     if (observer == NULL)
     {
         CSFLogError( logTag, "NULL value for \"observer\" passed to addCCObserver().");
--- a/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCService.h
+++ b/media/webrtc/signaling/src/softphonewrapper/CC_SIPCCService.h
@@ -28,17 +28,17 @@ extern "C" {
 
 #include <vector>
 #include <set>
 #include "mozilla/Mutex.h"
 
 namespace CSF
 {
     class PhoneConfig;
-	DECLARE_PTR(CC_SIPCCService);
+	DECLARE_NS_PTR(CC_SIPCCService);
 
 	class CC_SIPCCService : public CC_Service, public StreamObserver, public MediaProviderObserver
     {
 	    friend void ::configCtlFetchReq(int device_handle);
 	    friend char* ::platGetIPAddr();
 
 	public:
 	    CC_SIPCCService();