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