Extract NetworkReceiverInterface and introduce EmulatedIpPacket

It is a step in the big refactoring to introduce new network emulation
layer for peer connection level e2e test, which will be based on system
sockets level injection.

Bug: webrtc:10138
Change-Id: Ie3854d22aa3eec289617bc432026ea670646556a
Reviewed-on: https://webrtc-review.googlesource.com/c/115943
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26137}
diff --git a/test/scenario/network_node.h b/test/scenario/network_node.h
index e47d435..dd28d7f 100644
--- a/test/scenario/network_node.h
+++ b/test/scenario/network_node.h
@@ -23,31 +23,22 @@
 #include "rtc_base/constructormagic.h"
 #include "rtc_base/copyonwritebuffer.h"
 #include "test/scenario/column_printer.h"
+#include "test/scenario/network/network_emulation.h"
 #include "test/scenario/scenario_config.h"
 
 namespace webrtc {
 namespace test {
 
-class NetworkReceiverInterface {
+class NullReceiver : public EmulatedNetworkReceiverInterface {
  public:
-  virtual void DeliverPacket(rtc::CopyOnWriteBuffer packet,
-                             uint64_t receiver,
-                             Timestamp at_time) = 0;
-  virtual ~NetworkReceiverInterface() = default;
+  void OnPacketReceived(EmulatedIpPacket packet) override;
 };
-class NullReceiver : public NetworkReceiverInterface {
- public:
-  void DeliverPacket(rtc::CopyOnWriteBuffer packet,
-                     uint64_t receiver,
-                     Timestamp at_time) override;
-};
-class ActionReceiver : public NetworkReceiverInterface {
+class ActionReceiver : public EmulatedNetworkReceiverInterface {
  public:
   explicit ActionReceiver(std::function<void()> action);
   virtual ~ActionReceiver() = default;
-  void DeliverPacket(rtc::CopyOnWriteBuffer packet,
-                     uint64_t receiver,
-                     Timestamp at_time) override;
+
+  void OnPacketReceived(EmulatedIpPacket packet) override;
 
  private:
   std::function<void()> action_;
@@ -55,19 +46,17 @@
 
 // NetworkNode represents one link in a simulated network. It is created by a
 // scenario and can be used when setting up audio and video stream sessions.
-class NetworkNode : public NetworkReceiverInterface {
+class NetworkNode : public EmulatedNetworkReceiverInterface {
  public:
   ~NetworkNode() override;
   RTC_DISALLOW_COPY_AND_ASSIGN(NetworkNode);
 
-  void DeliverPacket(rtc::CopyOnWriteBuffer packet,
-                     uint64_t receiver,
-                     Timestamp at_time) override;
+  void OnPacketReceived(EmulatedIpPacket packet) override;
   // Creates a route  for the given receiver_id over all the given nodes to the
   // given receiver.
-  static void Route(int64_t receiver_id,
+  static void Route(uint64_t receiver_id,
                     std::vector<NetworkNode*> nodes,
-                    NetworkReceiverInterface* receiver);
+                    EmulatedNetworkReceiverInterface* receiver);
 
  protected:
   friend class Scenario;
@@ -76,23 +65,22 @@
 
   NetworkNode(NetworkNodeConfig config,
               std::unique_ptr<NetworkBehaviorInterface> simulation);
-  static void ClearRoute(int64_t receiver_id, std::vector<NetworkNode*> nodes);
+  static void ClearRoute(uint64_t receiver_id, std::vector<NetworkNode*> nodes);
   void Process(Timestamp at_time);
 
  private:
   struct StoredPacket {
-    rtc::CopyOnWriteBuffer packet_data;
-    uint64_t receiver_id;
+    EmulatedIpPacket packet;
     uint64_t id;
     bool removed;
   };
-  void SetRoute(uint64_t receiver, NetworkReceiverInterface* node);
+  void SetRoute(uint64_t receiver, EmulatedNetworkReceiverInterface* node);
   void ClearRoute(uint64_t receiver_id);
   rtc::CriticalSection crit_sect_;
   size_t packet_overhead_ RTC_GUARDED_BY(crit_sect_);
   const std::unique_ptr<NetworkBehaviorInterface> behavior_
       RTC_GUARDED_BY(crit_sect_);
-  std::map<uint64_t, NetworkReceiverInterface*> routing_
+  std::map<uint64_t, EmulatedNetworkReceiverInterface*> routing_
       RTC_GUARDED_BY(crit_sect_);
   std::deque<StoredPacket> packets_ RTC_GUARDED_BY(crit_sect_);
 
@@ -155,12 +143,12 @@
 
  private:
   friend class Scenario;
-  CrossTrafficSource(NetworkReceiverInterface* target,
+  CrossTrafficSource(EmulatedNetworkReceiverInterface* target,
                      uint64_t receiver_id,
                      CrossTrafficConfig config);
   void Process(Timestamp at_time, TimeDelta delta);
 
-  NetworkReceiverInterface* const target_;
+  EmulatedNetworkReceiverInterface* const target_;
   const uint64_t receiver_id_;
   CrossTrafficConfig config_;
   webrtc::Random random_;