1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef NET_TOOLS_QUIC_QUIC_PACKET_WRITER_WRAPPER_H_ 6#define NET_TOOLS_QUIC_QUIC_PACKET_WRITER_WRAPPER_H_ 7 8#include "base/memory/scoped_ptr.h" 9#include "net/quic/quic_packet_writer.h" 10 11namespace net { 12 13namespace tools { 14 15// Wraps a writer object to allow dynamically extending functionality. Use 16// cases: replace writer while dispatcher and connections hold on to the 17// wrapper; mix in monitoring in internal server; mix in mocks in unit tests. 18class QuicPacketWriterWrapper : public net::QuicPacketWriter { 19 public: 20 QuicPacketWriterWrapper(); 21 explicit QuicPacketWriterWrapper(QuicPacketWriter* writer); 22 virtual ~QuicPacketWriterWrapper(); 23 24 // Default implementation of the QuicPacketWriter interface. Passes everything 25 // to |writer_|. 26 virtual WriteResult WritePacket( 27 const char* buffer, 28 size_t buf_len, 29 const IPAddressNumber& self_address, 30 const IPEndPoint& peer_address) OVERRIDE; 31 virtual bool IsWriteBlockedDataBuffered() const OVERRIDE; 32 virtual bool IsWriteBlocked() const OVERRIDE; 33 virtual void SetWritable() OVERRIDE; 34 35 // Takes ownership of |writer|. 36 void set_writer(QuicPacketWriter* writer); 37 38 // Releases ownership of |writer_|. 39 QuicPacketWriter* release_writer(); 40 41 private: 42 scoped_ptr<QuicPacketWriter> writer_; 43 44 DISALLOW_COPY_AND_ASSIGN(QuicPacketWriterWrapper); 45}; 46 47} // namespace tools 48} // namespace net 49 50#endif // NET_TOOLS_QUIC_QUIC_PACKET_WRITER_WRAPPER_H_ 51