//
// config.hpp
//
// Copyright (c) 2019 2020 Andrea Bondavalli. All rights reserved.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
#ifndef _CONFIG_HPP_
#define _CONFIG_HPP_
#include
#include
#include
class Config {
public:
/* save new config to json file */
bool save(const Config& config);
/* build config from json file */
static std::shared_ptr parse(const std::string& filename,
bool driver_restart);
/* attributes retrieved from config json */
const std::string& get_http_addr_str() const { return http_addr_str_; };
uint16_t get_http_port() const { return http_port_; };
uint16_t get_rtsp_port() const { return rtsp_port_; };
const std::string& get_http_base_dir() const { return http_base_dir_; };
uint8_t get_streamer_files_num() const { return streamer_files_num_; };
uint16_t get_streamer_file_duration() const {
return streamer_file_duration_;
};
uint8_t get_streamer_player_buffer_files_num() const {
return streamer_player_buffer_files_num_;
};
uint8_t get_streamer_channels() const { return streamer_channels_; };
bool get_streamer_enabled() const;
int get_log_severity() const { return log_severity_; };
uint32_t get_playout_delay() const { return playout_delay_; };
uint32_t get_tic_frame_size_at_1fs() const { return tic_frame_size_at_1fs_; };
uint32_t get_max_tic_frame_size() const { return max_tic_frame_size_; };
uint32_t get_sample_rate() const { return sample_rate_; };
const std::string& get_rtp_mcast_base() const { return rtp_mcast_base_; };
const std::string& get_sap_mcast_addr() const { return sap_mcast_addr_; };
uint16_t get_rtp_port() const { return rtp_port_; };
uint8_t get_ptp_domain() const { return ptp_domain_; };
uint8_t get_ptp_dscp() const { return ptp_dscp_; };
uint16_t get_sap_interval() const { return sap_interval_; };
const std::string& get_syslog_proto() const { return syslog_proto_; };
const std::string& get_syslog_server() const { return syslog_server_; };
const std::string& get_status_file() const { return status_file_; };
const std::string& get_interface_name() const { return interface_name_; };
const std::string& get_config_filename() const { return config_filename_; };
const std::string& get_custom_node_id() const { return custom_node_id_; };
std::string get_node_id() const;
bool get_auto_sinks_update() const { return auto_sinks_update_; };
/* attributes set during init */
const std::array& get_mac_addr() const { return mac_addr_; };
const std::string& get_mac_addr_str() const { return mac_str_; };
uint32_t get_ip_addr() const { return ip_addr_; };
const std::string& get_ip_addr_str() const { return ip_str_; };
bool get_daemon_restart() const { return daemon_restart_; };
bool get_driver_restart() const { return driver_restart_; };
bool get_mdns_enabled() const;
int get_interface_idx() const { return interface_idx_; };
const std::string& get_ptp_status_script() const {
return ptp_status_script_;
}
void set_http_addr_str(std::string_view http_addr_str) {
http_addr_str_ = http_addr_str;
};
void set_http_port(uint16_t http_port) { http_port_ = http_port; };
void set_rtsp_port(uint16_t rtsp_port) { rtsp_port_ = rtsp_port; };
void set_http_base_dir(std::string_view http_base_dir) {
http_base_dir_ = http_base_dir;
};
void set_streamer_channels(uint8_t streamer_channels) {
streamer_channels_ = streamer_channels;
};
void set_streamer_files_num(uint8_t streamer_files_num) {
streamer_files_num_ = streamer_files_num;
};
void set_streamer_file_duration(uint16_t streamer_file_duration) {
streamer_file_duration_ = streamer_file_duration;
};
void set_streamer_player_buffer_files_num(
uint8_t streamer_player_buffer_files_num) {
streamer_player_buffer_files_num_ = streamer_player_buffer_files_num;
};
void set_streamer_enabled(uint8_t streamer_enabled) {
streamer_enabled_ = streamer_enabled;
};
void set_log_severity(int log_severity) { log_severity_ = log_severity; };
void set_playout_delay(uint32_t playout_delay) {
playout_delay_ = playout_delay;
};
void set_tic_frame_size_at_1fs(uint32_t tic_frame_size_at_1fs) {
tic_frame_size_at_1fs_ = tic_frame_size_at_1fs;
};
void set_max_tic_frame_size(uint32_t max_tic_frame_size) {
max_tic_frame_size_ = max_tic_frame_size;
};
void set_sample_rate(uint32_t sample_rate) { sample_rate_ = sample_rate; };
void set_rtp_mcast_base(std::string_view rtp_mcast_base) {
rtp_mcast_base_ = rtp_mcast_base;
};
void set_sap_mcast_addr(std::string_view sap_mcast_addr) {
sap_mcast_addr_ = sap_mcast_addr;
};
void set_rtp_port(uint16_t rtp_port) { rtp_port_ = rtp_port; };
void set_ptp_domain(uint8_t ptp_domain) { ptp_domain_ = ptp_domain; };
void set_ptp_dscp(uint8_t ptp_dscp) { ptp_dscp_ = ptp_dscp; };
void set_sap_interval(uint16_t sap_interval) {
sap_interval_ = sap_interval;
};
void set_syslog_proto(std::string_view syslog_proto) {
syslog_proto_ = syslog_proto;
};
void set_syslog_server(std::string_view syslog_server) {
syslog_server_ = syslog_server;
};
void set_status_file(std::string_view status_file) {
status_file_ = status_file;
};
void set_interface_name(std::string_view interface_name) {
interface_name_ = interface_name;
};
void set_ip_addr_str(std::string_view ip_str) { ip_str_ = ip_str; };
void set_ip_addr(uint32_t ip_addr) { ip_addr_ = ip_addr; };
void set_mac_addr_str(std::string_view mac_str) { mac_str_ = mac_str; };
void set_mac_addr(const std::array& mac_addr) {
mac_addr_ = mac_addr;
};
void set_mdns_enabled(bool enabled) { mdns_enabled_ = enabled; };
void set_interface_idx(int index) { interface_idx_ = index; };
void set_ptp_status_script(std::string_view script) {
ptp_status_script_ = script;
};
void set_custom_node_id(std::string_view node_id) {
custom_node_id_ = node_id;
};
void set_auto_sinks_update(bool auto_sinks_update) {
auto_sinks_update_ = auto_sinks_update;
};
void set_driver_restart(bool restart) { driver_restart_ = restart; }
friend bool operator!=(const Config& lhs, const Config& rhs) {
return lhs.get_http_addr_str() != rhs.get_http_addr_str() ||
lhs.get_http_port() != rhs.get_http_port() ||
lhs.get_rtsp_port() != rhs.get_rtsp_port() ||
lhs.get_http_base_dir() != rhs.get_http_base_dir() ||
lhs.get_streamer_channels() != rhs.get_streamer_channels() ||
lhs.get_streamer_files_num() != rhs.get_streamer_files_num() ||
lhs.get_streamer_file_duration() !=
rhs.get_streamer_file_duration() ||
lhs.get_streamer_player_buffer_files_num() !=
rhs.get_streamer_player_buffer_files_num() ||
lhs.get_streamer_enabled() != rhs.get_streamer_enabled() ||
lhs.get_log_severity() != rhs.get_log_severity() ||
lhs.get_playout_delay() != rhs.get_playout_delay() ||
lhs.get_tic_frame_size_at_1fs() != rhs.get_tic_frame_size_at_1fs() ||
lhs.get_max_tic_frame_size() != rhs.get_max_tic_frame_size() ||
lhs.get_sample_rate() != rhs.get_sample_rate() ||
lhs.get_rtp_mcast_base() != rhs.get_rtp_mcast_base() ||
lhs.get_sap_mcast_addr() != rhs.get_sap_mcast_addr() ||
lhs.get_rtp_port() != rhs.get_rtp_port() ||
lhs.get_ptp_domain() != rhs.get_ptp_domain() ||
lhs.get_ptp_dscp() != rhs.get_ptp_dscp() ||
lhs.get_sap_interval() != rhs.get_sap_interval() ||
lhs.get_syslog_proto() != rhs.get_syslog_proto() ||
lhs.get_syslog_server() != rhs.get_syslog_server() ||
lhs.get_status_file() != rhs.get_status_file() ||
lhs.get_interface_name() != rhs.get_interface_name() ||
lhs.get_mdns_enabled() != rhs.get_mdns_enabled() ||
lhs.get_auto_sinks_update() != rhs.get_auto_sinks_update() ||
lhs.get_custom_node_id() != rhs.get_custom_node_id();
};
friend bool operator==(const Config& lhs, const Config& rhs) {
return !(lhs != rhs);
};
private:
/* from json */
std::string http_addr_str_{""};
uint16_t http_port_{8080};
uint16_t rtsp_port_{8854};
std::string http_base_dir_{"../webui/dist"};
uint8_t streamer_channels_{8};
uint8_t streamer_files_num_{8};
uint16_t streamer_file_duration_{1};
uint8_t streamer_player_buffer_files_num_{1};
bool streamer_enabled_{false};
int log_severity_{2};
uint32_t playout_delay_{0};
uint32_t tic_frame_size_at_1fs_{48};
uint32_t max_tic_frame_size_{1024};
uint32_t sample_rate_{48000};
std::string rtp_mcast_base_{"239.1.0.1"};
std::string sap_mcast_addr_{"224.2.127.254"};
uint16_t rtp_port_{5004};
uint8_t ptp_domain_{0};
uint8_t ptp_dscp_{46};
uint16_t sap_interval_{300};
std::string syslog_proto_{""};
std::string syslog_server_{""};
std::string status_file_{"./status.json"};
std::string interface_name_{"eth0"};
bool mdns_enabled_{true};
std::string ptp_status_script_;
std::string custom_node_id_;
std::string node_id_;
bool auto_sinks_update_{true};
/* set during init */
std::array mac_addr_{0, 0, 0, 0, 0, 0};
std::string mac_str_;
uint32_t ip_addr_{0};
std::string ip_str_;
int interface_idx_;
std::string config_filename_;
/* reconfig needs driver restart */
bool driver_restart_{true};
/* reconfig needs daemon restart */
bool daemon_restart_{false};
};
#endif