libfilezilla
Toggle main menu visibility
Loading...
Searching...
No Matches
lib
libfilezilla
rate_limited_layer.hpp
Go to the documentation of this file.
1
#ifndef LIBFILEZILLA_RATE_LIMITED_LAYER_HEADER
2
#define LIBFILEZILLA_RATE_LIMITED_LAYER_HEADER
3
7
8
#include "
rate_limiter.hpp
"
9
#include "
socket.hpp
"
10
11
namespace
fz
{
12
18
class
FZ_PUBLIC_SYMBOL rate_limited_layer final :
public
socket_layer,
private
bucket
19
{
20
public
:
21
rate_limited_layer(
event_handler
* handler,
socket_interface
& next_layer,
rate_limiter
* limiter =
nullptr
);
22
virtual
~rate_limited_layer();
23
24
virtual
int
read(
void
*
buffer
,
unsigned
int
size,
int
& error)
override
;
25
virtual
int
write(
void
const
*
buffer
,
unsigned
int
size,
int
& error)
override
;
26
27
virtual
void
set_event_handler
(
event_handler
* handler,
socket_event_flag
retrigger_block =
socket_event_flag
{})
override
;
28
29
protected
:
30
virtual
void
wakeup
(direction::type d)
override
;
31
};
32
38
class
FZ_PUBLIC_SYMBOL compound_rate_limited_layer final :
public
socket_layer
39
{
40
public
:
41
compound_rate_limited_layer(
event_handler
* handler,
socket_interface
& next_layer);
42
virtual
~compound_rate_limited_layer();
43
44
void
add_limiter(
rate_limiter
* limiter);
45
void
remove_limiter(
rate_limiter
* limiter);
46
47
virtual
int
read(
void
*
buffer
,
unsigned
int
size,
int
& error)
override
;
48
virtual
int
write(
void
const
*
buffer
,
unsigned
int
size,
int
& error)
override
;
49
50
virtual
socket_state
get_state()
const override
{
51
return
next_layer_.get_state();
52
}
53
54
virtual
int
connect(
native_string
const
& host,
unsigned
int
port, address_type family = address_type::unknown)
override
{
55
return
next_layer_.connect(host, port, family);
56
}
57
58
virtual
int
shutdown
()
override
{
59
return
next_layer_.shutdown();
60
}
61
62
virtual
void
set_event_handler
(
event_handler
* handler,
fz::socket_event_flag
retrigger_block =
socket_event_flag
{})
override
;
63
64
protected
:
65
class
crll_bucket;
66
friend
class
crll_bucket;
67
std::vector<std::unique_ptr<crll_bucket>> buckets_;
68
69
fz::mutex
mtx_{
false
};
70
};
71
72
73
}
74
75
#endif
fz::bucket
A rate-limited token bucket.
Definition
rate_limiter.hpp:253
fz::buffer
The buffer class is a simple buffer where data can be appended at the end and consumed at the front....
Definition
buffer.hpp:27
fz::compound_rate_limited_layer::set_event_handler
virtual void set_event_handler(event_handler *handler, fz::socket_event_flag retrigger_block=socket_event_flag{}) override
The handler for any events generated (or forwarded) by this layer.
fz::compound_rate_limited_layer::shutdown
virtual int shutdown() override
Signals peers that we want to close the connections.
Definition
rate_limited_layer.hpp:58
fz::event_handler
Definition
event_handler.hpp:61
fz::mutex
Lean replacement for std::(recursive_)mutex.
Definition
mutex.hpp:75
fz::rate_limited_layer::wakeup
virtual void wakeup(direction::type d) override
Called in response to unlock_tree if tokens have become available.
fz::rate_limited_layer::set_event_handler
virtual void set_event_handler(event_handler *handler, socket_event_flag retrigger_block=socket_event_flag{}) override
The handler for any events generated (or forwarded) by this layer.
fz::rate_limiter
A limiter for the attached buckets.
Definition
rate_limiter.hpp:185
fz::socket_interface
Interface for sockets.
Definition
socket.hpp:375
fz
The namespace used by libfilezilla.
Definition
apply.hpp:17
fz::native_string
std::wstring native_string
A string in the system's native character type and encoding. Note: This typedef changes depending on...
Definition
string.hpp:69
fz::socket_state
socket_state
State transitions are monotonically increasing.
Definition
socket.hpp:343
fz::socket_event_flag
socket_event_flag
The type of a socket event.
Definition
socket.hpp:35
rate_limiter.hpp
Classes for rate-limiting.
socket.hpp
Socket classes for networking.
Generated by
1.17.0