Index: net/quic/quic_connection_packet_writer_wrapper.cc |
diff --git a/net/quic/quic_server_packet_writer.cc b/net/quic/quic_connection_packet_writer_wrapper.cc |
similarity index 22% |
copy from net/quic/quic_server_packet_writer.cc |
copy to net/quic/quic_connection_packet_writer_wrapper.cc |
index c2635b699eb3efd06713015d8ba6fcd1a2d93a4e..9391f52f7fc8b6c57b3ad3888ed70448fb20f960 100644 |
--- a/net/quic/quic_server_packet_writer.cc |
+++ b/net/quic/quic_connection_packet_writer_wrapper.cc |
@@ -2,72 +2,58 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "net/quic/quic_server_packet_writer.h" |
+#include "net/quic/quic_connection_packet_writer_wrapper.h" |
#include "base/location.h" |
#include "base/logging.h" |
+#include "base/message_loop/message_loop.h" |
#include "base/metrics/sparse_histogram.h" |
#include "net/base/io_buffer.h" |
#include "net/base/net_errors.h" |
+#include "net/quic/crypto/quic_random.h" |
+#include "net/quic/quic_server_packet_writer.h" |
namespace net { |
-QuicServerPacketWriter::QuicServerPacketWriter() : weak_factory_(this) { |
-} |
- |
-QuicServerPacketWriter::QuicServerPacketWriter(UDPServerSocket* socket) |
+QuicConnectionPacketWriterWrapper::QuicConnectionPacketWriterWrapper( |
+ QuicServerPacketWriter* writer, |
+ QuicConnection* connection) |
: weak_factory_(this), |
- socket_(socket), |
- write_blocked_(false) { |
+ writer_(writer), |
+ connection_(connection) { |
} |
-QuicServerPacketWriter::~QuicServerPacketWriter() { |
+QuicConnectionPacketWriterWrapper::~QuicConnectionPacketWriterWrapper() { |
} |
-WriteResult QuicServerPacketWriter::WritePacket( |
- const char* buffer, size_t buf_len, |
- const net::IPAddressNumber& self_address, |
- const net::IPEndPoint& peer_address) { |
- scoped_refptr<StringIOBuffer> buf( |
- new StringIOBuffer(std::string(buffer, buf_len))); |
- DCHECK(!IsWriteBlocked()); |
- int rv = socket_->SendTo(buf.get(), |
- buf_len, |
- peer_address, |
- base::Bind(&QuicServerPacketWriter::OnWriteComplete, |
- weak_factory_.GetWeakPtr())); |
- WriteStatus status = WRITE_STATUS_OK; |
- if (rv < 0) { |
- if (rv != ERR_IO_PENDING) { |
- UMA_HISTOGRAM_SPARSE_SLOWLY("Net.QuicSession.WriteError", -rv); |
- status = WRITE_STATUS_ERROR; |
- } else { |
- status = WRITE_STATUS_BLOCKED; |
- write_blocked_ = true; |
- } |
- } |
- |
- return WriteResult(status, rv); |
+WriteResult QuicConnectionPacketWriterWrapper::WritePacket( |
+ const char* buffer, |
+ size_t buf_len, |
+ const IPAddressNumber& self_address, |
+ const IPEndPoint& peer_address) { |
+ return writer_->WritePacketWithCallback( |
+ buffer, |
+ buf_len, |
+ self_address, |
+ peer_address, |
+ base::Bind(&QuicConnectionPacketWriterWrapper::OnWriteComplete, |
+ weak_factory_.GetWeakPtr())); |
} |
-bool QuicServerPacketWriter::IsWriteBlockedDataBuffered() const { |
- // UDPServerSocket::SendTo buffers the data until the Write is permitted. |
- return true; |
+bool QuicConnectionPacketWriterWrapper::IsWriteBlockedDataBuffered() const { |
+ return writer_->IsWriteBlockedDataBuffered(); |
} |
-bool QuicServerPacketWriter::IsWriteBlocked() const { |
- return write_blocked_; |
+bool QuicConnectionPacketWriterWrapper::IsWriteBlocked() const { |
+ return writer_->IsWriteBlocked(); |
} |
-void QuicServerPacketWriter::SetWritable() { |
- write_blocked_ = false; |
+void QuicConnectionPacketWriterWrapper::SetWritable() { |
+ writer_->SetWritable(); |
} |
-void QuicServerPacketWriter::OnWriteComplete(int rv) { |
- DCHECK_NE(rv, ERR_IO_PENDING); |
- write_blocked_ = false; |
- WriteResult result(rv < 0 ? WRITE_STATUS_ERROR : WRITE_STATUS_OK, rv); |
- connection_->OnPacketSent(result); |
+void QuicConnectionPacketWriterWrapper::OnWriteComplete(WriteResult wr) { |
+ connection_->OnPacketSent(wr); |
connection_->OnCanWrite(); |
} |