Reland Connect TurnPort and TCPPort to AsyncPacketSocket::SignalSentPacket.
Chromium reported errors when building libjingle_nacl due to some methods used virtual instead of override when they were overriding the base class. My guess is that when one method starts using override, all other in the same class must too.
R=tommi@webrtc.org
TBR=pthatcher@webtrc.org
BUG=4173
Review URL: https://codereview.webrtc.org/1589563003 .
Cr-Commit-Position: refs/heads/master@{#11251}
diff --git a/webrtc/p2p/base/p2ptransportchannel.cc b/webrtc/p2p/base/p2ptransportchannel.cc
index c58a235..952cfab 100644
--- a/webrtc/p2p/base/p2ptransportchannel.cc
+++ b/webrtc/p2p/base/p2ptransportchannel.cc
@@ -1424,8 +1424,7 @@
}
}
-void P2PTransportChannel::OnSentPacket(PortInterface* port,
- const rtc::SentPacket& sent_packet) {
+void P2PTransportChannel::OnSentPacket(const rtc::SentPacket& sent_packet) {
ASSERT(worker_thread_ == rtc::Thread::Current());
SignalSentPacket(this, sent_packet);
diff --git a/webrtc/p2p/base/p2ptransportchannel.h b/webrtc/p2p/base/p2ptransportchannel.h
index 3927b17..f2e9315 100644
--- a/webrtc/p2p/base/p2ptransportchannel.h
+++ b/webrtc/p2p/base/p2ptransportchannel.h
@@ -232,7 +232,7 @@
void OnConnectionStateChange(Connection* connection);
void OnReadPacket(Connection *connection, const char *data, size_t len,
const rtc::PacketTime& packet_time);
- void OnSentPacket(PortInterface* port, const rtc::SentPacket& sent_packet);
+ void OnSentPacket(const rtc::SentPacket& sent_packet);
void OnReadyToSend(Connection* connection);
void OnConnectionDestroyed(Connection *connection);
diff --git a/webrtc/p2p/base/port.cc b/webrtc/p2p/base/port.cc
index f6a3009..9dd5c83 100644
--- a/webrtc/p2p/base/port.cc
+++ b/webrtc/p2p/base/port.cc
@@ -310,10 +310,6 @@
}
}
-void Port::OnSentPacket(const rtc::SentPacket& sent_packet) {
- PortInterface::SignalSentPacket(this, sent_packet);
-}
-
void Port::OnReadyToSend() {
AddressMap::iterator iter = connections_.begin();
for (; iter != connections_.end(); ++iter) {
diff --git a/webrtc/p2p/base/port.h b/webrtc/p2p/base/port.h
index 57608b5..436b1e7 100644
--- a/webrtc/p2p/base/port.h
+++ b/webrtc/p2p/base/port.h
@@ -280,7 +280,11 @@
const std::string& remote_ufrag);
// Called when a packet has been sent to the socket.
- void OnSentPacket(const rtc::SentPacket& sent_packet);
+ // This is made pure virtual to notify subclasses of Port that they MUST
+ // listen to AsyncPacketSocket::SignalSentPacket and then call
+ // PortInterface::OnSentPacket.
+ virtual void OnSentPacket(rtc::AsyncPacketSocket* socket,
+ const rtc::SentPacket& sent_packet) = 0;
// Called when the socket is currently able to send.
void OnReadyToSend();
diff --git a/webrtc/p2p/base/port_unittest.cc b/webrtc/p2p/base/port_unittest.cc
index 34806d9..449021ad 100644
--- a/webrtc/p2p/base/port_unittest.cc
+++ b/webrtc/p2p/base/port_unittest.cc
@@ -204,6 +204,10 @@
}
private:
+ void OnSentPacket(rtc::AsyncPacketSocket* socket,
+ const rtc::SentPacket& sent_packet) {
+ PortInterface::SignalSentPacket(sent_packet);
+ }
rtc::scoped_ptr<ByteBuffer> last_stun_buf_;
rtc::scoped_ptr<IceMessage> last_stun_msg_;
int type_preference_ = 0;
diff --git a/webrtc/p2p/base/portinterface.h b/webrtc/p2p/base/portinterface.h
index d1c371d..e83879f 100644
--- a/webrtc/p2p/base/portinterface.h
+++ b/webrtc/p2p/base/portinterface.h
@@ -116,7 +116,7 @@
const rtc::SocketAddress&> SignalReadPacket;
// Emitted each time a packet is sent on this port.
- sigslot::signal2<PortInterface*, const rtc::SentPacket&> SignalSentPacket;
+ sigslot::signal1<const rtc::SentPacket&> SignalSentPacket;
virtual std::string ToString() const = 0;
diff --git a/webrtc/p2p/base/relayport.cc b/webrtc/p2p/base/relayport.cc
index 88adcf2..19883a3 100644
--- a/webrtc/p2p/base/relayport.cc
+++ b/webrtc/p2p/base/relayport.cc
@@ -754,7 +754,7 @@
void RelayEntry::OnSentPacket(rtc::AsyncPacketSocket* socket,
const rtc::SentPacket& sent_packet) {
- port_->OnSentPacket(sent_packet);
+ port_->OnSentPacket(socket, sent_packet);
}
void RelayEntry::OnReadyToSend(rtc::AsyncPacketSocket* socket) {
diff --git a/webrtc/p2p/base/relayport.h b/webrtc/p2p/base/relayport.h
index 4b74b91..402736c 100644
--- a/webrtc/p2p/base/relayport.h
+++ b/webrtc/p2p/base/relayport.h
@@ -29,7 +29,7 @@
// is created. The RelayEntry will try to reach the remote destination
// by connecting to all available server addresses in a pre defined
// order with a small delay in between. When a connection is
-// successful all other connection attemts are aborted.
+// successful all other connection attempts are aborted.
class RelayPort : public Port {
public:
typedef std::pair<rtc::Socket::Option, int> OptionValue;
@@ -46,7 +46,7 @@
return new RelayPort(thread, factory, network, ip, min_port, max_port,
username, password);
}
- virtual ~RelayPort();
+ ~RelayPort() override;
void AddServerAddress(const ProtocolAddress& addr);
void AddExternalAddress(const ProtocolAddress& addr);
@@ -54,13 +54,13 @@
const std::vector<OptionValue>& options() const { return options_; }
bool HasMagicCookie(const char* data, size_t size);
- virtual void PrepareAddress();
- virtual Connection* CreateConnection(const Candidate& address,
- CandidateOrigin origin);
- virtual int SetOption(rtc::Socket::Option opt, int value);
- virtual int GetOption(rtc::Socket::Option opt, int* value);
- virtual int GetError();
- virtual bool SupportsProtocol(const std::string& protocol) const {
+ void PrepareAddress() override;
+ Connection* CreateConnection(const Candidate& address,
+ CandidateOrigin origin) override;
+ int SetOption(rtc::Socket::Option opt, int value) override;
+ int GetOption(rtc::Socket::Option opt, int* value) override;
+ int GetError() override;
+ bool SupportsProtocol(const std::string& protocol) const override {
// Relay port may create both TCP and UDP connections.
return true;
}
@@ -85,10 +85,11 @@
void SetReady();
- virtual int SendTo(const void* data, size_t size,
- const rtc::SocketAddress& addr,
- const rtc::PacketOptions& options,
- bool payload);
+ int SendTo(const void* data,
+ size_t size,
+ const rtc::SocketAddress& addr,
+ const rtc::PacketOptions& options,
+ bool payload) override;
// Dispatches the given packet to the port or connection as appropriate.
void OnReadPacket(const char* data, size_t size,
@@ -96,6 +97,11 @@
ProtocolType proto,
const rtc::PacketTime& packet_time);
+ // The OnSentPacket callback is left empty here since they are handled by
+ // RelayEntry.
+ void OnSentPacket(rtc::AsyncPacketSocket* socket,
+ const rtc::SentPacket& sent_packet) override {}
+
private:
friend class RelayEntry;
diff --git a/webrtc/p2p/base/stunport.cc b/webrtc/p2p/base/stunport.cc
index 67cf789..8f37dd5 100644
--- a/webrtc/p2p/base/stunport.cc
+++ b/webrtc/p2p/base/stunport.cc
@@ -340,7 +340,7 @@
void UDPPort::OnSentPacket(rtc::AsyncPacketSocket* socket,
const rtc::SentPacket& sent_packet) {
- Port::OnSentPacket(sent_packet);
+ PortInterface::SignalSentPacket(sent_packet);
}
void UDPPort::OnReadyToSend(rtc::AsyncPacketSocket* socket) {
diff --git a/webrtc/p2p/base/tcpport.cc b/webrtc/p2p/base/tcpport.cc
index 23afc2f..6a64174 100644
--- a/webrtc/p2p/base/tcpport.cc
+++ b/webrtc/p2p/base/tcpport.cc
@@ -258,6 +258,7 @@
incoming.socket = new_socket;
incoming.socket->SignalReadPacket.connect(this, &TCPPort::OnReadPacket);
incoming.socket->SignalReadyToSend.connect(this, &TCPPort::OnReadyToSend);
+ incoming.socket->SignalSentPacket.connect(this, &TCPPort::OnSentPacket);
LOG_J(LS_VERBOSE, this) << "Accepted connection from "
<< incoming.addr.ToSensitiveString();
@@ -286,6 +287,12 @@
Port::OnReadPacket(data, size, remote_addr, PROTO_TCP);
}
+void TCPPort::OnSentPacket(rtc::AsyncPacketSocket* socket,
+ const rtc::SentPacket& sent_packet) {
+ ASSERT(socket == socket_);
+ PortInterface::SignalSentPacket(sent_packet);
+}
+
void TCPPort::OnReadyToSend(rtc::AsyncPacketSocket* socket) {
Port::OnReadyToSend();
}
diff --git a/webrtc/p2p/base/tcpport.h b/webrtc/p2p/base/tcpport.h
index 568dc65..cfc6245 100644
--- a/webrtc/p2p/base/tcpport.h
+++ b/webrtc/p2p/base/tcpport.h
@@ -45,17 +45,17 @@
}
return port;
}
- virtual ~TCPPort();
+ ~TCPPort() override;
- virtual Connection* CreateConnection(const Candidate& address,
- CandidateOrigin origin);
+ Connection* CreateConnection(const Candidate& address,
+ CandidateOrigin origin) override;
- virtual void PrepareAddress();
+ void PrepareAddress() override;
- virtual int GetOption(rtc::Socket::Option opt, int* value);
- virtual int SetOption(rtc::Socket::Option opt, int value);
- virtual int GetError();
- virtual bool SupportsProtocol(const std::string& protocol) const {
+ int GetOption(rtc::Socket::Option opt, int* value) override;
+ int SetOption(rtc::Socket::Option opt, int value) override;
+ int GetError() override;
+ bool SupportsProtocol(const std::string& protocol) const override {
return protocol == TCP_PROTOCOL_NAME || protocol == SSLTCP_PROTOCOL_NAME;
}
@@ -72,10 +72,11 @@
bool Init();
// Handles sending using the local TCP socket.
- virtual int SendTo(const void* data, size_t size,
- const rtc::SocketAddress& addr,
- const rtc::PacketOptions& options,
- bool payload);
+ int SendTo(const void* data,
+ size_t size,
+ const rtc::SocketAddress& addr,
+ const rtc::PacketOptions& options,
+ bool payload) override;
// Accepts incoming TCP connection.
void OnNewConnection(rtc::AsyncPacketSocket* socket,
@@ -96,6 +97,9 @@
const rtc::SocketAddress& remote_addr,
const rtc::PacketTime& packet_time);
+ void OnSentPacket(rtc::AsyncPacketSocket* socket,
+ const rtc::SentPacket& sent_packet) override;
+
void OnReadyToSend(rtc::AsyncPacketSocket* socket);
void OnAddressReady(rtc::AsyncPacketSocket* socket,
@@ -116,15 +120,16 @@
// Connection is outgoing unless socket is specified
TCPConnection(TCPPort* port, const Candidate& candidate,
rtc::AsyncPacketSocket* socket = 0);
- virtual ~TCPConnection();
+ ~TCPConnection() override;
- virtual int Send(const void* data, size_t size,
- const rtc::PacketOptions& options);
- virtual int GetError();
+ int Send(const void* data,
+ size_t size,
+ const rtc::PacketOptions& options) override;
+ int GetError() override;
rtc::AsyncPacketSocket* socket() { return socket_.get(); }
- void OnMessage(rtc::Message* pmsg);
+ void OnMessage(rtc::Message* pmsg) override;
// Allow test cases to overwrite the default timeout period.
int reconnection_timeout() const { return reconnection_timeout_; }
@@ -139,8 +144,8 @@
// Set waiting_for_stun_binding_complete_ to false to allow data packets in
// addition to what Port::OnConnectionRequestResponse does.
- virtual void OnConnectionRequestResponse(ConnectionRequest* req,
- StunMessage* response);
+ void OnConnectionRequestResponse(ConnectionRequest* req,
+ StunMessage* response) override;
private:
// Helper function to handle the case when Ping or Send fails with error
diff --git a/webrtc/p2p/base/turnport.cc b/webrtc/p2p/base/turnport.cc
index 022207a..5ed93dd 100644
--- a/webrtc/p2p/base/turnport.cc
+++ b/webrtc/p2p/base/turnport.cc
@@ -351,6 +351,8 @@
socket_->SignalReadyToSend.connect(this, &TurnPort::OnReadyToSend);
+ socket_->SignalSentPacket.connect(this, &TurnPort::OnSentPacket);
+
// TCP port is ready to send stun requests after the socket is connected,
// while UDP port is ready to do so once the socket is created.
if (server_address_.proto == PROTO_TCP) {
@@ -582,6 +584,11 @@
}
}
+void TurnPort::OnSentPacket(rtc::AsyncPacketSocket* socket,
+ const rtc::SentPacket& sent_packet) {
+ PortInterface::SignalSentPacket(sent_packet);
+}
+
void TurnPort::OnReadyToSend(rtc::AsyncPacketSocket* socket) {
if (ready()) {
Port::OnReadyToSend();
diff --git a/webrtc/p2p/base/turnport.h b/webrtc/p2p/base/turnport.h
index a19f676..4d83806 100644
--- a/webrtc/p2p/base/turnport.h
+++ b/webrtc/p2p/base/turnport.h
@@ -106,6 +106,8 @@
const rtc::SocketAddress& remote_addr,
const rtc::PacketTime& packet_time);
+ virtual void OnSentPacket(rtc::AsyncPacketSocket* socket,
+ const rtc::SentPacket& sent_packet);
virtual void OnReadyToSend(rtc::AsyncPacketSocket* socket);
virtual bool SupportsProtocol(const std::string& protocol) const {
// Turn port only connects to UDP candidates.