mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
bugfixes + doc update
This commit is contained in:
parent
77842f9b63
commit
1de39f5d7c
44 changed files with 652 additions and 272 deletions
|
|
@ -54,6 +54,8 @@
|
|||
#include "td/utils/tests.h"
|
||||
#include "td/utils/port/path.h"
|
||||
|
||||
#include "common/util.h"
|
||||
|
||||
namespace tonlib {
|
||||
namespace int_api {
|
||||
struct GetAccountState {
|
||||
|
|
@ -1310,6 +1312,12 @@ td::Result<block::StdAddress> get_account_address(td::Slice account_address) {
|
|||
return address;
|
||||
}
|
||||
|
||||
td::Result<td::Bits256> get_adnl_address(td::Slice adnl_address) {
|
||||
TRY_RESULT_PREFIX(address, td::adnl_id_decode(adnl_address),
|
||||
TonlibError::InvalidField("adnl_address", "can't decode"));
|
||||
return address;
|
||||
}
|
||||
|
||||
tonlib_api::object_ptr<tonlib_api::Object> TonlibClient::do_static_request(
|
||||
const tonlib_api::getAccountAddress& request) {
|
||||
if (!request.initial_account_state_) {
|
||||
|
|
@ -1859,6 +1867,36 @@ td::Status TonlibClient::do_request(const tonlib_api::getAccountState& request,
|
|||
return td::Status::OK();
|
||||
}
|
||||
|
||||
td::Result<ton::ManualDns::EntryData> to_dns_entry_data(tonlib_api::dns_EntryData& entry_data) {
|
||||
using R = td::Result<ton::ManualDns::EntryData>;
|
||||
return downcast_call2<R>(
|
||||
entry_data,
|
||||
td::overloaded(
|
||||
[&](tonlib_api::dns_entryDataUnknown& unknown) -> R { return ton::ManualDns::EntryData(); },
|
||||
[&](tonlib_api::dns_entryDataNextResolver& next_resolver) -> R {
|
||||
if (!next_resolver.resolver_) {
|
||||
return TonlibError::EmptyField("resolver");
|
||||
}
|
||||
TRY_RESULT(resolver, get_account_address(next_resolver.resolver_->account_address_));
|
||||
return ton::ManualDns::EntryData::next_resolver(std::move(resolver));
|
||||
},
|
||||
[&](tonlib_api::dns_entryDataSmcAddress& smc_address) -> R {
|
||||
if (!smc_address.smc_address_) {
|
||||
return TonlibError::EmptyField("smc_address");
|
||||
}
|
||||
TRY_RESULT(address, get_account_address(smc_address.smc_address_->account_address_));
|
||||
return ton::ManualDns::EntryData::smc_address(std::move(address));
|
||||
},
|
||||
[&](tonlib_api::dns_entryDataAdnlAddress& adnl_address) -> R {
|
||||
if (!adnl_address.adnl_address_) {
|
||||
return TonlibError::EmptyField("adnl_address");
|
||||
}
|
||||
TRY_RESULT(address, get_adnl_address(adnl_address.adnl_address_->adnl_address_));
|
||||
return ton::ManualDns::EntryData::adnl_address(std::move(address));
|
||||
},
|
||||
[&](tonlib_api::dns_entryDataText& text) -> R { return ton::ManualDns::EntryData::text(text.text_); }));
|
||||
}
|
||||
|
||||
class GenericCreateSendGrams : public TonlibQueryActor {
|
||||
public:
|
||||
GenericCreateSendGrams(td::actor::ActorShared<TonlibClient> client, tonlib_api::createQuery query,
|
||||
|
|
@ -1947,29 +1985,6 @@ class GenericCreateSendGrams : public TonlibQueryActor {
|
|||
return res;
|
||||
}
|
||||
|
||||
td::Result<ton::ManualDns::EntryData> to_dns_entry_data(tonlib_api::dns_EntryData& entry_data) {
|
||||
using R = td::Result<ton::ManualDns::EntryData>;
|
||||
return downcast_call2<R>(
|
||||
entry_data,
|
||||
td::overloaded(
|
||||
[&](tonlib_api::dns_entryDataUnknown& unknown) -> R { return ton::ManualDns::EntryData(); },
|
||||
[&](tonlib_api::dns_entryDataNextResolver& next_resolver) -> R {
|
||||
if (!next_resolver.resolver_) {
|
||||
return TonlibError::EmptyField("resolver");
|
||||
}
|
||||
TRY_RESULT(resolver, get_account_address(next_resolver.resolver_->account_address_));
|
||||
return ton::ManualDns::EntryData::next_resolver(std::move(resolver));
|
||||
},
|
||||
[&](tonlib_api::dns_entryDataSmcAddress& smc_address) -> R {
|
||||
if (!smc_address.smc_address_) {
|
||||
return TonlibError::EmptyField("smc_address");
|
||||
}
|
||||
TRY_RESULT(address, get_account_address(smc_address.smc_address_->account_address_));
|
||||
return ton::ManualDns::EntryData::smc_address(std::move(address));
|
||||
},
|
||||
[&](tonlib_api::dns_entryDataText& text) -> R { return ton::ManualDns::EntryData::text(text.text_); }));
|
||||
}
|
||||
|
||||
td::Result<ton::ManualDns::Action> to_dns_action(tonlib_api::dns_Action& action) {
|
||||
using R = td::Result<ton::ManualDns::Action>;
|
||||
return downcast_call2<R>(action,
|
||||
|
|
@ -2566,7 +2581,11 @@ td::Result<tonlib_api::object_ptr<tonlib_api::dns_EntryData>> to_tonlib_api(
|
|||
res = tonlib_api::make_object<tonlib_api::dns_entryDataNextResolver>(
|
||||
tonlib_api::make_object<tonlib_api::accountAddress>(resolver.resolver.rserialize(true)));
|
||||
},
|
||||
[&](const ton::ManualDns::EntryDataAdnlAddress& adnl_address) { res = td::Status::Error("TODO"); },
|
||||
[&](const ton::ManualDns::EntryDataAdnlAddress& adnl_address) {
|
||||
res = tonlib_api::make_object<tonlib_api::dns_entryDataAdnlAddress>(
|
||||
tonlib_api::make_object<tonlib_api::adnlAddress>(
|
||||
td::adnl_id_encode(adnl_address.adnl_address.as_slice()).move_as_ok()));
|
||||
},
|
||||
[&](const ton::ManualDns::EntryDataSmcAddress& smc_address) {
|
||||
res = tonlib_api::make_object<tonlib_api::dns_entryDataSmcAddress>(
|
||||
tonlib_api::make_object<tonlib_api::accountAddress>(smc_address.smc_address.rserialize(true)));
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@
|
|||
#include "td/utils/CancellationToken.h"
|
||||
#include "td/utils/optional.h"
|
||||
|
||||
#include "smc-envelope/ManualDns.h"
|
||||
|
||||
#include <map>
|
||||
|
||||
namespace tonlib {
|
||||
|
|
@ -47,6 +49,10 @@ inline std::string to_string(const int_api::SendMessage&) {
|
|||
class AccountState;
|
||||
class Query;
|
||||
|
||||
td::Result<tonlib_api::object_ptr<tonlib_api::dns_EntryData>> to_tonlib_api(
|
||||
const ton::ManualDns::EntryData& entry_data);
|
||||
td::Result<ton::ManualDns::EntryData> to_dns_entry_data(tonlib_api::dns_EntryData& entry_data);
|
||||
|
||||
class TonlibClient : public td::actor::Actor {
|
||||
public:
|
||||
template <class T>
|
||||
|
|
|
|||
|
|
@ -434,7 +434,11 @@ class TonlibCli : public td::actor::Actor {
|
|||
return;
|
||||
}
|
||||
if (resolved->entries_[0]->name_ == name) {
|
||||
td::TerminalIO::out() << "Done: " << to_string(resolved);
|
||||
td::TerminalIO::out() << "Done\n";
|
||||
for (auto& entry : resolved->entries_) {
|
||||
td::TerminalIO::out() << " " << entry->name_ << " " << entry->category_ << " "
|
||||
<< tonlib::to_dns_entry_data(*entry->entry_).move_as_ok() << "\n";
|
||||
}
|
||||
promise.set_value(td::Unit());
|
||||
return;
|
||||
}
|
||||
|
|
@ -484,22 +488,14 @@ class TonlibCli : public td::actor::Actor {
|
|||
td::TerminalIO::out() << "Delete all dns enties with name and category: " << action.name << ":"
|
||||
<< action.category << "\n";
|
||||
} else {
|
||||
tonlib_api::object_ptr<tonlib_api::dns_EntryData> data;
|
||||
td::StringBuilder sb;
|
||||
|
||||
td::Status error;
|
||||
if (action.data.value().data.empty()) {
|
||||
TRY_STATUS_PROMISE(promise, td::Status::Error("Empty entry data is not supported"));
|
||||
}
|
||||
action.data.value().data.visit(td::overloaded(
|
||||
[&](const ton::ManualDns::EntryDataText& text) {
|
||||
data = tonlib_api::make_object<tonlib_api::dns_entryDataText>(text.text);
|
||||
sb << "TEXT:" << text.text;
|
||||
},
|
||||
[&](const ton::ManualDns::EntryDataNextResolver& resolver) { error = td::Status::Error("TODO"); },
|
||||
[&](const ton::ManualDns::EntryDataAdnlAddress& adnl_address) { error = td::Status::Error("TODO"); },
|
||||
[&](const ton::ManualDns::EntryDataSmcAddress& text) { error = td::Status::Error("TODO"); }));
|
||||
;
|
||||
TRY_RESULT_PROMISE(promise, data, tonlib::to_tonlib_api(action.data.value()));
|
||||
sb << action.data.value();
|
||||
TRY_STATUS_PROMISE(promise, std::move(error));
|
||||
td::TerminalIO::out() << "Set dns entry: " << action.name << ":" << action.category << " " << sb.as_cslice()
|
||||
<< "\n";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue