diff --git a/linphone-app/src/app/App.cpp b/linphone-app/src/app/App.cpp index 24b1e9e07..bd4d6dc0a 100644 --- a/linphone-app/src/app/App.cpp +++ b/linphone-app/src/app/App.cpp @@ -191,12 +191,18 @@ bool App::setFetchConfig (QCommandLineParser *parser) { auto core = instance->getCore(); if(core){ filePath.replace('\\','/'); - core->setProvisioningUri(Utils::appStringToCoreString(filePath)); - parser->process(cleanParserKeys(parser, QStringList("fetch-config")));// Remove this parameter from the parser - fetched = true; + if(core->setProvisioningUri(Utils::appStringToCoreString(filePath)) == 0){ + parser->process(cleanParserKeys(parser, QStringList("fetch-config")));// Remove this parameter from the parser + fetched = true; + }else + fetched = false; } } } + if(!fetched){ + qWarning() <<"Remote provisionning cannot be retrieved. Command have beend cleaned"; + createParser(); + } } return fetched; } @@ -891,7 +897,7 @@ void App::openAppAfterInit (bool mustBeIconified) { restart(); else{ // Launch call if wanted and clean parser - if( mParser->isSet("call")){ + if( mParser->isSet("call") && coreManager->isLastRemoteProvisioningGood()){ QString sipAddress = mParser->value("call"); mParser->parse(cleanParserKeys(mParser, QStringList("call")));// Clean call from parser if(coreManager->started()){ diff --git a/linphone-app/src/app/cli/Cli.cpp b/linphone-app/src/app/cli/Cli.cpp index 79fcda080..d5357837f 100644 --- a/linphone-app/src/app/cli/Cli.cpp +++ b/linphone-app/src/app/cli/Cli.cpp @@ -333,7 +333,7 @@ void Cli::Command::executeUri (const shared_ptr &address) con QStringList parameters = query.split('&'); for(int i = 0 ; i < parameters.size() ; ++i){ QStringList parameter = parameters[i].split('='); - if( parameter[0] != "method"){ + if( parameter[0]!="" && parameter[0] != "method"){ if(parameter.size() > 1) args[parameter[0]] = QByteArray::fromBase64(parameter[1].toUtf8() ); else diff --git a/linphone-app/src/components/core/CoreHandlers.cpp b/linphone-app/src/components/core/CoreHandlers.cpp index 092c69214..08e3e5a7d 100644 --- a/linphone-app/src/components/core/CoreHandlers.cpp +++ b/linphone-app/src/components/core/CoreHandlers.cpp @@ -100,6 +100,18 @@ void CoreHandlers::onCallCreated(const shared_ptr &, emit callCreated(call); } +void CoreHandlers::onConfiguringStatus( + const std::shared_ptr & core, + linphone::ConfiguringState status, + const std::string & message){ + Q_UNUSED(core) + emit setLastRemoteProvisioningState(status); + if(status == linphone::ConfiguringState::Failed){ + qWarning() << "Remote provisioning has failed and was removed : "<< QString::fromStdString(message); + core->setProvisioningUri(""); + } +} + void CoreHandlers::onDtmfReceived( const std::shared_ptr & lc, const std::shared_ptr & call, diff --git a/linphone-app/src/components/core/CoreHandlers.hpp b/linphone-app/src/components/core/CoreHandlers.hpp index 259c1e1bf..d09e3d203 100644 --- a/linphone-app/src/components/core/CoreHandlers.hpp +++ b/linphone-app/src/components/core/CoreHandlers.hpp @@ -54,6 +54,7 @@ signals: void presenceReceived (const QString &sipAddress, const std::shared_ptr &presenceModel); void registrationStateChanged (const std::shared_ptr &proxyConfig, linphone::RegistrationState state); void ecCalibrationResult(linphone::EcCalibratorStatus status, int delayMs); + void setLastRemoteProvisioningState(const linphone::ConfiguringState &state); private: @@ -92,6 +93,11 @@ private: const std::shared_ptr & call ) override; + void onConfiguringStatus( + const std::shared_ptr & core, + linphone::ConfiguringState status, + const std::string & message) override; + void onDtmfReceived( const std::shared_ptr & lc, const std::shared_ptr & call, diff --git a/linphone-app/src/components/core/CoreManager.cpp b/linphone-app/src/components/core/CoreManager.cpp index 8f6e031e3..1bda2a755 100644 --- a/linphone-app/src/components/core/CoreManager.cpp +++ b/linphone-app/src/components/core/CoreManager.cpp @@ -76,8 +76,10 @@ CoreManager *CoreManager::mInstance; CoreManager::CoreManager (QObject *parent, const QString &configPath) : QObject(parent), mHandlers(make_shared(this)) { mCore = nullptr; + mLastRemoteProvisioningState = linphone::ConfiguringState::Skipped; CoreHandlers *coreHandlers = mHandlers.get(); QObject::connect(coreHandlers, &CoreHandlers::coreStarting, this, &CoreManager::startIterate, Qt::QueuedConnection); + QObject::connect(coreHandlers, &CoreHandlers::setLastRemoteProvisioningState, this, &CoreManager::setLastRemoteProvisioningState); QObject::connect(coreHandlers, &CoreHandlers::coreStarted, this, &CoreManager::initCoreManager, Qt::QueuedConnection); QObject::connect(coreHandlers, &CoreHandlers::coreStopped, this, &CoreManager::stopIterate, Qt::QueuedConnection); QObject::connect(coreHandlers, &CoreHandlers::logsUploadStateChanged, this, &CoreManager::handleLogsUploadStateChanged); @@ -378,3 +380,11 @@ void CoreManager::handleLogsUploadStateChanged (linphone::Core::LogCollectionUpl QString CoreManager::getDownloadUrl () { return DownloadUrl; } + +void CoreManager::setLastRemoteProvisioningState(const linphone::ConfiguringState& state){ + mLastRemoteProvisioningState = state; +} + +bool CoreManager::isLastRemoteProvisioningGood(){ + return mLastRemoteProvisioningState != linphone::ConfiguringState::Failed; +} diff --git a/linphone-app/src/components/core/CoreManager.hpp b/linphone-app/src/components/core/CoreManager.hpp index 66360b380..2e063e27a 100644 --- a/linphone-app/src/components/core/CoreManager.hpp +++ b/linphone-app/src/components/core/CoreManager.hpp @@ -145,10 +145,13 @@ public: static bool isInstanciated(){return mInstance!=nullptr;} + bool isLastRemoteProvisioningGood(); + public slots: void initCoreManager(); void startIterate(); void stopIterate(); + void setLastRemoteProvisioningState(const linphone::ConfiguringState& state); signals: void coreManagerInitialized (); @@ -185,6 +188,7 @@ private: std::shared_ptr mHandlers; bool mStarted = false; + linphone::ConfiguringState mLastRemoteProvisioningState; CallsListModel *mCallsListModel = nullptr; ContactsListModel *mContactsListModel = nullptr;