mirror of
https://git.jami.net/savoirfairelinux/jami-daemon.git
synced 2025-08-12 22:09:25 +08:00
jamiaccount: remove too big payload for request
Because the encoded avatar can be greater than 64k, a SIP message will fail, and the trust request may not be sent. https: //git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1491 https: //git.jami.net/savoirfairelinux/jami-client-android/-/issues/1537 Change-Id: Ieba2db521a3c7e72890be75d3578f93e496dc968
This commit is contained in:
@ -1772,6 +1772,10 @@ Conversation::generateInvitation() const
|
||||
Json::Value root;
|
||||
auto& metadata = root[ConversationMapKeys::METADATAS];
|
||||
for (const auto& [k, v] : infos()) {
|
||||
if (v.size() >= 64000) {
|
||||
JAMI_WARNING("Cutting invite because the SIP message will be too long");
|
||||
continue;
|
||||
}
|
||||
metadata[k] = v;
|
||||
}
|
||||
root[ConversationMapKeys::CONVERSATIONID] = id();
|
||||
|
@ -1742,7 +1742,7 @@ JamiAccount::onTrackedBuddyOnline(const dht::InfoHash& contactId)
|
||||
} catch (...) {
|
||||
}
|
||||
|
||||
if (payload.size() > 64000) {
|
||||
if (payload.size() >= 64000) {
|
||||
JAMI_WARN() << "Trust request is too big, reset payload";
|
||||
payload.clear();
|
||||
}
|
||||
@ -2978,8 +2978,8 @@ JamiAccount::sendTrustRequest(const std::string& to, const std::vector<uint8_t>&
|
||||
req.write(reinterpret_cast<const char*>(payload.data()), payload.size());
|
||||
}
|
||||
|
||||
if (payload.size() > 64000) {
|
||||
JAMI_WARN() << "Trust request is too big";
|
||||
if (payload.size() >= 64000) {
|
||||
JAMI_WARN() << "Trust request is too big. Remove payload";
|
||||
}
|
||||
|
||||
auto conversation = convModule()->getOneToOneConversation(to);
|
||||
@ -2988,7 +2988,7 @@ JamiAccount::sendTrustRequest(const std::string& to, const std::vector<uint8_t>&
|
||||
if (not conversation.empty()) {
|
||||
std::lock_guard lock(configurationMutex_);
|
||||
if (accountManager_)
|
||||
accountManager_->sendTrustRequest(to, conversation, payload);
|
||||
accountManager_->sendTrustRequest(to, conversation, payload.size() >= 64000 ? std::vector<uint8_t> {} : payload);
|
||||
else
|
||||
JAMI_WARN("[Account %s] sendTrustRequest: account not loaded", getAccountID().c_str());
|
||||
} else
|
||||
|
@ -93,6 +93,7 @@ public:
|
||||
void testNeedsSyncingWithForCloning();
|
||||
void testRemoveContactRemoveTrustRequest();
|
||||
void testAddConversationNoPresenceThenConnects();
|
||||
void testRequestBigPayload();
|
||||
std::string aliceId;
|
||||
UserData aliceData;
|
||||
std::string bobId;
|
||||
@ -133,6 +134,7 @@ private:
|
||||
CPPUNIT_TEST(testNeedsSyncingWithForCloning);
|
||||
CPPUNIT_TEST(testRemoveContactRemoveTrustRequest);
|
||||
CPPUNIT_TEST(testAddConversationNoPresenceThenConnects);
|
||||
CPPUNIT_TEST(testRequestBigPayload);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
};
|
||||
|
||||
@ -1083,6 +1085,27 @@ ConversationRequestTest::testAddConversationNoPresenceThenConnects()
|
||||
CPPUNIT_ASSERT(carlaDetails["conversationId"] == aliceDetails["conversationId"] && carlaDetails["conversationId"] == convId);
|
||||
}
|
||||
|
||||
void
|
||||
ConversationRequestTest::testRequestBigPayload()
|
||||
{
|
||||
connectSignals();
|
||||
auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
|
||||
auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
|
||||
auto bobUri = bobAccount->getUsername();
|
||||
|
||||
aliceAccount->addContact(bobUri);
|
||||
|
||||
auto data = std::string(64000, 'A');
|
||||
std::vector<uint8_t> payload(data.begin(), data.end());
|
||||
aliceAccount->sendTrustRequest(bobUri, payload);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return bobData.requestReceived; }));
|
||||
|
||||
CPPUNIT_ASSERT(bobAccount->getTrustRequests().size() == 1);
|
||||
libjami::acceptConversationRequest(bobId, aliceData.conversationId);
|
||||
CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return !bobData.conversationId.empty(); }));
|
||||
CPPUNIT_ASSERT(bobAccount->getTrustRequests().size() == 0);
|
||||
}
|
||||
|
||||
} // namespace test
|
||||
} // namespace jami
|
||||
|
||||
|
Reference in New Issue
Block a user