using string_view in node::incoming_request and plugin::on_dht_request (#1001)
use string_view in node::incoming_request. changed plugin::on_dht_request to use string_view
This commit is contained in:
parent
2f7adfbb92
commit
f51e782905
|
@ -1,3 +1,4 @@
|
|||
* plugin API changed to handle DHT requests using string_view
|
||||
* removed support for lt_trackers and metadata_transfer extensions
|
||||
(pre-dating ut_metadata)
|
||||
* support windows' CryptoAPI for SHA-1
|
||||
|
|
|
@ -625,7 +625,7 @@ namespace libtorrent
|
|||
, udp::endpoint node) override;
|
||||
#endif
|
||||
|
||||
virtual bool on_dht_request(char const* query, int query_len
|
||||
virtual bool on_dht_request(string_view query
|
||||
, dht::msg const& request, entry& response) override;
|
||||
|
||||
void set_external_address(address const& ip
|
||||
|
@ -1247,6 +1247,4 @@ namespace libtorrent
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -72,7 +72,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
// structures it's parsing.
|
||||
|
||||
#include <string>
|
||||
#include <exception>
|
||||
#include <iterator> // for distance
|
||||
|
||||
#include "libtorrent/config.hpp"
|
||||
|
|
|
@ -46,7 +46,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "libtorrent/aux_/disable_warnings_push.hpp"
|
||||
|
||||
#include <boost/smart_ptr.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
#include <boost/optional.hpp>
|
||||
|
||||
#include "libtorrent/aux_/disable_warnings_pop.hpp"
|
||||
|
|
|
@ -33,7 +33,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifndef TORRENT_ERROR_CODE_HPP_INCLUDED
|
||||
#define TORRENT_ERROR_CODE_HPP_INCLUDED
|
||||
|
||||
#include <boost/version.hpp>
|
||||
#include "libtorrent/config.hpp"
|
||||
#include "libtorrent/string_util.hpp" // for allocate_string_copy
|
||||
|
||||
|
@ -49,10 +48,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
#include "libtorrent/aux_/disable_warnings_pop.hpp"
|
||||
|
||||
#ifndef BOOST_SYSTEM_NOEXCEPT
|
||||
#define BOOST_SYSTEM_NOEXCEPT TORRENT_EXCEPTION_THROW_SPECIFIER
|
||||
#endif
|
||||
|
||||
namespace libtorrent
|
||||
{
|
||||
|
||||
|
@ -572,4 +567,3 @@ namespace boost { namespace system {
|
|||
} }
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -163,6 +163,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "libtorrent/session_handle.hpp"
|
||||
#include "libtorrent/peer_connection_handle.hpp"
|
||||
#include "libtorrent/span.hpp"
|
||||
#include "libtorrent/string_view.hpp"
|
||||
|
||||
namespace libtorrent
|
||||
{
|
||||
|
@ -230,7 +231,7 @@ namespace libtorrent
|
|||
// called when a dht request is received.
|
||||
// If your plugin expects this to be called, make sure to include the flag
|
||||
// ``dht_request_feature`` in the return value from implemented_features().
|
||||
virtual bool on_dht_request(char const* /* query */, int const /* query_len */
|
||||
virtual bool on_dht_request(string_view /* query */
|
||||
, udp::endpoint const& /* source */, bdecode_node const& /* message */
|
||||
, entry& /* response */)
|
||||
{ return false; }
|
||||
|
|
|
@ -75,7 +75,7 @@ namespace libtorrent { namespace dht
|
|||
virtual void outgoing_get_peers(sha1_hash const& target
|
||||
, sha1_hash const& sent_target, udp::endpoint const& ep) = 0;
|
||||
virtual void announce(sha1_hash const& ih, address const& addr, int port) = 0;
|
||||
virtual bool on_dht_request(char const* query, int query_len
|
||||
virtual bool on_dht_request(string_view query
|
||||
, dht::msg const& request, entry& response) = 0;
|
||||
|
||||
protected:
|
||||
|
@ -84,4 +84,3 @@ namespace libtorrent { namespace dht
|
|||
}}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <libtorrent/sha1_hash.hpp>
|
||||
#include <libtorrent/address.hpp>
|
||||
#include <libtorrent/span.hpp>
|
||||
#include <libtorrent/string_view.hpp>
|
||||
|
||||
namespace libtorrent
|
||||
{
|
||||
|
@ -140,7 +141,7 @@ namespace dht
|
|||
//
|
||||
virtual void announce_peer(sha1_hash const& info_hash
|
||||
, tcp::endpoint const& endp
|
||||
, std::string const& name, bool seed) = 0;
|
||||
, string_view name, bool seed) = 0;
|
||||
|
||||
// This function retrieves the immutable item given its target hash.
|
||||
//
|
||||
|
|
|
@ -152,7 +152,7 @@ private:
|
|||
int m_packet_size = 0;
|
||||
|
||||
// keep track of how much of the receive buffer we use, if we're not using
|
||||
// enuogh of it we shrink it
|
||||
// enough of it we shrink it
|
||||
sliding_average<20> m_watermark;
|
||||
|
||||
buffer m_recv_buffer;
|
||||
|
|
|
@ -52,4 +52,3 @@ using string_view = boost::string_view;
|
|||
#include "libtorrent/aux_/disable_warnings_pop.hpp"
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ struct obs : dht::dht_observer
|
|||
void log_packet(message_direction_t /* dir */
|
||||
, char const* /* pkt */, int /* len */
|
||||
, udp::endpoint /* node */) override {}
|
||||
bool on_dht_request(char const* /* query */, int /* query_len */
|
||||
bool on_dht_request(string_view /* query */
|
||||
, dht::msg const& /* request */, entry& /* response */) override
|
||||
{ return false; }
|
||||
};
|
||||
|
@ -207,4 +207,3 @@ TORRENT_TEST(dht_rate_limit)
|
|||
|
||||
#endif // #if !defined TORRENT_DISABLE_EXTENSIONS && !defined TORRENT_DISABLE_DHT
|
||||
}
|
||||
|
||||
|
|
|
@ -43,15 +43,11 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "libtorrent/entry.hpp"
|
||||
#include "libtorrent/hex.hpp"
|
||||
|
||||
namespace
|
||||
{
|
||||
}
|
||||
|
||||
namespace libtorrent
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
TORRENT_EXPORT char const* integer_to_str(char* buf, int size
|
||||
char const* integer_to_str(char* buf, int size
|
||||
, entry::integer_type val)
|
||||
{
|
||||
int sign = 0;
|
||||
|
|
|
@ -274,7 +274,7 @@ namespace
|
|||
|
||||
void announce_peer(sha1_hash const& info_hash
|
||||
, tcp::endpoint const& endp
|
||||
, std::string const& name, bool const seed) override
|
||||
, string_view name, bool const seed) override
|
||||
{
|
||||
table_t::iterator ti = m_map.find(info_hash);
|
||||
torrent_entry* v;
|
||||
|
@ -312,9 +312,7 @@ namespace
|
|||
// for this torrent. Store it.
|
||||
if (!name.empty() && v->name.empty())
|
||||
{
|
||||
std::string tname = name;
|
||||
if (tname.size() > 100) tname.resize(100);
|
||||
v->name = tname;
|
||||
v->name = name.substr(0, 100).to_string();
|
||||
}
|
||||
|
||||
peer_entry peer;
|
||||
|
|
|
@ -837,19 +837,18 @@ void node::incoming_request(msg const& m, entry& e)
|
|||
// mirror back the other node's external port
|
||||
reply["p"] = m.addr.port();
|
||||
|
||||
char const* query = top_level[0].string_ptr();
|
||||
int query_len = top_level[0].string_length();
|
||||
string_view query = top_level[0].string_value();
|
||||
|
||||
if (m_observer && m_observer->on_dht_request(query, query_len, m, e))
|
||||
if (m_observer && m_observer->on_dht_request(query, m, e))
|
||||
return;
|
||||
|
||||
if (query_len == 4 && memcmp(query, "ping", 4) == 0)
|
||||
if (query == "ping")
|
||||
{
|
||||
m_counters.inc_stats_counter(counters::dht_ping_in);
|
||||
// we already have 't' and 'id' in the response
|
||||
// no more left to add
|
||||
}
|
||||
else if (query_len == 9 && memcmp(query, "get_peers", 9) == 0)
|
||||
else if (query == "get_peers")
|
||||
{
|
||||
key_desc_t msg_desc[] = {
|
||||
{"info_hash", bdecode_node::string_t, 20, 0},
|
||||
|
@ -888,7 +887,7 @@ void node::incoming_request(msg const& m, entry& e)
|
|||
}
|
||||
#endif
|
||||
}
|
||||
else if (query_len == 9 && memcmp(query, "find_node", 9) == 0)
|
||||
else if (query == "find_node")
|
||||
{
|
||||
key_desc_t msg_desc[] = {
|
||||
{"target", bdecode_node::string_t, 20, 0},
|
||||
|
@ -907,7 +906,7 @@ void node::incoming_request(msg const& m, entry& e)
|
|||
|
||||
write_nodes_entries(target, msg_keys[1], reply);
|
||||
}
|
||||
else if (query_len == 13 && memcmp(query, "announce_peer", 13) == 0)
|
||||
else if (query == "announce_peer")
|
||||
{
|
||||
key_desc_t msg_desc[] = {
|
||||
{"info_hash", bdecode_node::string_t, 20, 0},
|
||||
|
@ -964,10 +963,9 @@ void node::incoming_request(msg const& m, entry& e)
|
|||
string_view name = msg_keys[3] ? msg_keys[3].string_value() : string_view();
|
||||
bool seed = msg_keys[4] && msg_keys[4].int_value();
|
||||
|
||||
// TODO: 3 should we update the dht storage API to take a string_ref?
|
||||
m_storage.announce_peer(info_hash, addr, name.to_string(), seed);
|
||||
m_storage.announce_peer(info_hash, addr, name, seed);
|
||||
}
|
||||
else if (query_len == 3 && memcmp(query, "put", 3) == 0)
|
||||
else if (query == "put")
|
||||
{
|
||||
// the first 2 entries are for both mutable and
|
||||
// immutable puts
|
||||
|
@ -1104,7 +1102,7 @@ void node::incoming_request(msg const& m, entry& e)
|
|||
|
||||
m_table.node_seen(id, m.addr, 0xffff);
|
||||
}
|
||||
else if (query_len == 3 && memcmp(query, "get", 3) == 0)
|
||||
else if (query == "get")
|
||||
{
|
||||
key_desc_t msg_desc[] = {
|
||||
{"seq", bdecode_node::int_t, 0, key_desc_t::optional},
|
||||
|
|
|
@ -532,10 +532,9 @@ namespace libtorrent
|
|||
peer_plugin const* peer_connection::find_plugin(char const* type)
|
||||
{
|
||||
TORRENT_ASSERT(is_single_thread());
|
||||
for (extension_list_t::iterator i = m_extensions.begin()
|
||||
, end(m_extensions.end()); i != end; ++i)
|
||||
for (auto p : m_extensions)
|
||||
{
|
||||
if (strcmp((*i)->type(), type) == 0) return (*i).get();
|
||||
if (std::strcmp(p->type(), type) == 0) return p.get();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -6617,19 +6617,18 @@ namespace aux {
|
|||
}
|
||||
#endif
|
||||
|
||||
bool session_impl::on_dht_request(char const* query, int query_len
|
||||
bool session_impl::on_dht_request(string_view query
|
||||
, dht::msg const& request, entry& response)
|
||||
{
|
||||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
||||
for (auto& ext : m_ses_extensions[plugins_dht_request_idx])
|
||||
{
|
||||
if (ext->on_dht_request(query, query_len
|
||||
if (ext->on_dht_request(query
|
||||
, request.addr, request.message, response))
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
TORRENT_UNUSED(query);
|
||||
TORRENT_UNUSED(query_len);
|
||||
TORRENT_UNUSED(request);
|
||||
TORRENT_UNUSED(response);
|
||||
#endif
|
||||
|
@ -6949,4 +6948,3 @@ namespace aux {
|
|||
}
|
||||
#endif // TORRENT_DISABLE_LOGGING
|
||||
}}
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ namespace libtorrent
|
|||
|
||||
// the random number
|
||||
while (begin != end)
|
||||
*begin++ = printable[random(sizeof(printable)-2)];
|
||||
*begin++ = printable[random(sizeof(printable) - 2)];
|
||||
}
|
||||
|
||||
char* allocate_string_copy(char const* str)
|
||||
|
@ -353,11 +353,10 @@ namespace libtorrent
|
|||
error_code ec;
|
||||
std::tie(ignore, ignore, hostname, ignore, ignore)
|
||||
= parse_url_components(url, ec);
|
||||
char const* top_domain = strrchr(hostname.c_str(), '.');
|
||||
return top_domain && strcmp(top_domain, ".i2p") == 0;
|
||||
char const* top_domain = std::strrchr(hostname.c_str(), '.');
|
||||
return top_domain && std::strcmp(top_domain, ".i2p") == 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -499,7 +499,7 @@ struct obs : dht::dht_observer
|
|||
void log_packet(message_direction_t dir, char const* pkt, int len
|
||||
, udp::endpoint node) override {}
|
||||
#endif
|
||||
bool on_dht_request(char const* query, int query_len
|
||||
bool on_dht_request(string_view query
|
||||
, dht::msg const& request, entry& response) override { return false; }
|
||||
|
||||
address m_external_address = addr4("236.0.0.1");
|
||||
|
@ -3143,4 +3143,3 @@ TORRENT_TEST(dht)
|
|||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ struct test_plugin : plugin
|
|||
return plugin::dht_request_feature;
|
||||
}
|
||||
|
||||
bool on_dht_request(char const* /* query */, int const /* query_len */
|
||||
bool on_dht_request(string_view /* query */
|
||||
, udp::endpoint const& /* source */, bdecode_node const& message
|
||||
, entry& response) override
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue