diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp index 074eeada755daf5b69a86e3adb9ccc4d075b56ed..887dece4cf24ddb66c19f0d36d6f59114d23cb84 100644 --- a/src/jamidht/jamiaccount.cpp +++ b/src/jamidht/jamiaccount.cpp @@ -2013,6 +2013,17 @@ JamiAccount::doRegister_() } } +void +JamiAccount::onTextMessage(const std::string& from, + const std::map<std::string, std::string>& payloads) +{ + try { + const std::string fromUri = parseJamiUri(from); + SIPAccountBase::onTextMessage(fromUri, payloads); + } catch (...) { + } +} + void JamiAccount::incomingCall(dht::IceCandidates&& msg, const std::shared_ptr<dht::crypto::Certificate>& from_cert, const dht::InfoHash& from) { diff --git a/src/jamidht/jamiaccount.h b/src/jamidht/jamiaccount.h index 60ff268281d6b800036c945abc47dd9f6977d8b1..83287bfa329721537e867bda1dfe2b477d16e295 100644 --- a/src/jamidht/jamiaccount.h +++ b/src/jamidht/jamiaccount.h @@ -268,9 +268,11 @@ public: * The type of this instance is given in template argument. * This type can be any base class of SIPCall class (included). */ - virtual std::shared_ptr<SIPCall> + std::shared_ptr<SIPCall> newIncomingCall(const std::string& from, const std::map<std::string, std::string>& details = {}, const std::shared_ptr<SipTransport>& sipTr = nullptr) override; + void onTextMessage(const std::string& from, const std::map<std::string, std::string>& payloads) override; + virtual bool isTlsEnabled() const override { return true; } diff --git a/src/sip/sipaccountbase.cpp b/src/sip/sipaccountbase.cpp index b5cd863e370ae9f4d88996d65216397d95e88b8c..9b9bf866780e1853884b55c324bba53485ebfe6a 100644 --- a/src/sip/sipaccountbase.cpp +++ b/src/sip/sipaccountbase.cpp @@ -420,7 +420,7 @@ SIPAccountBase::onTextMessage(const std::string& from, message.payloads = payloads; message.received = std::time(nullptr); std::lock_guard<std::mutex> lck(mutexLastMessages_); - lastMessages_.emplace_back(message); + lastMessages_.emplace_back(std::move(message)); while (lastMessages_.size() > MAX_WAITING_MESSAGES_SIZE) { lastMessages_.pop_front(); } diff --git a/src/sip/sipaccountbase.h b/src/sip/sipaccountbase.h index aebe3ac5fb1a0974adfff37fe39158c7324a18b6..1ea26cca066dc89ab6818ee52dddbb167e7a8b91 100644 --- a/src/sip/sipaccountbase.h +++ b/src/sip/sipaccountbase.h @@ -275,7 +275,7 @@ public: return messageEngine_.cancel(id); } - void onTextMessage(const std::string& from, const std::map<std::string, std::string>& payloads); + virtual void onTextMessage(const std::string& from, const std::map<std::string, std::string>& payloads); /* Returns true if the username and/or hostname match this account */ virtual MatchRank matches(const std::string &username, const std::string &hostname) const = 0;