forked from premiere/premiere-libtorrent
refactor for more modern struct initialization and use of api
This commit is contained in:
parent
ca07ee83a3
commit
a05f0ba8a4
|
@ -174,8 +174,7 @@ TORRENT_EXPORT void print_backtrace(char* out, int len, int max_depth
|
||||||
int size = 0;
|
int size = 0;
|
||||||
std::array<void*, 50> stack;
|
std::array<void*, 50> stack;
|
||||||
|
|
||||||
STACKFRAME64 stack_frame;
|
STACKFRAME64 stack_frame = {};
|
||||||
memset(&stack_frame, 0, sizeof(stack_frame));
|
|
||||||
#if defined(_WIN64)
|
#if defined(_WIN64)
|
||||||
int const machine_type = IMAGE_FILE_MACHINE_AMD64;
|
int const machine_type = IMAGE_FILE_MACHINE_AMD64;
|
||||||
stack_frame.AddrPC.Offset = context_record.Rip;
|
stack_frame.AddrPC.Offset = context_record.Rip;
|
||||||
|
|
|
@ -697,8 +697,7 @@ namespace libtorrent
|
||||||
// we push it into the stack so that we know where to fill
|
// we push it into the stack so that we know where to fill
|
||||||
// in the next_node field once we pop this node off the stack.
|
// in the next_node field once we pop this node off the stack.
|
||||||
// i.e. get to the node following the dictionary in the buffer
|
// i.e. get to the node following the dictionary in the buffer
|
||||||
ret.m_tokens.push_back(bdecode_token(start - orig_start
|
ret.m_tokens.push_back({start - orig_start, bdecode_token::dict});
|
||||||
, bdecode_token::dict));
|
|
||||||
++start;
|
++start;
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
|
@ -706,8 +705,7 @@ namespace libtorrent
|
||||||
// we push it into the stack so that we know where to fill
|
// we push it into the stack so that we know where to fill
|
||||||
// in the next_node field once we pop this node off the stack.
|
// in the next_node field once we pop this node off the stack.
|
||||||
// i.e. get to the node following the list in the buffer
|
// i.e. get to the node following the list in the buffer
|
||||||
ret.m_tokens.push_back(bdecode_token(start - orig_start
|
ret.m_tokens.push_back({start - orig_start, bdecode_token::list});
|
||||||
, bdecode_token::list));
|
|
||||||
++start;
|
++start;
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
|
@ -725,8 +723,8 @@ namespace libtorrent
|
||||||
start = int_start;
|
start = int_start;
|
||||||
TORRENT_FAIL_BDECODE(e);
|
TORRENT_FAIL_BDECODE(e);
|
||||||
}
|
}
|
||||||
ret.m_tokens.push_back(bdecode_token(int_start - orig_start
|
ret.m_tokens.push_back({int_start - orig_start
|
||||||
, 1, bdecode_token::integer, 1));
|
, 1, bdecode_token::integer, 1});
|
||||||
TORRENT_ASSERT(*start == 'e');
|
TORRENT_ASSERT(*start == 'e');
|
||||||
|
|
||||||
// skip 'e'
|
// skip 'e'
|
||||||
|
@ -749,8 +747,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
|
|
||||||
// insert the end-of-sequence token
|
// insert the end-of-sequence token
|
||||||
ret.m_tokens.push_back(bdecode_token(start - orig_start, 1
|
ret.m_tokens.push_back({start - orig_start, 1, bdecode_token::end});
|
||||||
, bdecode_token::end));
|
|
||||||
|
|
||||||
// and back-patch the start of this sequence with the offset
|
// and back-patch the start of this sequence with the offset
|
||||||
// to the next token we'll insert
|
// to the next token we'll insert
|
||||||
|
@ -798,8 +795,8 @@ namespace libtorrent
|
||||||
if (start - str_start - 2 > detail::bdecode_token::max_header)
|
if (start - str_start - 2 > detail::bdecode_token::max_header)
|
||||||
TORRENT_FAIL_BDECODE(bdecode_errors::limit_exceeded);
|
TORRENT_FAIL_BDECODE(bdecode_errors::limit_exceeded);
|
||||||
|
|
||||||
ret.m_tokens.push_back(bdecode_token(str_start - orig_start
|
ret.m_tokens.push_back({str_start - orig_start
|
||||||
, 1, bdecode_token::string, std::uint8_t(start - str_start)));
|
, 1, bdecode_token::string, std::uint8_t(start - str_start)});
|
||||||
start += len;
|
start += len;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -831,25 +828,22 @@ done:
|
||||||
&& stack[sp].state == 1)
|
&& stack[sp].state == 1)
|
||||||
{
|
{
|
||||||
// insert an empty dictionary as the value
|
// insert an empty dictionary as the value
|
||||||
ret.m_tokens.push_back(bdecode_token(start - orig_start
|
ret.m_tokens.push_back({start - orig_start, 2, bdecode_token::dict});
|
||||||
, 2, bdecode_token::dict));
|
ret.m_tokens.push_back({start - orig_start, bdecode_token::end});
|
||||||
ret.m_tokens.push_back(bdecode_token(start - orig_start
|
|
||||||
, bdecode_token::end));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int const top = stack[sp].token;
|
int const top = stack[sp].token;
|
||||||
TORRENT_ASSERT(ret.m_tokens.size() - top <= bdecode_token::max_next_item);
|
TORRENT_ASSERT(ret.m_tokens.size() - top <= bdecode_token::max_next_item);
|
||||||
ret.m_tokens[top].next_item = std::uint32_t(ret.m_tokens.size() - top);
|
ret.m_tokens[top].next_item = std::uint32_t(ret.m_tokens.size() - top);
|
||||||
ret.m_tokens.push_back(bdecode_token(start - orig_start, 1, bdecode_token::end));
|
ret.m_tokens.push_back({start - orig_start, 1, bdecode_token::end});
|
||||||
}
|
}
|
||||||
|
|
||||||
ret.m_tokens.push_back(bdecode_token(start - orig_start, 0
|
ret.m_tokens.push_back({start - orig_start, 0, bdecode_token::end});
|
||||||
, bdecode_token::end));
|
|
||||||
|
|
||||||
ret.m_token_idx = 0;
|
ret.m_token_idx = 0;
|
||||||
ret.m_buffer = orig_start;
|
ret.m_buffer = orig_start;
|
||||||
ret.m_buffer_size = int(start - orig_start);
|
ret.m_buffer_size = int(start - orig_start);
|
||||||
ret.m_root_tokens = &ret.m_tokens[0];
|
ret.m_root_tokens = ret.m_tokens.data();
|
||||||
|
|
||||||
return ec ? -1 : 0;
|
return ec ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -319,7 +319,7 @@ namespace libtorrent
|
||||||
|
|
||||||
for (auto const p : peers)
|
for (auto const p : peers)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(p);
|
TORRENT_ASSERT(p != nullptr);
|
||||||
|
|
||||||
if (p->est_reciprocation_rate() > upload_capacity_left) break;
|
if (p->est_reciprocation_rate() > upload_capacity_left) break;
|
||||||
|
|
||||||
|
|
|
@ -1252,7 +1252,7 @@ namespace libtorrent
|
||||||
|
|
||||||
std::unique_lock<std::mutex> l2(m_cache_mutex);
|
std::unique_lock<std::mutex> l2(m_cache_mutex);
|
||||||
pe = m_disk_cache.find_piece(j);
|
pe = m_disk_cache.find_piece(j);
|
||||||
if (pe) maybe_issue_queued_read_jobs(pe, completed_jobs);
|
if (pe != nullptr) maybe_issue_queued_read_jobs(pe, completed_jobs);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -232,8 +232,7 @@ namespace libtorrent { namespace
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if_indextoname(if_index, rt_info->name);
|
if_indextoname(if_index, rt_info->name);
|
||||||
ifreq req;
|
ifreq req = {};
|
||||||
memset(&req, 0, sizeof(req));
|
|
||||||
if_indextoname(if_index, req.ifr_name);
|
if_indextoname(if_index, req.ifr_name);
|
||||||
ioctl(s, siocgifmtu, &req);
|
ioctl(s, siocgifmtu, &req);
|
||||||
rt_info->mtu = req.ifr_mtu;
|
rt_info->mtu = req.ifr_mtu;
|
||||||
|
@ -290,8 +289,7 @@ int _System __libsocket_sysctl(int* mib, u_int namelen, void *oldp, size_t *oldl
|
||||||
if_indextoname(rtm->rtm_index, rt_info->name);
|
if_indextoname(rtm->rtm_index, rt_info->name);
|
||||||
|
|
||||||
// TODO: get the MTU (and other interesting metrics) from the rt_msghdr instead
|
// TODO: get the MTU (and other interesting metrics) from the rt_msghdr instead
|
||||||
ifreq req;
|
ifreq req = {};
|
||||||
memset(&req, 0, sizeof(req));
|
|
||||||
if_indextoname(rtm->rtm_index, req.ifr_name);
|
if_indextoname(rtm->rtm_index, req.ifr_name);
|
||||||
|
|
||||||
// ignore errors here. This is best-effort
|
// ignore errors here. This is best-effort
|
||||||
|
@ -478,8 +476,7 @@ namespace libtorrent
|
||||||
ip_interface iface;
|
ip_interface iface;
|
||||||
if (iface_from_ifaddrs(ifa, iface))
|
if (iface_from_ifaddrs(ifa, iface))
|
||||||
{
|
{
|
||||||
ifreq req;
|
ifreq req = {};
|
||||||
std::memset(&req, 0, sizeof(req));
|
|
||||||
// -1 to leave a 0-terminator
|
// -1 to leave a 0-terminator
|
||||||
std::strncpy(req.ifr_name, iface.name, IF_NAMESIZE - 1);
|
std::strncpy(req.ifr_name, iface.name, IF_NAMESIZE - 1);
|
||||||
|
|
||||||
|
@ -539,8 +536,7 @@ namespace libtorrent
|
||||||
iface.interface_address = sockaddr_to_address(&item.ifr_addr);
|
iface.interface_address = sockaddr_to_address(&item.ifr_addr);
|
||||||
strcpy(iface.name, item.ifr_name);
|
strcpy(iface.name, item.ifr_name);
|
||||||
|
|
||||||
ifreq req;
|
ifreq req = {};
|
||||||
memset(&req, 0, sizeof(req));
|
|
||||||
// -1 to leave a 0-terminator
|
// -1 to leave a 0-terminator
|
||||||
strncpy(req.ifr_name, item.ifr_name, IF_NAMESIZE - 1);
|
strncpy(req.ifr_name, item.ifr_name, IF_NAMESIZE - 1);
|
||||||
if (ioctl(s, siocgifmtu, &req) < 0)
|
if (ioctl(s, siocgifmtu, &req) < 0)
|
||||||
|
@ -555,7 +551,7 @@ namespace libtorrent
|
||||||
iface.mtu = req.ifr_metric; // according to tcp/ip reference
|
iface.mtu = req.ifr_metric; // according to tcp/ip reference
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
memset(&req, 0, sizeof(req));
|
std::memset(&req, 0, sizeof(req));
|
||||||
strncpy(req.ifr_name, item.ifr_name, IF_NAMESIZE - 1);
|
strncpy(req.ifr_name, item.ifr_name, IF_NAMESIZE - 1);
|
||||||
if (ioctl(s, SIOCGIFNETMASK, &req) < 0)
|
if (ioctl(s, SIOCGIFNETMASK, &req) < 0)
|
||||||
{
|
{
|
||||||
|
@ -1093,8 +1089,7 @@ namespace libtorrent
|
||||||
|
|
||||||
int seq = 0;
|
int seq = 0;
|
||||||
|
|
||||||
char msg[BUFSIZE];
|
char msg[BUFSIZE] = {};
|
||||||
memset(msg, 0, BUFSIZE);
|
|
||||||
nlmsghdr* nl_msg = reinterpret_cast<nlmsghdr*>(msg);
|
nlmsghdr* nl_msg = reinterpret_cast<nlmsghdr*>(msg);
|
||||||
|
|
||||||
nl_msg->nlmsg_len = NLMSG_LENGTH(sizeof(rtmsg));
|
nl_msg->nlmsg_len = NLMSG_LENGTH(sizeof(rtmsg));
|
||||||
|
|
|
@ -819,6 +819,7 @@ namespace libtorrent
|
||||||
|
|
||||||
int file_storage::file_flags(int index) const
|
int file_storage::file_flags(int index) const
|
||||||
{
|
{
|
||||||
|
TORRENT_ASSERT_PRECOND(index >= 0 && index < int(m_files.size()));
|
||||||
internal_file_entry const& fe = m_files[index];
|
internal_file_entry const& fe = m_files[index];
|
||||||
return (fe.pad_file ? flag_pad_file : 0)
|
return (fe.pad_file ? flag_pad_file : 0)
|
||||||
| (fe.hidden_attribute ? flag_hidden : 0)
|
| (fe.hidden_attribute ? flag_hidden : 0)
|
||||||
|
@ -828,6 +829,7 @@ namespace libtorrent
|
||||||
|
|
||||||
bool file_storage::file_absolute_path(int index) const
|
bool file_storage::file_absolute_path(int index) const
|
||||||
{
|
{
|
||||||
|
TORRENT_ASSERT_PRECOND(index >= 0 && index < int(m_files.size()));
|
||||||
internal_file_entry const& fe = m_files[index];
|
internal_file_entry const& fe = m_files[index];
|
||||||
return fe.path_index == -2;
|
return fe.path_index == -2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4175,7 +4175,7 @@ namespace aux {
|
||||||
// all the other ones.
|
// all the other ones.
|
||||||
for (auto p : peers)
|
for (auto p : peers)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(p);
|
TORRENT_ASSERT(p != nullptr);
|
||||||
TORRENT_ASSERT(!p->ignore_unchoke_slots());
|
TORRENT_ASSERT(!p->ignore_unchoke_slots());
|
||||||
|
|
||||||
// this will update the m_uploaded_at_last_unchoke
|
// this will update the m_uploaded_at_last_unchoke
|
||||||
|
|
|
@ -454,10 +454,8 @@ namespace libtorrent
|
||||||
|
|
||||||
void udp_tracker_connection::update_transaction_id()
|
void udp_tracker_connection::update_transaction_id()
|
||||||
{
|
{
|
||||||
std::uint32_t new_tid;
|
|
||||||
|
|
||||||
// don't use 0, because that has special meaning (unintialized)
|
// don't use 0, because that has special meaning (unintialized)
|
||||||
new_tid = random(0xfffffffe) + 1;
|
std::uint32_t const new_tid = random(0xfffffffe) + 1;
|
||||||
|
|
||||||
if (m_transaction_id != 0)
|
if (m_transaction_id != 0)
|
||||||
m_man.update_transaction_id(shared_from_this(), new_tid);
|
m_man.update_transaction_id(shared_from_this(), new_tid);
|
||||||
|
|
|
@ -650,7 +650,7 @@ void web_peer_connection::handle_redirect(int const bytes_left)
|
||||||
if (web->have_files.get_bit(file_index) == false)
|
if (web->have_files.get_bit(file_index) == false)
|
||||||
{
|
{
|
||||||
web->have_files.set_bit(file_index);
|
web->have_files.set_bit(file_index);
|
||||||
if (web->peer_info.connection)
|
if (web->peer_info.connection != nullptr)
|
||||||
{
|
{
|
||||||
peer_connection* pc = static_cast<peer_connection*>(web->peer_info.connection);
|
peer_connection* pc = static_cast<peer_connection*>(web->peer_info.connection);
|
||||||
|
|
||||||
|
@ -1029,7 +1029,7 @@ void web_peer_connection::incoming_payload(char const* buf, int len)
|
||||||
// to not exceed the size of the next bittorrent request to be delivered.
|
// to not exceed the size of the next bittorrent request to be delivered.
|
||||||
// m_piece can only hold the response for a single BT request at a time
|
// m_piece can only hold the response for a single BT request at a time
|
||||||
m_piece.resize(piece_size + copy_size);
|
m_piece.resize(piece_size + copy_size);
|
||||||
std::memcpy(&m_piece[0] + piece_size, buf, copy_size);
|
std::memcpy(m_piece.data() + piece_size, buf, copy_size);
|
||||||
len -= copy_size;
|
len -= copy_size;
|
||||||
buf += copy_size;
|
buf += copy_size;
|
||||||
|
|
||||||
|
@ -1055,7 +1055,7 @@ void web_peer_connection::incoming_payload(char const* buf, int len)
|
||||||
peer_request const front_request_copy = front_request;
|
peer_request const front_request_copy = front_request;
|
||||||
m_requests.pop_front();
|
m_requests.pop_front();
|
||||||
|
|
||||||
incoming_piece(front_request_copy, &m_piece[0]);
|
incoming_piece(front_request_copy, m_piece.data());
|
||||||
|
|
||||||
m_piece.clear();
|
m_piece.clear();
|
||||||
}
|
}
|
||||||
|
@ -1108,7 +1108,7 @@ void web_peer_connection::maybe_harvest_piece()
|
||||||
#endif
|
#endif
|
||||||
m_requests.pop_front();
|
m_requests.pop_front();
|
||||||
|
|
||||||
incoming_piece(front_request, &m_piece[0]);
|
incoming_piece(front_request, m_piece.data());
|
||||||
m_piece.clear();
|
m_piece.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue