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
()
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
:
71
Frame::Ptr
frame_
;
72
};
73
74
}
// namespace openvpn
75
76
#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:41
openvpn::MemQDgram::MemQDgram
MemQDgram(const Frame::Ptr &frame)
Definition
memq_dgram.hpp:32
openvpn::MemQDgram::set_frame
void set_frame(const Frame::Ptr &frame)
Definition
memq_dgram.hpp:36
openvpn::MemQDgram::MemQDgram
MemQDgram()
Definition
memq_dgram.hpp:29
openvpn::MemQDgram::write
void write(const unsigned char *data, size_t size)
Definition
memq_dgram.hpp:46
openvpn::MemQDgram::read
size_t read(unsigned char *data, size_t len)
Definition
memq_dgram.hpp:58
openvpn::MemQDgram::frame_
Frame::Ptr frame_
Definition
memq_dgram.hpp:71
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