quic_packet_writer_wrapper.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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