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

Unified Diff: content/browser/renderer_host/p2p/socket_host_tcp.cc

Issue 13584008: Send notification about outgoing p2p packets from browser to renderer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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
Index: content/browser/renderer_host/p2p/socket_host_tcp.cc
diff --git a/content/browser/renderer_host/p2p/socket_host_tcp.cc b/content/browser/renderer_host/p2p/socket_host_tcp.cc
index 2409280064138186706462c006ed81c2764d4fae..3a3b192064abc7859ca669cface84477ff5c39b9 100644
--- a/content/browser/renderer_host/p2p/socket_host_tcp.cc
+++ b/content/browser/renderer_host/p2p/socket_host_tcp.cc
@@ -87,10 +87,6 @@ void P2PSocketHostTcp::OnConnected(int result) {
return;
}
- if (!socket_->SetSendBufferSize(kMaxSendBufferSize)) {
- LOG(WARNING) << "Failed to set send buffer size for TCP socket.";
- }
-
net::IPEndPoint address;
result = socket_->GetLocalAddress(&address);
if (result < 0) {
@@ -196,16 +192,8 @@ void P2PSocketHostTcp::Send(const net::IPEndPoint& to,
return;
}
- if (write_buffer_) {
- // Silently drop packet if we haven't finished sending previous
- // packet.
- VLOG(1) << "Dropping TCP packet.";
- return;
- }
-
if (!(to == remote_address_)) {
- // Renderer should use this socket only to send data to
- // |remote_address_|.
+ // Renderer should use this socket only to send data to |remote_address_|.
NOTREACHED();
OnError();
return;
@@ -223,32 +211,26 @@ void P2PSocketHostTcp::Send(const net::IPEndPoint& to,
}
int size = kPacketHeaderSize + data.size();
- write_buffer_ = new net::DrainableIOBuffer(new net::IOBuffer(size), size);
- *reinterpret_cast<uint16*>(write_buffer_->data()) =
- base::HostToNet16(data.size());
- memcpy(write_buffer_->data() + kPacketHeaderSize, &data[0], data.size());
+ scoped_refptr<net::DrainableIOBuffer> buffer =
+ new net::DrainableIOBuffer(new net::IOBuffer(size), size);
+ *reinterpret_cast<uint16*>(buffer->data()) = base::HostToNet16(data.size());
+ memcpy(buffer->data() + kPacketHeaderSize, &data[0], data.size());
+ if (write_buffer_) {
+ write_queue_.push(buffer);
+ return;
+ }
+
+ write_buffer_ = buffer;
DoWrite();
}
void P2PSocketHostTcp::DoWrite() {
- while (true) {
+ while (write_buffer_ && state_ == STATE_OPEN) {
int result = socket_->Write(write_buffer_, write_buffer_->BytesRemaining(),
base::Bind(&P2PSocketHostTcp::OnWritten,
base::Unretained(this)));
- if (result >= 0) {
- write_buffer_->DidConsume(result);
- if (write_buffer_->BytesRemaining() == 0) {
- write_buffer_ = NULL;
- break;
- }
- } else {
- if (result != net::ERR_IO_PENDING) {
- LOG(ERROR) << "Error when sending data in TCP socket: " << result;
- OnError();
- }
- break;
- }
+ HandleWriteResult(result);
}
}
@@ -263,11 +245,25 @@ void P2PSocketHostTcp::OnWritten(int result) {
return;
}
- write_buffer_->DidConsume(result);
- if (write_buffer_->BytesRemaining() == 0) {
- write_buffer_ = NULL;
- } else {
- DoWrite();
+ HandleWriteResult(result);
+ DoWrite();
+}
+
+void P2PSocketHostTcp::HandleWriteResult(int result) {
+ if (result >= 0) {
+ write_buffer_->DidConsume(result);
+ if (write_buffer_->BytesRemaining() == 0) {
+ message_sender_->Send(new P2PMsg_OnSendComplete(id_));
+ if (write_queue_.empty()) {
+ write_buffer_ = NULL;
+ } else {
+ write_buffer_ = write_queue_.front();
+ write_queue_.pop();
+ }
+ }
+ } else if (result != net::ERR_IO_PENDING) {
+ LOG(ERROR) << "Error when sending data in TCP socket: " << result;
+ OnError();
}
}

Powered by Google App Engine
This is Rietveld 408576698