quic_chromium_packet_reader.h 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright (c) 2015 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_CHROMIUM_PACKET_READER_H_
  6. #define NET_QUIC_QUIC_CHROMIUM_PACKET_READER_H_
  7. #include "base/memory/raw_ptr.h"
  8. #include "base/memory/weak_ptr.h"
  9. #include "net/base/io_buffer.h"
  10. #include "net/base/net_export.h"
  11. #include "net/log/net_log_with_source.h"
  12. #include "net/socket/datagram_client_socket.h"
  13. #include "net/third_party/quiche/src/quiche/quic/core/quic_packets.h"
  14. #include "net/third_party/quiche/src/quiche/quic/core/quic_time.h"
  15. namespace quic {
  16. class QuicClock;
  17. } // namespace quic
  18. namespace net {
  19. // If more than this many packets have been read or more than that many
  20. // milliseconds have passed, QuicChromiumPacketReader::StartReading() yields by
  21. // doing a QuicChromiumPacketReader::PostTask().
  22. const int kQuicYieldAfterPacketsRead = 32;
  23. const int kQuicYieldAfterDurationMilliseconds = 2;
  24. class NET_EXPORT_PRIVATE QuicChromiumPacketReader {
  25. public:
  26. class NET_EXPORT_PRIVATE Visitor {
  27. public:
  28. virtual ~Visitor() = default;
  29. // Called when the read operation failed. The visitor returns
  30. // whether the reader should keep reading.
  31. virtual bool OnReadError(int result,
  32. const DatagramClientSocket* socket) = 0;
  33. virtual bool OnPacket(const quic::QuicReceivedPacket& packet,
  34. const quic::QuicSocketAddress& local_address,
  35. const quic::QuicSocketAddress& peer_address) = 0;
  36. };
  37. QuicChromiumPacketReader(DatagramClientSocket* socket,
  38. const quic::QuicClock* clock,
  39. Visitor* visitor,
  40. int yield_after_packets,
  41. quic::QuicTime::Delta yield_after_duration,
  42. const NetLogWithSource& net_log);
  43. QuicChromiumPacketReader(const QuicChromiumPacketReader&) = delete;
  44. QuicChromiumPacketReader& operator=(const QuicChromiumPacketReader&) = delete;
  45. virtual ~QuicChromiumPacketReader();
  46. // Causes the QuicConnectionHelper to start reading from the socket
  47. // and passing the data along to the quic::QuicConnection.
  48. void StartReading();
  49. private:
  50. // A completion callback invoked when a read completes.
  51. void OnReadComplete(int result);
  52. // Return true if reading should continue.
  53. bool ProcessReadResult(int result);
  54. raw_ptr<DatagramClientSocket> socket_;
  55. raw_ptr<Visitor> visitor_;
  56. bool read_pending_ = false;
  57. int num_packets_read_ = 0;
  58. raw_ptr<const quic::QuicClock> clock_; // Not owned.
  59. int yield_after_packets_;
  60. quic::QuicTime::Delta yield_after_duration_;
  61. quic::QuicTime yield_after_;
  62. scoped_refptr<IOBufferWithSize> read_buffer_;
  63. NetLogWithSource net_log_;
  64. base::WeakPtrFactory<QuicChromiumPacketReader> weak_factory_{this};
  65. };
  66. } // namespace net
  67. #endif // NET_QUIC_QUIC_CHROMIUM_PACKET_READER_H_