mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Retry dht query in adnl-peer if peer does not respond for too long
This commit is contained in:
parent
4ddb14c136
commit
cae9ccfacf
2 changed files with 15 additions and 0 deletions
|
@ -119,6 +119,7 @@ void AdnlPeerPairImpl::discover() {
|
|||
void AdnlPeerPairImpl::receive_packet_checked(AdnlPacket packet) {
|
||||
last_received_packet_ = td::Timestamp::now();
|
||||
try_reinit_at_ = td::Timestamp::never();
|
||||
drop_addr_list_at_ = td::Timestamp::never();
|
||||
request_reverse_ping_after_ = td::Timestamp::in(15.0);
|
||||
auto d = Adnl::adnl_start_time();
|
||||
if (packet.dst_reinit_date() > d) {
|
||||
|
@ -415,6 +416,9 @@ void AdnlPeerPairImpl::send_packet_continue(AdnlPacket packet, td::actor::ActorI
|
|||
if (!try_reinit_at_ && last_received_packet_ < td::Timestamp::in(-5.0)) {
|
||||
try_reinit_at_ = td::Timestamp::in(10.0);
|
||||
}
|
||||
if (!drop_addr_list_at_ && last_received_packet_ < td::Timestamp::in(-60.0 * 9.0)) {
|
||||
drop_addr_list_at_ = td::Timestamp::in(60.0);
|
||||
}
|
||||
packet.run_basic_checks().ensure();
|
||||
auto B = serialize_tl_object(packet.tl(), true);
|
||||
if (via_channel) {
|
||||
|
@ -692,6 +696,16 @@ void AdnlPeerPairImpl::reinit(td::int32 date) {
|
|||
}
|
||||
|
||||
td::Result<std::pair<td::actor::ActorId<AdnlNetworkConnection>, bool>> AdnlPeerPairImpl::get_conn() {
|
||||
if (drop_addr_list_at_ && drop_addr_list_at_.is_in_past()) {
|
||||
drop_addr_list_at_ = td::Timestamp::never();
|
||||
priority_addr_list_ = AdnlAddressList{};
|
||||
priority_conns_.clear();
|
||||
addr_list_ = AdnlAddressList{};
|
||||
conns_.clear();
|
||||
has_reverse_addr_ = false;
|
||||
return td::Status::Error(ErrorCode::notready, "no active connections");
|
||||
}
|
||||
|
||||
if (!priority_addr_list_.empty() && priority_addr_list_.expire_at() < td::Clocks::system()) {
|
||||
priority_addr_list_ = AdnlAddressList{};
|
||||
priority_conns_.clear();
|
||||
|
|
|
@ -266,6 +266,7 @@ class AdnlPeerPairImpl : public AdnlPeerPair {
|
|||
|
||||
td::Timestamp last_received_packet_ = td::Timestamp::never();
|
||||
td::Timestamp try_reinit_at_ = td::Timestamp::never();
|
||||
td::Timestamp drop_addr_list_at_ = td::Timestamp::never();
|
||||
|
||||
bool has_reverse_addr_ = false;
|
||||
td::Timestamp request_reverse_ping_after_ = td::Timestamp::now();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue