Skip to content

Commit

Permalink
Move group-modifying functions into BundleManager
Browse files Browse the repository at this point in the history
Bug: webrtc:12837
Change-Id: I886ec89427207e1dc291c9959f1b6113c97cbca3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/221616
Reviewed-by: Henrik Boström <[email protected]>
Commit-Queue: Harald Alvestrand <[email protected]>
Cr-Commit-Position: refs/heads/master@{#34246}
  • Loading branch information
Harald Alvestrand authored and WebRTC LUCI CQ committed Jun 8, 2021
1 parent 9f9bf38 commit 2aa24f1
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 18 deletions.
1 change: 1 addition & 0 deletions pc/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ rtc_library("rtc_pc_base") {
visibility = [ "*" ]
defines = []
sources = [
"bundle_manager.cc",
"bundle_manager.h",
"channel.cc",
"channel.h",
Expand Down
49 changes: 49 additions & 0 deletions pc/bundle_manager.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Copyright 2021 The WebRTC Project Authors. All rights reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/

#include "pc/bundle_manager.h"

namespace webrtc {

void BundleManager::Update(const cricket::SessionDescription* description) {
bundle_groups_.clear();
for (const cricket::ContentGroup* new_bundle_group :
description->GetGroupsByName(cricket::GROUP_TYPE_BUNDLE)) {
bundle_groups_.push_back(
std::make_unique<cricket::ContentGroup>(*new_bundle_group));
}
}

void BundleManager::DeleteMid(const cricket::ContentGroup* bundle_group,
const std::string& mid) {
// Remove the rejected content from the |bundle_group|.
// The const pointer arg is used to identify the group, we verify
// it before we use it to make a modification.
auto bundle_group_it = std::find_if(
bundle_groups_.begin(), bundle_groups_.end(),
[bundle_group](std::unique_ptr<cricket::ContentGroup>& group) {
return bundle_group == group.get();
});
RTC_DCHECK(bundle_group_it != bundle_groups_.end());
(*bundle_group_it)->RemoveContentName(mid);
}

void BundleManager::DeleteGroup(const cricket::ContentGroup* bundle_group) {
// Delete the BUNDLE group.
auto bundle_group_it = std::find_if(
bundle_groups_.begin(), bundle_groups_.end(),
[bundle_group](std::unique_ptr<cricket::ContentGroup>& group) {
return bundle_group == group.get();
});
RTC_DCHECK(bundle_group_it != bundle_groups_.end());
bundle_groups_.erase(bundle_group_it);
}

} // namespace webrtc
15 changes: 10 additions & 5 deletions pc/bundle_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#define PC_BUNDLE_MANAGER_H_

#include <memory>
#include <string>
#include <vector>

#include "pc/session_description.h"
Expand All @@ -22,7 +23,7 @@ namespace webrtc {

// This is a work-in-progress. Planned steps:
// 1) Move all Bundle-related data structures from JsepTransport
// into this class.
// into this class.
// 2) Move all Bundle-related functions into this class.
// 3) Move remaining Bundle-related logic into this class.
// Make data members private.
Expand All @@ -35,12 +36,16 @@ class BundleManager {
const {
return bundle_groups_;
}
std::vector<std::unique_ptr<cricket::ContentGroup>>& bundle_groups() {
return bundle_groups_;
}
// Update the groups description. This completely replaces the group
// description with the one from the SessionDescription.
void Update(const cricket::SessionDescription* description);
// Delete a MID from the group that contains it.
void DeleteMid(const cricket::ContentGroup* bundle_group,
const std::string& mid);
// Delete a group.
void DeleteGroup(const cricket::ContentGroup* bundle_group);

private:
// Use unique_ptr<> to get a stable address.
std::vector<std::unique_ptr<cricket::ContentGroup>> bundle_groups_;
};

Expand Down
16 changes: 3 additions & 13 deletions pc/jsep_transport_controller.cc
Original file line number Diff line number Diff line change
Expand Up @@ -778,11 +778,7 @@ RTCError JsepTransportController::ValidateAndMaybeUpdateBundleGroups(
}

if (ShouldUpdateBundleGroup(type, description)) {
bundles_.bundle_groups().clear();
for (const cricket::ContentGroup* new_bundle_group : new_bundle_groups) {
bundles_.bundle_groups().push_back(
std::make_unique<cricket::ContentGroup>(*new_bundle_group));
}
bundles_.Update(description);
}

for (const auto& bundle_group : bundles_.bundle_groups()) {
Expand Down Expand Up @@ -850,18 +846,12 @@ void JsepTransportController::HandleRejectedContent(
established_bundle_groups_by_mid.erase(it);
}
// Delete the BUNDLE group.
auto bundle_group_it = std::find_if(
bundles_.bundle_groups().begin(), bundles_.bundle_groups().end(),
[bundle_group](std::unique_ptr<cricket::ContentGroup>& group) {
return bundle_group == group.get();
});
RTC_DCHECK(bundle_group_it != bundles_.bundle_groups().end());
bundles_.bundle_groups().erase(bundle_group_it);
bundles_.DeleteGroup(bundle_group);
} else {
RemoveTransportForMid(content_info.name);
if (bundle_group) {
// Remove the rejected content from the |bundle_group|.
bundle_group->RemoveContentName(content_info.name);
bundles_.DeleteMid(bundle_group, content_info.name);
}
}
MaybeDestroyJsepTransport(content_info.name);
Expand Down

0 comments on commit 2aa24f1

Please sign in to comment.