1 #pragma once
2 
3 #include <deque>
4 
5 #include "dvlnet/abstract_net.h"
6 
7 namespace dvl {
8 namespace net {
9 
10 class frame_queue_exception : public dvlnet_exception {
11 public:
what()12 	const char *what() const throw() override
13 	{
14 		return "Incorrect frame size";
15 	}
16 };
17 
18 typedef uint32_t framesize_t;
19 
20 class frame_queue {
21 public:
22 	constexpr static framesize_t max_frame_size = 0xFFFF;
23 
24 private:
25 	framesize_t current_size = 0;
26 	std::deque<buffer_t> buffer_deque;
27 	framesize_t nextsize = 0;
28 
29 	framesize_t size();
30 	buffer_t read(framesize_t s);
31 
32 public:
33 	bool packet_ready();
34 	buffer_t read_packet();
35 	void write(buffer_t buf);
36 
37 	static buffer_t make_frame(buffer_t packetbuf);
38 };
39 
40 } // namespace net
41 } // namespace dvl
42