Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(500)

Unified Diff: webrtc/base/virtualsocketserver.cc

Issue 2261523004: Signal to remove remote candidates if ports are pruned. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Merge to head and fix a comment Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/base/virtualsocketserver.h ('k') | webrtc/p2p/client/basicportallocator.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/base/virtualsocketserver.cc
diff --git a/webrtc/base/virtualsocketserver.cc b/webrtc/base/virtualsocketserver.cc
index 87775cd63cc6afcd4e2dece01ec32bfde2780adf..da2cb1d741a04f28b1ae1480b44cfbb43757a376 100644
--- a/webrtc/base/virtualsocketserver.cc
+++ b/webrtc/base/virtualsocketserver.cc
@@ -528,7 +528,6 @@ VirtualSocketServer::VirtualSocketServer(SocketServer* ss)
server_owned_(false),
msg_queue_(NULL),
stop_on_idle_(false),
- network_delay_(0),
next_ipv4_(kInitialNextIPv4),
next_ipv6_(kInitialNextIPv6),
next_port_(kFirstEphemeralPort),
@@ -541,7 +540,6 @@ VirtualSocketServer::VirtualSocketServer(SocketServer* ss)
delay_mean_(0),
delay_stddev_(0),
delay_samples_(NUM_SAMPLES),
- delay_dist_(NULL),
drop_prob_(0.0) {
if (!server_) {
server_ = new PhysicalSocketServer();
@@ -553,7 +551,6 @@ VirtualSocketServer::VirtualSocketServer(SocketServer* ss)
VirtualSocketServer::~VirtualSocketServer() {
delete bindings_;
delete connections_;
- delete delay_dist_;
if (server_owned_) {
delete server_;
}
@@ -781,7 +778,7 @@ static double Random() {
int VirtualSocketServer::Connect(VirtualSocket* socket,
const SocketAddress& remote_addr,
bool use_delay) {
- uint32_t delay = use_delay ? GetRandomTransitDelay() : 0;
+ uint32_t delay = use_delay ? GetTransitDelay(socket) : 0;
VirtualSocket* remote = LookupBinding(remote_addr);
if (!CanInteractWith(socket, remote)) {
LOG(LS_INFO) << "Address family mismatch between "
@@ -803,7 +800,7 @@ bool VirtualSocketServer::Disconnect(VirtualSocket* socket) {
if (socket) {
// If we simulate packets being delayed, we should simulate the
// equivalent of a FIN being delayed as well.
- uint32_t delay = GetRandomTransitDelay();
+ uint32_t delay = GetTransitDelay(socket);
// Remove the mapping.
msg_queue_->PostDelayed(RTC_FROM_HERE, delay, socket, MSG_ID_DISCONNECT);
return true;
@@ -947,7 +944,7 @@ void VirtualSocketServer::AddPacketToNetwork(VirtualSocket* sender,
sender->network_.push_back(entry);
// Find the delay for crossing the many virtual hops of the network.
- uint32_t transit_delay = GetRandomTransitDelay();
+ uint32_t transit_delay = GetTransitDelay(sender);
// When the incoming packet is from a binding of the any address, translate it
// to the default route here such that the recipient will see the default
@@ -964,12 +961,12 @@ void VirtualSocketServer::AddPacketToNetwork(VirtualSocket* sender,
int64_t ts = TimeAfter(send_delay + transit_delay);
if (ordered) {
// Ensure that new packets arrive after previous ones
- // TODO: consider ordering on a per-socket basis, since this
- // introduces artificial delay.
- ts = std::max(ts, network_delay_);
+ ts = std::max(ts, sender->last_delivery_time_);
+ // A socket should not have both ordered and unordered delivery, so its last
+ // delivery time only needs to be updated when it has ordered delivery.
+ sender->last_delivery_time_ = ts;
}
msg_queue_->PostAt(RTC_FROM_HERE, ts, recipient, MSG_ID_PACKET, p);
- network_delay_ = std::max(ts, network_delay_);
}
void VirtualSocketServer::PurgeNetworkPackets(VirtualSocket* socket,
@@ -1016,8 +1013,7 @@ void VirtualSocketServer::UpdateDelayDistribution() {
// We take a lock just to make sure we don't leak memory.
{
CritScope cs(&delay_crit_);
- delete delay_dist_;
- delay_dist_ = dist;
+ delay_dist_.reset(dist);
}
}
@@ -1060,10 +1056,16 @@ VirtualSocketServer::Function* VirtualSocketServer::CreateDistribution(
return Resample(Invert(Accumulate(f)), 0, 1, samples);
}
-uint32_t VirtualSocketServer::GetRandomTransitDelay() {
+uint32_t VirtualSocketServer::GetTransitDelay(Socket* socket) {
+ // Use the delay based on the address if it is set.
+ auto iter = delay_by_ip_.find(socket->GetLocalAddress().ipaddr());
+ if (iter != delay_by_ip_.end()) {
+ return static_cast<uint32_t>(iter->second);
+ }
+ // Otherwise, use the delay from the distribution distribution.
size_t index = rand() % delay_dist_->size();
double delay = (*delay_dist_)[index].second;
- //LOG_F(LS_INFO) << "random[" << index << "] = " << delay;
+ // LOG_F(LS_INFO) << "random[" << index << "] = " << delay;
return static_cast<uint32_t>(delay);
}
« no previous file with comments | « webrtc/base/virtualsocketserver.h ('k') | webrtc/p2p/client/basicportallocator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698