merged RC_1_1 into master

This commit is contained in:
arvidn 2018-03-21 11:14:25 +01:00
commit 8a85e1c01a
4 changed files with 36 additions and 2 deletions

View File

@ -82,6 +82,7 @@
* resume data no longer has timestamps of files
* require C++11 to build libtorrent
* expose post_dht_stats() to python binding
* fix backwards compatibility to downloads without partfiles
* improve part-file related error messages
* fix reporting &redundant= in tracker announces

View File

@ -922,6 +922,7 @@ void bind_session()
.def("outgoing_ports", &outgoing_ports)
#endif
.def("post_torrent_updates", allow_threads(&lt::session::post_torrent_updates), arg("flags") = 0xffffffff)
.def("post_dht_stats", allow_threads(&lt::session::post_dht_stats))
.def("post_session_stats", allow_threads(&lt::session::post_session_stats))
.def("is_listening", allow_threads(&lt::session::is_listening))
.def("listen_port", allow_threads(&lt::session::listen_port))

View File

@ -520,6 +520,22 @@ class test_session(unittest.TestCase):
self.assertTrue(isinstance(a.values, dict))
self.assertTrue(len(a.values) > 0)
def test_post_dht_stats(self):
s = lt.session({'alert_mask': lt.alert.category_t.stats_notification, 'enable_dht': False})
s.post_dht_stats()
alerts = []
# first the stats headers log line. but not if logging is disabled
time.sleep(1)
alerts = s.pop_alerts()
a = alerts.pop(0)
while not isinstance(a, lt.dht_stats_alert):
a = alerts.pop(0
)
self.assertTrue(isinstance(a, lt.dht_stats_alert))
self.assertTrue(isinstance(a.active_requests, list))
self.assertTrue(isinstance(a.routing_table, list))
def test_unknown_settings(self):
try:
s = lt.session({'unexpected-key-name': 42})

View File

@ -242,6 +242,8 @@ struct utp_socket_impl
, m_stalled(false)
, m_confirmed(false)
{
TORRENT_ASSERT((m_recv_id == ((m_send_id + 1) & 0xffff))
|| (m_send_id == ((m_recv_id + 1) & 0xffff)));
m_sm.inc_stats_counter(counters::num_utp_idle);
TORRENT_ASSERT(m_userdata);
m_delay_sample_hist.fill(std::numeric_limits<std::uint32_t>::max());
@ -2605,9 +2607,16 @@ bool utp_socket_impl::incoming_packet(span<std::uint8_t const> buf
INVARIANT_CHECK;
auto const* ph = reinterpret_cast<utp_header const*>(buf.data());
m_sm.inc_stats_counter(counters::utp_packets_in);
if (buf.size() < sizeof(utp_header))
{
UTP_LOG("%8p: ERROR: incoming packet size too small:%d (ignored)\n"
, static_cast<void*>(this), int(buf.size()));
m_sm.inc_stats_counter(counters::utp_invalid_pkts_in);
return false;
}
if (ph->get_version() != 1)
{
UTP_LOG("%8p: ERROR: incoming packet version:%d (ignored)\n"
@ -3001,7 +3010,14 @@ bool utp_socket_impl::incoming_packet(span<std::uint8_t const> buf
UTP_LOGV("%8p: received ST_SYN state:%s seq_nr:%d ack_nr:%d\n"
, static_cast<void*>(this), socket_state_names[m_state], m_seq_nr, m_ack_nr);
#endif
TORRENT_ASSERT(m_send_id == ph->connection_id);
if (m_send_id != ph->connection_id)
{
#if TORRENT_UTP_LOG
UTP_LOGV("%8p: received invalid connection_id:%d expected: %d\n"
, static_cast<void*>(this), int(ph->connection_id), int(m_send_id));
#endif
return false;
}
TORRENT_ASSERT(m_recv_id == ((m_send_id + 1) & 0xffff));
defer_ack();