@@ -269,7 +269,11 @@ void AdnlPeerPairImpl::send_messages_in(std::vector<OutboundAdnlMessage> message
269269 size_t ptr = 0 ;
270270 bool first = true ;
271271 do {
272+ respond_with_nop_after_ = td::Timestamp::in (td::Random::fast (1.0 , 2.0 ));
272273 bool try_reinit = try_reinit_at_ && try_reinit_at_.is_in_past ();
274+ if (try_reinit) {
275+ try_reinit_at_ = td::Timestamp::in (td::Random::fast (0.5 , 1.5 ));
276+ }
273277 bool via_channel = channel_ready_ && !try_reinit;
274278 size_t s = (via_channel ? channel_packet_header_max_size () : packet_header_max_size ());
275279 if (first) {
@@ -504,12 +508,6 @@ void AdnlPeerPairImpl::create_channel(pubkeys::Ed25519 pub, td::uint32 date) {
504508
505509void AdnlPeerPairImpl::process_message (const adnlmessage::AdnlMessageCreateChannel &message) {
506510 create_channel (message.key (), message.date ());
507- if (respond_to_channel_create_after_.is_in_past ()) {
508- respond_to_channel_create_after_ = td::Timestamp::in (td::Random::fast (1.0 , 2.0 ));
509- std::vector<OutboundAdnlMessage> messages;
510- messages.emplace_back (adnlmessage::AdnlMessageNop{}, 0 );
511- send_messages (std::move (messages));
512- }
513511}
514512
515513void AdnlPeerPairImpl::process_message (const adnlmessage::AdnlMessageConfirmChannel &message) {
@@ -526,6 +524,7 @@ void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageConfirmChan
526524}
527525
528526void AdnlPeerPairImpl::process_message (const adnlmessage::AdnlMessageCustom &message) {
527+ respond_with_nop ();
529528 td::actor::send_closure (local_actor_, &AdnlLocalId::deliver, peer_id_short_, message.data ());
530529}
531530
@@ -538,6 +537,7 @@ void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageReinit &mes
538537}
539538
540539void AdnlPeerPairImpl::process_message (const adnlmessage::AdnlMessageQuery &message) {
540+ respond_with_nop ();
541541 auto P = td::PromiseCreator::lambda ([SelfId = actor_id (this ), query_id = message.query_id (),
542542 flags = static_cast <td::uint32>(0 )](td::Result<td::BufferSlice> R) {
543543 if (R.is_error ()) {
@@ -556,6 +556,7 @@ void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageQuery &mess
556556}
557557
558558void AdnlPeerPairImpl::process_message (const adnlmessage::AdnlMessageAnswer &message) {
559+ respond_with_nop ();
559560 auto Q = out_queries_.find (message.query_id ());
560561
561562 if (Q == out_queries_.end ()) {
@@ -573,6 +574,7 @@ void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageAnswer &mes
573574}
574575
575576void AdnlPeerPairImpl::process_message (const adnlmessage::AdnlMessagePart &message) {
577+ respond_with_nop ();
576578 auto size = message.total_size ();
577579 if (size > huge_packet_max_size ()) {
578580 VLOG (ADNL_WARNING) << this << " : dropping too big huge message: size=" << size;
@@ -635,6 +637,14 @@ void AdnlPeerPairImpl::delete_query(AdnlQueryId id) {
635637 }
636638}
637639
640+ void AdnlPeerPairImpl::respond_with_nop () {
641+ if (respond_with_nop_after_.is_in_past ()) {
642+ std::vector<OutboundAdnlMessage> messages;
643+ messages.emplace_back (adnlmessage::AdnlMessageNop{}, 0 );
644+ send_messages (std::move (messages));
645+ }
646+ }
647+
638648void AdnlPeerPairImpl::reinit (td::int32 date) {
639649 if (reinit_date_ == 0 ) {
640650 reinit_date_ = date;
0 commit comments