From f97b6b9baeaad56db9e57afe0cc159e9ce1dbff4 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Tue, 26 Sep 2017 16:56:22 +0200 Subject: [PATCH] Add definition of operator= for call/media session params. --- src/conference/params/call-session-params-p.h | 4 + src/conference/params/call-session-params.cpp | 38 ++++++-- src/conference/params/call-session-params.h | 2 + .../params/media-session-params-p.h | 5 + .../params/media-session-params.cpp | 95 ++++++++++++------- src/conference/params/media-session-params.h | 2 + 6 files changed, 102 insertions(+), 44 deletions(-) diff --git a/src/conference/params/call-session-params-p.h b/src/conference/params/call-session-params-p.h index 88b1e9e02..3b5e4e701 100644 --- a/src/conference/params/call-session-params-p.h +++ b/src/conference/params/call-session-params-p.h @@ -33,6 +33,10 @@ public: CallSessionParamsPrivate (const CallSessionParamsPrivate &src); virtual ~CallSessionParamsPrivate (); + CallSessionParamsPrivate &operator= (const CallSessionParamsPrivate &src); + + static void clone (const CallSessionParamsPrivate &src, CallSessionParamsPrivate &dst); + bool getInConference () const { return inConference; } void setInConference (bool value) { inConference = value; } bool getInternalCallUpdate () const { return internalCallUpdate; } diff --git a/src/conference/params/call-session-params.cpp b/src/conference/params/call-session-params.cpp index 4cc8d7963..7730438d4 100644 --- a/src/conference/params/call-session-params.cpp +++ b/src/conference/params/call-session-params.cpp @@ -27,15 +27,7 @@ LINPHONE_BEGIN_NAMESPACE // ============================================================================= CallSessionParamsPrivate::CallSessionParamsPrivate (const CallSessionParamsPrivate &src) : ClonableObjectPrivate () { - sessionName = src.sessionName; - privacy = src.privacy; - inConference = src.inConference; - internalCallUpdate = src.internalCallUpdate; - noUserConsent = src.noUserConsent; - /* The management of the custom headers is not optimal. We copy everything while ref counting would be more efficient. */ - if (src.customHeaders) - customHeaders = sal_custom_header_clone(src.customHeaders); - referer = src.referer; + clone(src, *this); } CallSessionParamsPrivate::~CallSessionParamsPrivate () { @@ -43,6 +35,27 @@ CallSessionParamsPrivate::~CallSessionParamsPrivate () { sal_custom_header_free(customHeaders); } +CallSessionParamsPrivate &CallSessionParamsPrivate::operator= (const CallSessionParamsPrivate &src) { + if (this != &src) { + if (customHeaders) + sal_custom_header_free(customHeaders); + clone(src, *this); + } + return *this; +} + +void CallSessionParamsPrivate::clone (const CallSessionParamsPrivate &src, CallSessionParamsPrivate &dst) { + dst.sessionName = src.sessionName; + dst.privacy = src.privacy; + dst.inConference = src.inConference; + dst.internalCallUpdate = src.internalCallUpdate; + dst.noUserConsent = src.noUserConsent; + /* The management of the custom headers is not optimal. We copy everything while ref counting would be more efficient. */ + if (src.customHeaders) + dst.customHeaders = sal_custom_header_clone(src.customHeaders); + dst.referer = src.referer; +} + // ----------------------------------------------------------------------------- SalCustomHeader * CallSessionParamsPrivate::getCustomHeaders () const { @@ -67,6 +80,13 @@ CallSessionParams::CallSessionParams (CallSessionParamsPrivate &p) : ClonableObj CallSessionParams::CallSessionParams (const CallSessionParams &src) : ClonableObject(*new CallSessionParamsPrivate(*src.getPrivate())) {} +CallSessionParams &CallSessionParams::operator= (const CallSessionParams &src) { + L_D(CallSessionParams); + if (this != &src) + *d = *src.getPrivate(); + return *this; +} + // ----------------------------------------------------------------------------- void CallSessionParams::initDefault (LinphoneCore *core) { diff --git a/src/conference/params/call-session-params.h b/src/conference/params/call-session-params.h index adb6ed1eb..d666afac9 100644 --- a/src/conference/params/call-session-params.h +++ b/src/conference/params/call-session-params.h @@ -41,6 +41,8 @@ public: CallSessionParams (const CallSessionParams &src); virtual ~CallSessionParams () = default; + CallSessionParams &operator= (const CallSessionParams &src); + virtual void initDefault (LinphoneCore *core); const std::string& getSessionName () const; diff --git a/src/conference/params/media-session-params-p.h b/src/conference/params/media-session-params-p.h index a32b88bd1..5355ff2f9 100644 --- a/src/conference/params/media-session-params-p.h +++ b/src/conference/params/media-session-params-p.h @@ -39,6 +39,11 @@ public: MediaSessionParamsPrivate (const MediaSessionParamsPrivate &src); virtual ~MediaSessionParamsPrivate (); + MediaSessionParamsPrivate &operator= (const MediaSessionParamsPrivate &src); + + static void clone (const MediaSessionParamsPrivate &src, MediaSessionParamsPrivate &dst); + void clean (); + static SalStreamDir mediaDirectionToSalStreamDir (LinphoneMediaDirection direction); static LinphoneMediaDirection salStreamDirToMediaDirection (SalStreamDir dir); diff --git a/src/conference/params/media-session-params.cpp b/src/conference/params/media-session-params.cpp index fe65b7be3..03fb0c748 100644 --- a/src/conference/params/media-session-params.cpp +++ b/src/conference/params/media-session-params.cpp @@ -36,44 +36,60 @@ MediaSessionParamsPrivate::MediaSessionParamsPrivate () { } MediaSessionParamsPrivate::MediaSessionParamsPrivate (const MediaSessionParamsPrivate &src) : CallSessionParamsPrivate(src) { - audioEnabled = src.audioEnabled; - audioBandwidthLimit = src.audioBandwidthLimit; - audioDirection = src.audioDirection; - audioMulticastEnabled = src.audioMulticastEnabled; - usedAudioCodec = src.usedAudioCodec; - videoEnabled = src.videoEnabled; - videoDirection = src.videoDirection; - videoMulticastEnabled = src.videoMulticastEnabled; - usedVideoCodec = src.usedVideoCodec; - receivedFps = src.receivedFps; - receivedVideoDefinition = src.receivedVideoDefinition ? linphone_video_definition_ref(src.receivedVideoDefinition) : nullptr; - sentFps = src.sentFps; - sentVideoDefinition = src.sentVideoDefinition ? linphone_video_definition_ref(src.sentVideoDefinition) : nullptr; - realtimeTextEnabled = src.realtimeTextEnabled; - usedRealtimeTextCodec = src.usedRealtimeTextCodec; - avpfEnabled = src.avpfEnabled; - avpfRrInterval = src.avpfRrInterval; - lowBandwidthEnabled = src.lowBandwidthEnabled; - recordFilePath = src.recordFilePath; - earlyMediaSendingEnabled = src.earlyMediaSendingEnabled; - encryption = src.encryption; - mandatoryMediaEncryptionEnabled = src.mandatoryMediaEncryptionEnabled; - _implicitRtcpFbEnabled = src._implicitRtcpFbEnabled; - downBandwidth = src.downBandwidth; - upBandwidth = src.upBandwidth; - downPtime = src.downPtime; - upPtime = src.upPtime; - updateCallWhenIceCompleted = src.updateCallWhenIceCompleted; - if (src.customSdpAttributes) - customSdpAttributes = sal_custom_sdp_attribute_clone(src.customSdpAttributes); - memset(customSdpMediaAttributes, 0, sizeof(customSdpMediaAttributes)); - for (unsigned int i = 0; i < (unsigned int)LinphoneStreamTypeUnknown; i++) { - if (src.customSdpMediaAttributes[i]) - customSdpMediaAttributes[i] = sal_custom_sdp_attribute_clone(src.customSdpMediaAttributes[i]); - } + clone(src, *this); } MediaSessionParamsPrivate::~MediaSessionParamsPrivate () { + this->clean(); +} + +MediaSessionParamsPrivate &MediaSessionParamsPrivate::operator= (const MediaSessionParamsPrivate &src) { + if (this != &src) { + this->clean(); + clone(src, *this); + } + return *this; +} + +void MediaSessionParamsPrivate::clone (const MediaSessionParamsPrivate &src, MediaSessionParamsPrivate &dst) { + dst.audioEnabled = src.audioEnabled; + dst.audioBandwidthLimit = src.audioBandwidthLimit; + dst.audioDirection = src.audioDirection; + dst.audioMulticastEnabled = src.audioMulticastEnabled; + dst.usedAudioCodec = src.usedAudioCodec; + dst.videoEnabled = src.videoEnabled; + dst.videoDirection = src.videoDirection; + dst.videoMulticastEnabled = src.videoMulticastEnabled; + dst.usedVideoCodec = src.usedVideoCodec; + dst.receivedFps = src.receivedFps; + dst.receivedVideoDefinition = src.receivedVideoDefinition ? linphone_video_definition_ref(src.receivedVideoDefinition) : nullptr; + dst.sentFps = src.sentFps; + dst.sentVideoDefinition = src.sentVideoDefinition ? linphone_video_definition_ref(src.sentVideoDefinition) : nullptr; + dst.realtimeTextEnabled = src.realtimeTextEnabled; + dst.usedRealtimeTextCodec = src.usedRealtimeTextCodec; + dst.avpfEnabled = src.avpfEnabled; + dst.avpfRrInterval = src.avpfRrInterval; + dst.lowBandwidthEnabled = src.lowBandwidthEnabled; + dst.recordFilePath = src.recordFilePath; + dst.earlyMediaSendingEnabled = src.earlyMediaSendingEnabled; + dst.encryption = src.encryption; + dst.mandatoryMediaEncryptionEnabled = src.mandatoryMediaEncryptionEnabled; + dst._implicitRtcpFbEnabled = src._implicitRtcpFbEnabled; + dst.downBandwidth = src.downBandwidth; + dst.upBandwidth = src.upBandwidth; + dst.downPtime = src.downPtime; + dst.upPtime = src.upPtime; + dst.updateCallWhenIceCompleted = src.updateCallWhenIceCompleted; + if (src.customSdpAttributes) + dst.customSdpAttributes = sal_custom_sdp_attribute_clone(src.customSdpAttributes); + memset(dst.customSdpMediaAttributes, 0, sizeof(dst.customSdpMediaAttributes)); + for (unsigned int i = 0; i < (unsigned int)LinphoneStreamTypeUnknown; i++) { + if (src.customSdpMediaAttributes[i]) + dst.customSdpMediaAttributes[i] = sal_custom_sdp_attribute_clone(src.customSdpMediaAttributes[i]); + } +} + +void MediaSessionParamsPrivate::clean () { if (receivedVideoDefinition) linphone_video_definition_unref(receivedVideoDefinition); if (sentVideoDefinition) @@ -203,6 +219,15 @@ MediaSessionParams::MediaSessionParams () : CallSessionParams(*new MediaSessionP MediaSessionParams::MediaSessionParams (const MediaSessionParams &src) : CallSessionParams(*new MediaSessionParamsPrivate(*src.getPrivate())) {} +MediaSessionParams &MediaSessionParams::operator= (const MediaSessionParams &src) { + L_D(MediaSessionParams); + if (this != &src) { + CallSessionParams::operator=(src); + *d = *src.getPrivate(); + } + return *this; +} + // ----------------------------------------------------------------------------- void MediaSessionParams::initDefault (LinphoneCore *core) { diff --git a/src/conference/params/media-session-params.h b/src/conference/params/media-session-params.h index a8fdb1d7a..0a6aafe9b 100644 --- a/src/conference/params/media-session-params.h +++ b/src/conference/params/media-session-params.h @@ -40,6 +40,8 @@ public: MediaSessionParams (const MediaSessionParams &src); virtual ~MediaSessionParams () = default; + MediaSessionParams &operator= (const MediaSessionParams &src); + void initDefault (LinphoneCore *core) override; bool audioEnabled () const;