blob: c7eb28b9e1860339e3c98e3a2e2e4b79a0cc5e86 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2020 fortiss GmbH
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial implementation
*******************************************************************************/
#include "MQTTClientConfigParser.h"
#include "arch/devlog.h"
const char *const CMQTTClientConfigFileParser::mConfigKeysNames[] = {
"endpoint",
"username",
"password" };
bool CMQTTClientConfigFileParser::loadConfig(std::string &paFileLocation, std::string &paEndpoint, MQTTConfigFromFile &paResult) {
bool retVal = true;
CConfigFileParser configFileParser(paFileLocation);
bool endpointFound = false;
std::string endpointKey = mConfigKeysNames[MQTTConfigKeys::eEndoint];
if(CConfigFileParser::lookForKeyValueInFile(configFileParser, endpointKey, paEndpoint, endpointFound)) {
if(endpointFound) {
bool moreLinesToRead = true;
while(moreLinesToRead) {
std::pair<std::string, std::string> resultPair;
switch(configFileParser.parseNextLine(resultPair)){
case CConfigFileParser::eOk:
if(0 == resultPair.first.compare(mConfigKeysNames[MQTTConfigKeys::eEndoint])) {
moreLinesToRead = false;
} else if(0 == resultPair.first.compare(mConfigKeysNames[MQTTConfigKeys::eUsername])) {
paResult.mUsername = resultPair.second;
} else if(0 == resultPair.first.compare(mConfigKeysNames[MQTTConfigKeys::ePassword])) {
paResult.mPassword = resultPair.second;
}
else {
DEVLOG_WARNING("[CMQTTClientConfigFileParser]: They %s was not recognized so it will be omitted\n", resultPair.first.c_str());
}
break;
case CConfigFileParser::eEmptyLine:
//do nothing, keep reading
break;
case CConfigFileParser::eEndOfFile:
moreLinesToRead = false;
break;
case CConfigFileParser::eWrongLine:
case CConfigFileParser::eFileNotOpened:
case CConfigFileParser::eInternalError:
default:
retVal = false;
moreLinesToRead = false;
break;
}
}
} else { //if the endpoint is not found, configuration is initialize as default
DEVLOG_INFO("[CMQTTClientConfigFileParser]: No entry for endpoint %s was found in file %s\n", paEndpoint.c_str(), paFileLocation.c_str());
}
} else { //if lookForEndpointInFile fails, the errors was already logged
retVal = false;
}
return retVal;
}