improve type safety of plugin interface
This commit is contained in:
parent
bb945f5cf4
commit
87de08cb3d
|
@ -1,3 +1,4 @@
|
|||
* update plugin interface functions for improved type-safety
|
||||
* implemented support magnet URI extension, select specific file indices
|
||||
for download, BEP53
|
||||
* make tracker keys multi-homed. remove set_key() function on session.
|
||||
|
|
|
@ -35,6 +35,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
#include "libtorrent/units.hpp"
|
||||
#include "libtorrent/flags.hpp"
|
||||
#include "libtorrent/peer_info.hpp" // for peer_source_flags_t
|
||||
#include "libtorrent/torrent_status.hpp" // for torrent_status::state_t
|
||||
|
||||
// OVERVIEW
|
||||
//
|
||||
|
@ -276,6 +278,9 @@ namespace libtorrent {
|
|||
virtual void load_state(bdecode_node const&) {}
|
||||
};
|
||||
|
||||
struct add_peer_flags_tag;
|
||||
using add_peer_flags_t = flags::bitfield_flag<std::uint8_t, add_peer_flags_tag>;
|
||||
|
||||
// Torrent plugins are associated with a single torrent and have a number
|
||||
// of functions called at certain events. Many of its functions have the
|
||||
// ability to change or override the default libtorrent behavior.
|
||||
|
@ -306,8 +311,8 @@ namespace libtorrent {
|
|||
// check, respectively. The ``index`` is the piece index that was downloaded.
|
||||
// It is possible to access the list of peers that participated in sending the
|
||||
// piece through the ``torrent`` and the ``piece_picker``.
|
||||
virtual void on_piece_pass(piece_index_t /*index*/) {}
|
||||
virtual void on_piece_failed(piece_index_t /*index*/) {}
|
||||
virtual void on_piece_pass(piece_index_t) {}
|
||||
virtual void on_piece_failed(piece_index_t) {}
|
||||
|
||||
// This hook is called approximately once per second. It is a way of making it
|
||||
// easy for plugins to do timed events, for sending messages or whatever.
|
||||
|
@ -337,19 +342,18 @@ namespace libtorrent {
|
|||
// called when the torrent changes state
|
||||
// the state is one of torrent_status::state_t
|
||||
// enum members
|
||||
virtual void on_state(int /*s*/) {}
|
||||
virtual void on_state(torrent_status::state_t) {}
|
||||
|
||||
// called every time policy::add_peer is called
|
||||
// src is a bitmask of which sources this peer
|
||||
// has been seen from. flags is a bitmask of:
|
||||
|
||||
enum flags_t {
|
||||
// this is the first time we see this peer
|
||||
first_time = 1,
|
||||
// this peer was not added because it was
|
||||
// filtered by the IP filter
|
||||
filtered = 2
|
||||
};
|
||||
// this is the first time we see this peer
|
||||
static constexpr add_peer_flags_t first_time = 1_bit;
|
||||
|
||||
// this peer was not added because it was
|
||||
// filtered by the IP filter
|
||||
static constexpr add_peer_flags_t filtered = 2_bit;
|
||||
|
||||
// called every time a new peer is added to the peer list.
|
||||
// This is before the peer is connected to. For ``flags``, see
|
||||
|
@ -358,7 +362,7 @@ namespace libtorrent {
|
|||
// bitmask, because many sources may have told us about the same
|
||||
// peer. For peer source flags, see peer_info::peer_source_flags.
|
||||
virtual void on_add_peer(tcp::endpoint const&,
|
||||
int /*src*/, int /*flags*/) {}
|
||||
peer_source_flags_t, add_peer_flags_t) {}
|
||||
};
|
||||
|
||||
// peer plugins are associated with a specific peer. A peer could be
|
||||
|
@ -381,7 +385,7 @@ namespace libtorrent {
|
|||
virtual void add_handshake(entry&) {}
|
||||
|
||||
// called when the peer is being disconnected.
|
||||
virtual void on_disconnect(error_code const& /*ec*/) {}
|
||||
virtual void on_disconnect(error_code const&) {}
|
||||
|
||||
// called when the peer is successfully connected. Note that
|
||||
// incoming connections will have been connected by the time
|
||||
|
@ -396,7 +400,7 @@ namespace libtorrent {
|
|||
// Returning false means that the other end doesn't support this extension
|
||||
// and will remove it from the list of plugins. this is not called for web
|
||||
// seeds
|
||||
virtual bool on_handshake(span<char const> /*reserved_bits*/) { return true; }
|
||||
virtual bool on_handshake(span<char const>) { return true; }
|
||||
|
||||
// called when the extension handshake from the other end is received
|
||||
// if this returns false, it means that this extension isn't
|
||||
|
|
|
@ -74,6 +74,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "libtorrent/aux_/vector.hpp"
|
||||
#include "libtorrent/aux_/deferred_handler.hpp"
|
||||
#include "libtorrent/aux_/allocating_handler.hpp"
|
||||
#include "libtorrent/extensions.hpp" // for add_peer_flags_t
|
||||
|
||||
#ifdef TORRENT_USE_OPENSSL
|
||||
// there is no forward declaration header for asio
|
||||
|
@ -369,7 +370,7 @@ namespace libtorrent {
|
|||
void add_extension_fun(std::function<std::shared_ptr<torrent_plugin>(torrent_handle const&, void*)> const& ext
|
||||
, void* userdata);
|
||||
void notify_extension_add_peer(tcp::endpoint const& ip
|
||||
, peer_source_flags_t src, int flags);
|
||||
, peer_source_flags_t src, add_peer_flags_t flags);
|
||||
#endif
|
||||
|
||||
peer_connection* find_lowest_ranking_peer() const;
|
||||
|
|
|
@ -38,6 +38,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "libtorrent/extensions.hpp"
|
||||
#include "libtorrent/aux_/session_impl.hpp"
|
||||
#include "libtorrent/aux_/session_call.hpp"
|
||||
#include "libtorrent/extensions.hpp" // for add_peer_flags_t
|
||||
|
||||
namespace libtorrent {
|
||||
|
||||
|
@ -61,6 +62,11 @@ namespace aux {
|
|||
constexpr torrent_list_index_t session_interface::torrent_checking_auto_managed;
|
||||
}
|
||||
|
||||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
||||
constexpr add_peer_flags_t torrent_plugin::first_time;
|
||||
constexpr add_peer_flags_t torrent_plugin::filtered;
|
||||
#endif
|
||||
|
||||
namespace {
|
||||
|
||||
#if defined TORRENT_ASIO_DEBUGGING
|
||||
|
|
|
@ -10104,7 +10104,10 @@ namespace libtorrent {
|
|||
{
|
||||
state_updated();
|
||||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
||||
notify_extension_add_peer(adr, source, st.first_time_seen ? torrent_plugin::first_time : 0);
|
||||
notify_extension_add_peer(adr, source
|
||||
, st.first_time_seen
|
||||
? torrent_plugin::first_time
|
||||
: add_peer_flags_t{});
|
||||
#endif
|
||||
}
|
||||
else
|
||||
|
@ -10514,18 +10517,18 @@ namespace {
|
|||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
||||
for (auto& ext : m_extensions)
|
||||
{
|
||||
ext->on_state(m_state);
|
||||
ext->on_state(state());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
||||
void torrent::notify_extension_add_peer(tcp::endpoint const& ip
|
||||
, peer_source_flags_t const src, int const flags)
|
||||
, peer_source_flags_t const src, add_peer_flags_t const flags)
|
||||
{
|
||||
for (auto& ext : m_extensions)
|
||||
{
|
||||
ext->on_add_peer(ip, static_cast<std::uint8_t>(src), flags);
|
||||
ext->on_add_peer(ip, src, flags);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue