/* * Author: * Sven Czarnian * Brief: * Implements the identifier file format * Copyright: * 2021 Sven Czarnian * License: * GNU General Public License v3 (GPLv3) */ #include #include #include #include using namespace aman; IdentifierFileFormat::IdentifierFileFormat() : FileFormat() { } bool IdentifierFileFormat::parse(const std::string& filename, Communication& config) { config.valid = true; std::ifstream stream(filename); if (false == stream.is_open()) { this->m_errorMessage = "Unable to open the configuration file: " + filename; this->m_errorLine = 0; config.valid = false; return false; } std::string line; std::uint32_t lineOffset = 0; while (std::getline(stream, line)) { std::string value; lineOffset += 1; /* skip a new line */ if (0 == line.length()) continue; /* trimm the line and check if a comment line is used */ std::string trimmed = String::trim(line); if (0 == trimmed.find_first_of('#', 0)) continue; auto entry = String::splitString(trimmed, "="); if (2 > entry.size()) { this->m_errorLine = lineOffset; this->m_errorMessage = "Invalid configuration entry"; config.valid = false; return false; } else if (2 < entry.size()) { for (std::size_t idx = 1; idx < entry.size() - 1; ++idx) value += gsl::at(entry, idx) + "="; value += entry.back(); } else { value = gsl::at(entry, 1); } /* found an invalid line */ if (0 == value.length()) { this->m_errorLine = lineOffset; this->m_errorMessage = "Invalid entry"; config.valid = false; return false; } if ("UID" == gsl::at(entry, 0)) { config.identifier = gsl::at(entry, 1); } else { this->m_errorLine = lineOffset; this->m_errorMessage = "Unknown entry: " + gsl::at(entry, 0); config.valid = false; return false; } } if (0 == lineOffset) { this->m_errorLine = 0; this->m_errorMessage = "No data found in " + filename; config.valid = false; return false; } return true; }