12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // Copyright (c) 2015 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- //
- #ifndef NET_QUIC_QUIC_CHROMIUM_PACKET_READER_H_
- #define NET_QUIC_QUIC_CHROMIUM_PACKET_READER_H_
- #include "base/memory/raw_ptr.h"
- #include "base/memory/weak_ptr.h"
- #include "net/base/io_buffer.h"
- #include "net/base/net_export.h"
- #include "net/log/net_log_with_source.h"
- #include "net/socket/datagram_client_socket.h"
- #include "net/third_party/quiche/src/quiche/quic/core/quic_packets.h"
- #include "net/third_party/quiche/src/quiche/quic/core/quic_time.h"
- namespace quic {
- class QuicClock;
- } // namespace quic
- namespace net {
- // If more than this many packets have been read or more than that many
- // milliseconds have passed, QuicChromiumPacketReader::StartReading() yields by
- // doing a QuicChromiumPacketReader::PostTask().
- const int kQuicYieldAfterPacketsRead = 32;
- const int kQuicYieldAfterDurationMilliseconds = 2;
- class NET_EXPORT_PRIVATE QuicChromiumPacketReader {
- public:
- class NET_EXPORT_PRIVATE Visitor {
- public:
- virtual ~Visitor() = default;
- // Called when the read operation failed. The visitor returns
- // whether the reader should keep reading.
- virtual bool OnReadError(int result,
- const DatagramClientSocket* socket) = 0;
- virtual bool OnPacket(const quic::QuicReceivedPacket& packet,
- const quic::QuicSocketAddress& local_address,
- const quic::QuicSocketAddress& peer_address) = 0;
- };
- QuicChromiumPacketReader(DatagramClientSocket* socket,
- const quic::QuicClock* clock,
- Visitor* visitor,
- int yield_after_packets,
- quic::QuicTime::Delta yield_after_duration,
- const NetLogWithSource& net_log);
- QuicChromiumPacketReader(const QuicChromiumPacketReader&) = delete;
- QuicChromiumPacketReader& operator=(const QuicChromiumPacketReader&) = delete;
- virtual ~QuicChromiumPacketReader();
- // Causes the QuicConnectionHelper to start reading from the socket
- // and passing the data along to the quic::QuicConnection.
- void StartReading();
- private:
- // A completion callback invoked when a read completes.
- void OnReadComplete(int result);
- // Return true if reading should continue.
- bool ProcessReadResult(int result);
- raw_ptr<DatagramClientSocket> socket_;
- raw_ptr<Visitor> visitor_;
- bool read_pending_ = false;
- int num_packets_read_ = 0;
- raw_ptr<const quic::QuicClock> clock_; // Not owned.
- int yield_after_packets_;
- quic::QuicTime::Delta yield_after_duration_;
- quic::QuicTime yield_after_;
- scoped_refptr<IOBufferWithSize> read_buffer_;
- NetLogWithSource net_log_;
- base::WeakPtrFactory<QuicChromiumPacketReader> weak_factory_{this};
- };
- } // namespace net
- #endif // NET_QUIC_QUIC_CHROMIUM_PACKET_READER_H_
|