Update talk to 58113193 together with https://webrtc-codereview.appspot.com/5309005/.
R=mallinath@webrtc.org, niklas.enbom@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/5719004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@5274 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/base/asyncpacketsocket.h b/talk/base/asyncpacketsocket.h
index 3b4748f..29ab55f 100644
--- a/talk/base/asyncpacketsocket.h
+++ b/talk/base/asyncpacketsocket.h
@@ -31,9 +31,30 @@
#include "talk/base/dscp.h"
#include "talk/base/sigslot.h"
#include "talk/base/socket.h"
+#include "talk/base/timeutils.h"
namespace talk_base {
+// This structure will have the information about when packet is actually
+// received by socket.
+struct PacketTime {
+ PacketTime() : timestamp(-1), not_before(-1) {}
+ PacketTime(int64 timestamp, int64 not_before)
+ : timestamp(timestamp), not_before(not_before) {
+ }
+
+ int64 timestamp; // Receive time after socket delivers the data.
+ int64 not_before; // Earliest possible time the data could have arrived,
+ // indicating the potential error in the |timestamp| value,
+ // in case the system, is busy. For example, the time of
+ // the last select() call.
+ // If unknown, this value will be set to zero.
+};
+
+inline PacketTime CreatePacketTime(int64 not_before) {
+ return PacketTime(TimeMicros(), not_before);
+}
+
// Provides the ability to receive packets asynchronously. Sends are not
// buffered since it is acceptable to drop packets under high load.
class AsyncPacketSocket : public sigslot::has_slots<> {
@@ -78,8 +99,9 @@
// Emitted each time a packet is read. Used only for UDP and
// connected TCP sockets.
- sigslot::signal4<AsyncPacketSocket*, const char*, size_t,
- const SocketAddress&> SignalReadPacket;
+ sigslot::signal5<AsyncPacketSocket*, const char*, size_t,
+ const SocketAddress&,
+ const PacketTime&> SignalReadPacket;
// Emitted when the socket is currently able to send.
sigslot::signal1<AsyncPacketSocket*> SignalReadyToSend;
diff --git a/talk/base/asynctcpsocket.cc b/talk/base/asynctcpsocket.cc
index 517e799..d2ae513 100644
--- a/talk/base/asynctcpsocket.cc
+++ b/talk/base/asynctcpsocket.cc
@@ -300,7 +300,8 @@
if (*len < kPacketLenSize + pkt_len)
return;
- SignalReadPacket(this, data + kPacketLenSize, pkt_len, remote_addr);
+ SignalReadPacket(this, data + kPacketLenSize, pkt_len, remote_addr,
+ CreatePacketTime(0));
*len -= kPacketLenSize + pkt_len;
if (*len > 0) {
diff --git a/talk/base/asyncudpsocket.cc b/talk/base/asyncudpsocket.cc
index 97e5dff..5005263 100644
--- a/talk/base/asyncudpsocket.cc
+++ b/talk/base/asyncudpsocket.cc
@@ -128,7 +128,8 @@
// TODO: Make sure that we got all of the packet.
// If we did not, then we should resize our buffer to be large enough.
- SignalReadPacket(this, buf_, (size_t)len, remote_addr);
+ SignalReadPacket(this, buf_, static_cast<size_t>(len), remote_addr,
+ CreatePacketTime(0));
}
void AsyncUDPSocket::OnWriteEvent(AsyncSocket* socket) {
diff --git a/talk/base/natserver.cc b/talk/base/natserver.cc
index 3ad378c..4698048 100644
--- a/talk/base/natserver.cc
+++ b/talk/base/natserver.cc
@@ -107,7 +107,7 @@
void NATServer::OnInternalPacket(
AsyncPacketSocket* socket, const char* buf, size_t size,
- const SocketAddress& addr) {
+ const SocketAddress& addr, const PacketTime& packet_time) {
// Read the intended destination from the wire.
SocketAddress dest_addr;
@@ -132,7 +132,7 @@
void NATServer::OnExternalPacket(
AsyncPacketSocket* socket, const char* buf, size_t size,
- const SocketAddress& remote_addr) {
+ const SocketAddress& remote_addr, const PacketTime& packet_time) {
SocketAddress local_addr = socket->GetLocalAddress();
diff --git a/talk/base/natserver.h b/talk/base/natserver.h
index ed3b0b6..05d3475 100644
--- a/talk/base/natserver.h
+++ b/talk/base/natserver.h
@@ -79,9 +79,11 @@
// Packets received on one of the networks.
void OnInternalPacket(AsyncPacketSocket* socket, const char* buf,
- size_t size, const SocketAddress& addr);
+ size_t size, const SocketAddress& addr,
+ const PacketTime& packet_time);
void OnExternalPacket(AsyncPacketSocket* socket, const char* buf,
- size_t size, const SocketAddress& remote_addr);
+ size_t size, const SocketAddress& remote_addr,
+ const PacketTime& packet_time);
private:
typedef std::set<SocketAddress, AddrCmp> AddressSet;
diff --git a/talk/base/sslstreamadapter_unittest.cc b/talk/base/sslstreamadapter_unittest.cc
index 4b2fd6d..e7335be 100644
--- a/talk/base/sslstreamadapter_unittest.cc
+++ b/talk/base/sslstreamadapter_unittest.cc
@@ -762,7 +762,7 @@
};
// Test a handshake with small MTU
-TEST_F(SSLStreamAdapterTestDTLS, DISABLED_TestDTLSConnectWithSmallMtu) {
+TEST_F(SSLStreamAdapterTestDTLS, TestDTLSConnectWithSmallMtu) {
MAYBE_SKIP_TEST(HaveDtls);
SetMtu(700);
SetHandshakeWait(20000);
diff --git a/talk/base/testclient.cc b/talk/base/testclient.cc
index 1a12761..04d6030 100644
--- a/talk/base/testclient.cc
+++ b/talk/base/testclient.cc
@@ -135,7 +135,8 @@
}
void TestClient::OnPacket(AsyncPacketSocket* socket, const char* buf,
- size_t size, const SocketAddress& remote_addr) {
+ size_t size, const SocketAddress& remote_addr,
+ const PacketTime& packet_time) {
CritScope cs(&crit_);
packets_->push_back(new Packet(remote_addr, buf, size));
}
diff --git a/talk/base/testclient.h b/talk/base/testclient.h
index 1e1780a..87e32df 100644
--- a/talk/base/testclient.h
+++ b/talk/base/testclient.h
@@ -94,7 +94,8 @@
Socket::ConnState GetState();
// Slot for packets read on the socket.
void OnPacket(AsyncPacketSocket* socket, const char* buf, size_t len,
- const SocketAddress& remote_addr);
+ const SocketAddress& remote_addr,
+ const PacketTime& packet_time);
void OnReadyToSend(AsyncPacketSocket* socket);
CriticalSection crit_;
diff --git a/talk/base/testechoserver.h b/talk/base/testechoserver.h
index 10466fa..5c10454 100644
--- a/talk/base/testechoserver.h
+++ b/talk/base/testechoserver.h
@@ -67,7 +67,8 @@
}
}
void OnPacket(AsyncPacketSocket* socket, const char* buf, size_t size,
- const SocketAddress& remote_addr) {
+ const SocketAddress& remote_addr,
+ const PacketTime& packet_time) {
socket->Send(buf, size, DSCP_NO_CHANGE);
}
void OnClose(AsyncPacketSocket* socket, int err) {
diff --git a/talk/base/thread_unittest.cc b/talk/base/thread_unittest.cc
index d6af17a..896fbab 100644
--- a/talk/base/thread_unittest.cc
+++ b/talk/base/thread_unittest.cc
@@ -81,7 +81,8 @@
SocketAddress address() const { return socket_->GetLocalAddress(); }
void OnPacket(AsyncPacketSocket* socket, const char* buf, size_t size,
- const SocketAddress& remote_addr) {
+ const SocketAddress& remote_addr,
+ const PacketTime& packet_time) {
EXPECT_EQ(size, sizeof(uint32));
uint32 prev = reinterpret_cast<const uint32*>(buf)[0];
uint32 result = Next(prev);
diff --git a/talk/base/timeutils.cc b/talk/base/timeutils.cc
index 66b9bf2..54db341 100644
--- a/talk/base/timeutils.cc
+++ b/talk/base/timeutils.cc
@@ -94,6 +94,10 @@
return static_cast<uint32>(TimeNanos() / kNumNanosecsPerMillisec);
}
+uint64 TimeMicros() {
+ return static_cast<uint64>(TimeNanos() / kNumNanosecsPerMicrosec);
+}
+
#if defined(WIN32)
static const uint64 kFileTimeToUnixTimeEpochOffset = 116444736000000000ULL;
diff --git a/talk/base/timeutils.h b/talk/base/timeutils.h
index 545e86a..f13c3f2 100644
--- a/talk/base/timeutils.h
+++ b/talk/base/timeutils.h
@@ -42,6 +42,8 @@
kNumMillisecsPerSec;
static const int64 kNumNanosecsPerMillisec = kNumNanosecsPerSec /
kNumMillisecsPerSec;
+static const int64 kNumNanosecsPerMicrosec = kNumNanosecsPerSec /
+ kNumMicrosecsPerSec;
// January 1970, in NTP milliseconds.
static const int64 kJan1970AsNtpMillisecs = INT64_C(2208988800000);
@@ -50,6 +52,8 @@
// Returns the current time in milliseconds.
uint32 Time();
+// Returns the current time in microseconds.
+uint64 TimeMicros();
// Returns the current time in nanoseconds.
uint64 TimeNanos();
diff --git a/talk/base/virtualsocket_unittest.cc b/talk/base/virtualsocket_unittest.cc
index 7bbb5f0..b31b8c8 100644
--- a/talk/base/virtualsocket_unittest.cc
+++ b/talk/base/virtualsocket_unittest.cc
@@ -97,7 +97,8 @@
}
void OnReadPacket(AsyncPacketSocket* s, const char* data, size_t size,
- const SocketAddress& remote_addr) {
+ const SocketAddress& remote_addr,
+ const PacketTime& packet_time) {
ASSERT_EQ(socket.get(), s);
ASSERT_GE(size, 4U);