103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// found in the LICENSE file. 403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#ifndef NET_TOOLS_QUIC_QUIC_PER_CONNECTION_PACKET_WRITER_H_ 603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define NET_TOOLS_QUIC_QUIC_PER_CONNECTION_PACKET_WRITER_H_ 703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "net/quic/quic_connection.h" 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "net/quic/quic_packet_writer.h" 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace net { 1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace tools { 1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// A connection-specific packet writer that wraps a shared writer and keeps a 1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// reference to the connection. 1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class QuicPerConnectionPacketWriter : public QuicPacketWriter { 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public: 1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Does not take ownership of |shared_writer| or |connection|. 2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) QuicPerConnectionPacketWriter(QuicPacketWriter* shared_writer, 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) QuicConnection* connection); 2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual ~QuicPerConnectionPacketWriter(); 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) QuicPacketWriter* shared_writer() const { return shared_writer_; } 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) QuicConnection* connection() const { return connection_; } 2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Default implementation of the QuicPacketWriter interface: Passes everything 2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // to |shared_writer_|. 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual WriteResult WritePacket(const char* buffer, 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) size_t buf_len, 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const IPAddressNumber& self_address, 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const IPEndPoint& peer_address) OVERRIDE; 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual bool IsWriteBlockedDataBuffered() const OVERRIDE; 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual bool IsWriteBlocked() const OVERRIDE; 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void SetWritable() OVERRIDE; 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) private: 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) QuicPacketWriter* shared_writer_; // Not owned. 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) QuicConnection* connection_; // Not owned. 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(QuicPerConnectionPacketWriter); 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}; 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} // namespace tools 4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} // namespace net 4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif // NET_TOOLS_QUIC_QUIC_PER_CONNECTION_PACKET_WRITER_H_ 49