mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 22:36:09 +03:00
81 lines
2.7 KiB
C
81 lines
2.7 KiB
C
|
// 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/macros.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/quic/core/quic_packets.h"
|
||
|
#include "net/third_party/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() {}
|
||
|
virtual void 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,
|
||
|
quic::QuicClock* clock,
|
||
|
Visitor* visitor,
|
||
|
int yield_after_packets,
|
||
|
quic::QuicTime::Delta yield_after_duration,
|
||
|
const NetLogWithSource& net_log);
|
||
|
virtual ~QuicChromiumPacketReader();
|
||
|
|
||
|
// Causes the QuicConnectionHelper to start reading from the socket
|
||
|
// and passing the data along to the quic::QuicConnection.
|
||
|
void StartReading();
|
||
|
|
||
|
// Returns the estimate of dynamically allocated memory in bytes.
|
||
|
size_t EstimateMemoryUsage() const;
|
||
|
|
||
|
private:
|
||
|
// A completion callback invoked when a read completes.
|
||
|
void OnReadComplete(int result);
|
||
|
// Return true if reading should continue.
|
||
|
bool ProcessReadResult(int result);
|
||
|
|
||
|
DatagramClientSocket* socket_;
|
||
|
Visitor* visitor_;
|
||
|
bool read_pending_;
|
||
|
int num_packets_read_;
|
||
|
quic::QuicClock* clock_; // Owned by QuicStreamFactory
|
||
|
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_;
|
||
|
|
||
|
DISALLOW_COPY_AND_ASSIGN(QuicChromiumPacketReader);
|
||
|
};
|
||
|
|
||
|
} // namespace net
|
||
|
|
||
|
#endif // NET_QUIC_QUIC_CHROMIUM_PACKET_READER_H_
|