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_QUIC_QUIC_PER_CONNECTION_PACKET_WRITER_H_ 6 #define NET_QUIC_QUIC_PER_CONNECTION_PACKET_WRITER_H_ 7 8 #include "base/memory/weak_ptr.h" 9 #include "net/quic/quic_connection.h" 10 #include "net/quic/quic_packet_writer.h" 11 12 namespace net { 13 14 class QuicServerPacketWriter; 15 16 // A connection-specific packet writer that notifies its connection when its 17 // writes to the shared QuicServerPacketWriter complete. 18 // This class is necessary because multiple connections can share the same 19 // QuicServerPacketWriter, so it has no way to know which connection to notify. 20 class QuicPerConnectionPacketWriter : public QuicPacketWriter { 21 public: 22 // Does not take ownership of |shared_writer| or |connection|. 23 QuicPerConnectionPacketWriter(QuicServerPacketWriter* shared_writer, 24 QuicConnection* connection); 25 virtual ~QuicPerConnectionPacketWriter(); 26 27 QuicPacketWriter* shared_writer() const; connection()28 QuicConnection* connection() const { return connection_; } 29 30 // Default implementation of the QuicPacketWriter interface: Passes everything 31 // to |shared_writer_|. 32 virtual WriteResult WritePacket(const char* buffer, 33 size_t buf_len, 34 const IPAddressNumber& self_address, 35 const IPEndPoint& peer_address) OVERRIDE; 36 virtual bool IsWriteBlockedDataBuffered() const OVERRIDE; 37 virtual bool IsWriteBlocked() const OVERRIDE; 38 virtual void SetWritable() OVERRIDE; 39 40 private: 41 void OnWriteComplete(WriteResult result); 42 43 QuicServerPacketWriter* shared_writer_; // Not owned. 44 QuicConnection* connection_; // Not owned. 45 46 base::WeakPtrFactory<QuicPerConnectionPacketWriter> weak_factory_; 47 48 DISALLOW_COPY_AND_ASSIGN(QuicPerConnectionPacketWriter); 49 }; 50 51 } // namespace net 52 53 #endif // NET_QUIC_QUIC_PER_CONNECTION_PACKET_WRITER_H_ 54