From 1c2d816867fea8c8b3e2df301ce295b57d385b86 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Thu, 25 Jul 2019 15:46:07 -0400
Subject: [PATCH] dring: don't use IDs above 2^53

* avoid using IDs above 2^63 for Java binding compatibility
 (no unsigned integers in Java)
* avoid using IDs above 2^53 for JavaScript binding compatibility
 (no proper integers in JS)

Change-Id: I57bb26d2464edbdca4c9e6fe858894d3b53519dd
---
 src/im/message_engine.cpp | 4 +---
 src/manager.cpp           | 3 +--
 src/manager.h             | 2 ++
 3 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/src/im/message_engine.cpp b/src/im/message_engine.cpp
index e0b238a2f1..c13ac59602 100644
--- a/src/im/message_engine.cpp
+++ b/src/im/message_engine.cpp
@@ -33,8 +33,6 @@
 namespace jami {
 namespace im {
 
-static std::uniform_int_distribution<MessageToken> udist {1};
-
 MessageEngine::MessageEngine(SIPAccountBase& acc, const std::string& path) : account_(acc), savePath_(path)
 {}
 
@@ -48,7 +46,7 @@ MessageEngine::sendMessage(const std::string& to, const std::map<std::string, st
         std::lock_guard<std::mutex> lock(messagesMutex_);
         auto& peerMessages = messages_[to];
         do {
-            token = udist(account_.rand);
+            token = std::uniform_int_distribution<MessageToken>{1, DRING_ID_MAX_VAL}(account_.rand);
         } while (peerMessages.find(token) != peerMessages.end());
         auto m = peerMessages.emplace(token, Message{});
         m.first->second.to = to;
diff --git a/src/manager.cpp b/src/manager.cpp
index fee8646af7..134983f2f9 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -2790,13 +2790,12 @@ Manager::removeAccounts()
 std::string
 Manager::getNewCallID()
 {
-    static std::uniform_int_distribution<uint64_t> rand_call_id;
     std::ostringstream random_id;
 
     // generate something like s7ea037947eb9fb2f
     do {
         random_id.clear();
-        random_id << rand_call_id(pimpl_->rand_);
+        random_id << std::uniform_int_distribution<uint64_t>(1, DRING_ID_MAX_VAL)(pimpl_->rand_);
     } while (callFactory.hasCall(random_id.str()));
 
     return random_id.str();
diff --git a/src/manager.h b/src/manager.h
index cb9b7211dc..9d0a9b3d44 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -57,6 +57,8 @@ class IceTransportFactory;
 class DataTransferFacade;
 class JamiAccount;
 
+static constexpr size_t DRING_ID_MAX_VAL = 9007199254740992;
+
 /** Manager (controller) of daemon */
 class Manager {
     public:
-- 
GitLab