move time_now_string out to the unit test library (basically unused in libtorrent itself)
This commit is contained in:
parent
91e66f65d3
commit
3ea67e2bf5
|
@ -359,7 +359,7 @@ if(build_tests)
|
||||||
FILE(GLOB tests RELATIVE "${PROJECT_SOURCE_DIR}" "test/test_*.cpp")
|
FILE(GLOB tests RELATIVE "${PROJECT_SOURCE_DIR}" "test/test_*.cpp")
|
||||||
add_library(test_common STATIC test/main.cpp test/setup_transfer.cpp
|
add_library(test_common STATIC test/main.cpp test/setup_transfer.cpp
|
||||||
test/dht_server.cpp test/udp_tracker.cpp test/peer_server.cpp
|
test/dht_server.cpp test/udp_tracker.cpp test/peer_server.cpp
|
||||||
test/web_seed_suite.cpp)
|
test/web_seed_suite.cpp test/test_utils.cpp)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
foreach(s ${tests})
|
foreach(s ${tests})
|
||||||
|
|
|
@ -40,10 +40,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
namespace libtorrent { namespace aux
|
namespace libtorrent { namespace aux
|
||||||
{
|
{
|
||||||
// TODO: 3 this is only used for debug logging. It should probably not
|
|
||||||
// be included unconditionally
|
|
||||||
TORRENT_EXTRA_EXPORT char const* time_now_string();
|
|
||||||
|
|
||||||
std::string log_time();
|
std::string log_time();
|
||||||
|
|
||||||
// returns the current time, as represented by time_point. The
|
// returns the current time, as represented by time_point. The
|
||||||
|
|
|
@ -394,8 +394,8 @@ int snprintf(char* buf, int len, char const* fmt, ...)
|
||||||
// at the highest warning level, clang actually warns about functions
|
// at the highest warning level, clang actually warns about functions
|
||||||
// that could be marked noreturn. There seems to be versions of GCC
|
// that could be marked noreturn. There seems to be versions of GCC
|
||||||
// that declare being
|
// that declare being
|
||||||
#if defined __clang__ && defined __cplusplus && __cplusplus >= 199711L
|
#if defined __clang__ || defined __GNUC__
|
||||||
#define TORRENT_NO_RETURN [[noreturn]]
|
#define TORRENT_NO_RETURN __attribute((noreturn))
|
||||||
#else
|
#else
|
||||||
#define TORRENT_NO_RETURN
|
#define TORRENT_NO_RETURN
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -34,6 +34,9 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#define TORRENT_TIME_HPP_INCLUDED
|
#define TORRENT_TIME_HPP_INCLUDED
|
||||||
|
|
||||||
#include "libtorrent/config.hpp"
|
#include "libtorrent/config.hpp"
|
||||||
|
|
||||||
|
#include "libtorrent/aux_/disable_warnings_push.hpp"
|
||||||
|
|
||||||
#include <boost/cstdint.hpp>
|
#include <boost/cstdint.hpp>
|
||||||
|
|
||||||
#if defined BOOST_ASIO_HAS_STD_CHRONO
|
#if defined BOOST_ASIO_HAS_STD_CHRONO
|
||||||
|
@ -42,6 +45,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <boost/chrono.hpp>
|
#include <boost/chrono.hpp>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "libtorrent/aux_/disable_warnings_pop.hpp"
|
||||||
|
|
||||||
namespace libtorrent {
|
namespace libtorrent {
|
||||||
|
|
||||||
#if defined BOOST_ASIO_HAS_STD_CHRONO
|
#if defined BOOST_ASIO_HAS_STD_CHRONO
|
||||||
|
|
|
@ -36,11 +36,12 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
namespace libtorrent { namespace dht
|
namespace libtorrent { namespace dht
|
||||||
{
|
{
|
||||||
|
// TODO: 3 replace this logging with alerts
|
||||||
log_event::log_event(log& log)
|
log_event::log_event(log& log)
|
||||||
: log_(log)
|
: log_(log)
|
||||||
{
|
{
|
||||||
if (log_.enabled())
|
if (log_.enabled())
|
||||||
log_ << libtorrent::aux::time_now_string() << " [" << log.id() << "] ";
|
log_ << libtorrent::aux::log_time() << " [" << log.id() << "] ";
|
||||||
}
|
}
|
||||||
|
|
||||||
log_event::~log_event()
|
log_event::~log_event()
|
||||||
|
|
|
@ -222,7 +222,7 @@ namespace libtorrent { namespace
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
std::stringstream log_line;
|
std::stringstream log_line;
|
||||||
log_line << aux::time_now_string() << " <== LT_TEX [ "
|
log_line << " <== LT_TEX [ "
|
||||||
"added: ";
|
"added: ";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -327,7 +327,7 @@ namespace libtorrent { namespace
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
std::stringstream log_line;
|
std::stringstream log_line;
|
||||||
log_line << aux::time_now_string() << " ==> LT_TEX [ "
|
log_line << " ==> LT_TEX [ "
|
||||||
"added: ";
|
"added: ";
|
||||||
#endif
|
#endif
|
||||||
entry tex;
|
entry tex;
|
||||||
|
|
20
src/time.cpp
20
src/time.cpp
|
@ -39,10 +39,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/time.hpp"
|
#include "libtorrent/time.hpp"
|
||||||
#include "libtorrent/aux_/time.hpp"
|
#include "libtorrent/aux_/time.hpp"
|
||||||
|
|
||||||
#ifndef _WIN32
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace libtorrent { namespace aux
|
namespace libtorrent { namespace aux
|
||||||
{
|
{
|
||||||
// used to cache the current time
|
// used to cache the current time
|
||||||
|
@ -54,22 +50,6 @@ namespace libtorrent { namespace aux
|
||||||
|
|
||||||
time_point const& time_now() { return aux::g_current_time; }
|
time_point const& time_now() { return aux::g_current_time; }
|
||||||
|
|
||||||
TORRENT_EXTRA_EXPORT char const* time_now_string()
|
|
||||||
{
|
|
||||||
static const time_point start = clock_type::now();
|
|
||||||
static char ret[200];
|
|
||||||
int t = total_milliseconds(clock_type::now() - start);
|
|
||||||
int h = t / 1000 / 60 / 60;
|
|
||||||
t -= h * 60 * 60 * 1000;
|
|
||||||
int m = t / 1000 / 60;
|
|
||||||
t -= m * 60 * 1000;
|
|
||||||
int s = t / 1000;
|
|
||||||
t -= s * 1000;
|
|
||||||
int ms = t;
|
|
||||||
snprintf(ret, sizeof(ret), "%02d:%02d:%02d.%03d", h, m, s, ms);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string log_time()
|
std::string log_time()
|
||||||
{
|
{
|
||||||
static const time_point start = clock_type::now();
|
static const time_point start = clock_type::now();
|
||||||
|
|
|
@ -56,6 +56,7 @@ lib libtorrent_test
|
||||||
peer_server.cpp
|
peer_server.cpp
|
||||||
web_seed_suite.cpp
|
web_seed_suite.cpp
|
||||||
swarm_suite.cpp
|
swarm_suite.cpp
|
||||||
|
test_utils.cpp
|
||||||
|
|
||||||
: # requirements
|
: # requirements
|
||||||
# this is used to determine whether
|
# this is used to determine whether
|
||||||
|
|
|
@ -128,7 +128,8 @@ EXTRA_DIST = Jamfile \
|
||||||
EXTRA_PROGRAMS = $(test_programs)
|
EXTRA_PROGRAMS = $(test_programs)
|
||||||
|
|
||||||
noinst_HEADERS = test.hpp setup_transfer.hpp dht_server.hpp \
|
noinst_HEADERS = test.hpp setup_transfer.hpp dht_server.hpp \
|
||||||
peer_server.hpp udp_tracker.hpp web_seed_suite.hpp swarm_suite.hpp
|
peer_server.hpp udp_tracker.hpp web_seed_suite.hpp swarm_suite.hpp \
|
||||||
|
test_utils.hpp
|
||||||
|
|
||||||
libtest_la_SOURCES = main.cpp \
|
libtest_la_SOURCES = main.cpp \
|
||||||
setup_transfer.cpp \
|
setup_transfer.cpp \
|
||||||
|
@ -136,7 +137,8 @@ libtest_la_SOURCES = main.cpp \
|
||||||
udp_tracker.cpp \
|
udp_tracker.cpp \
|
||||||
peer_server.cpp \
|
peer_server.cpp \
|
||||||
web_seed_suite.cpp \
|
web_seed_suite.cpp \
|
||||||
swarm_suite.cpp
|
swarm_suite.cpp \
|
||||||
|
test_utils.cpp
|
||||||
|
|
||||||
test_bitfield_SOURCES = test_bitfield.cpp
|
test_bitfield_SOURCES = test_bitfield.cpp
|
||||||
test_crc32_SOURCES = test_crc32.cpp
|
test_crc32_SOURCES = test_crc32.cpp
|
||||||
|
|
|
@ -39,6 +39,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/socket.hpp"
|
#include "libtorrent/socket.hpp"
|
||||||
#include "libtorrent/aux_/time.hpp"
|
#include "libtorrent/aux_/time.hpp"
|
||||||
#include "dht_server.hpp"
|
#include "dht_server.hpp"
|
||||||
|
#include "test_utils.hpp"
|
||||||
|
|
||||||
#include <boost/detail/atomic_count.hpp>
|
#include <boost/detail/atomic_count.hpp>
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
@ -86,7 +87,7 @@ struct dht_server
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "%s: DHT initialized on port %d\n", aux::time_now_string(), m_port);
|
fprintf(stderr, "%s: DHT initialized on port %d\n", time_now_string(), m_port);
|
||||||
|
|
||||||
m_thread.reset(new thread(boost::bind(&dht_server::thread_fun, this)));
|
m_thread.reset(new thread(boost::bind(&dht_server::thread_fun, this)));
|
||||||
}
|
}
|
||||||
|
@ -171,8 +172,8 @@ int num_dht_hits()
|
||||||
|
|
||||||
void stop_dht()
|
void stop_dht()
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: stop_dht()\n", aux::time_now_string());
|
fprintf(stderr, "%s: stop_dht()\n", time_now_string());
|
||||||
g_dht.reset();
|
g_dht.reset();
|
||||||
fprintf(stderr, "%s: stop_dht() done\n", aux::time_now_string());
|
fprintf(stderr, "%s: stop_dht() done\n", time_now_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/socket.hpp"
|
#include "libtorrent/socket.hpp"
|
||||||
#include "libtorrent/aux_/time.hpp"
|
#include "libtorrent/aux_/time.hpp"
|
||||||
#include "peer_server.hpp"
|
#include "peer_server.hpp"
|
||||||
|
#include "test_utils.hpp"
|
||||||
|
|
||||||
#include <boost/detail/atomic_count.hpp>
|
#include <boost/detail/atomic_count.hpp>
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
@ -88,7 +89,7 @@ struct peer_server
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "%s: PEER peer initialized on port %d\n", aux::time_now_string(), m_port);
|
fprintf(stderr, "%s: PEER peer initialized on port %d\n", time_now_string(), m_port);
|
||||||
|
|
||||||
m_thread.reset(new thread(boost::bind(&peer_server::thread_fun, this)));
|
m_thread.reset(new thread(boost::bind(&peer_server::thread_fun, this)));
|
||||||
}
|
}
|
||||||
|
@ -135,7 +136,7 @@ struct peer_server
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "%s: PEER incoming peer connection\n", aux::time_now_string());
|
fprintf(stderr, "%s: PEER incoming peer connection\n", time_now_string());
|
||||||
++m_peer_requests;
|
++m_peer_requests;
|
||||||
socket.close(ec);
|
socket.close(ec);
|
||||||
}
|
}
|
||||||
|
@ -159,8 +160,8 @@ int num_peer_hits()
|
||||||
|
|
||||||
void stop_peer()
|
void stop_peer()
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: PEER stop_peer()\n", aux::time_now_string());
|
fprintf(stderr, "%s: PEER stop_peer()\n", time_now_string());
|
||||||
g_peer.reset();
|
g_peer.reset();
|
||||||
fprintf(stderr, "%s: PEER stop_peer() done\n", aux::time_now_string());
|
fprintf(stderr, "%s: PEER stop_peer() done\n", time_now_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <boost/make_shared.hpp>
|
#include <boost/make_shared.hpp>
|
||||||
|
|
||||||
#include "test.hpp"
|
#include "test.hpp"
|
||||||
|
#include "test_utils.hpp"
|
||||||
|
|
||||||
#include "libtorrent/assert.hpp"
|
#include "libtorrent/assert.hpp"
|
||||||
#include "libtorrent/alert_types.hpp"
|
#include "libtorrent/alert_types.hpp"
|
||||||
#include "libtorrent/create_torrent.hpp"
|
#include "libtorrent/create_torrent.hpp"
|
||||||
|
@ -156,7 +158,7 @@ alert const* wait_for_alert(lt::session& ses, int type, char const* name)
|
||||||
for (std::vector<alert*>::iterator i = alerts.begin()
|
for (std::vector<alert*>::iterator i = alerts.begin()
|
||||||
, end(alerts.end()); i != end; ++i)
|
, end(alerts.end()); i != end; ++i)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: %s: [%s] %s\n", aux::time_now_string(), name
|
fprintf(stderr, "%s: %s: [%s] %s\n", time_now_string(), name
|
||||||
, (*i)->what(), (*i)->message().c_str());
|
, (*i)->what(), (*i)->message().c_str());
|
||||||
if ((*i)->type() == type)
|
if ((*i)->type() == type)
|
||||||
{
|
{
|
||||||
|
@ -265,14 +267,14 @@ bool print_alerts(lt::session& ses, char const* name
|
||||||
if (predicate && predicate(*i)) ret = true;
|
if (predicate && predicate(*i)) ret = true;
|
||||||
if (peer_disconnected_alert const* p = alert_cast<peer_disconnected_alert>(*i))
|
if (peer_disconnected_alert const* p = alert_cast<peer_disconnected_alert>(*i))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: %s: [%s] (%s): %s\n", aux::time_now_string(), name, (*i)->what(), print_endpoint(p->ip).c_str(), p->message().c_str());
|
fprintf(stderr, "%s: %s: [%s] (%s): %s\n", time_now_string(), name, (*i)->what(), print_endpoint(p->ip).c_str(), p->message().c_str());
|
||||||
}
|
}
|
||||||
else if ((*i)->message() != "block downloading"
|
else if ((*i)->message() != "block downloading"
|
||||||
&& (*i)->message() != "block finished"
|
&& (*i)->message() != "block finished"
|
||||||
&& (*i)->message() != "piece finished"
|
&& (*i)->message() != "piece finished"
|
||||||
&& !no_output)
|
&& !no_output)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: %s: [%s] %s\n", aux::time_now_string(), name, (*i)->what(), (*i)->message().c_str());
|
fprintf(stderr, "%s: %s: [%s] %s\n", time_now_string(), name, (*i)->what(), (*i)->message().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CHECK(alert_cast<fastresume_rejected_alert>(*i) == 0 || allow_failed_fastresume);
|
TEST_CHECK(alert_cast<fastresume_rejected_alert>(*i) == 0 || allow_failed_fastresume);
|
||||||
|
@ -280,7 +282,7 @@ bool print_alerts(lt::session& ses, char const* name
|
||||||
peer_error_alert const* pea = alert_cast<peer_error_alert>(*i);
|
peer_error_alert const* pea = alert_cast<peer_error_alert>(*i);
|
||||||
if (pea)
|
if (pea)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: peer error: %s\n", aux::time_now_string(), pea->error.message().c_str());
|
fprintf(stderr, "%s: peer error: %s\n", time_now_string(), pea->error.message().c_str());
|
||||||
TEST_CHECK((!handles.empty() && h.status().is_seeding)
|
TEST_CHECK((!handles.empty() && h.status().is_seeding)
|
||||||
|| pea->error.message() == "connecting to peer"
|
|| pea->error.message() == "connecting to peer"
|
||||||
|| pea->error.message() == "closing connection to ourself"
|
|| pea->error.message() == "closing connection to ourself"
|
||||||
|
@ -543,13 +545,13 @@ int start_proxy(int proxy_type)
|
||||||
char buf[512];
|
char buf[512];
|
||||||
snprintf(buf, sizeof(buf), "%s --port %d%s", cmd, port, auth);
|
snprintf(buf, sizeof(buf), "%s --port %d%s", cmd, port, auth);
|
||||||
|
|
||||||
fprintf(stderr, "%s starting proxy on port %d (%s %s)...\n", aux::time_now_string(), port, type, auth);
|
fprintf(stderr, "%s starting proxy on port %d (%s %s)...\n", time_now_string(), port, type, auth);
|
||||||
fprintf(stderr, "%s\n", buf);
|
fprintf(stderr, "%s\n", buf);
|
||||||
pid_type r = async_run(buf);
|
pid_type r = async_run(buf);
|
||||||
if (r == 0) exit(1);
|
if (r == 0) exit(1);
|
||||||
proxy_t t = { r, proxy_type };
|
proxy_t t = { r, proxy_type };
|
||||||
running_proxies.insert(std::make_pair(port, t));
|
running_proxies.insert(std::make_pair(port, t));
|
||||||
fprintf(stderr, "%s launched\n", aux::time_now_string());
|
fprintf(stderr, "%s launched\n", time_now_string());
|
||||||
test_sleep(500);
|
test_sleep(500);
|
||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
|
@ -823,7 +825,7 @@ setup_transfer(lt::session* ses1, lt::session* ses2, lt::session* ses3
|
||||||
port = ses2->listen_port();
|
port = ses2->listen_port();
|
||||||
|
|
||||||
fprintf(stderr, "%s: ses1: connecting peer port: %d\n"
|
fprintf(stderr, "%s: ses1: connecting peer port: %d\n"
|
||||||
, aux::time_now_string(), port);
|
, time_now_string(), port);
|
||||||
tor1.connect_peer(tcp::endpoint(address::from_string("127.0.0.1", ec)
|
tor1.connect_peer(tcp::endpoint(address::from_string("127.0.0.1", ec)
|
||||||
, port));
|
, port));
|
||||||
|
|
||||||
|
@ -869,13 +871,13 @@ int start_web_server(bool ssl, bool chunked_encoding, bool keepalive)
|
||||||
snprintf(buf, sizeof(buf), "python ../web_server.py %d %d %d %d"
|
snprintf(buf, sizeof(buf), "python ../web_server.py %d %d %d %d"
|
||||||
, port, chunked_encoding , ssl, keepalive);
|
, port, chunked_encoding , ssl, keepalive);
|
||||||
|
|
||||||
fprintf(stderr, "%s starting web_server on port %d...\n", aux::time_now_string(), port);
|
fprintf(stderr, "%s starting web_server on port %d...\n", time_now_string(), port);
|
||||||
|
|
||||||
fprintf(stderr, "%s\n", buf);
|
fprintf(stderr, "%s\n", buf);
|
||||||
pid_type r = async_run(buf);
|
pid_type r = async_run(buf);
|
||||||
if (r == 0) exit(1);
|
if (r == 0) exit(1);
|
||||||
web_server_pid = r;
|
web_server_pid = r;
|
||||||
fprintf(stderr, "%s launched\n", aux::time_now_string());
|
fprintf(stderr, "%s launched\n", time_now_string());
|
||||||
test_sleep(500);
|
test_sleep(500);
|
||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include "test.hpp"
|
#include "test.hpp"
|
||||||
#include "setup_transfer.hpp"
|
#include "setup_transfer.hpp"
|
||||||
|
#include "test_utils.hpp"
|
||||||
|
|
||||||
#include "libtorrent/socket.hpp"
|
#include "libtorrent/socket.hpp"
|
||||||
#include "libtorrent/io.hpp"
|
#include "libtorrent/io.hpp"
|
||||||
#include "libtorrent/alloca.hpp"
|
#include "libtorrent/alloca.hpp"
|
||||||
|
@ -63,7 +65,7 @@ void log(char const* fmt, ...)
|
||||||
va_end(v);
|
va_end(v);
|
||||||
|
|
||||||
fprintf(stderr, "\x1b[1m\x1b[36m%s: %s\x1b[0m\n"
|
fprintf(stderr, "\x1b[1m\x1b[36m%s: %s\x1b[0m\n"
|
||||||
, aux::time_now_string(), buf);
|
, time_now_string(), buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_session_log(lt::session& ses)
|
void print_session_log(lt::session& ses)
|
||||||
|
|
|
@ -31,11 +31,13 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "test.hpp"
|
#include "test.hpp"
|
||||||
|
#include "setup_transfer.hpp"
|
||||||
|
#include "test_utils.hpp"
|
||||||
|
|
||||||
#include "libtorrent/socket.hpp"
|
#include "libtorrent/socket.hpp"
|
||||||
#include "libtorrent/socket_io.hpp" // print_endpoint
|
#include "libtorrent/socket_io.hpp" // print_endpoint
|
||||||
#include "libtorrent/http_connection.hpp"
|
#include "libtorrent/http_connection.hpp"
|
||||||
#include "libtorrent/resolver.hpp"
|
#include "libtorrent/resolver.hpp"
|
||||||
#include "setup_transfer.hpp"
|
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
@ -55,12 +57,12 @@ char data_buffer[4000];
|
||||||
|
|
||||||
void print_http_header(http_parser const& p)
|
void print_http_header(http_parser const& p)
|
||||||
{
|
{
|
||||||
std::cerr << aux::time_now_string() << " < " << p.status_code() << " " << p.message() << std::endl;
|
std::cerr << time_now_string() << " < " << p.status_code() << " " << p.message() << std::endl;
|
||||||
|
|
||||||
for (std::multimap<std::string, std::string>::const_iterator i
|
for (std::multimap<std::string, std::string>::const_iterator i
|
||||||
= p.headers().begin(), end(p.headers().end()); i != end; ++i)
|
= p.headers().begin(), end(p.headers().end()); i != end; ++i)
|
||||||
{
|
{
|
||||||
std::cerr << aux::time_now_string() << " < " << i->first << ": " << i->second << std::endl;
|
std::cerr << time_now_string() << " < " << i->first << ": " << i->second << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +71,7 @@ void http_connect_handler(http_connection& c)
|
||||||
++connect_handler_called;
|
++connect_handler_called;
|
||||||
TEST_CHECK(c.socket().is_open());
|
TEST_CHECK(c.socket().is_open());
|
||||||
error_code ec;
|
error_code ec;
|
||||||
std::cerr << aux::time_now_string() << " connected to: " << print_endpoint(c.socket().remote_endpoint(ec))
|
std::cerr << time_now_string() << " connected to: " << print_endpoint(c.socket().remote_endpoint(ec))
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
// this is not necessarily true when using a proxy and proxying hostnames
|
// this is not necessarily true when using a proxy and proxying hostnames
|
||||||
// TEST_CHECK(c.socket().remote_endpoint(ec).address() == address::from_string("127.0.0.1", ec));
|
// TEST_CHECK(c.socket().remote_endpoint(ec).address() == address::from_string("127.0.0.1", ec));
|
||||||
|
@ -111,7 +113,7 @@ void run_test(std::string const& url, int size, int status, int connected
|
||||||
|
|
||||||
std::cerr << " ===== TESTING: " << url << " =====" << std::endl;
|
std::cerr << " ===== TESTING: " << url << " =====" << std::endl;
|
||||||
|
|
||||||
std::cerr << aux::time_now_string()
|
std::cerr << time_now_string()
|
||||||
<< " expecting: size: " << size
|
<< " expecting: size: " << size
|
||||||
<< " status: " << status
|
<< " status: " << status
|
||||||
<< " connected: " << connected
|
<< " connected: " << connected
|
||||||
|
@ -124,14 +126,14 @@ void run_test(std::string const& url, int size, int status, int connected
|
||||||
ios.reset();
|
ios.reset();
|
||||||
error_code e;
|
error_code e;
|
||||||
ios.run(e);
|
ios.run(e);
|
||||||
if (e) std::cerr << aux::time_now_string() << " run failed: " << e.message() << std::endl;
|
if (e) std::cerr << time_now_string() << " run failed: " << e.message() << std::endl;
|
||||||
|
|
||||||
std::cerr << aux::time_now_string() << " connect_handler_called: " << connect_handler_called << std::endl;
|
std::cerr << time_now_string() << " connect_handler_called: " << connect_handler_called << std::endl;
|
||||||
std::cerr << aux::time_now_string() << " handler_called: " << handler_called << std::endl;
|
std::cerr << time_now_string() << " handler_called: " << handler_called << std::endl;
|
||||||
std::cerr << aux::time_now_string() << " status: " << http_status << std::endl;
|
std::cerr << time_now_string() << " status: " << http_status << std::endl;
|
||||||
std::cerr << aux::time_now_string() << " size: " << data_size << std::endl;
|
std::cerr << time_now_string() << " size: " << data_size << std::endl;
|
||||||
std::cerr << aux::time_now_string() << " expected-size: " << size << std::endl;
|
std::cerr << time_now_string() << " expected-size: " << size << std::endl;
|
||||||
std::cerr << aux::time_now_string() << " error_code: " << g_error_code.message() << std::endl;
|
std::cerr << time_now_string() << " error_code: " << g_error_code.message() << std::endl;
|
||||||
TEST_CHECK(connect_handler_called == connected);
|
TEST_CHECK(connect_handler_called == connected);
|
||||||
TEST_CHECK(handler_called == 1);
|
TEST_CHECK(handler_called == 1);
|
||||||
TEST_CHECK(data_size == size || size == -1);
|
TEST_CHECK(data_size == size || size == -1);
|
||||||
|
|
|
@ -30,16 +30,18 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "test.hpp"
|
||||||
|
#include "setup_transfer.hpp"
|
||||||
|
#include "test_utils.hpp"
|
||||||
|
#include "test_utils.hpp"
|
||||||
|
|
||||||
#include "libtorrent/session.hpp"
|
#include "libtorrent/session.hpp"
|
||||||
#include "libtorrent/hasher.hpp"
|
#include "libtorrent/hasher.hpp"
|
||||||
#include "libtorrent/thread.hpp"
|
#include "libtorrent/thread.hpp"
|
||||||
#include <boost/tuple/tuple.hpp>
|
|
||||||
|
|
||||||
#include "test.hpp"
|
|
||||||
#include "setup_transfer.hpp"
|
|
||||||
#include "libtorrent/extensions/metadata_transfer.hpp"
|
#include "libtorrent/extensions/metadata_transfer.hpp"
|
||||||
#include "libtorrent/extensions/ut_metadata.hpp"
|
#include "libtorrent/extensions/ut_metadata.hpp"
|
||||||
#include <iostream>
|
|
||||||
|
#include <boost/tuple/tuple.hpp>
|
||||||
|
|
||||||
using boost::tuples::ignore;
|
using boost::tuples::ignore;
|
||||||
|
|
||||||
|
@ -137,7 +139,7 @@ void test_transfer(int flags
|
||||||
error_code ec;
|
error_code ec;
|
||||||
int port = seed->listen_port();
|
int port = seed->listen_port();
|
||||||
fprintf(stderr, "%s: downloader: connecting peer port: %d\n"
|
fprintf(stderr, "%s: downloader: connecting peer port: %d\n"
|
||||||
, aux::time_now_string(), port);
|
, time_now_string(), port);
|
||||||
tor2.connect_peer(tcp::endpoint(address::from_string("127.0.0.1", ec)
|
tor2.connect_peer(tcp::endpoint(address::from_string("127.0.0.1", ec)
|
||||||
, port));
|
, port));
|
||||||
}
|
}
|
||||||
|
@ -146,7 +148,7 @@ void test_transfer(int flags
|
||||||
error_code ec;
|
error_code ec;
|
||||||
int port = downloader->listen_port();
|
int port = downloader->listen_port();
|
||||||
fprintf(stderr, "%s: seed: connecting peer port: %d\n"
|
fprintf(stderr, "%s: seed: connecting peer port: %d\n"
|
||||||
, aux::time_now_string(), port);
|
, time_now_string(), port);
|
||||||
tor1.connect_peer(tcp::endpoint(address::from_string("127.0.0.1", ec)
|
tor1.connect_peer(tcp::endpoint(address::from_string("127.0.0.1", ec)
|
||||||
, port));
|
, port));
|
||||||
}
|
}
|
||||||
|
@ -171,7 +173,7 @@ void test_transfer(int flags
|
||||||
|
|
||||||
if (flags & upload_only) goto done;
|
if (flags & upload_only) goto done;
|
||||||
|
|
||||||
std::cerr << "waiting for transfer to complete\n";
|
fprintf(stderr, "waiting for transfer to complete\n");
|
||||||
|
|
||||||
for (int i = 0; i < timeout * 10; ++i)
|
for (int i = 0; i < timeout * 10; ++i)
|
||||||
{
|
{
|
||||||
|
@ -187,7 +189,7 @@ void test_transfer(int flags
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CHECK(tor2.status().is_seeding);
|
TEST_CHECK(tor2.status().is_seeding);
|
||||||
if (tor2.status().is_seeding) std::cerr << "done\n";
|
if (tor2.status().is_seeding) fprintf(stderr, "done\n");
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "dht_server.hpp"
|
#include "dht_server.hpp"
|
||||||
#include "peer_server.hpp"
|
#include "peer_server.hpp"
|
||||||
#include "udp_tracker.hpp"
|
#include "udp_tracker.hpp"
|
||||||
|
#include "test_utils.hpp"
|
||||||
|
|
||||||
#include "libtorrent/alert.hpp"
|
#include "libtorrent/alert.hpp"
|
||||||
#include "libtorrent/random.hpp"
|
#include "libtorrent/random.hpp"
|
||||||
#include "libtorrent/alert_types.hpp"
|
#include "libtorrent/alert_types.hpp"
|
||||||
|
@ -229,7 +231,7 @@ session_proxy test_proxy(settings_pack::proxy_type_t proxy_type, int flags)
|
||||||
if (flags & expect_http_reject)
|
if (flags & expect_http_reject)
|
||||||
TEST_CHECK(std::find(rejected_trackers.begin(), rejected_trackers.end(), http_tracker_url) != rejected_trackers.end());
|
TEST_CHECK(std::find(rejected_trackers.begin(), rejected_trackers.end(), http_tracker_url) != rejected_trackers.end());
|
||||||
|
|
||||||
fprintf(stderr, "%s: ~session\n", aux::time_now_string());
|
fprintf(stderr, "%s: ~session\n", time_now_string());
|
||||||
session_proxy pr = s->abort();
|
session_proxy pr = s->abort();
|
||||||
delete s;
|
delete s;
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,10 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "test.hpp"
|
||||||
|
#include "setup_transfer.hpp"
|
||||||
|
#include "test_utils.hpp"
|
||||||
|
|
||||||
#include "libtorrent/storage.hpp"
|
#include "libtorrent/storage.hpp"
|
||||||
#include "libtorrent/file_pool.hpp"
|
#include "libtorrent/file_pool.hpp"
|
||||||
#include "libtorrent/hasher.hpp"
|
#include "libtorrent/hasher.hpp"
|
||||||
|
@ -42,8 +46,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <boost/make_shared.hpp>
|
#include <boost/make_shared.hpp>
|
||||||
#include <boost/utility.hpp>
|
#include <boost/utility.hpp>
|
||||||
|
|
||||||
#include "test.hpp"
|
|
||||||
#include "setup_transfer.hpp"
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
|
@ -62,33 +64,33 @@ char* piece3 = page_aligned_allocator::malloc(piece_size);
|
||||||
void signal_bool(bool* b, char const* string)
|
void signal_bool(bool* b, char const* string)
|
||||||
{
|
{
|
||||||
*b = true;
|
*b = true;
|
||||||
std::cerr << aux::time_now_string() << " " << string << std::endl;
|
std::cerr << time_now_string() << " " << string << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_read_piece(int ret, disk_io_job const& j, char const* data, int size)
|
void on_read_piece(int ret, disk_io_job const& j, char const* data, int size)
|
||||||
{
|
{
|
||||||
std::cerr << aux::time_now_string() << " on_read_piece piece: " << j.piece << std::endl;
|
std::cerr << time_now_string() << " on_read_piece piece: " << j.piece << std::endl;
|
||||||
TEST_EQUAL(ret, size);
|
TEST_EQUAL(ret, size);
|
||||||
if (ret > 0) TEST_CHECK(std::equal(j.buffer, j.buffer + ret, data));
|
if (ret > 0) TEST_CHECK(std::equal(j.buffer, j.buffer + ret, data));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_check_resume_data(disk_io_job const* j, bool* done)
|
void on_check_resume_data(disk_io_job const* j, bool* done)
|
||||||
{
|
{
|
||||||
std::cerr << aux::time_now_string() << " on_check_resume_data ret: " << j->ret;
|
std::cerr << time_now_string() << " on_check_resume_data ret: " << j->ret;
|
||||||
switch (j->ret)
|
switch (j->ret)
|
||||||
{
|
{
|
||||||
case piece_manager::no_error:
|
case piece_manager::no_error:
|
||||||
std::cerr << aux::time_now_string() << " success" << std::endl;
|
std::cerr << time_now_string() << " success" << std::endl;
|
||||||
break;
|
break;
|
||||||
case piece_manager::fatal_disk_error:
|
case piece_manager::fatal_disk_error:
|
||||||
std::cerr << aux::time_now_string() << " disk error: " << j->error.ec.message()
|
std::cerr << time_now_string() << " disk error: " << j->error.ec.message()
|
||||||
<< " file: " << j->error.file << std::endl;
|
<< " file: " << j->error.file << std::endl;
|
||||||
break;
|
break;
|
||||||
case piece_manager::need_full_check:
|
case piece_manager::need_full_check:
|
||||||
std::cerr << aux::time_now_string() << " need full check" << std::endl;
|
std::cerr << time_now_string() << " need full check" << std::endl;
|
||||||
break;
|
break;
|
||||||
case piece_manager::disk_check_aborted:
|
case piece_manager::disk_check_aborted:
|
||||||
std::cerr << aux::time_now_string() << " aborted" << std::endl;
|
std::cerr << time_now_string() << " aborted" << std::endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
@ -98,7 +100,7 @@ void on_check_resume_data(disk_io_job const* j, bool* done)
|
||||||
void print_error(char const* call, int ret, storage_error const& ec)
|
void print_error(char const* call, int ret, storage_error const& ec)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: %s() returned: %d error: \"%s\" in file: %d operation: %d\n"
|
fprintf(stderr, "%s: %s() returned: %d error: \"%s\" in file: %d operation: %d\n"
|
||||||
, aux::time_now_string(), call, ret, ec.ec.message().c_str(), ec.file, ec.operation);
|
, time_now_string(), call, ret, ec.ec.message().c_str(), ec.file, ec.operation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void run_until(io_service& ios, bool const& done)
|
void run_until(io_service& ios, bool const& done)
|
||||||
|
@ -113,7 +115,7 @@ void run_until(io_service& ios, bool const& done)
|
||||||
std::cerr << "run_one: " << ec.message().c_str() << std::endl;
|
std::cerr << "run_one: " << ec.message().c_str() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::cerr << aux::time_now_string() << " done: " << done << std::endl;
|
std::cerr << time_now_string() << " done: " << done << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,11 +38,14 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/thread.hpp"
|
#include "libtorrent/thread.hpp"
|
||||||
#include "libtorrent/time.hpp"
|
#include "libtorrent/time.hpp"
|
||||||
#include "libtorrent/file.hpp"
|
#include "libtorrent/file.hpp"
|
||||||
#include <boost/tuple/tuple.hpp>
|
|
||||||
#include <boost/bind.hpp>
|
|
||||||
|
|
||||||
#include "test.hpp"
|
#include "test.hpp"
|
||||||
#include "setup_transfer.hpp"
|
#include "setup_transfer.hpp"
|
||||||
|
#include "test_utils.hpp"
|
||||||
|
|
||||||
|
#include <boost/tuple/tuple.hpp>
|
||||||
|
#include <boost/bind.hpp>
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
@ -306,7 +309,7 @@ void test_transfer(int proxy_type, settings_pack const& sett
|
||||||
|
|
||||||
// at this point we probably disconnected the seed
|
// at this point we probably disconnected the seed
|
||||||
// so we need to reconnect as well
|
// so we need to reconnect as well
|
||||||
fprintf(stderr, "%s: reconnecting peer\n", aux::time_now_string());
|
fprintf(stderr, "%s: reconnecting peer\n", time_now_string());
|
||||||
error_code ec;
|
error_code ec;
|
||||||
tor2.connect_peer(tcp::endpoint(address::from_string("127.0.0.1", ec)
|
tor2.connect_peer(tcp::endpoint(address::from_string("127.0.0.1", ec)
|
||||||
, ses1.listen_port()));
|
, ses1.listen_port()));
|
||||||
|
@ -314,7 +317,7 @@ void test_transfer(int proxy_type, settings_pack const& sett
|
||||||
TEST_CHECK(tor2.status().is_finished == false);
|
TEST_CHECK(tor2.status().is_finished == false);
|
||||||
fprintf(stderr, "disconnects: %d\n", peer_disconnects);
|
fprintf(stderr, "disconnects: %d\n", peer_disconnects);
|
||||||
TEST_CHECK(peer_disconnects >= 2);
|
TEST_CHECK(peer_disconnects >= 2);
|
||||||
fprintf(stderr, "%s: discovered disk full mode. Raise limit and disable upload-mode\n", aux::time_now_string());
|
fprintf(stderr, "%s: discovered disk full mode. Raise limit and disable upload-mode\n", time_now_string());
|
||||||
peer_disconnects = 0;
|
peer_disconnects = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2015, Arvid Norberg
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in
|
||||||
|
the documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the author nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "test_utils.hpp"
|
||||||
|
#include "libtorrent/time.hpp"
|
||||||
|
|
||||||
|
namespace libtorrent
|
||||||
|
{
|
||||||
|
|
||||||
|
char const* time_now_string()
|
||||||
|
{
|
||||||
|
static const time_point start = clock_type::now();
|
||||||
|
static char ret[200];
|
||||||
|
int t = total_milliseconds(clock_type::now() - start);
|
||||||
|
int h = t / 1000 / 60 / 60;
|
||||||
|
t -= h * 60 * 60 * 1000;
|
||||||
|
int m = t / 1000 / 60;
|
||||||
|
t -= m * 60 * 1000;
|
||||||
|
int s = t / 1000;
|
||||||
|
t -= s * 1000;
|
||||||
|
int ms = t;
|
||||||
|
snprintf(ret, sizeof(ret), "%02d:%02d:%02d.%03d", h, m, s, ms);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2015, Arvid Norberg
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in
|
||||||
|
the documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the author nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TEST_UTILS_HPP
|
||||||
|
#define TEST_UTILS_HPP
|
||||||
|
|
||||||
|
#include "test.hpp"
|
||||||
|
|
||||||
|
namespace libtorrent
|
||||||
|
{
|
||||||
|
EXPORT char const* time_now_string();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -41,6 +41,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/io.hpp"
|
#include "libtorrent/io.hpp"
|
||||||
#include "libtorrent/aux_/time.hpp"
|
#include "libtorrent/aux_/time.hpp"
|
||||||
#include "udp_tracker.hpp"
|
#include "udp_tracker.hpp"
|
||||||
|
#include "test_utils.hpp"
|
||||||
|
|
||||||
#include <boost/detail/atomic_count.hpp>
|
#include <boost/detail/atomic_count.hpp>
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
@ -66,17 +67,17 @@ struct udp_tracker
|
||||||
{
|
{
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: UDP tracker, read failed: %s\n", aux::time_now_string(), ec.message().c_str());
|
fprintf(stderr, "%s: UDP tracker, read failed: %s\n", time_now_string(), ec.message().c_str());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bytes_transferred < 16)
|
if (bytes_transferred < 16)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: UDP message too short (from: %s)\n", aux::time_now_string(), print_endpoint(*from).c_str());
|
fprintf(stderr, "%s: UDP message too short (from: %s)\n", time_now_string(), print_endpoint(*from).c_str());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "%s: UDP message %d bytes\n", aux::time_now_string(), int(bytes_transferred));
|
fprintf(stderr, "%s: UDP message %d bytes\n", time_now_string(), int(bytes_transferred));
|
||||||
|
|
||||||
char* ptr = buffer;
|
char* ptr = buffer;
|
||||||
detail::read_uint64(ptr);
|
detail::read_uint64(ptr);
|
||||||
|
@ -89,7 +90,7 @@ struct udp_tracker
|
||||||
{
|
{
|
||||||
case 0: // connect
|
case 0: // connect
|
||||||
|
|
||||||
fprintf(stderr, "%s: UDP connect from %s\n", aux::time_now_string()
|
fprintf(stderr, "%s: UDP connect from %s\n", time_now_string()
|
||||||
, print_endpoint(*from).c_str());
|
, print_endpoint(*from).c_str());
|
||||||
ptr = buffer;
|
ptr = buffer;
|
||||||
detail::write_uint32(0, ptr); // action = connect
|
detail::write_uint32(0, ptr); // action = connect
|
||||||
|
@ -97,15 +98,15 @@ struct udp_tracker
|
||||||
detail::write_uint64(10, ptr); // connection_id
|
detail::write_uint64(10, ptr); // connection_id
|
||||||
m_socket.send_to(asio::buffer(buffer, 16), *from, 0, e);
|
m_socket.send_to(asio::buffer(buffer, 16), *from, 0, e);
|
||||||
if (e) fprintf(stderr, "%s: UDP send_to failed. ERROR: %s\n"
|
if (e) fprintf(stderr, "%s: UDP send_to failed. ERROR: %s\n"
|
||||||
, aux::time_now_string(), e.message().c_str());
|
, time_now_string(), e.message().c_str());
|
||||||
else fprintf(stderr, "%s: UDP sent response to: %s\n"
|
else fprintf(stderr, "%s: UDP sent response to: %s\n"
|
||||||
, aux::time_now_string(), print_endpoint(*from).c_str());
|
, time_now_string(), print_endpoint(*from).c_str());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: // announce
|
case 1: // announce
|
||||||
|
|
||||||
++m_udp_announces;
|
++m_udp_announces;
|
||||||
fprintf(stderr, "%s: UDP announce [%d]\n", aux::time_now_string()
|
fprintf(stderr, "%s: UDP announce [%d]\n", time_now_string()
|
||||||
, int(m_udp_announces));
|
, int(m_udp_announces));
|
||||||
ptr = buffer;
|
ptr = buffer;
|
||||||
detail::write_uint32(1, ptr); // action = announce
|
detail::write_uint32(1, ptr); // action = announce
|
||||||
|
@ -116,16 +117,16 @@ struct udp_tracker
|
||||||
// 0 peers
|
// 0 peers
|
||||||
m_socket.send_to(asio::buffer(buffer, 20), *from, 0, e);
|
m_socket.send_to(asio::buffer(buffer, 20), *from, 0, e);
|
||||||
if (e) fprintf(stderr, "%s: UDP send_to failed. ERROR: %s\n"
|
if (e) fprintf(stderr, "%s: UDP send_to failed. ERROR: %s\n"
|
||||||
, aux::time_now_string(), e.message().c_str());
|
, time_now_string(), e.message().c_str());
|
||||||
else fprintf(stderr, "%s: UDP sent response to: %s\n"
|
else fprintf(stderr, "%s: UDP sent response to: %s\n"
|
||||||
, aux::time_now_string(), print_endpoint(*from).c_str());
|
, time_now_string(), print_endpoint(*from).c_str());
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
// ignore scrapes
|
// ignore scrapes
|
||||||
fprintf(stderr, "%s: UDP scrape (ignored)\n", aux::time_now_string());
|
fprintf(stderr, "%s: UDP scrape (ignored)\n", time_now_string());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "%s: UDP unknown message: %d\n", aux::time_now_string()
|
fprintf(stderr, "%s: UDP unknown message: %d\n", time_now_string()
|
||||||
, action);
|
, action);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -161,7 +162,7 @@ struct udp_tracker
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "%s: UDP tracker initialized on port %d\n", aux::time_now_string(), m_port);
|
fprintf(stderr, "%s: UDP tracker initialized on port %d\n", time_now_string(), m_port);
|
||||||
|
|
||||||
m_thread.reset(new thread(boost::bind(&udp_tracker::thread_fun, this)));
|
m_thread.reset(new thread(boost::bind(&udp_tracker::thread_fun, this)));
|
||||||
}
|
}
|
||||||
|
@ -223,8 +224,8 @@ int num_udp_announces()
|
||||||
|
|
||||||
void stop_udp_tracker()
|
void stop_udp_tracker()
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: UDP stop_udp_tracker()\n", aux::time_now_string());
|
fprintf(stderr, "%s: UDP stop_udp_tracker()\n", time_now_string());
|
||||||
g_udp_tracker.reset();
|
g_udp_tracker.reset();
|
||||||
fprintf(stderr, "%s: UDP stop_udp_tracker() done\n", aux::time_now_string());
|
fprintf(stderr, "%s: UDP stop_udp_tracker() done\n", time_now_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue