Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(509)

Unified Diff: remoting/protocol/pseudotcp_adapter.cc

Issue 1197853003: Add P2PDatagramSocket and P2PStreamSocket interfaces. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/protocol/pseudotcp_adapter.h ('k') | remoting/protocol/pseudotcp_adapter_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/protocol/pseudotcp_adapter.cc
diff --git a/remoting/protocol/pseudotcp_adapter.cc b/remoting/protocol/pseudotcp_adapter.cc
index 796db24299f8185d9958f4acb8922d851036719b..11f01fd552ec38ee42a237162893145e204b89fb 100644
--- a/remoting/protocol/pseudotcp_adapter.cc
+++ b/remoting/protocol/pseudotcp_adapter.cc
@@ -13,6 +13,7 @@
#include "net/base/io_buffer.h"
#include "net/base/net_errors.h"
#include "net/base/net_util.h"
+#include "remoting/protocol/p2p_datagram_socket.h"
using cricket::PseudoTcp;
@@ -27,16 +28,14 @@ namespace protocol {
class PseudoTcpAdapter::Core : public cricket::IPseudoTcpNotify,
public base::RefCounted<Core> {
public:
- explicit Core(scoped_ptr<net::Socket> socket);
+ explicit Core(scoped_ptr<P2PDatagramSocket> socket);
// Functions used to implement net::StreamSocket.
- int Read(net::IOBuffer* buffer, int buffer_size,
+ int Read(const scoped_refptr<net::IOBuffer>& buffer, int buffer_size,
const net::CompletionCallback& callback);
- int Write(net::IOBuffer* buffer, int buffer_size,
+ int Write(const scoped_refptr<net::IOBuffer>& buffer, int buffer_size,
const net::CompletionCallback& callback);
int Connect(const net::CompletionCallback& callback);
- void Disconnect();
- bool IsConnected() const;
// cricket::IPseudoTcpNotify interface.
// These notifications are triggered from NotifyPacket.
@@ -85,7 +84,7 @@ class PseudoTcpAdapter::Core : public cricket::IPseudoTcpNotify,
net::CompletionCallback write_callback_;
cricket::PseudoTcp pseudo_tcp_;
- scoped_ptr<net::Socket> socket_;
+ scoped_ptr<P2PDatagramSocket> socket_;
scoped_refptr<net::IOBuffer> read_buffer_;
int read_buffer_size_;
@@ -113,7 +112,7 @@ class PseudoTcpAdapter::Core : public cricket::IPseudoTcpNotify,
};
-PseudoTcpAdapter::Core::Core(scoped_ptr<net::Socket> socket)
+PseudoTcpAdapter::Core::Core(scoped_ptr<P2PDatagramSocket> socket)
: pseudo_tcp_(this, 0),
socket_(socket.Pass()),
write_waits_for_send_(false),
@@ -126,7 +125,8 @@ PseudoTcpAdapter::Core::Core(scoped_ptr<net::Socket> socket)
PseudoTcpAdapter::Core::~Core() {
}
-int PseudoTcpAdapter::Core::Read(net::IOBuffer* buffer, int buffer_size,
+int PseudoTcpAdapter::Core::Read(const scoped_refptr<net::IOBuffer>& buffer,
+ int buffer_size,
const net::CompletionCallback& callback) {
DCHECK(read_callback_.is_null());
@@ -150,7 +150,8 @@ int PseudoTcpAdapter::Core::Read(net::IOBuffer* buffer, int buffer_size,
return result;
}
-int PseudoTcpAdapter::Core::Write(net::IOBuffer* buffer, int buffer_size,
+int PseudoTcpAdapter::Core::Write(const scoped_refptr<net::IOBuffer>& buffer,
+ int buffer_size,
const net::CompletionCallback& callback) {
DCHECK(write_callback_.is_null());
@@ -209,28 +210,6 @@ int PseudoTcpAdapter::Core::Connect(const net::CompletionCallback& callback) {
return net::ERR_IO_PENDING;
}
-void PseudoTcpAdapter::Core::Disconnect() {
- // Don't dispatch outstanding callbacks, as mandated by net::StreamSocket.
- read_callback_.Reset();
- read_buffer_ = NULL;
- write_callback_.Reset();
- write_buffer_ = NULL;
- connect_callback_.Reset();
-
- // TODO(wez): Connect should succeed if called after Disconnect, which
- // PseudoTcp doesn't support, so we need to teardown the internal PseudoTcp
- // and create a new one in Connect.
- // TODO(wez): Close sets a shutdown flag inside PseudoTcp but has no other
- // effect. This should be addressed in PseudoTcp, really.
- // In the meantime we can fake OnTcpClosed notification and tear down the
- // PseudoTcp.
- pseudo_tcp_.Close(true);
-}
-
-bool PseudoTcpAdapter::Core::IsConnected() const {
- return pseudo_tcp_.State() == PseudoTcp::TCP_ESTABLISHED;
-}
-
void PseudoTcpAdapter::Core::OnTcpOpen(PseudoTcp* tcp) {
DCHECK(tcp == &pseudo_tcp_);
@@ -341,6 +320,13 @@ void PseudoTcpAdapter::Core::SetWriteWaitsForSend(bool write_waits_for_send) {
}
void PseudoTcpAdapter::Core::DeleteSocket() {
+ // Don't dispatch outstanding callbacks when the socket is deleted.
+ read_callback_.Reset();
+ read_buffer_ = NULL;
+ write_callback_.Reset();
+ write_buffer_ = NULL;
+ connect_callback_.Reset();
+
socket_.reset();
}
@@ -362,8 +348,8 @@ cricket::IPseudoTcpNotify::WriteResult PseudoTcpAdapter::Core::TcpWritePacket(
// Our underlying socket is datagram-oriented, which means it should either
// send exactly as many bytes as we requested, or fail.
int result;
- if (socket_.get()) {
- result = socket_->Write(
+ if (socket_) {
+ result = socket_->Send(
write_buffer.get(), len,
base::Bind(&PseudoTcpAdapter::Core::OnWritten, base::Unretained(this)));
} else {
@@ -386,10 +372,9 @@ void PseudoTcpAdapter::Core::DoReadFromSocket() {
socket_read_buffer_ = new net::IOBuffer(kReadBufferSize);
int result = 1;
- while (socket_.get() && result > 0) {
- result = socket_->Read(
- socket_read_buffer_.get(),
- kReadBufferSize,
+ while (socket_ && result > 0) {
+ result = socket_->Recv(
+ socket_read_buffer_.get(), kReadBufferSize,
base::Bind(&PseudoTcpAdapter::Core::OnRead, base::Unretained(this)));
if (result != net::ERR_IO_PENDING)
HandleReadResults(result);
@@ -461,26 +446,26 @@ void PseudoTcpAdapter::Core::CheckWriteComplete() {
}
}
-// Public interface implemention.
+// Public interface implementation.
-PseudoTcpAdapter::PseudoTcpAdapter(scoped_ptr<net::Socket> socket)
+PseudoTcpAdapter::PseudoTcpAdapter(scoped_ptr<P2PDatagramSocket> socket)
: core_(new Core(socket.Pass())) {
}
PseudoTcpAdapter::~PseudoTcpAdapter() {
- Disconnect();
-
// Make sure that the underlying socket is destroyed before PseudoTcp.
core_->DeleteSocket();
}
-int PseudoTcpAdapter::Read(net::IOBuffer* buffer, int buffer_size,
+int PseudoTcpAdapter::Read(const scoped_refptr<net::IOBuffer>& buffer,
+ int buffer_size,
const net::CompletionCallback& callback) {
DCHECK(CalledOnValidThread());
return core_->Read(buffer, buffer_size, callback);
}
-int PseudoTcpAdapter::Write(net::IOBuffer* buffer, int buffer_size,
+int PseudoTcpAdapter::Write(const scoped_refptr<net::IOBuffer>& buffer,
+ int buffer_size,
const net::CompletionCallback& callback) {
DCHECK(CalledOnValidThread());
return core_->Write(buffer, buffer_size, callback);
@@ -488,106 +473,21 @@ int PseudoTcpAdapter::Write(net::IOBuffer* buffer, int buffer_size,
int PseudoTcpAdapter::SetReceiveBufferSize(int32 size) {
DCHECK(CalledOnValidThread());
-
core_->SetReceiveBufferSize(size);
return net::OK;
}
int PseudoTcpAdapter::SetSendBufferSize(int32 size) {
DCHECK(CalledOnValidThread());
-
core_->SetSendBufferSize(size);
return net::OK;
}
int PseudoTcpAdapter::Connect(const net::CompletionCallback& callback) {
DCHECK(CalledOnValidThread());
-
- // net::StreamSocket requires that Connect return OK if already connected.
- if (IsConnected())
- return net::OK;
-
return core_->Connect(callback);
}
-void PseudoTcpAdapter::Disconnect() {
- DCHECK(CalledOnValidThread());
- core_->Disconnect();
-}
-
-bool PseudoTcpAdapter::IsConnected() const {
- return core_->IsConnected();
-}
-
-bool PseudoTcpAdapter::IsConnectedAndIdle() const {
- DCHECK(CalledOnValidThread());
- NOTIMPLEMENTED();
- return false;
-}
-
-int PseudoTcpAdapter::GetPeerAddress(net::IPEndPoint* address) const {
- DCHECK(CalledOnValidThread());
-
- // We don't have a meaningful peer address, but we can't return an
- // error, so we return a INADDR_ANY instead.
- net::IPAddressNumber ip_address(net::kIPv4AddressSize);
- *address = net::IPEndPoint(ip_address, 0);
- return net::OK;
-}
-
-int PseudoTcpAdapter::GetLocalAddress(net::IPEndPoint* address) const {
- DCHECK(CalledOnValidThread());
- NOTIMPLEMENTED();
- return net::ERR_FAILED;
-}
-
-const net::BoundNetLog& PseudoTcpAdapter::NetLog() const {
- DCHECK(CalledOnValidThread());
- return net_log_;
-}
-
-void PseudoTcpAdapter::SetSubresourceSpeculation() {
- DCHECK(CalledOnValidThread());
- NOTIMPLEMENTED();
-}
-
-void PseudoTcpAdapter::SetOmniboxSpeculation() {
- DCHECK(CalledOnValidThread());
- NOTIMPLEMENTED();
-}
-
-bool PseudoTcpAdapter::WasEverUsed() const {
- DCHECK(CalledOnValidThread());
- NOTIMPLEMENTED();
- return true;
-}
-
-bool PseudoTcpAdapter::UsingTCPFastOpen() const {
- DCHECK(CalledOnValidThread());
- return false;
-}
-
-bool PseudoTcpAdapter::WasNpnNegotiated() const {
- DCHECK(CalledOnValidThread());
- return false;
-}
-
-net::NextProto PseudoTcpAdapter::GetNegotiatedProtocol() const {
- DCHECK(CalledOnValidThread());
- return net::kProtoUnknown;
-}
-
-bool PseudoTcpAdapter::GetSSLInfo(net::SSLInfo* ssl_info) {
- DCHECK(CalledOnValidThread());
- return false;
-}
-
-void PseudoTcpAdapter::GetConnectionAttempts(
- net::ConnectionAttempts* out) const {
- DCHECK(CalledOnValidThread());
- out->clear();
-}
-
void PseudoTcpAdapter::SetAckDelay(int delay_ms) {
DCHECK(CalledOnValidThread());
core_->SetAckDelay(delay_ms);
« no previous file with comments | « remoting/protocol/pseudotcp_adapter.h ('k') | remoting/protocol/pseudotcp_adapter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698