1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-03-09 15:40:10 +00:00

rldp2 support in rldp-http-proxy (#608)

Co-authored-by: SpyCheese <mikle98@yandex.ru>
This commit is contained in:
EmelyanenkoK 2023-02-03 09:50:44 +03:00 committed by GitHub
parent 7a78ea33b7
commit c369127ae0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 220 additions and 64 deletions

View file

@ -92,6 +92,8 @@ class RldpIn : public RldpImpl {
void get_conn_ip_str(adnl::AdnlNodeIdShort l_id, adnl::AdnlNodeIdShort p_id, td::Promise<td::string> promise) override;
void set_default_mtu(td::uint64 mtu) override;
RldpIn(td::actor::ActorId<adnl::AdnlPeerTable> adnl) : adnl_(adnl) {
}
@ -107,6 +109,8 @@ class RldpIn : public RldpImpl {
std::set<adnl::AdnlNodeIdShort> local_ids_;
td::optional<td::uint64> custom_default_mtu_;
td::actor::ActorId<RldpConnectionActor> create_connection(adnl::AdnlNodeIdShort src, adnl::AdnlNodeIdShort dst);
};

View file

@ -44,6 +44,9 @@ class RldpConnectionActor : public td::actor::Actor, private ConnectionCallback
connection_.receive_raw(std::move(data));
yield();
}
void set_default_mtu(td::uint64 mtu) {
connection_.set_default_mtu(mtu);
}
private:
td::actor::ActorId<RldpIn> rldp_;
@ -129,6 +132,9 @@ td::actor::ActorId<RldpConnectionActor> RldpIn::create_connection(adnl::AdnlNode
return it->second.get();
}
auto connection = td::actor::create_actor<RldpConnectionActor>("RldpConnection", actor_id(this), src, dst, adnl_);
if (custom_default_mtu_) {
td::actor::send_closure(connection, &RldpConnectionActor::set_default_mtu, custom_default_mtu_.value());
}
auto res = connection.get();
connections_[std::make_pair(src, dst)] = std::move(connection);
return res;
@ -221,6 +227,13 @@ void RldpIn::get_conn_ip_str(adnl::AdnlNodeIdShort l_id, adnl::AdnlNodeIdShort p
td::actor::send_closure(adnl_, &adnl::AdnlPeerTable::get_conn_ip_str, l_id, p_id, std::move(promise));
}
void RldpIn::set_default_mtu(td::uint64 mtu) {
custom_default_mtu_ = mtu;
for (auto &connection : connections_) {
td::actor::send_closure(connection.second, &RldpConnectionActor::set_default_mtu, mtu);
}
}
std::unique_ptr<adnl::Adnl::Callback> RldpIn::make_adnl_callback() {
class Callback : public adnl::Adnl::Callback {
private:

View file

@ -37,6 +37,8 @@ class Rldp : public adnl::AdnlSenderInterface {
virtual void send_message_ex(adnl::AdnlNodeIdShort src, adnl::AdnlNodeIdShort dst, td::Timestamp timeout,
td::BufferSlice data) = 0;
virtual void set_default_mtu(td::uint64 mtu) = 0;
static td::actor::ActorOwn<Rldp> create(td::actor::ActorId<adnl::Adnl> adnl);
};