Browse Source

Use bundle mid for candidates mid

Paul-Louis Ageneau 5 years ago
parent
commit
e1a95c2eee
3 changed files with 11 additions and 2 deletions
  1. 1 0
      include/rtc/description.hpp
  2. 8 0
      src/description.cpp
  3. 2 2
      src/icetransport.cpp

+ 1 - 0
include/rtc/description.hpp

@@ -43,6 +43,7 @@ public:
 	Role role() const;
 	Role role() const;
 	string roleString() const;
 	string roleString() const;
 	string dataMid() const;
 	string dataMid() const;
+	string bundleMid() const;
 	std::optional<string> fingerprint() const;
 	std::optional<string> fingerprint() const;
 	std::optional<uint16_t> sctpPort() const;
 	std::optional<uint16_t> sctpPort() const;
 	std::optional<size_t> maxMessageSize() const;
 	std::optional<size_t> maxMessageSize() const;

+ 8 - 0
src/description.cpp

@@ -150,6 +150,14 @@ string Description::roleString() const { return roleToString(mRole); }
 
 
 string Description::dataMid() const { return mData.mid; }
 string Description::dataMid() const { return mData.mid; }
 
 
+string Description::bundleMid() const {
+	// Get the mid of the first media
+	if (auto it = mMedia.find(0); it != mMedia.end())
+		return it->second.mid;
+	else
+		return mData.mid;
+}
+
 std::optional<string> Description::fingerprint() const { return mFingerprint; }
 std::optional<string> Description::fingerprint() const { return mFingerprint; }
 
 
 std::optional<uint16_t> Description::sctpPort() const { return mData.sctpPort; }
 std::optional<uint16_t> Description::sctpPort() const { return mData.sctpPort; }

+ 2 - 2
src/icetransport.cpp

@@ -123,7 +123,7 @@ Description IceTransport::getLocalDescription(Description::Type type) const {
 void IceTransport::setRemoteDescription(const Description &description) {
 void IceTransport::setRemoteDescription(const Description &description) {
 	mRole = description.role() == Description::Role::Active ? Description::Role::Passive
 	mRole = description.role() == Description::Role::Active ? Description::Role::Passive
 	                                                        : Description::Role::Active;
 	                                                        : Description::Role::Active;
-	mMid = description.dataMid();
+	mMid = description.bundleMid();
 	if (juice_set_remote_description(mAgent.get(), description.generateDataSdp("\r\n").c_str()) < 0)
 	if (juice_set_remote_description(mAgent.get(), description.generateDataSdp("\r\n").c_str()) < 0)
 		throw std::runtime_error("Failed to parse ICE settings from remote SDP");
 		throw std::runtime_error("Failed to parse ICE settings from remote SDP");
 }
 }
@@ -483,7 +483,7 @@ Description IceTransport::getLocalDescription(Description::Type type) const {
 void IceTransport::setRemoteDescription(const Description &description) {
 void IceTransport::setRemoteDescription(const Description &description) {
 	mRole = description.role() == Description::Role::Active ? Description::Role::Passive
 	mRole = description.role() == Description::Role::Active ? Description::Role::Passive
 	                                                        : Description::Role::Active;
 	                                                        : Description::Role::Active;
-	mMid = description.dataMid();
+	mMid = description.bundleMid();
 	mTrickleTimeout = !description.ended() ? 30s : 0s;
 	mTrickleTimeout = !description.ended() ? 30s : 0s;
 
 
 	// Warning: libnice expects "\n" as end of line
 	// Warning: libnice expects "\n" as end of line