| 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();
|
| }
|
|
|
|
|