summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2022-08-24 14:09:59 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2022-08-24 14:09:59 +0200
commit691708e7fd4929e5d0835978e9a652e118c641f1 (patch)
tree47aac8621b0475a69080fa53f3c07132998db23f /src
parent210336e55efa9ccc6295f8767935570532e80a41 (diff)
downloaddabmux-691708e7fd4929e5d0835978e9a652e118c641f1.tar.gz
dabmux-691708e7fd4929e5d0835978e9a652e118c641f1.tar.bz2
dabmux-691708e7fd4929e5d0835978e9a652e118c641f1.zip
Support reading mux config in JSON
Diffstat (limited to 'src')
-rw-r--r--src/DabMux.cpp36
-rw-r--r--src/utils.cpp5
-rw-r--r--src/utils.h1
3 files changed, 26 insertions, 16 deletions
diff --git a/src/DabMux.cpp b/src/DabMux.cpp
index f6a69bb..1a367da 100644
--- a/src/DabMux.cpp
+++ b/src/DabMux.cpp
@@ -33,6 +33,7 @@
#include <memory>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/info_parser.hpp>
+#include <boost/property_tree/json_parser.hpp>
#include <cstdio>
#include <iostream>
#include <fstream>
@@ -200,40 +201,29 @@ int main(int argc, char *argv[])
}
#endif
-
-
-
int returnCode = 0;
-
ptree pt;
std::vector<std::shared_ptr<DabOutput> > outputs;
try {
+ string conf_file = "";
+
if (argc == 2) { // Assume the only argument is a config file
- string conf_file = argv[1];
+ conf_file = argv[1];
if (conf_file == "-h") {
printUsage(argv[0], stdout);
throw MuxInitException("Nothing to do");
}
-
- try {
- read_info(conf_file, pt);
-
- }
- catch (runtime_error &e) {
- throw MuxInitException(e.what());
- }
}
else if (argc > 1 && strncmp(argv[1], "-e", 2) == 0) { // use external config file
try {
-
if (argc != 3) {
printUsage(argv[0], stderr);
throw MuxInitException();
}
- string conf_file = argv[2];
+ conf_file = argv[2];
read_info(conf_file, pt);
}
@@ -241,10 +231,24 @@ int main(int argc, char *argv[])
throw MuxInitException(e.what());
}
}
- else {
+
+ if (conf_file.empty()) {
+ printUsage(argv[0], stderr);
throw MuxInitException("No configuration file specified");
}
+ try {
+ if (stringEndsWith(conf_file, ".json")) {
+ read_json(conf_file, pt);
+ }
+ else {
+ read_info(conf_file, pt);
+ }
+ }
+ catch (runtime_error &e) {
+ throw MuxInitException(e.what());
+ }
+
/* Enable Logging to syslog conditionally */
if (pt.get<bool>("general.syslog", false)) {
etiLog.register_backend(std::make_shared<LogToSyslog>());
diff --git a/src/utils.cpp b/src/utils.cpp
index 71e2b5c..c9a2714 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -599,3 +599,8 @@ long hexparse(const std::string& input)
return value;
}
+bool stringEndsWith(const std::string& fullString, const std::string& ending)
+{
+ return fullString.length() >= ending.length() and
+ fullString.compare(fullString.length() - ending.length(), ending.length(), ending) == 0;
+}
diff --git a/src/utils.h b/src/utils.h
index cf64c69..b844676 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -75,3 +75,4 @@ void printSubchannels(const vec_sp_subchannel& subchannels);
long hexparse(const std::string& input);
+bool stringEndsWith(std::string const &fullString, std::string const &ending);