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 
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 socket_state get_state() const override {
28  return next_layer_.get_state();
29  }
30 
31  virtual int connect(native_string const& host, unsigned int port, address_type family = address_type::unknown) override {
32  return next_layer_.connect(host, port, family);
33  }
34 
35  virtual int shutdown() override {
36  return next_layer_.shutdown();
37  }
38 
39  virtual void set_event_handler(event_handler* handler) override {
40  scoped_lock l(mtx_);
42  }
43 
44 protected:
45  virtual void wakeup(direction::type d) override;
46 };
47 
48 }
49 
50 #endif
virtual int shutdown() override
Signals peers that we want to close the connections.
Definition: rate_limited_layer.hpp:35
A simple scoped lock.
Definition: mutex.hpp:64
A rate-limited token bucket.
Definition: rate_limiter.hpp:252
Interface for sockets.
Definition: socket.hpp:338
Simple handler for asynchronous event processing.
Definition: event_handler.hpp:54
virtual void set_event_handler(event_handler *handler) override
The handler for any events generated (or forwarded) by this layer.
Definition: rate_limited_layer.hpp:39
Classes for rate-limiting.
Socket classes for networking.
A base class for socket layers.
Definition: socket.hpp:541
std::wstring native_string
A string in the system's native character type and encoding. Note: This typedef changes depending on...
Definition: string.hpp:33
socket_state
State transitions are monotonically increasing.
Definition: socket.hpp:306
A limiter for the attached buckets.
Definition: rate_limiter.hpp:185
The namespace used by libfilezilla.
Definition: apply.hpp:17
A rate-limited socket layer.
Definition: rate_limited_layer.hpp:18
virtual void set_event_handler(event_handler *handler) override
The handler for any events generated (or forwarded) by this layer.
The buffer class is a simple buffer where data can be appended at the end and consumed at the front...
Definition: buffer.hpp:23