Add a PacketOptions struct to webrtc::Transport.

This allows us to pass packet meta data, such as transport sequence
number, to libjingle and further down to the socket implementation. A
similar struct already exist in libjingle, see rtc::PacketOptions in asyncpacketsocket.h.

BUG=4173

Review URL: https://codereview.webrtc.org/1376673004

Cr-Commit-Position: refs/heads/master@{#10144}
diff --git a/webrtc/test/channel_transport/udp_transport_impl.cc b/webrtc/test/channel_transport/udp_transport_impl.cc
index f66f4ef..a530ec6 100644
--- a/webrtc/test/channel_transport/udp_transport_impl.cc
+++ b/webrtc/test/channel_transport/udp_transport_impl.cc
@@ -1931,7 +1931,9 @@
     return -1;
 }
 
-bool UdpTransportImpl::SendRtp(const uint8_t* data, size_t length) {
+bool UdpTransportImpl::SendRtp(const uint8_t* data,
+                               size_t length,
+                               const PacketOptions& packet_options) {
     WEBRTC_TRACE(kTraceStream, kTraceTransport, _id, "%s", __FUNCTION__);
 
     CriticalSectionScoped cs(_crit);
diff --git a/webrtc/test/channel_transport/udp_transport_impl.h b/webrtc/test/channel_transport/udp_transport_impl.h
index 80562f3..f80ee02 100644
--- a/webrtc/test/channel_transport/udp_transport_impl.h
+++ b/webrtc/test/channel_transport/udp_transport_impl.h
@@ -116,7 +116,9 @@
                              size_t length,
                              uint16_t rtcpPort) override;
     // Transport functions
-    bool SendRtp(const uint8_t* data, size_t length) override;
+    bool SendRtp(const uint8_t* data,
+                 size_t length,
+                 const PacketOptions& packet_options) override;
     bool SendRtcp(const uint8_t* data, size_t length) override;
 
     // UdpTransport functions continue.
diff --git a/webrtc/test/direct_transport.cc b/webrtc/test/direct_transport.cc
index d0f797c..1f92e92 100644
--- a/webrtc/test/direct_transport.cc
+++ b/webrtc/test/direct_transport.cc
@@ -57,7 +57,9 @@
   fake_network_.SetReceiver(receiver);
 }
 
-bool DirectTransport::SendRtp(const uint8_t* data, size_t length) {
+bool DirectTransport::SendRtp(const uint8_t* data,
+                              size_t length,
+                              const PacketOptions& options) {
   fake_network_.SendPacket(data, length);
   packet_event_->Set();
   return true;
diff --git a/webrtc/test/direct_transport.h b/webrtc/test/direct_transport.h
index a0aaecb..1c6f937 100644
--- a/webrtc/test/direct_transport.h
+++ b/webrtc/test/direct_transport.h
@@ -39,7 +39,9 @@
   virtual void StopSending();
   virtual void SetReceiver(PacketReceiver* receiver);
 
-  bool SendRtp(const uint8_t* data, size_t length) override;
+  bool SendRtp(const uint8_t* data,
+               size_t length,
+               const PacketOptions& options) override;
   bool SendRtcp(const uint8_t* data, size_t length) override;
 
  private:
diff --git a/webrtc/test/layer_filtering_transport.cc b/webrtc/test/layer_filtering_transport.cc
index 5ad3f8c..d6f3591 100644
--- a/webrtc/test/layer_filtering_transport.cc
+++ b/webrtc/test/layer_filtering_transport.cc
@@ -33,10 +33,12 @@
       current_seq_num_(10000) {
 }  // TODO(ivica): random seq num?
 
-bool LayerFilteringTransport::SendRtp(const uint8_t* packet, size_t length) {
+bool LayerFilteringTransport::SendRtp(const uint8_t* packet,
+                                      size_t length,
+                                      const PacketOptions& options) {
   if (tl_discard_threshold_ == 0 && sl_discard_threshold_ == 0) {
     // Nothing to change, forward the packet immediately.
-    return test::DirectTransport::SendRtp(packet, length);
+    return test::DirectTransport::SendRtp(packet, length, options);
   }
 
   bool set_marker_bit = false;
@@ -93,7 +95,7 @@
 
   ++current_seq_num_;  // Increase only if packet not discarded.
 
-  return test::DirectTransport::SendRtp(temp_buffer, length);
+  return test::DirectTransport::SendRtp(temp_buffer, length, options);
 }
 
 }  // namespace test
diff --git a/webrtc/test/layer_filtering_transport.h b/webrtc/test/layer_filtering_transport.h
index 96a2cba..68994ae 100644
--- a/webrtc/test/layer_filtering_transport.h
+++ b/webrtc/test/layer_filtering_transport.h
@@ -24,7 +24,9 @@
                           uint8_t vp9_video_payload_type,
                           uint8_t tl_discard_threshold,
                           uint8_t sl_discard_threshold);
-  bool SendRtp(const uint8_t* data, size_t length) override;
+  bool SendRtp(const uint8_t* data,
+               size_t length,
+               const PacketOptions& options) override;
 
  private:
   // Used to distinguish between VP8 and VP9.
diff --git a/webrtc/test/mock_transport.h b/webrtc/test/mock_transport.h
index ca08809..4937134 100644
--- a/webrtc/test/mock_transport.h
+++ b/webrtc/test/mock_transport.h
@@ -18,7 +18,10 @@
 
 class MockTransport : public Transport {
  public:
-  MOCK_METHOD2(SendRtp, bool(const uint8_t* data, size_t len));
+  MOCK_METHOD3(SendRtp,
+               bool(const uint8_t* data,
+                    size_t len,
+                    const PacketOptions& options));
   MOCK_METHOD2(SendRtcp, bool(const uint8_t* data, size_t len));
 };
 }  // namespace webrtc
diff --git a/webrtc/test/null_transport.cc b/webrtc/test/null_transport.cc
index 3cba638..7fa36d1 100644
--- a/webrtc/test/null_transport.cc
+++ b/webrtc/test/null_transport.cc
@@ -12,7 +12,9 @@
 namespace webrtc {
 namespace test {
 
-bool NullTransport::SendRtp(const uint8_t* packet, size_t length) {
+bool NullTransport::SendRtp(const uint8_t* packet,
+                            size_t length,
+                            const PacketOptions& options) {
   return true;
 }
 
diff --git a/webrtc/test/null_transport.h b/webrtc/test/null_transport.h
index a60d8cb..f4b7046 100644
--- a/webrtc/test/null_transport.h
+++ b/webrtc/test/null_transport.h
@@ -19,7 +19,9 @@
 namespace test {
 class NullTransport : public Transport {
  public:
-  bool SendRtp(const uint8_t* packet, size_t length) override;
+  bool SendRtp(const uint8_t* packet,
+               size_t length,
+               const PacketOptions& options) override;
   bool SendRtcp(const uint8_t* packet, size_t length) override;
 };
 }  // namespace test
diff --git a/webrtc/test/rtp_rtcp_observer.h b/webrtc/test/rtp_rtcp_observer.h
index 24f7256..97aa7b6 100644
--- a/webrtc/test/rtp_rtcp_observer.h
+++ b/webrtc/test/rtp_rtcp_observer.h
@@ -126,7 +126,9 @@
           on_rtcp_(on_rtcp) {}
 
   private:
-   bool SendRtp(const uint8_t* packet, size_t length) override {
+   bool SendRtp(const uint8_t* packet,
+                size_t length,
+                const PacketOptions& options) override {
       EXPECT_FALSE(RtpHeaderParser::IsRtcp(packet, length));
       Action action;
       {
@@ -138,7 +140,7 @@
           // Drop packet silently.
           return true;
         case SEND_PACKET:
-          return test::DirectTransport::SendRtp(packet, length);
+          return test::DirectTransport::SendRtp(packet, length, options);
       }
       return true;  // Will never happen, makes compiler happy.
     }