mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Improve creating channels in adnl (#1108)
* Improve creating channels in adnl * Improve handling of cryptographic keys
This commit is contained in:
parent
f7e189f272
commit
6515136061
9 changed files with 109 additions and 80 deletions
|
@ -269,7 +269,11 @@ void AdnlPeerPairImpl::send_messages_in(std::vector<OutboundAdnlMessage> message
|
|||
size_t ptr = 0;
|
||||
bool first = true;
|
||||
do {
|
||||
respond_with_nop_after_ = td::Timestamp::in(td::Random::fast(1.0, 2.0));
|
||||
bool try_reinit = try_reinit_at_ && try_reinit_at_.is_in_past();
|
||||
if (try_reinit) {
|
||||
try_reinit_at_ = td::Timestamp::in(td::Random::fast(0.5, 1.5));
|
||||
}
|
||||
bool via_channel = channel_ready_ && !try_reinit;
|
||||
size_t s = (via_channel ? channel_packet_header_max_size() : packet_header_max_size());
|
||||
if (first) {
|
||||
|
@ -504,12 +508,6 @@ void AdnlPeerPairImpl::create_channel(pubkeys::Ed25519 pub, td::uint32 date) {
|
|||
|
||||
void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageCreateChannel &message) {
|
||||
create_channel(message.key(), message.date());
|
||||
if (respond_to_channel_create_after_.is_in_past()) {
|
||||
respond_to_channel_create_after_ = td::Timestamp::in(td::Random::fast(1.0, 2.0));
|
||||
std::vector<OutboundAdnlMessage> messages;
|
||||
messages.emplace_back(adnlmessage::AdnlMessageNop{}, 0);
|
||||
send_messages(std::move(messages));
|
||||
}
|
||||
}
|
||||
|
||||
void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageConfirmChannel &message) {
|
||||
|
@ -526,6 +524,7 @@ void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageConfirmChan
|
|||
}
|
||||
|
||||
void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageCustom &message) {
|
||||
respond_with_nop();
|
||||
td::actor::send_closure(local_actor_, &AdnlLocalId::deliver, peer_id_short_, message.data());
|
||||
}
|
||||
|
||||
|
@ -538,6 +537,7 @@ void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageReinit &mes
|
|||
}
|
||||
|
||||
void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageQuery &message) {
|
||||
respond_with_nop();
|
||||
auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), query_id = message.query_id(),
|
||||
flags = static_cast<td::uint32>(0)](td::Result<td::BufferSlice> R) {
|
||||
if (R.is_error()) {
|
||||
|
@ -556,6 +556,7 @@ void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageQuery &mess
|
|||
}
|
||||
|
||||
void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageAnswer &message) {
|
||||
respond_with_nop();
|
||||
auto Q = out_queries_.find(message.query_id());
|
||||
|
||||
if (Q == out_queries_.end()) {
|
||||
|
@ -573,6 +574,7 @@ void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessageAnswer &mes
|
|||
}
|
||||
|
||||
void AdnlPeerPairImpl::process_message(const adnlmessage::AdnlMessagePart &message) {
|
||||
respond_with_nop();
|
||||
auto size = message.total_size();
|
||||
if (size > huge_packet_max_size()) {
|
||||
VLOG(ADNL_WARNING) << this << ": dropping too big huge message: size=" << size;
|
||||
|
@ -635,6 +637,14 @@ void AdnlPeerPairImpl::delete_query(AdnlQueryId id) {
|
|||
}
|
||||
}
|
||||
|
||||
void AdnlPeerPairImpl::respond_with_nop() {
|
||||
if (respond_with_nop_after_.is_in_past()) {
|
||||
std::vector<OutboundAdnlMessage> messages;
|
||||
messages.emplace_back(adnlmessage::AdnlMessageNop{}, 0);
|
||||
send_messages(std::move(messages));
|
||||
}
|
||||
}
|
||||
|
||||
void AdnlPeerPairImpl::reinit(td::int32 date) {
|
||||
if (reinit_date_ == 0) {
|
||||
reinit_date_ = date;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue