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