factor out generate_peer_id into its own file
This commit is contained in:
parent
a1f2995716
commit
4282dd072a
|
@ -288,6 +288,7 @@ set(sources
|
||||||
error_code
|
error_code
|
||||||
file_storage
|
file_storage
|
||||||
file_progress
|
file_progress
|
||||||
|
generate_peer_id
|
||||||
lazy_bdecode
|
lazy_bdecode
|
||||||
escape_string
|
escape_string
|
||||||
string_util
|
string_util
|
||||||
|
|
1
Jamfile
1
Jamfile
|
@ -737,6 +737,7 @@ SOURCES =
|
||||||
add_torrent_params
|
add_torrent_params
|
||||||
peer_info
|
peer_info
|
||||||
stack_allocator
|
stack_allocator
|
||||||
|
generate_peer_id
|
||||||
|
|
||||||
# -- extensions --
|
# -- extensions --
|
||||||
ut_pex
|
ut_pex
|
||||||
|
|
|
@ -175,6 +175,7 @@ nobase_include_HEADERS = \
|
||||||
aux_/deque.hpp \
|
aux_/deque.hpp \
|
||||||
aux_/escape_string.hpp \
|
aux_/escape_string.hpp \
|
||||||
aux_/export.hpp \
|
aux_/export.hpp \
|
||||||
|
aux_/generate_peer_id.hpp \
|
||||||
aux_/io.hpp \
|
aux_/io.hpp \
|
||||||
aux_/listen_socket_handle.hpp \
|
aux_/listen_socket_handle.hpp \
|
||||||
aux_/max_path.hpp \
|
aux_/max_path.hpp \
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2003-2018, 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 TORRENT_GENERATE_PEER_ID_HPP_INCLUDED
|
||||||
|
#define TORRENT_GENERATE_PEER_ID_HPP_INCLUDED
|
||||||
|
|
||||||
|
#include "libtorrent/peer_id.hpp"
|
||||||
|
#include "libtorrent/aux_/export.hpp"
|
||||||
|
|
||||||
|
namespace libtorrent { namespace aux {
|
||||||
|
|
||||||
|
struct session_settings;
|
||||||
|
|
||||||
|
TORRENT_EXTRA_EXPORT peer_id generate_peer_id(session_settings const& sett);
|
||||||
|
|
||||||
|
}}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -104,8 +104,6 @@ namespace libtorrent {
|
||||||
struct tracker_request;
|
struct tracker_request;
|
||||||
class bt_peer_connection;
|
class bt_peer_connection;
|
||||||
|
|
||||||
peer_id generate_peer_id(aux::session_settings const& sett);
|
|
||||||
|
|
||||||
enum class waste_reason
|
enum class waste_reason
|
||||||
{
|
{
|
||||||
piece_timed_out, piece_cancelled, piece_unknown, piece_seed
|
piece_timed_out, piece_cancelled, piece_unknown, piece_seed
|
||||||
|
|
|
@ -80,6 +80,7 @@ libtorrent_rasterbar_la_SOURCES = \
|
||||||
file_pool.cpp \
|
file_pool.cpp \
|
||||||
file_storage.cpp \
|
file_storage.cpp \
|
||||||
fingerprint.cpp \
|
fingerprint.cpp \
|
||||||
|
generate_peer_id.cpp \
|
||||||
gzip.cpp \
|
gzip.cpp \
|
||||||
hasher.cpp \
|
hasher.cpp \
|
||||||
hex.cpp \
|
hex.cpp \
|
||||||
|
|
|
@ -62,6 +62,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/performance_counters.hpp" // for counters
|
#include "libtorrent/performance_counters.hpp" // for counters
|
||||||
#include "libtorrent/alert_manager.hpp" // for alert_manager
|
#include "libtorrent/alert_manager.hpp" // for alert_manager
|
||||||
#include "libtorrent/string_util.hpp" // for search
|
#include "libtorrent/string_util.hpp" // for search
|
||||||
|
#include "libtorrent/aux_/generate_peer_id.hpp"
|
||||||
|
|
||||||
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
|
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
|
||||||
#include "libtorrent/pe_crypto.hpp"
|
#include "libtorrent/pe_crypto.hpp"
|
||||||
|
@ -154,7 +155,7 @@ namespace {
|
||||||
, m_rc4_encrypted(false)
|
, m_rc4_encrypted(false)
|
||||||
, m_recv_buffer(peer_connection::m_recv_buffer)
|
, m_recv_buffer(peer_connection::m_recv_buffer)
|
||||||
#endif
|
#endif
|
||||||
, m_our_peer_id(generate_peer_id(*pack.sett))
|
, m_our_peer_id(aux::generate_peer_id(*pack.sett))
|
||||||
{
|
{
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
peer_log(peer_log_alert::info, "CONSTRUCT", "bt_peer_connection");
|
peer_log(peer_log_alert::info, "CONSTRUCT", "bt_peer_connection");
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2003-2018, 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 "libtorrent/aux_/generate_peer_id.hpp"
|
||||||
|
#include "libtorrent/aux_/session_settings.hpp"
|
||||||
|
#include "libtorrent/peer_id.hpp"
|
||||||
|
#include "libtorrent/string_util.hpp" // for url_random
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace libtorrent { namespace aux {
|
||||||
|
|
||||||
|
peer_id generate_peer_id(session_settings const& sett)
|
||||||
|
{
|
||||||
|
peer_id ret;
|
||||||
|
std::string print = sett.get_str(settings_pack::peer_fingerprint);
|
||||||
|
if (print.size() > ret.size()) print.resize(ret.size());
|
||||||
|
|
||||||
|
// the client's fingerprint
|
||||||
|
std::copy(print.begin(), print.end(), ret.begin());
|
||||||
|
if (print.length() < ret.size())
|
||||||
|
url_random(span<char>(ret).subspan(print.length()));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
}}
|
|
@ -88,6 +88,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/hex.hpp" // to_hex, from_hex
|
#include "libtorrent/hex.hpp" // to_hex, from_hex
|
||||||
#include "libtorrent/aux_/scope_end.hpp"
|
#include "libtorrent/aux_/scope_end.hpp"
|
||||||
#include "libtorrent/aux_/set_socket_buffer.hpp"
|
#include "libtorrent/aux_/set_socket_buffer.hpp"
|
||||||
|
#include "libtorrent/aux_/generate_peer_id.hpp"
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
|
|
||||||
|
@ -3002,7 +3003,7 @@ namespace aux {
|
||||||
#if TORRENT_ABI_VERSION == 1
|
#if TORRENT_ABI_VERSION == 1
|
||||||
peer_id session_impl::deprecated_get_peer_id() const
|
peer_id session_impl::deprecated_get_peer_id() const
|
||||||
{
|
{
|
||||||
return generate_peer_id(m_settings);
|
return aux::generate_peer_id(m_settings);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -100,6 +100,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/aux_/numeric_cast.hpp"
|
#include "libtorrent/aux_/numeric_cast.hpp"
|
||||||
#include "libtorrent/aux_/path.hpp"
|
#include "libtorrent/aux_/path.hpp"
|
||||||
#include "libtorrent/aux_/set_socket_buffer.hpp"
|
#include "libtorrent/aux_/set_socket_buffer.hpp"
|
||||||
|
#include "libtorrent/aux_/generate_peer_id.hpp"
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
#include "libtorrent/aux_/session_impl.hpp" // for tracker_logger
|
#include "libtorrent/aux_/session_impl.hpp" // for tracker_logger
|
||||||
|
@ -147,19 +148,6 @@ bool is_downloading_state(int const st)
|
||||||
peer_info.web_seed = true;
|
peer_info.web_seed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
peer_id generate_peer_id(aux::session_settings const& sett)
|
|
||||||
{
|
|
||||||
peer_id ret;
|
|
||||||
std::string print = sett.get_str(settings_pack::peer_fingerprint);
|
|
||||||
if (print.size() > ret.size()) print.resize(ret.size());
|
|
||||||
|
|
||||||
// the client's fingerprint
|
|
||||||
std::copy(print.begin(), print.end(), ret.begin());
|
|
||||||
if (print.length() < ret.size())
|
|
||||||
url_random(span<char>(ret).subspan(print.length()));
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
torrent_hot_members::torrent_hot_members(aux::session_interface& ses
|
torrent_hot_members::torrent_hot_members(aux::session_interface& ses
|
||||||
, add_torrent_params const& p, bool const session_paused)
|
, add_torrent_params const& p, bool const session_paused)
|
||||||
: m_ses(ses)
|
: m_ses(ses)
|
||||||
|
@ -200,7 +188,7 @@ bool is_downloading_state(int const st)
|
||||||
, m_info_hash(p.info_hash)
|
, m_info_hash(p.info_hash)
|
||||||
, m_error_file(torrent_status::error_file_none)
|
, m_error_file(torrent_status::error_file_none)
|
||||||
, m_sequence_number(-1)
|
, m_sequence_number(-1)
|
||||||
, m_peer_id(generate_peer_id(settings()))
|
, m_peer_id(aux::generate_peer_id(settings()))
|
||||||
, m_announce_to_trackers(!(p.flags & torrent_flags::paused))
|
, m_announce_to_trackers(!(p.flags & torrent_flags::paused))
|
||||||
, m_announce_to_lsd(!(p.flags & torrent_flags::paused))
|
, m_announce_to_lsd(!(p.flags & torrent_flags::paused))
|
||||||
, m_has_incoming(false)
|
, m_has_incoming(false)
|
||||||
|
|
|
@ -139,6 +139,7 @@ test-suite libtorrent :
|
||||||
test_linked_list.cpp
|
test_linked_list.cpp
|
||||||
test_stack_allocator.cpp
|
test_stack_allocator.cpp
|
||||||
test_file_progress.cpp
|
test_file_progress.cpp
|
||||||
|
test_generate_peer_id.cpp
|
||||||
test_alloca.cpp ]
|
test_alloca.cpp ]
|
||||||
|
|
||||||
[ run test_listen_socket.cpp
|
[ run test_listen_socket.cpp
|
||||||
|
@ -156,9 +157,7 @@ test-suite libtorrent :
|
||||||
<crypto>openssl:<library>/torrent//crypto
|
<crypto>openssl:<library>/torrent//crypto
|
||||||
]
|
]
|
||||||
|
|
||||||
[ run test_string.cpp
|
[ run test_string.cpp test_utf8.cpp ]
|
||||||
test_utf8.cpp
|
|
||||||
]
|
|
||||||
|
|
||||||
[ run test_sha1_hash.cpp ]
|
[ run test_sha1_hash.cpp ]
|
||||||
[ run test_span.cpp ]
|
[ run test_span.cpp ]
|
||||||
|
|
|
@ -199,7 +199,8 @@ test_primitives_SOURCES = \
|
||||||
test_fence.cpp \
|
test_fence.cpp \
|
||||||
test_dos_blocker.cpp \
|
test_dos_blocker.cpp \
|
||||||
test_upnp.cpp \
|
test_upnp.cpp \
|
||||||
test_flags.cpp
|
test_flags.cpp \
|
||||||
|
test_generate_peer_id.cpp
|
||||||
|
|
||||||
test_recheck_SOURCES = test_recheck.cpp
|
test_recheck_SOURCES = test_recheck.cpp
|
||||||
test_stat_cache_SOURCES = test_stat_cache.cpp
|
test_stat_cache_SOURCES = test_stat_cache.cpp
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2018, 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.hpp"
|
||||||
|
#include "libtorrent/aux_/generate_peer_id.hpp"
|
||||||
|
#include "libtorrent/aux_/session_settings.hpp"
|
||||||
|
#include "libtorrent/aux_/escape_string.hpp"
|
||||||
|
#include "libtorrent/settings_pack.hpp"
|
||||||
|
|
||||||
|
TORRENT_TEST(generate_peer_id)
|
||||||
|
{
|
||||||
|
lt::aux::session_settings sett;
|
||||||
|
sett.set_str(lt::settings_pack::peer_fingerprint, "abc");
|
||||||
|
lt::peer_id const id = lt::aux::generate_peer_id(sett);
|
||||||
|
|
||||||
|
TEST_CHECK(std::equal(id.begin(), id.begin() + 3, "abc"));
|
||||||
|
TEST_CHECK(!lt::need_encoding(id.data(), int(id.size())));
|
||||||
|
}
|
||||||
|
|
||||||
|
TORRENT_TEST(generate_peer_id_truncate)
|
||||||
|
{
|
||||||
|
lt::aux::session_settings sett;
|
||||||
|
sett.set_str(lt::settings_pack::peer_fingerprint, "abcdefghijklmnopqrstuvwxyz");
|
||||||
|
lt::peer_id const id = lt::aux::generate_peer_id(sett);
|
||||||
|
|
||||||
|
TEST_CHECK(std::equal(id.begin(), id.end(), "abcdefghijklmnopqrst"));
|
||||||
|
}
|
Loading…
Reference in New Issue