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
17
#include <
openvpn/common/size.hpp
>
18
#include <
openvpn/common/exception.hpp
>
19
#include <
openvpn/buffer/memq.hpp
>
20
#include <
openvpn/frame/frame.hpp
>
21
22
namespace
openvpn
{
23
24
class
MemQDgram
:
public
MemQBase
25
{
26
public
:
27
OPENVPN_SIMPLE_EXCEPTION
(frame_uninitialized);
28
29
MemQDgram
() =
default
;
30
31
explicit
MemQDgram
(
const
Frame::Ptr
&frame)
32
:
frame_
(frame)
33
{
34
}
35
void
set_frame
(
const
Frame::Ptr
&frame)
36
{
37
frame_
= frame;
38
}
39
40
size_t
pending
()
const
41
{
42
return
empty
() ? 0 :
q
.front()->size();
43
}
44
45
void
write
(
const
unsigned
char
*data,
size_t
size
)
46
{
47
if
(
frame_
)
48
{
49
const
Frame::Context
&fc = (*frame_)[
Frame::READ_BIO_MEMQ_STREAM
];
50
q
.push_back(fc.
copy
(data,
size
));
51
length
+=
size
;
52
}
53
else
54
throw
frame_uninitialized();
55
}
56
57
size_t
read
(
unsigned
char
*data,
size_t
len)
58
{
59
BufferPtr
&b =
q
.front();
60
if
(len > b->size())
61
len = b->size();
62
b->read(data, len);
63
if
(b->empty())
64
q
.pop_front();
65
length
-= len;
66
return
len;
67
}
68
69
private
:
70
Frame::Ptr
frame_
;
71
};
72
73
}
// namespace openvpn
74
75
#endif
// OPENVPN_FRAME_MEMQ_DGRAM_H
openvpn::Frame::Context
Definition
frame.hpp:58
openvpn::Frame::Context::copy
BufferPtr copy(const unsigned char *data, const size_t size) const
Definition
frame.hpp:138
openvpn::Frame::READ_BIO_MEMQ_STREAM
@ READ_BIO_MEMQ_STREAM
Definition
frame.hpp:41
openvpn::MemQBase
Definition
memq.hpp:25
openvpn::MemQBase::empty
bool empty() const
Definition
memq.hpp:37
openvpn::MemQBase::q
q_type q
Definition
memq.hpp:87
openvpn::MemQBase::size
size_t size() const
Definition
memq.hpp:32
openvpn::MemQBase::length
size_t length
Definition
memq.hpp:86
openvpn::MemQDgram
Definition
memq_dgram.hpp:25
openvpn::MemQDgram::OPENVPN_SIMPLE_EXCEPTION
OPENVPN_SIMPLE_EXCEPTION(frame_uninitialized)
openvpn::MemQDgram::pending
size_t pending() const
Definition
memq_dgram.hpp:40
openvpn::MemQDgram::MemQDgram
MemQDgram(const Frame::Ptr &frame)
Definition
memq_dgram.hpp:31
openvpn::MemQDgram::set_frame
void set_frame(const Frame::Ptr &frame)
Definition
memq_dgram.hpp:35
openvpn::MemQDgram::write
void write(const unsigned char *data, size_t size)
Definition
memq_dgram.hpp:45
openvpn::MemQDgram::MemQDgram
MemQDgram()=default
openvpn::MemQDgram::read
size_t read(unsigned char *data, size_t len)
Definition
memq_dgram.hpp:57
openvpn::MemQDgram::frame_
Frame::Ptr frame_
Definition
memq_dgram.hpp:70
openvpn::RCPtr< Frame >
exception.hpp
frame.hpp
memq.hpp
openvpn
Definition
ovpncli.cpp:97
size.hpp
openvpn
frame
memq_dgram.hpp
Generated by
1.9.8