From 19db70ca75a4fd03ddc0ff3f023bc0ec53c338d9 Mon Sep 17 00:00:00 2001 From: Christophe Deschamps Date: Wed, 5 Feb 2025 23:01:55 +0100 Subject: [PATCH] Configuration migration from 5 to 6 including changes done in assistant rc files. --- Linphone/model/core/CoreModel.cpp | 94 ++++++++++++++++++++++++++----- Linphone/tool/Constants.cpp | 2 + Linphone/tool/Constants.hpp | 10 +++- 3 files changed, 92 insertions(+), 14 deletions(-) diff --git a/Linphone/model/core/CoreModel.cpp b/Linphone/model/core/CoreModel.cpp index 4a50469a2..73c916d0a 100644 --- a/Linphone/model/core/CoreModel.cpp +++ b/Linphone/model/core/CoreModel.cpp @@ -104,11 +104,6 @@ void CoreModel::start() { if (ldapFriendList) mCore->removeFriendList(ldapFriendList); } mCore->enableFriendListSubscription(true); - // TODO : get this from settings - auto videoPolicy = mCore->getVideoActivationPolicy()->clone(); - videoPolicy->setAutomaticallyAccept(true); - videoPolicy->setAutomaticallyInitiate(false); - mCore->setVideoActivationPolicy(videoPolicy); if (mCore->getLogCollectionUploadServerUrl().empty()) mCore->setLogCollectionUploadServerUrl(Constants::DefaultUploadLogsServer); mIterateTimer->start(); @@ -242,25 +237,98 @@ void CoreModel::migrate() { int rcVersion = config->getInt(SettingsModel::UiSection, Constants::RcVersionName, 0); if (rcVersion == Constants::RcVersionCurrent) return; if (rcVersion > Constants::RcVersionCurrent) { - qWarning() << QStringLiteral("RC file version (%1) is more recent than app rc file version (%2)!!!") + lWarning() << log() + .arg("RC file version (%1) is more recent than app rc file version (%2)!!!") .arg(rcVersion) .arg(Constants::RcVersionCurrent); return; } - qInfo() << QStringLiteral("Migrate from old rc file (%1 to %2).").arg(rcVersion).arg(Constants::RcVersionCurrent); + lInfo() << log().arg("Migrate from old rc file (%1 to %2).").arg(rcVersion).arg(Constants::RcVersionCurrent); + bool setLimeServerUrl = false; for (const auto &account : mCore->getAccountList()) { auto params = account->getParams(); + auto newParams = params->clone(); + QString accountIdentity = + (newParams->getIdentityAddress() ? newParams->getIdentityAddress()->asString().c_str() : "no-identity"); if (params->getDomain() == Constants::LinphoneDomain) { - auto newParams = params->clone(); - QString accountIdentity = - (newParams->getIdentityAddress() ? newParams->getIdentityAddress()->asString().c_str() : "no-identity"); if (rcVersion < 1) { - newParams->setLimeAlgo("c25519"); - qInfo() << "Migrating" << accountIdentity << "for version 1. lime algo = c25519"; + newParams->setContactParameters(Constants::DefaultContactParameters); + newParams->setExpires(Constants::DefaultExpires); + lInfo() << log().arg("Migrating") << accountIdentity + << "for version 1. contact parameters =" << Constants::DefaultContactParameters + << ", expires =" << Constants::DefaultExpires; + } + if (rcVersion < 2) { + bool exists = newParams->getConferenceFactoryUri() != ""; + setLimeServerUrl = true; + if (!exists) { + newParams->setConferenceFactoryAddress(ToolModel::interpretUrl(Constants::DefaultConferenceURI)); + } + lInfo() << log().arg("Migrating") << accountIdentity << "for version 2. Conference factory URI" + << (exists ? std::string("unchanged") : std::string("= ") + Constants::DefaultConferenceURI) + .c_str(); + // note: using std::string.c_str() to avoid having double quotes in qInfo() + } + if (rcVersion < 3) { + newParams->enableCpimInBasicChatRoom(true); + lInfo() << log().arg("Migrating") << accountIdentity + << "for version 3. Enable Cpim in basic chat rooms"; + } + if (rcVersion < 4) { + newParams->enableRtpBundle(true); + lInfo() << log().arg("Migrating") << accountIdentity << "for version 4. Enable RTP bundle mode"; + } + if (rcVersion < 5) { + bool exists = !!newParams->getAudioVideoConferenceFactoryAddress(); + setLimeServerUrl = true; + if (!exists) + newParams->setAudioVideoConferenceFactoryAddress( + ToolModel::interpretUrl(Constants::DefaultVideoConferenceURI)); + lInfo() << log().arg("Migrating") << accountIdentity << "for version 5. Video conference factory URI" + << (exists ? std::string("unchanged") + : std::string("= ") + Constants::DefaultVideoConferenceURI) + .c_str(); + // note: using std::string.c_str() to avoid having double quotes in qInfo() + } + if (rcVersion < 6) { // Last 5.2 (5.2.6) + newParams->setPublishExpires(Constants::DefaultPublishExpires); + lInfo() << log().arg("Migrating") << accountIdentity + << "for version 6. publish expires =" << Constants::DefaultPublishExpires; + } + if (rcVersion < 7) { // First 6.x + // 6.x reg_route added to use/create-app-sip-account.rc files on 6.x + if (newParams->getRoutesAddresses().empty()) { + std::list> routes; + routes.push_back(ToolModel::interpretUrl(Constants::DefaultRouteAddress)); + newParams->setRoutesAddresses(routes); + lInfo() << log().arg("Migrating") << accountIdentity + << "for version 7. Setting route to: " << Constants::DefaultRouteAddress; + } + // File transfer server URL modified to use/create-app-sip-account.rc files on 6.x + if (mCore->getLogCollectionUploadServerUrl() == Constants::RetiredUploadLogsServer) { + mCore->setLogCollectionUploadServerUrl(Constants::DefaultUploadLogsServer); + lInfo() << log().arg("Migrating") << accountIdentity + << "for version 7. Setting Log collection upload server rul to: " + << Constants::DefaultUploadLogsServer; + } } - account->setParams(newParams); } + if (rcVersion < 7) { // 6.x lime algo c25519 added to all 6.x rc files + newParams->setLimeAlgo("c25519"); + lInfo() << log().arg("Migrating") << accountIdentity << "for version 7. lime algo = c25519"; + } + account->setParams(newParams); + } + + if (rcVersion < 7) { // 6.x + // Video policy added to all 6.x rc files - done via config as API calls only saves config for + // these when core is ready. + if (!config->hasEntry("video", "automatically_accept")) config->setInt("video", "automatically_accept", 1); + if (!config->hasEntry("video", "automatically_initiate")) config->setInt("video", "automatically_initiate", 0); + if (!config->hasEntry("video", "automatically_accept_direction")) + config->setInt("video", "automatically_accept_direction", 2); + lInfo() << log().arg("Migrating) Video Policy for version 7."); } config->setInt(SettingsModel::UiSection, Constants::RcVersionName, Constants::RcVersionCurrent); diff --git a/Linphone/tool/Constants.cpp b/Linphone/tool/Constants.cpp index 2b2c29ae3..a84a59cb4 100644 --- a/Linphone/tool/Constants.cpp +++ b/Linphone/tool/Constants.cpp @@ -89,6 +89,7 @@ constexpr qint64 Constants::FileSizeLimit; constexpr char Constants::DefaultXmlrpcUri[]; constexpr char Constants::DefaultUploadLogsServer[]; +constexpr char Constants::RetiredUploadLogsServer[]; constexpr char Constants::DefaultConferenceURI[]; constexpr char Constants::DefaultVideoConferenceURI[]; constexpr char Constants::DefaultLimeServerURL[]; @@ -97,6 +98,7 @@ constexpr char Constants::RemoteProvisioningURL[]; constexpr char Constants::DefaultAssistantRegistrationUrl[]; constexpr char Constants::DefaultAssistantLoginUrl[]; constexpr char Constants::DefaultAssistantLogoutUrl[]; +constexpr char Constants::DefaultRouteAddress[]; constexpr char Constants::RemoteProvisioningBasicAuth[]; constexpr char Constants::OAuth2AuthorizationUrl[]; diff --git a/Linphone/tool/Constants.hpp b/Linphone/tool/Constants.hpp index 927b7e070..309eb3a89 100644 --- a/Linphone/tool/Constants.hpp +++ b/Linphone/tool/Constants.hpp @@ -58,6 +58,7 @@ public: static constexpr char DefaultXmlrpcUri[] = "https://subscribe.linphone.org:444/wizard.php"; static constexpr char DefaultUploadLogsServer[] = "https://files.linphone.org:443/http-file-transfer-server/hft.php"; + static constexpr char RetiredUploadLogsServer[] = "https://www.linphone.org:444/lft.php"; static constexpr char DefaultContactParameters[] = "message-expires=2419200"; static constexpr char DefaultContactParametersOnRemove[] = "message-expires=0"; static constexpr int DefaultExpires = 600; @@ -104,6 +105,8 @@ public: static constexpr char DefaultAssistantRegistrationUrl[] = "https://subscribe.linphone.org/register"; static constexpr char DefaultAssistantLoginUrl[] = "https://subscribe.linphone.org/login"; static constexpr char DefaultAssistantLogoutUrl[] = "https://subscribe.linphone.org/logout"; + static constexpr char DefaultRouteAddress[] = "sip:sip.linphone.org;transport=tls"; + //-------------- // Max image size in bytes. (1Mb) @@ -172,7 +175,12 @@ public: static constexpr char VcardScheme[] = EXECUTABLE_NAME "-desktop:/"; static constexpr int CbsCallInterval = 20; static constexpr char RcVersionName[] = "rc_version"; - static constexpr int RcVersionCurrent = 1; // 1 = Lime algo + static constexpr int RcVersionCurrent = 7; // 2 = Conference URI + // 3 = CPIM on basic chat rooms + // 4 = RTP bundle mode + // 5 = Video Conference URI + // 6 = 5.2.6 Publish expires + // 7 = 6.0.0 Lime algo + Video Policy + Routes + Log upload URL static constexpr char DownloadDefaultFileName[] = "download"; //--------------------------------------------------------------------------------