6#include "roo_io/status.h"
13class ThreadSafeReceiver {
16 using RecvCb = std::function<void()>;
18 ThreadSafeReceiver(
unsigned int recvbuf_log2);
20 Receiver::State state()
const;
22 void setConnected(SeqNum peer_seq_num,
bool control_bit);
25 size_t read(roo::byte* buf,
size_t count, uint32_t my_stream_id,
26 roo_io::Status& stream_status,
bool& outgoing_data_ready);
28 size_t tryRead(roo::byte* buf,
size_t count, uint32_t my_stream_id,
29 roo_io::Status& stream_status,
bool& outgoing_data_ready);
31 int peek(uint32_t my_stream_id, roo_io::Status& stream_status);
33 size_t availableForRead(uint32_t my_stream_id,
34 roo_io::Status& stream_status)
const;
36 void markInputClosed(uint32_t my_stream_id, roo_io::Status& stream_status,
37 bool& outgoing_data_ready);
40 void init(uint32_t my_stream_id);
42 size_t ack(roo::byte* buf);
43 size_t updateRecvHimark(roo::byte* buf,
long& next_send_micros);
45 bool handleDataPacket(
bool control_bit, uint16_t seq_id,
46 const roo::byte* payload,
size_t len,
bool is_final);
49 roo::lock_guard<roo::mutex> guard(mutex_);
50 return receiver_.empty();
54 roo::lock_guard<roo::mutex> guard(mutex_);
55 return receiver_.done();
58 uint32_t packets_received()
const {
59 roo::lock_guard<roo::mutex> guard(mutex_);
60 return receiver_.packets_received();
63 unsigned int buffer_size_log2()
const;
75 bool checkConnectionStatus(uint32_t my_stream_id,
76 roo_io::Status& status)
const;
78 internal::Receiver receiver_;
80 mutable roo::mutex mutex_;
81 roo::condition_variable has_data_;