diff --git a/p2p/base/sessiondescription.cc b/p2p/base/sessiondescription.cc index 26989c042a..afe9a9acc5 100644 --- a/p2p/base/sessiondescription.cc +++ b/p2p/base/sessiondescription.cc @@ -45,6 +45,15 @@ const ContentInfo* FindContentInfoByType( return NULL; } +ContentGroup::ContentGroup(const std::string& semantics) + : semantics_(semantics) {} + +ContentGroup::ContentGroup(const ContentGroup&) = default; +ContentGroup::ContentGroup(ContentGroup&&) = default; +ContentGroup& ContentGroup::operator=(const ContentGroup&) = default; +ContentGroup& ContentGroup::operator=(ContentGroup&&) = default; +ContentGroup::~ContentGroup() = default; + const std::string* ContentGroup::FirstContentName() const { return (!content_names_.empty()) ? &(*content_names_.begin()) : NULL; } @@ -70,6 +79,31 @@ bool ContentGroup::RemoveContentName(const std::string& content_name) { return true; } +SessionDescription::SessionDescription() = default; + +SessionDescription::SessionDescription(const ContentInfos& contents) + : contents_(contents) {} + +SessionDescription::SessionDescription(const ContentInfos& contents, + const ContentGroups& groups) + : contents_(contents), content_groups_(groups) {} + +SessionDescription::SessionDescription(const ContentInfos& contents, + const TransportInfos& transports, + const ContentGroups& groups) + : contents_(contents), + transport_infos_(transports), + content_groups_(groups) {} + +SessionDescription::SessionDescription(const SessionDescription&) = default; + +SessionDescription::~SessionDescription() { + for (ContentInfos::iterator content = contents_.begin(); + content != contents_.end(); ++content) { + delete content->description; + } +} + SessionDescription* SessionDescription::Copy() const { SessionDescription* copy = new SessionDescription(*this); // Copy all ContentDescriptions. diff --git a/p2p/base/sessiondescription.h b/p2p/base/sessiondescription.h index d1b11cfbfc..565722c519 100644 --- a/p2p/base/sessiondescription.h +++ b/p2p/base/sessiondescription.h @@ -67,8 +67,12 @@ typedef std::vector ContentNames; // MediaDescription. class ContentGroup { public: - explicit ContentGroup(const std::string& semantics) : - semantics_(semantics) {} + explicit ContentGroup(const std::string& semantics); + ContentGroup(const ContentGroup&); + ContentGroup(ContentGroup&&); + ContentGroup& operator=(const ContentGroup&); + ContentGroup& operator=(ContentGroup&&); + ~ContentGroup(); const std::string& semantics() const { return semantics_; } const ContentNames& content_names() const { return content_names_; } @@ -96,25 +100,13 @@ const ContentInfo* FindContentInfoByType( // contents are unique be name, but doesn't enforce that. class SessionDescription { public: - SessionDescription() {} - explicit SessionDescription(const ContentInfos& contents) : - contents_(contents) {} - SessionDescription(const ContentInfos& contents, - const ContentGroups& groups) : - contents_(contents), - content_groups_(groups) {} + SessionDescription(); + explicit SessionDescription(const ContentInfos& contents); + SessionDescription(const ContentInfos& contents, const ContentGroups& groups); SessionDescription(const ContentInfos& contents, const TransportInfos& transports, - const ContentGroups& groups) : - contents_(contents), - transport_infos_(transports), - content_groups_(groups) {} - ~SessionDescription() { - for (ContentInfos::iterator content = contents_.begin(); - content != contents_.end(); ++content) { - delete content->description; - } - } + const ContentGroups& groups); + ~SessionDescription(); SessionDescription* Copy() const; @@ -181,6 +173,8 @@ class SessionDescription { bool msid_supported() const { return msid_supported_; } private: + SessionDescription(const SessionDescription&); + ContentInfos contents_; TransportInfos transport_infos_; ContentGroups content_groups_; diff --git a/p2p/base/transportdescription.cc b/p2p/base/transportdescription.cc index 7dd780c51f..9cbf383d5d 100644 --- a/p2p/base/transportdescription.cc +++ b/p2p/base/transportdescription.cc @@ -53,4 +53,54 @@ bool ConnectionRoleToString(const ConnectionRole& role, std::string* role_str) { return true; } +TransportDescription::TransportDescription() + : ice_mode(ICEMODE_FULL), connection_role(CONNECTIONROLE_NONE) {} + +TransportDescription::TransportDescription( + const std::vector& transport_options, + const std::string& ice_ufrag, + const std::string& ice_pwd, + IceMode ice_mode, + ConnectionRole role, + const rtc::SSLFingerprint* identity_fingerprint) + : transport_options(transport_options), + ice_ufrag(ice_ufrag), + ice_pwd(ice_pwd), + ice_mode(ice_mode), + connection_role(role), + identity_fingerprint(CopyFingerprint(identity_fingerprint)) {} + +TransportDescription::TransportDescription(const std::string& ice_ufrag, + const std::string& ice_pwd) + : ice_ufrag(ice_ufrag), + ice_pwd(ice_pwd), + ice_mode(ICEMODE_FULL), + connection_role(CONNECTIONROLE_NONE) {} + +TransportDescription::TransportDescription(const TransportDescription& from) + : transport_options(from.transport_options), + ice_ufrag(from.ice_ufrag), + ice_pwd(from.ice_pwd), + ice_mode(from.ice_mode), + connection_role(from.connection_role), + identity_fingerprint(CopyFingerprint(from.identity_fingerprint.get())) {} + +TransportDescription::~TransportDescription() = default; + +TransportDescription& TransportDescription::operator=( + const TransportDescription& from) { + // Self-assignment + if (this == &from) + return *this; + + transport_options = from.transport_options; + ice_ufrag = from.ice_ufrag; + ice_pwd = from.ice_pwd; + ice_mode = from.ice_mode; + connection_role = from.connection_role; + + identity_fingerprint.reset(CopyFingerprint(from.identity_fingerprint.get())); + return *this; +} + } // namespace cricket diff --git a/p2p/base/transportdescription.h b/p2p/base/transportdescription.h index 278c9d161f..664b7d3a23 100644 --- a/p2p/base/transportdescription.h +++ b/p2p/base/transportdescription.h @@ -87,59 +87,26 @@ extern const char CONNECTIONROLE_PASSIVE_STR[]; extern const char CONNECTIONROLE_ACTPASS_STR[]; extern const char CONNECTIONROLE_HOLDCONN_STR[]; -constexpr auto ICE_OPTION_TRICKLE = "trickle"; -constexpr auto ICE_OPTION_RENOMINATION = "renomination"; +constexpr auto* ICE_OPTION_TRICKLE = "trickle"; +constexpr auto* ICE_OPTION_RENOMINATION = "renomination"; bool StringToConnectionRole(const std::string& role_str, ConnectionRole* role); bool ConnectionRoleToString(const ConnectionRole& role, std::string* role_str); struct TransportDescription { - TransportDescription() - : ice_mode(ICEMODE_FULL), - connection_role(CONNECTIONROLE_NONE) {} - + TransportDescription(); TransportDescription(const std::vector& transport_options, const std::string& ice_ufrag, const std::string& ice_pwd, IceMode ice_mode, ConnectionRole role, - const rtc::SSLFingerprint* identity_fingerprint) - : transport_options(transport_options), - ice_ufrag(ice_ufrag), - ice_pwd(ice_pwd), - ice_mode(ice_mode), - connection_role(role), - identity_fingerprint(CopyFingerprint(identity_fingerprint)) {} + const rtc::SSLFingerprint* identity_fingerprint); TransportDescription(const std::string& ice_ufrag, - const std::string& ice_pwd) - : ice_ufrag(ice_ufrag), - ice_pwd(ice_pwd), - ice_mode(ICEMODE_FULL), - connection_role(CONNECTIONROLE_NONE) {} - TransportDescription(const TransportDescription& from) - : transport_options(from.transport_options), - ice_ufrag(from.ice_ufrag), - ice_pwd(from.ice_pwd), - ice_mode(from.ice_mode), - connection_role(from.connection_role), - identity_fingerprint(CopyFingerprint(from.identity_fingerprint.get())) { - } + const std::string& ice_pwd); + TransportDescription(const TransportDescription& from); + ~TransportDescription(); - TransportDescription& operator=(const TransportDescription& from) { - // Self-assignment - if (this == &from) - return *this; - - transport_options = from.transport_options; - ice_ufrag = from.ice_ufrag; - ice_pwd = from.ice_pwd; - ice_mode = from.ice_mode; - connection_role = from.connection_role; - - identity_fingerprint.reset(CopyFingerprint( - from.identity_fingerprint.get())); - return *this; - } + TransportDescription& operator=(const TransportDescription& from); // TODO(deadbeef): Rename to HasIceOption, etc. bool HasOption(const std::string& option) const { diff --git a/p2p/base/transportdescriptionfactory.cc b/p2p/base/transportdescriptionfactory.cc index 69663c4eb5..8ccb4b6e38 100644 --- a/p2p/base/transportdescriptionfactory.cc +++ b/p2p/base/transportdescriptionfactory.cc @@ -24,6 +24,8 @@ TransportDescriptionFactory::TransportDescriptionFactory() : secure_(SEC_DISABLED) { } +TransportDescriptionFactory::~TransportDescriptionFactory() = default; + TransportDescription* TransportDescriptionFactory::CreateOffer( const TransportOptions& options, const TransportDescription* current_description) const { diff --git a/p2p/base/transportdescriptionfactory.h b/p2p/base/transportdescriptionfactory.h index 7f020e0862..f8b031a683 100644 --- a/p2p/base/transportdescriptionfactory.h +++ b/p2p/base/transportdescriptionfactory.h @@ -35,6 +35,8 @@ class TransportDescriptionFactory { public: // Default ctor; use methods below to set configuration. TransportDescriptionFactory(); + ~TransportDescriptionFactory(); + SecurePolicy secure() const { return secure_; } // The certificate to use when setting up DTLS. const rtc::scoped_refptr& certificate() const {