diff --git a/src/ringdht/ringaccount.cpp b/src/ringdht/ringaccount.cpp index 3078023f00847c7eacc4ec1158c793730d8d02ff..37cb52061c0585ca390ccbcba5226776ddfea4ba 100644 --- a/src/ringdht/ringaccount.cpp +++ b/src/ringdht/ringaccount.cpp @@ -531,6 +531,14 @@ std::map<std::string, std::string> RingAccount::getAccountDetails() const return a; } +std::map<std::string, std::string> +RingAccount::getVolatileAccountDetails() const +{ + auto a = SIPAccountBase::getVolatileAccountDetails(); + a.emplace(DRing::Account::VolatileProperties::InstantMessaging::OFF_CALL, TRUE_STR); + return a; +} + void RingAccount::handleEvents() { @@ -865,6 +873,18 @@ RingAccount::doRegister_() return true; } ); + + dht_.listen<dht::ImMessage>( + inboxKey, + [shared](dht::ImMessage&& v) { + auto& this_ = *shared.get(); + auto from = v.from.toString(); + auto msg = v.im_message; + RING_DBG("Text message received from DHT ! %s -> %s", from.c_str(), msg.c_str()); + emitSignal<DRing::ConfigurationSignal::IncomingAccountMessage>(this_.getAccountID(), from, msg); + return true; + } + ); } catch (const std::exception& e) { RING_ERR("Error registering DHT account: %s", e.what()); @@ -1191,7 +1211,6 @@ RingAccount::getTrustRequests() const return ret; } - bool RingAccount::acceptTrustRequest(const std::string& from) { @@ -1251,4 +1270,12 @@ RingAccount::connectivityChanged() dht_.connectivityChanged(); } +void +RingAccount::sendTextMessage(const std::string& to, const std::string& message) +{ + dht_.putEncrypted(dht::InfoHash::get("inbox:"+to), + dht::InfoHash(to), + dht::ImMessage(std::string(message))); +} + } // namespace ring diff --git a/src/ringdht/ringaccount.h b/src/ringdht/ringaccount.h index 226dae8a89e5fa555dfd963e81f03fa364bdeb99..8a9e9efd59cf40609e3c47ba482b17e68b5c3133 100644 --- a/src/ringdht/ringaccount.h +++ b/src/ringdht/ringaccount.h @@ -107,6 +107,12 @@ class RingAccount : public SIPAccountBase { */ virtual std::map<std::string, std::string> getAccountDetails() const; + /** + * Retrieve volatile details such as recent registration errors + * @return std::map< std::string, std::string > The account volatile details + */ + virtual std::map<std::string, std::string> getVolatileAccountDetails() const override; + /** * Actually useless, since config loading is done in init() */ @@ -249,6 +255,7 @@ class RingAccount : public SIPAccountBase { bool discardTrustRequest(const std::string& from); void sendTrustRequest(const std::string& to, const std::vector<uint8_t>& payload); + virtual void sendTextMessage(const std::string& /* to */, const std::string& /* message */) override; void connectivityChanged();