1// Copyright 2013 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_DEFAULT_PACKET_WRITER_H_ 6#define NET_QUIC_QUIC_DEFAULT_PACKET_WRITER_H_ 7 8#include "base/basictypes.h" 9#include "base/memory/weak_ptr.h" 10#include "net/base/ip_endpoint.h" 11#include "net/quic/quic_connection.h" 12#include "net/quic/quic_packet_writer.h" 13#include "net/quic/quic_protocol.h" 14#include "net/udp/datagram_client_socket.h" 15 16namespace net { 17 18struct WriteResult; 19 20// Chrome specific packet writer which uses a DatagramClientSocket for writing 21// data. 22class NET_EXPORT_PRIVATE QuicDefaultPacketWriter : public QuicPacketWriter { 23 public: 24 QuicDefaultPacketWriter(); 25 explicit QuicDefaultPacketWriter(DatagramClientSocket* socket); 26 virtual ~QuicDefaultPacketWriter(); 27 28 // QuicPacketWriter 29 virtual WriteResult WritePacket(const char* buffer, 30 size_t buf_len, 31 const IPAddressNumber& self_address, 32 const IPEndPoint& peer_address) OVERRIDE; 33 virtual bool IsWriteBlockedDataBuffered() const OVERRIDE; 34 virtual bool IsWriteBlocked() const OVERRIDE; 35 virtual void SetWritable() OVERRIDE; 36 37 void OnWriteComplete(int rv); 38 void SetConnection(QuicConnection* connection) { 39 connection_ = connection; 40 } 41 42 protected: 43 void set_write_blocked(bool is_blocked) { 44 write_blocked_ = is_blocked; 45 } 46 47 private: 48 DatagramClientSocket* socket_; 49 QuicConnection* connection_; 50 51 // Whether a write is currently in flight. 52 bool write_blocked_; 53 54 base::WeakPtrFactory<QuicDefaultPacketWriter> weak_factory_; 55 56 DISALLOW_COPY_AND_ASSIGN(QuicDefaultPacketWriter); 57}; 58 59} // namespace net 60 61#endif // NET_QUIC_QUIC_DEFAULT_PACKET_WRITER_H_ 62