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 base::WeakPtrFactory<QuicDefaultPacketWriter> weak_factory_; 49 DatagramClientSocket* socket_; 50 QuicConnection* connection_; 51 bool write_blocked_; 52 53 DISALLOW_COPY_AND_ASSIGN(QuicDefaultPacketWriter); 54}; 55 56} // namespace net 57 58#endif // NET_QUIC_QUIC_DEFAULT_PACKET_WRITER_H_ 59