| Index: webrtc/base/virtualsocketserver.h
 | 
| diff --git a/webrtc/base/virtualsocketserver.h b/webrtc/base/virtualsocketserver.h
 | 
| index cce0279d32e2a786970ab9370545ea46e9033e22..6782d800a03eeaa6648c1cad310bb0bacbbb03a9 100644
 | 
| --- a/webrtc/base/virtualsocketserver.h
 | 
| +++ b/webrtc/base/virtualsocketserver.h
 | 
| @@ -112,6 +112,10 @@ class VirtualSocketServer : public SocketServer, public sigslot::has_slots<> {
 | 
|    bool Wait(int cms, bool process_io) override;
 | 
|    void WakeUp() override;
 | 
|  
 | 
| +  void SetDelayOnAddress(const rtc::SocketAddress& address, int delay_ms) {
 | 
| +    delay_by_ip_[address.ipaddr()] = delay_ms;
 | 
| +  }
 | 
| +
 | 
|    typedef std::pair<double, double> Point;
 | 
|    typedef std::vector<Point> Function;
 | 
|  
 | 
| @@ -194,8 +198,10 @@ class VirtualSocketServer : public SocketServer, public sigslot::has_slots<> {
 | 
|    // Computes the number of milliseconds required to send a packet of this size.
 | 
|    uint32_t SendDelay(uint32_t size);
 | 
|  
 | 
| -  // Returns a random transit delay chosen from the appropriate distribution.
 | 
| -  uint32_t GetRandomTransitDelay();
 | 
| +  // If the delay has been set for the address of the socket, returns the set
 | 
| +  // delay. Otherwise, returns a random transit delay chosen from the
 | 
| +  // appropriate distribution.
 | 
| +  uint32_t GetTransitDelay(Socket* socket);
 | 
|  
 | 
|    // Basic operations on functions.  Those that return a function also take
 | 
|    // ownership of the function given (and hence, may modify or delete it).
 | 
| @@ -243,7 +249,6 @@ class VirtualSocketServer : public SocketServer, public sigslot::has_slots<> {
 | 
|    bool server_owned_;
 | 
|    MessageQueue* msg_queue_;
 | 
|    bool stop_on_idle_;
 | 
| -  int64_t network_delay_;
 | 
|    in_addr next_ipv4_;
 | 
|    in6_addr next_ipv6_;
 | 
|    uint16_t next_port_;
 | 
| @@ -260,7 +265,10 @@ class VirtualSocketServer : public SocketServer, public sigslot::has_slots<> {
 | 
|    uint32_t delay_mean_;
 | 
|    uint32_t delay_stddev_;
 | 
|    uint32_t delay_samples_;
 | 
| -  Function* delay_dist_;
 | 
| +
 | 
| +  std::map<rtc::IPAddress, int> delay_by_ip_;
 | 
| +  std::unique_ptr<Function> delay_dist_;
 | 
| +
 | 
|    CriticalSection delay_crit_;
 | 
|  
 | 
|    double drop_prob_;
 | 
| @@ -358,6 +366,9 @@ class VirtualSocket : public AsyncSocket,
 | 
|    // Network model that enforces bandwidth and capacity constraints
 | 
|    NetworkQueue network_;
 | 
|    size_t network_size_;
 | 
| +  // The scheduled delivery time of the last packet sent on this socket.
 | 
| +  // It is used to ensure ordered delivery of packets sent on this socket.
 | 
| +  int64_t last_delivery_time_ = 0;
 | 
|  
 | 
|    // Data which has been received from the network
 | 
|    RecvBuffer recv_buffer_;
 | 
| 
 |