예제 #1
0
파일: utils.cpp 프로젝트: krattai/AEBL
void print_alerts(lt::session& ses
	, std::function<void(lt::session&, lt::alert const*)> on_alert)
{
	lt::time_point start_time = lt::clock_type::now();

	ses.set_alert_notify([&ses,start_time,on_alert] {
		ses.get_io_service().post([&ses,start_time,on_alert] {

		try {
			std::vector<lt::alert*> alerts;
			ses.pop_alerts(&alerts);

			for (lt::alert const* a : alerts)
			{
				std::printf("%-3d [0] %s\n", int(lt::duration_cast<lt::seconds>(a->timestamp()
					- start_time).count()), a->message().c_str());
				// call the user handler
				on_alert(ses, a);
			}
		} catch (std::exception const& e) {
			std::printf("print alerts: ERROR failed with exception: %s"
				, e.what());
		} catch (...) {
			std::printf("print alerts: ERROR failed with (unknown) exception");
		}
	} ); } );
}
예제 #2
0
void filter_ips(lt::session& ses)
{
	ip_filter filter;
	filter.add_rule(address_v4::from_string("50.0.0.1")
		, address_v4::from_string("50.0.0.2"), ip_filter::blocked);
	ses.set_ip_filter(filter);
}
예제 #3
0
void add_ip_filter(lt::session& ses)
{
	lt::ip_filter filter;
	// filter out 0-2 inclusive
	filter.add_rule(
		asio::ip::address_v4::from_string("60.0.0.0")
		, asio::ip::address_v4::from_string("60.0.0.2")
		, lt::ip_filter::blocked);
	ses.set_ip_filter(filter);
}
예제 #4
0
void print_alerts(lt::session& ses
	, std::function<void(lt::session&, lt::alert const*)> on_alert)
{
	lt::time_point start_time = lt::clock_type::now();

	ses.set_alert_notify([&ses,start_time,on_alert] {
		ses.get_io_service().post([&ses,start_time,on_alert] {

		std::vector<lt::alert*> alerts;
		ses.pop_alerts(&alerts);

		for (lt::alert const* a : alerts)
		{
			printf("%-3d [0] %s\n", int(lt::duration_cast<lt::seconds>(a->timestamp()
				- start_time).count()), a->message().c_str());
			// call the user handler
			on_alert(ses, a);
		}
	} ); } );
}
예제 #5
0
int get_cache_size(lt::session& ses)
{
	std::vector<stats_metric> stats = session_stats_metrics();
	int const read_cache_idx = find_metric_idx("disk.read_cache_blocks");
	int const write_cache_idx = find_metric_idx("disk.write_cache_blocks");
	TEST_CHECK(read_cache_idx >= 0);
	TEST_CHECK(write_cache_idx >= 0);
	ses.set_alert_notify([](){});
	ses.post_session_stats();
	std::vector<alert*> alerts;
	ses.pop_alerts(&alerts);
	int cache_size = -1;
	for (auto const a : alerts)
	{
		if (auto const* st = alert_cast<session_stats_alert>(a))
		{
			cache_size = st->values[read_cache_idx];
			cache_size += st->values[write_cache_idx];
			break;
		}
	}
	return cache_size;
}
예제 #6
0
void set_proxy(lt::session& ses, int proxy_type, int flags, bool proxy_peer_connections)
{
	// apply the proxy settings to session 0
	settings_pack p;
	p.set_int(settings_pack::proxy_type, proxy_type);
	if (proxy_type == settings_pack::socks4)
		p.set_int(settings_pack::proxy_port, 4444);
	else
		p.set_int(settings_pack::proxy_port, 5555);
	if (flags & ipv6)
		p.set_str(settings_pack::proxy_hostname, "2001::2");
	else
		p.set_str(settings_pack::proxy_hostname, "50.50.50.50");
	p.set_bool(settings_pack::proxy_hostnames, true);
	p.set_bool(settings_pack::proxy_peer_connections, proxy_peer_connections);
	p.set_bool(settings_pack::proxy_tracker_connections, true);

	ses.apply_settings(p);
}
예제 #7
0
void set_cache_size(lt::session& ses, int val)
{
	settings_pack pack;
	pack.set_int(settings_pack::cache_size, val);
	ses.apply_settings(pack);
}
예제 #8
0
void enable_enc(lt::session& ses)
{
	settings_pack p;
	enable_enc(p);
	ses.apply_settings(p);
}
예제 #9
0
void utp_only(lt::session& ses)
{
	settings_pack p;
	utp_only(p);
	ses.apply_settings(p);
}