From 57e9fbd1c47f50ff672497c24dfb37287aeb413a Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Thu, 30 Nov 2017 15:46:34 +0100 Subject: [PATCH] Fix once and for all the random port selection in the media session. --- src/conference/session/media-session.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/conference/session/media-session.cpp b/src/conference/session/media-session.cpp index 29a802f44..bd6bb9f82 100644 --- a/src/conference/session/media-session.cpp +++ b/src/conference/session/media-session.cpp @@ -916,8 +916,11 @@ int MediaSessionPrivate::selectRandomPort (int streamIndex, pair portR L_Q(); for (int nbTries = 0; nbTries < 100; nbTries++) { bool alreadyUsed = false; + unsigned int rangeSize = static_cast(portRange.second - portRange.first); + unsigned int randomInRangeSize = ortp_random() % rangeSize; unsigned int mask = 1; - int triedPort = static_cast((ortp_random() % static_cast((portRange.second - portRange.first) + portRange.first)) & ~mask); + unsigned int realRandom = randomInRangeSize + static_cast(portRange.first); + int triedPort = static_cast(realRandom & ~mask); if (triedPort < portRange.first) triedPort = portRange.first + 2; for (const bctbx_list_t *elem = linphone_core_get_calls(q->getCore()->getCCore()); elem != nullptr; elem = bctbx_list_next(elem)) { LinphoneCall *lcall = reinterpret_cast(bctbx_list_get_data(elem));