15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef NET_TOOLS_QUIC_QUIC_PACKET_WRITER_WRAPPER_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define NET_TOOLS_QUIC_QUIC_PACKET_WRITER_WRAPPER_H_ 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/quic/quic_packet_writer.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace net { 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace tools { 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Wraps a writer object to allow dynamically extending functionality. Use 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// cases: replace writer while dispatcher and connections hold on to the 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// wrapper; mix in monitoring in internal server; mix in mocks in unit tests. 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class QuicPacketWriterWrapper : public net::QuicPacketWriter { 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) QuicPacketWriterWrapper(); 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) explicit QuicPacketWriterWrapper(QuicPacketWriter* writer); 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~QuicPacketWriterWrapper(); 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Default implementation of the QuicPacketWriter interface. Passes everything 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // to |writer_|. 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual WriteResult WritePacket( 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const char* buffer, 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t buf_len, 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const IPAddressNumber& self_address, 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const IPEndPoint& peer_address) OVERRIDE; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool IsWriteBlockedDataBuffered() const OVERRIDE; 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool IsWriteBlocked() const OVERRIDE; 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetWritable() OVERRIDE; 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Takes ownership of |writer|. 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void set_writer(QuicPacketWriter* writer); 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Releases ownership of |writer_|. 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) QuicPacketWriter* release_writer(); 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<QuicPacketWriter> writer_; 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(QuicPacketWriterWrapper); 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace tools 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace net 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // NET_TOOLS_QUIC_QUIC_PACKET_WRITER_WRAPPER_H_ 51