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