OpenVPN 3 Core Library
Loading...
Searching...
No Matches
memq_dgram.hpp
Go to the documentation of this file.
1// OpenVPN -- An application to securely tunnel IP networks
2// over a single port, with support for SSL/TLS-based
3// session authentication and key exchange,
4// packet encryption, packet authentication, and
5// packet compression.
6//
7// Copyright (C) 2012- OpenVPN Inc.
8//
9// SPDX-License-Identifier: MPL-2.0 OR AGPL-3.0-only WITH openvpn3-openssl-exception
10//
11
12// A queue of datagram buffers for handling sequences of UDP packets
13
14#ifndef OPENVPN_FRAME_MEMQ_DGRAM_H
15#define OPENVPN_FRAME_MEMQ_DGRAM_H
16
21
22namespace openvpn {
23
24class MemQDgram : public MemQBase
25{
26 public:
27 OPENVPN_SIMPLE_EXCEPTION(frame_uninitialized);
28
30 {
31 }
32 explicit MemQDgram(const Frame::Ptr &frame)
33 : frame_(frame)
34 {
35 }
36 void set_frame(const Frame::Ptr &frame)
37 {
38 frame_ = frame;
39 }
40
41 size_t pending() const
42 {
43 return empty() ? 0 : q.front()->size();
44 }
45
46 void write(const unsigned char *data, size_t size)
47 {
48 if (frame_)
49 {
50 const Frame::Context &fc = (*frame_)[Frame::READ_BIO_MEMQ_STREAM];
51 q.push_back(fc.copy(data, size));
52 length += size;
53 }
54 else
55 throw frame_uninitialized();
56 }
57
58 size_t read(unsigned char *data, size_t len)
59 {
60 BufferPtr &b = q.front();
61 if (len > b->size())
62 len = b->size();
63 b->read(data, len);
64 if (b->empty())
65 q.pop_front();
66 length -= len;
67 return len;
68 }
69
70 private:
72};
73
74} // namespace openvpn
75
76#endif // OPENVPN_FRAME_MEMQ_DGRAM_H
BufferPtr copy(const unsigned char *data, const size_t size) const
Definition frame.hpp:138
@ READ_BIO_MEMQ_STREAM
Definition frame.hpp:41
bool empty() const
Definition memq.hpp:37
size_t size() const
Definition memq.hpp:32
size_t length
Definition memq.hpp:86
OPENVPN_SIMPLE_EXCEPTION(frame_uninitialized)
size_t pending() const
MemQDgram(const Frame::Ptr &frame)
void set_frame(const Frame::Ptr &frame)
void write(const unsigned char *data, size_t size)
size_t read(unsigned char *data, size_t len)