mirror of
https://github.com/codex-storage/deluge.git
synced 2025-02-17 13:56:47 +00:00
lt sync
This commit is contained in:
parent
77d4fefba9
commit
431664fec4
@ -102,7 +102,9 @@ namespace libtorrent
|
|||||||
int disk_allocations() const
|
int disk_allocations() const
|
||||||
{ return m_allocations; }
|
{ return m_allocations; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void join();
|
||||||
|
|
||||||
// aborts read operations
|
// aborts read operations
|
||||||
void stop(boost::intrusive_ptr<piece_manager> s);
|
void stop(boost::intrusive_ptr<piece_manager> s);
|
||||||
void add_job(disk_io_job const& j
|
void add_job(disk_io_job const& j
|
||||||
|
@ -76,9 +76,9 @@ namespace detail
|
|||||||
template<class Addr>
|
template<class Addr>
|
||||||
Addr zero()
|
Addr zero()
|
||||||
{
|
{
|
||||||
typename Addr::bytes_type zero;
|
Addr zero;
|
||||||
std::fill(zero.begin(), zero.end(), 0);
|
std::fill(zero.begin(), zero.end(), 0);
|
||||||
return Addr(zero);
|
return zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
@ -87,8 +87,8 @@ namespace detail
|
|||||||
template<class Addr>
|
template<class Addr>
|
||||||
Addr plus_one(Addr const& a)
|
Addr plus_one(Addr const& a)
|
||||||
{
|
{
|
||||||
typename Addr::bytes_type tmp(a.to_bytes());
|
Addr tmp(a);
|
||||||
typedef typename Addr::bytes_type::reverse_iterator iter;
|
typedef typename Addr::reverse_iterator iter;
|
||||||
for (iter i = tmp.rbegin()
|
for (iter i = tmp.rbegin()
|
||||||
, end(tmp.rend()); i != end; ++i)
|
, end(tmp.rend()); i != end; ++i)
|
||||||
{
|
{
|
||||||
@ -99,7 +99,7 @@ namespace detail
|
|||||||
}
|
}
|
||||||
*i = 0;
|
*i = 0;
|
||||||
}
|
}
|
||||||
return Addr(tmp);
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline boost::uint16_t plus_one(boost::uint16_t val) { return val + 1; }
|
inline boost::uint16_t plus_one(boost::uint16_t val) { return val + 1; }
|
||||||
@ -107,8 +107,8 @@ namespace detail
|
|||||||
template<class Addr>
|
template<class Addr>
|
||||||
Addr minus_one(Addr const& a)
|
Addr minus_one(Addr const& a)
|
||||||
{
|
{
|
||||||
typename Addr::bytes_type tmp(a.to_bytes());
|
Addr tmp(a);
|
||||||
typedef typename Addr::bytes_type::reverse_iterator iter;
|
typedef typename Addr::reverse_iterator iter;
|
||||||
for (iter i = tmp.rbegin()
|
for (iter i = tmp.rbegin()
|
||||||
, end(tmp.rend()); i != end; ++i)
|
, end(tmp.rend()); i != end; ++i)
|
||||||
{
|
{
|
||||||
@ -119,7 +119,7 @@ namespace detail
|
|||||||
}
|
}
|
||||||
*i = (std::numeric_limits<typename iter::value_type>::max)();
|
*i = (std::numeric_limits<typename iter::value_type>::max)();
|
||||||
}
|
}
|
||||||
return Addr(tmp);
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline boost::uint16_t minus_one(boost::uint16_t val) { return val - 1; }
|
inline boost::uint16_t minus_one(boost::uint16_t val) { return val - 1; }
|
||||||
@ -127,9 +127,9 @@ namespace detail
|
|||||||
template<class Addr>
|
template<class Addr>
|
||||||
Addr max_addr()
|
Addr max_addr()
|
||||||
{
|
{
|
||||||
typename Addr::bytes_type tmp;
|
Addr tmp;
|
||||||
std::fill(tmp.begin(), tmp.end()
|
std::fill(tmp.begin(), tmp.end()
|
||||||
, (std::numeric_limits<typename Addr::bytes_type::value_type>::max)());
|
, (std::numeric_limits<typename Addr::value_type>::max)());
|
||||||
return Addr(tmp);
|
return Addr(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,23 +220,24 @@ namespace detail
|
|||||||
return i->access;
|
return i->access;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ip_range<Addr> > export_filter() const
|
template <class ExternalAddressType>
|
||||||
|
std::vector<ip_range<ExternalAddressType> > export_filter() const
|
||||||
{
|
{
|
||||||
std::vector<ip_range<Addr> > ret;
|
std::vector<ip_range<ExternalAddressType> > ret;
|
||||||
ret.reserve(m_access_list.size());
|
ret.reserve(m_access_list.size());
|
||||||
|
|
||||||
for (typename range_t::const_iterator i = m_access_list.begin()
|
for (typename range_t::const_iterator i = m_access_list.begin()
|
||||||
, end(m_access_list.end()); i != end;)
|
, end(m_access_list.end()); i != end;)
|
||||||
{
|
{
|
||||||
ip_range<Addr> r;
|
ip_range<ExternalAddressType> r;
|
||||||
r.first = i->start;
|
r.first = ExternalAddressType(i->start);
|
||||||
r.flags = i->access;
|
r.flags = i->access;
|
||||||
|
|
||||||
++i;
|
++i;
|
||||||
if (i == end)
|
if (i == end)
|
||||||
r.last = max_addr<Addr>();
|
r.last = ExternalAddressType(max_addr<Addr>());
|
||||||
else
|
else
|
||||||
r.last = minus_one(i->start);
|
r.last = ExternalAddressType(minus_one(i->start));
|
||||||
|
|
||||||
ret.push_back(r);
|
ret.push_back(r);
|
||||||
}
|
}
|
||||||
@ -288,8 +289,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
detail::filter_impl<address_v4> m_filter4;
|
detail::filter_impl<address_v4::bytes_type> m_filter4;
|
||||||
detail::filter_impl<address_v6> m_filter6;
|
detail::filter_impl<address_v6::bytes_type> m_filter6;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TORRENT_EXPORT port_filter
|
class TORRENT_EXPORT port_filter
|
||||||
|
@ -75,6 +75,7 @@ public:
|
|||||||
// it will not be mapped
|
// it will not be mapped
|
||||||
void set_mappings(int tcp, int udp);
|
void set_mappings(int tcp, int udp);
|
||||||
|
|
||||||
|
void discover_device();
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -89,7 +90,6 @@ private:
|
|||||||
void resend_request(asio::error_code const& e);
|
void resend_request(asio::error_code const& e);
|
||||||
void on_reply(udp::endpoint const& from, char* buffer
|
void on_reply(udp::endpoint const& from, char* buffer
|
||||||
, std::size_t bytes_transferred);
|
, std::size_t bytes_transferred);
|
||||||
void discover_device();
|
|
||||||
|
|
||||||
struct rootdevice;
|
struct rootdevice;
|
||||||
|
|
||||||
|
@ -62,12 +62,7 @@ namespace libtorrent
|
|||||||
|
|
||||||
disk_io_thread::~disk_io_thread()
|
disk_io_thread::~disk_io_thread()
|
||||||
{
|
{
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
TORRENT_ASSERT(m_abort == true);
|
||||||
m_abort = true;
|
|
||||||
m_signal.notify_all();
|
|
||||||
l.unlock();
|
|
||||||
|
|
||||||
m_disk_io_thread.join();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
@ -95,6 +90,16 @@ namespace libtorrent
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void disk_io_thread::join()
|
||||||
|
{
|
||||||
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
|
m_abort = true;
|
||||||
|
m_signal.notify_all();
|
||||||
|
l.unlock();
|
||||||
|
|
||||||
|
m_disk_io_thread.join();
|
||||||
|
}
|
||||||
|
|
||||||
// aborts read operations
|
// aborts read operations
|
||||||
void disk_io_thread::stop(boost::intrusive_ptr<piece_manager> s)
|
void disk_io_thread::stop(boost::intrusive_ptr<piece_manager> s)
|
||||||
{
|
{
|
||||||
|
@ -44,12 +44,12 @@ namespace libtorrent
|
|||||||
if (first.is_v4())
|
if (first.is_v4())
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(last.is_v4());
|
TORRENT_ASSERT(last.is_v4());
|
||||||
m_filter4.add_rule(first.to_v4(), last.to_v4(), flags);
|
m_filter4.add_rule(first.to_v4().to_bytes(), last.to_v4().to_bytes(), flags);
|
||||||
}
|
}
|
||||||
else if (first.is_v6())
|
else if (first.is_v6())
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(last.is_v6());
|
TORRENT_ASSERT(last.is_v6());
|
||||||
m_filter6.add_rule(first.to_v6(), last.to_v6(), flags);
|
m_filter6.add_rule(first.to_v6().to_bytes(), last.to_v6().to_bytes(), flags);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
TORRENT_ASSERT(false);
|
TORRENT_ASSERT(false);
|
||||||
@ -58,15 +58,15 @@ namespace libtorrent
|
|||||||
int ip_filter::access(address const& addr) const
|
int ip_filter::access(address const& addr) const
|
||||||
{
|
{
|
||||||
if (addr.is_v4())
|
if (addr.is_v4())
|
||||||
return m_filter4.access(addr.to_v4());
|
return m_filter4.access(addr.to_v4().to_bytes());
|
||||||
TORRENT_ASSERT(addr.is_v6());
|
TORRENT_ASSERT(addr.is_v6());
|
||||||
return m_filter6.access(addr.to_v6());
|
return m_filter6.access(addr.to_v6().to_bytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
ip_filter::filter_tuple_t ip_filter::export_filter() const
|
ip_filter::filter_tuple_t ip_filter::export_filter() const
|
||||||
{
|
{
|
||||||
return boost::make_tuple(m_filter4.export_filter()
|
return boost::make_tuple(m_filter4.export_filter<address_v4>()
|
||||||
, m_filter6.export_filter());
|
, m_filter6.export_filter<address_v6>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void port_filter::add_rule(boost::uint16_t first, boost::uint16_t last, int flags)
|
void port_filter::add_rule(boost::uint16_t first, boost::uint16_t last, int flags)
|
||||||
|
@ -1399,8 +1399,10 @@ namespace libtorrent
|
|||||||
|
|
||||||
if (t->alerts().should_post(alert::fatal))
|
if (t->alerts().should_post(alert::fatal))
|
||||||
{
|
{
|
||||||
std::string err = "torrent paused: disk write error, " + j.str;
|
if (j.str != "write failed: No space left on device"){
|
||||||
t->alerts().post_alert(file_error_alert(t->get_handle(), err));
|
std::string err = "torrent paused: disk write error, " + j.str;
|
||||||
|
t->alerts().post_alert(file_error_alert(t->get_handle(), err));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
t->pause();
|
t->pause();
|
||||||
return;
|
return;
|
||||||
|
@ -533,6 +533,12 @@ namespace libtorrent
|
|||||||
if (i->second.type == peer::not_connectable) continue;
|
if (i->second.type == peer::not_connectable) continue;
|
||||||
if (i->second.seed && finished) continue;
|
if (i->second.seed && finished) continue;
|
||||||
if (i->second.failcount >= max_failcount) continue;
|
if (i->second.failcount >= max_failcount) continue;
|
||||||
|
|
||||||
|
// prefer peers with lower failcount
|
||||||
|
if (candidate != m_peers.end()
|
||||||
|
&& candidate->second.failcount < i->second.failcount)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (now - i->second.connected < seconds(i->second.failcount * min_reconnect_time))
|
if (now - i->second.connected < seconds(i->second.failcount * min_reconnect_time))
|
||||||
continue;
|
continue;
|
||||||
if (ses.m_port_filter.access(i->second.ip.port()) & port_filter::blocked)
|
if (ses.m_port_filter.access(i->second.ip.port()) & port_filter::blocked)
|
||||||
|
@ -2198,6 +2198,11 @@ namespace detail
|
|||||||
#endif
|
#endif
|
||||||
m_checker_thread->join();
|
m_checker_thread->join();
|
||||||
|
|
||||||
|
#if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING)
|
||||||
|
(*m_logger) << time_now_string() << " waiting for disk io thread\n";
|
||||||
|
#endif
|
||||||
|
m_disk_thread.join();
|
||||||
|
|
||||||
TORRENT_ASSERT(m_torrents.empty());
|
TORRENT_ASSERT(m_torrents.empty());
|
||||||
TORRENT_ASSERT(m_connections.empty());
|
TORRENT_ASSERT(m_connections.empty());
|
||||||
#if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING)
|
#if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING)
|
||||||
@ -2347,6 +2352,7 @@ namespace detail
|
|||||||
, bind(&session_impl::on_port_mapping
|
, bind(&session_impl::on_port_mapping
|
||||||
, this, _1, _2, _3));
|
, this, _1, _2, _3));
|
||||||
|
|
||||||
|
m_upnp->discover_device();
|
||||||
m_upnp->set_mappings(m_listen_interface.port(),
|
m_upnp->set_mappings(m_listen_interface.port(),
|
||||||
#ifndef TORRENT_DISABLE_DHT
|
#ifndef TORRENT_DISABLE_DHT
|
||||||
m_dht ? m_dht_settings.service_port :
|
m_dht ? m_dht_settings.service_port :
|
||||||
|
@ -81,7 +81,6 @@ upnp::upnp(io_service& ios, connection_queue& cc
|
|||||||
m_log.open("upnp.log", std::ios::in | std::ios::out | std::ios::trunc);
|
m_log.open("upnp.log", std::ios::in | std::ios::out | std::ios::trunc);
|
||||||
#endif
|
#endif
|
||||||
m_retry_count = 0;
|
m_retry_count = 0;
|
||||||
discover_device();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
upnp::~upnp()
|
upnp::~upnp()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user