merged RC_1_1 into master
This commit is contained in:
commit
29cddaa23e
|
@ -117,6 +117,7 @@ EXTRA_DIST = \
|
|||
Jamfile \
|
||||
Jamroot.jam \
|
||||
CMakeLists.txt \
|
||||
LibtorrentRasterbarConfig.cmake.in \
|
||||
cmake/Modules/FindLibGcrypt.cmake \
|
||||
cmake/Modules/GeneratePkgConfig.cmake \
|
||||
cmake/Modules/ucm_flags.cmake \
|
||||
|
|
|
@ -91,19 +91,19 @@ list dht_stats_routing_table(dht_stats_alert const& a)
|
|||
dict dht_immutable_item(dht_immutable_item_alert const& alert)
|
||||
{
|
||||
dict d;
|
||||
d["key"] = alert.target.to_string();
|
||||
d["value"] = alert.item.to_string();
|
||||
d["key"] = alert.target;
|
||||
d["value"] = bytes(alert.item.to_string());
|
||||
return d;
|
||||
}
|
||||
|
||||
dict dht_mutable_item(dht_mutable_item_alert const& alert)
|
||||
{
|
||||
dict d;
|
||||
d["key"] = std::string(alert.key.data(), alert.key.size());
|
||||
d["value"] = alert.item.to_string();
|
||||
d["signature"] = std::string(alert.signature.data(), alert.signature.size());
|
||||
d["key"] = bytes(alert.key.data(), alert.key.size());
|
||||
d["value"] = bytes(alert.item.to_string());
|
||||
d["signature"] = bytes(alert.signature.data(), alert.signature.size());
|
||||
d["seq"] = alert.seq;
|
||||
d["salt"] = alert.salt;
|
||||
d["salt"] = bytes(alert.salt);
|
||||
d["authoritative"] = alert.authoritative;
|
||||
return d;
|
||||
}
|
||||
|
@ -112,12 +112,12 @@ dict dht_put_item(dht_put_alert const& alert)
|
|||
{
|
||||
dict d;
|
||||
if (alert.target.is_all_zeros()) {
|
||||
d["public_key"] = std::string(alert.public_key.data(), alert.public_key.size());
|
||||
d["signature"] = std::string(alert.signature.data(), alert.signature.size());
|
||||
d["public_key"] = bytes(alert.public_key.data(), alert.public_key.size());
|
||||
d["signature"] = bytes(alert.signature.data(), alert.signature.size());
|
||||
d["seq"] = alert.seq;
|
||||
d["salt"] = alert.salt;
|
||||
d["salt"] = bytes(alert.salt);
|
||||
} else {
|
||||
d["target"] = alert.target.to_string();
|
||||
d["target"] = alert.target;
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
struct bytes
|
||||
{
|
||||
bytes(char const* s, int len): arr(s, len) {}
|
||||
bytes(char const* s, std::size_t len): arr(s, len) {}
|
||||
bytes(std::string const& s): arr(s) {}
|
||||
bytes(std::string&& s): arr(std::move(s)) {}
|
||||
bytes(bytes const&) = default;
|
||||
|
|
|
@ -34,6 +34,8 @@ overviews = {}
|
|||
# maps names -> URL
|
||||
symbols = {}
|
||||
|
||||
global orphaned_export
|
||||
|
||||
# some files that need pre-processing to turn symbols into
|
||||
# links into the reference documentation
|
||||
preprocess_rst = \
|
||||
|
@ -283,6 +285,9 @@ def parse_function(lno, lines, filename):
|
|||
end_paren = 0
|
||||
signature = ''
|
||||
|
||||
global orphaned_export
|
||||
orphaned_export = False
|
||||
|
||||
while lno < len(lines):
|
||||
line = lines[lno].strip()
|
||||
lno += 1
|
||||
|
@ -358,6 +363,9 @@ def parse_class(lno, lines, filename):
|
|||
|
||||
name = decl.split(':')[0].replace('class ', '').replace('struct ', '').replace('final', '').strip()
|
||||
|
||||
global orphaned_export
|
||||
orphaned_export = False
|
||||
|
||||
while lno < len(lines):
|
||||
line = lines[lno].strip()
|
||||
lno += 1
|
||||
|
@ -695,8 +703,16 @@ for filename in files:
|
|||
|
||||
blanks = 0
|
||||
lno = 0
|
||||
global orphaned_export
|
||||
orphaned_export = False
|
||||
|
||||
while lno < len(lines):
|
||||
line = lines[lno].strip()
|
||||
|
||||
if orphaned_export:
|
||||
print('ERROR: TORRENT_EXPORT without function or class!\n%s:%d\n%s' % (filename, lno, line))
|
||||
sys.exit(1)
|
||||
|
||||
lno += 1
|
||||
|
||||
if line == '':
|
||||
|
@ -704,6 +720,18 @@ for filename in files:
|
|||
context = ''
|
||||
continue
|
||||
|
||||
if 'TORRENT_EXPORT' in line.split() \
|
||||
and 'ifndef TORRENT_EXPORT' not in line \
|
||||
and 'define TORRENT_DEPRECATED_EXPORT TORRENT_EXPORT' not in line \
|
||||
and 'define TORRENT_EXPORT' not in line \
|
||||
and 'for TORRENT_EXPORT' not in line \
|
||||
and 'TORRENT_EXPORT TORRENT_CFG' not in line \
|
||||
and 'extern TORRENT_EXPORT ' not in line \
|
||||
and 'struct TORRENT_EXPORT ' not in line:
|
||||
orphaned_export = True
|
||||
if verbose:
|
||||
print('maybe orphaned: %s\n' % line)
|
||||
|
||||
if line.startswith('//') and line[2:].strip() == 'OVERVIEW':
|
||||
# this is a section overview
|
||||
current_overview = ''
|
||||
|
|
|
@ -497,7 +497,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#endif
|
||||
|
||||
#if !defined(TORRENT_READ_HANDLER_MAX_SIZE)
|
||||
# ifdef _GLIBCXX_DEBUG
|
||||
# if defined _GLIBCXX_DEBUG || !defined NDEBUG
|
||||
constexpr std::size_t TORRENT_READ_HANDLER_MAX_SIZE = 400;
|
||||
# else
|
||||
// if this is not divisible by 8, we're wasting space
|
||||
|
@ -506,7 +506,7 @@ constexpr std::size_t TORRENT_READ_HANDLER_MAX_SIZE = 342;
|
|||
#endif
|
||||
|
||||
#if !defined(TORRENT_WRITE_HANDLER_MAX_SIZE)
|
||||
# ifdef _GLIBCXX_DEBUG
|
||||
# if defined _GLIBCXX_DEBUG || !defined NDEBUG
|
||||
constexpr std::size_t TORRENT_WRITE_HANDLER_MAX_SIZE = 400;
|
||||
# else
|
||||
// if this is not divisible by 8, we're wasting space
|
||||
|
|
|
@ -236,8 +236,8 @@ namespace libtorrent { namespace dht {
|
|||
using dht_storage_constructor_type
|
||||
= std::function<std::unique_ptr<dht_storage_interface>(dht_settings const& settings)>;
|
||||
|
||||
TORRENT_EXPORT std::unique_ptr<dht_storage_interface>
|
||||
dht_default_storage_constructor(dht_settings const& settings);
|
||||
TORRENT_EXPORT std::unique_ptr<dht_storage_interface> dht_default_storage_constructor(
|
||||
dht_settings const& settings);
|
||||
|
||||
} } // namespace libtorrent::dht
|
||||
|
||||
|
|
|
@ -1046,7 +1046,7 @@ namespace aux {
|
|||
#endif
|
||||
|
||||
#ifdef TORRENT_USE_OPENSSL
|
||||
bool const use_ssl = req.ssl_ctx != nullptr;
|
||||
bool const use_ssl = req.ssl_ctx != nullptr && req.ssl_ctx != &m_ssl_ctx;
|
||||
if (!use_ssl) req.ssl_ctx = &m_ssl_ctx;
|
||||
#endif
|
||||
|
||||
|
|
|
@ -139,16 +139,7 @@ enum
|
|||
|
||||
// if a packet receives more than this number of
|
||||
// duplicate acks, we'll trigger a fast re-send
|
||||
dup_ack_limit = 3,
|
||||
|
||||
// the max number of packets to fast-resend per
|
||||
// selective ack message
|
||||
// only re-sending a single packet per sack
|
||||
// appears to improve performance by making it
|
||||
// less likely to loose the re-sent packet. Because
|
||||
// when that happens, we must time-out in order
|
||||
// to continue, which takes a long time.
|
||||
sack_resend_limit = 1
|
||||
dup_ack_limit = 3
|
||||
};
|
||||
|
||||
// compare if lhs is less than rhs, taking wrapping
|
||||
|
@ -1543,15 +1534,21 @@ std::pair<std::uint32_t, int> utp_socket_impl::parse_sack(std::uint16_t const pa
|
|||
{
|
||||
experienced_loss(m_fast_resend_seq_nr);
|
||||
int num_resent = 0;
|
||||
while (m_fast_resend_seq_nr != last_ack)
|
||||
|
||||
// only re-sending a single packet per sack
|
||||
// appears to improve performance by making it
|
||||
// less likely to loose the re-sent packet. Because
|
||||
// when that happens, we must time-out in order
|
||||
// to continue, which takes a long time.
|
||||
if (m_fast_resend_seq_nr != last_ack)
|
||||
{
|
||||
packet* p = m_outbuf.at(m_fast_resend_seq_nr);
|
||||
m_fast_resend_seq_nr = (m_fast_resend_seq_nr + 1) & ACK_MASK;
|
||||
if (!p) continue;
|
||||
++num_resent;
|
||||
if (!resend_packet(p, true)) break;
|
||||
m_duplicate_acks = 0;
|
||||
if (num_resent >= sack_resend_limit) break;
|
||||
if (p)
|
||||
{
|
||||
++num_resent;
|
||||
if (resend_packet(p, true)) m_duplicate_acks = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2876,13 +2873,6 @@ bool utp_socket_impl::incoming_packet(span<std::uint8_t const> buf
|
|||
}
|
||||
std::uint8_t const next_extension = *ptr++;
|
||||
int const len = *ptr++;
|
||||
if (len < 0)
|
||||
{
|
||||
UTP_LOGV("%8p: invalid extension length:%d packet:%d\n"
|
||||
, static_cast<void*>(this), len, int(ptr - buf.data()));
|
||||
m_sm.inc_stats_counter(counters::utp_invalid_pkts_in);
|
||||
return true;
|
||||
}
|
||||
if (ptr - buf.data() + len > size)
|
||||
{
|
||||
UTP_LOG("%8p: ERROR: invalid extension header size:%d packet:%d\n"
|
||||
|
|
Loading…
Reference in New Issue