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_SERVER_PACKET_WRITER_H_ 6#define NET_QUIC_QUIC_SERVER_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/udp_server_socket.h" 15 16namespace net { 17 18struct WriteResult; 19 20// Chrome specific packet writer which uses a UDPServerSocket for writing 21// data. 22class QuicServerPacketWriter : public QuicPacketWriter { 23 public: 24 QuicServerPacketWriter(); 25 explicit QuicServerPacketWriter(UDPServerSocket* socket); 26 virtual ~QuicServerPacketWriter(); 27 28 // QuicPacketWriter 29 virtual WriteResult WritePacket(const char* buffer, 30 size_t buf_len, 31 const net::IPAddressNumber& self_address, 32 const net::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 private: 43 base::WeakPtrFactory<QuicServerPacketWriter> weak_factory_; 44 UDPServerSocket* socket_; 45 QuicConnection* connection_; 46 bool write_blocked_; 47 48 DISALLOW_COPY_AND_ASSIGN(QuicServerPacketWriter); 49}; 50 51} // namespace net 52 53#endif // NET_QUIC_QUIC_SERVER_PACKET_WRITER_H_ 54