2014-04-17 16:00:52 +00:00
|
|
|
#pragma once
|
2014-04-17 23:39:15 +00:00
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
|
|
#include <memory>
|
2014-04-17 16:00:52 +00:00
|
|
|
|
2014-06-25 22:16:58 +00:00
|
|
|
#include <fc/time.hpp>
|
|
|
|
|
|
2014-04-17 16:00:52 +00:00
|
|
|
namespace fc
|
|
|
|
|
{
|
|
|
|
|
namespace detail
|
|
|
|
|
{
|
|
|
|
|
class rate_limiting_group_impl;
|
|
|
|
|
}
|
|
|
|
|
|
2014-04-17 23:39:15 +00:00
|
|
|
class tcp_socket;
|
|
|
|
|
|
2014-04-17 16:00:52 +00:00
|
|
|
class rate_limiting_group
|
|
|
|
|
{
|
|
|
|
|
public:
|
2014-06-25 22:16:58 +00:00
|
|
|
rate_limiting_group(uint32_t upload_bytes_per_second, uint32_t download_bytes_per_second, uint32_t burstiness_in_seconds = 1);
|
2014-04-17 16:00:52 +00:00
|
|
|
~rate_limiting_group();
|
|
|
|
|
|
2014-04-17 23:39:15 +00:00
|
|
|
void set_upload_limit(uint32_t upload_bytes_per_second);
|
|
|
|
|
uint32_t get_upload_limit() const;
|
|
|
|
|
|
|
|
|
|
void set_download_limit(uint32_t download_bytes_per_second);
|
|
|
|
|
uint32_t get_download_limit() const;
|
|
|
|
|
|
2014-06-25 22:16:58 +00:00
|
|
|
uint32_t get_actual_upload_rate() const;
|
|
|
|
|
uint32_t get_actual_download_rate() const;
|
|
|
|
|
void set_actual_rate_time_constant(microseconds time_constant);
|
|
|
|
|
|
2014-04-17 23:39:15 +00:00
|
|
|
void add_tcp_socket(tcp_socket* tcp_socket_to_limit);
|
|
|
|
|
void remove_tcp_socket(tcp_socket* tcp_socket_to_stop_limiting);
|
2014-04-17 16:00:52 +00:00
|
|
|
private:
|
|
|
|
|
std::unique_ptr<detail::rate_limiting_group_impl> my;
|
|
|
|
|
};
|
|
|
|
|
typedef std::shared_ptr<rate_limiting_group> rate_limiting_group_ptr;
|
|
|
|
|
|
|
|
|
|
} // namesapce fc
|
|
|
|
|
|