aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2017-01-28 16:14:08 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2017-01-28 16:14:08 +0100
commit000796dc3d909f179fb6586fae7e9ce986440576 (patch)
treea6b08f5866af7d5943052d18b7162ba3ed897d37
parentaf782e67db704d1d58c265fb4e1ff12aa1526596 (diff)
downloaddabmux-000796dc3d909f179fb6586fae7e9ce986440576.tar.gz
dabmux-000796dc3d909f179fb6586fae7e9ce986440576.tar.bz2
dabmux-000796dc3d909f179fb6586fae7e9ce986440576.zip
Avoid uninitialised fields, modernise DabService::nbComponent
-rw-r--r--src/DabMultiplexer.cpp3
-rw-r--r--src/ManagementServer.h12
-rw-r--r--src/MuxElements.cpp20
-rw-r--r--src/MuxElements.h44
-rw-r--r--src/dabOutput/dabOutput.h18
-rw-r--r--src/dabOutput/edi/AFPacket.h2
-rw-r--r--src/dabOutput/edi/TagItems.h38
-rw-r--r--src/fig/FIG.h2
-rw-r--r--src/utils.cpp2
-rw-r--r--src/utils.h2
-rw-r--r--src/zmqinput-keygen.c1
11 files changed, 65 insertions, 79 deletions
diff --git a/src/DabMultiplexer.cpp b/src/DabMultiplexer.cpp
index 51a67e7..97336d1 100644
--- a/src/DabMultiplexer.cpp
+++ b/src/DabMultiplexer.cpp
@@ -75,6 +75,7 @@ DabMultiplexer::DabMultiplexer(
sync(0x49C5F8),
currentFrame(0),
ensemble(std::make_shared<dabEnsemble>()),
+ m_clock_tai(),
fig_carousel(ensemble)
{
RC_ADD_PARAMETER(frames,
@@ -178,7 +179,7 @@ void DabMultiplexer::prepare()
"connection?";
etiLog.level(error) << err_msg;
- throw e;
+ throw;
}
}
diff --git a/src/ManagementServer.h b/src/ManagementServer.h
index 2b9b7b4..aade3d0 100644
--- a/src/ManagementServer.h
+++ b/src/ManagementServer.h
@@ -329,6 +329,9 @@ class ManagementServer
m_thread.join();
}
+ ManagementServer(const ManagementServer& other) = delete;
+ ManagementServer& operator=(const ManagementServer& other) = delete;
+
void open(int listenport)
{
m_listenport = listenport;
@@ -362,15 +365,12 @@ class ManagementServer
zmq::context_t m_zmq_context;
zmq::socket_t m_zmq_sock;
- // no copying (because of the thread)
- ManagementServer(const ManagementServer& other);
-
void serverThread(void);
void handle_message(zmq::message_t& zmq_message);
bool isInputRegistered(std::string& id);
- int m_listenport;
+ int m_listenport = 0;
// serverThread runs in a separate thread
std::atomic<bool> m_running;
@@ -401,10 +401,10 @@ class ManagementServer
std::string getStateJSON();
// mutex for accessing the map
- mutable boost::mutex m_statsmutex;
+ boost::mutex m_statsmutex;
/******** Configuration Data *******/
- mutable boost::mutex m_configmutex;
+ boost::mutex m_configmutex;
boost::property_tree::ptree m_pt;
};
diff --git a/src/MuxElements.cpp b/src/MuxElements.cpp
index 9dbe5fc..f8a3eb4 100644
--- a/src/MuxElements.cpp
+++ b/src/MuxElements.cpp
@@ -412,7 +412,7 @@ const string DabComponent::get_parameter(const string& parameter) const
}
-subchannel_type_t DabService::getType(std::shared_ptr<dabEnsemble> ensemble) const
+subchannel_type_t DabService::getType(const std::shared_ptr<dabEnsemble> ensemble) const
{
vector<DabSubchannel*>::iterator subchannel;
auto component =
@@ -429,7 +429,7 @@ subchannel_type_t DabService::getType(std::shared_ptr<dabEnsemble> ensemble) con
return (*subchannel)->type;
}
-bool DabService::isProgramme(std::shared_ptr<dabEnsemble> ensemble) const
+bool DabService::isProgramme(const std::shared_ptr<dabEnsemble>& ensemble) const
{
bool ret = false;
switch (getType(ensemble)) {
@@ -452,18 +452,14 @@ bool DabService::isProgramme(std::shared_ptr<dabEnsemble> ensemble) const
}
-unsigned char DabService::nbComponent(vector<DabComponent*>& components) const
+unsigned char DabService::nbComponent(const vector<DabComponent*>& components) const
{
- int nb = 0;
- vector<DabComponent*>::iterator current;
-
- for (current = components.begin(); current != components.end();
- ++current) {
- if ((*current)->serviceId == id) {
- ++nb;
- }
+ size_t count = std::count_if(components.begin(), components.end(),
+ [&](const DabComponent* c) { return c->serviceId == id;} );
+ if (count > 0xFF) {
+ throw std::logic_error("Invalid number of components in service");
}
- return nb;
+ return count;
}
void DabService::set_parameter(const string& parameter,
diff --git a/src/MuxElements.h b/src/MuxElements.h
index 968fb14..98e4741 100644
--- a/src/MuxElements.h
+++ b/src/MuxElements.h
@@ -85,9 +85,8 @@ const char * const annoucement_flags_names[] = {
/* Class representing an announcement cluster for FIG 0/19 */
class AnnouncementCluster : public RemoteControllable {
public:
- AnnouncementCluster(std::string name) :
- RemoteControllable(name),
- m_active(false)
+ AnnouncementCluster(const std::string& name) :
+ RemoteControllable(name)
{
RC_ADD_PARAMETER(active, "Signal this announcement [0 or 1]");
@@ -100,8 +99,8 @@ class AnnouncementCluster : public RemoteControllable {
"Stop signalling this announcement after a delay [ms]");
}
- uint8_t cluster_id;
- uint16_t flags;
+ uint8_t cluster_id = 0;
+ uint16_t flags = 0;
std::string subchanneluid;
std::string tostring(void) const;
@@ -112,7 +111,7 @@ class AnnouncementCluster : public RemoteControllable {
bool is_active(void);
private:
- bool m_active;
+ bool m_active = false;
boost::optional<
std::chrono::time_point<
@@ -179,7 +178,7 @@ class DabLabel
/* The flag field selects which label characters make
* up the short label
*/
- uint16_t m_flag;
+ uint16_t m_flag = 0xFFFF;
/* The m_label is not padded in any way */
std::string m_label;
@@ -211,18 +210,20 @@ class dabEnsemble : public RemoteControllable {
virtual const std::string get_parameter(const std::string& parameter) const;
/* all fields are public, since this was a struct before */
- uint16_t id;
- uint8_t ecc;
+ uint16_t id = 0;
+ uint8_t ecc = 0;
DabLabel label;
- uint8_t mode;
+ uint8_t mode = 0;
/* Use the local time to calculate the lto */
- bool lto_auto;
+ bool lto_auto = true;
- int lto; // local time offset in half-hours
+ int lto = 0; // local time offset in half-hours
// range: -24 to +24
- int international_table;
+ // 1 corresponds to the PTy used in RDS
+ // 2 corresponds to program types used in north america
+ int international_table = 1;
std::vector<std::shared_ptr<DabService> > services;
std::vector<DabComponent*> components;
@@ -383,7 +384,8 @@ class DabService : public RemoteControllable
public:
DabService(std::string& uid) :
RemoteControllable(uid),
- uid(uid)
+ uid(uid),
+ label()
{
RC_ADD_PARAMETER(label, "Label and shortlabel [label,short]");
RC_ADD_PARAMETER(pty, "Programme Type");
@@ -391,21 +393,21 @@ class DabService : public RemoteControllable
std::string uid;
- uint32_t id;
- unsigned char pty;
- unsigned char language;
+ uint32_t id = 0;
+ unsigned char pty = 0;
+ unsigned char language = 0;
/* ASu (Announcement support) flags: this 16-bit flag field shall
* specify the type(s) of announcements by which it is possible to
* interrupt the reception of the service. The interpretation of this
* field shall be as defined in TS 101 756, table 14.
*/
- uint16_t ASu;
+ uint16_t ASu = 0;
std::vector<uint8_t> clusters;
- subchannel_type_t getType(std::shared_ptr<dabEnsemble> ensemble) const;
- bool isProgramme(std::shared_ptr<dabEnsemble> ensemble) const;
- unsigned char nbComponent(std::vector<DabComponent*>& components) const;
+ subchannel_type_t getType(const std::shared_ptr<dabEnsemble> ensemble) const;
+ bool isProgramme(const std::shared_ptr<dabEnsemble>& ensemble) const;
+ unsigned char nbComponent(const std::vector<DabComponent*>& components) const;
DabLabel label;
diff --git a/src/dabOutput/dabOutput.h b/src/dabOutput/dabOutput.h
index 11b78e6..2e5f489 100644
--- a/src/dabOutput/dabOutput.h
+++ b/src/dabOutput/dabOutput.h
@@ -59,17 +59,15 @@ struct edi_destination_t {
};
struct edi_configuration_t {
- edi_configuration_t() :
- verbose(false) {}
- unsigned chunk_len; // RSk, data length of each chunk
- unsigned fec; // number of fragments that can be recovered
- bool dump; // dump a file with the EDI packets
- bool verbose;
- bool enable_pft; // Enable protection and fragmentation
- unsigned int tagpacket_alignment;
+ unsigned chunk_len = 207; // RSk, data length of each chunk
+ unsigned fec = 0; // number of fragments that can be recovered
+ bool dump = false; // dump a file with the EDI packets
+ bool verbose = false;
+ bool enable_pft = false; // Enable protection and fragmentation
+ unsigned int tagpacket_alignment = 0;
std::vector<edi_destination_t> destinations;
- unsigned int dest_port; // common destination port, because it's encoded in the transport layer
- unsigned int latency_frames; // if nonzero, enable interleaver with a latency of latency_frames * 24ms
+ unsigned int dest_port = 0; // common destination port, because it's encoded in the transport layer
+ unsigned int latency_frames = 0; // if nonzero, enable interleaver with a latency of latency_frames * 24ms
bool enabled() const { return destinations.size() > 0; }
bool interleaver_enabled() const { return latency_frames > 0; }
diff --git a/src/dabOutput/edi/AFPacket.h b/src/dabOutput/edi/AFPacket.h
index 0ffd13f..b4ccef1 100644
--- a/src/dabOutput/edi/AFPacket.h
+++ b/src/dabOutput/edi/AFPacket.h
@@ -52,7 +52,7 @@ class AFPacketiser
private:
static const bool have_crc = true;
- uint16_t seq; //counter that overflows at 0xFFFF
+ uint16_t seq = 0; //counter that overflows at 0xFFFF
bool m_verbose;
};
diff --git a/src/dabOutput/edi/TagItems.h b/src/dabOutput/edi/TagItems.h
index fb876cc..856d25b 100644
--- a/src/dabOutput/edi/TagItems.h
+++ b/src/dabOutput/edi/TagItems.h
@@ -54,30 +54,20 @@ class TagStarPTR : public TagItem
class TagDETI : public TagItem
{
public:
- TagDETI()
- {
- // set optional fields to "not present"
- atstf = 0;
- rfudf = 0;
- ficf = 0;
-
- rfa = 0; //shall be zero
- rfu = 0; //mnsc is valid
- }
std::vector<uint8_t> Assemble();
/***** DATA in intermediary format ****/
// For the ETI Header: must be defined !
- uint8_t stat;
- uint8_t mid;
- uint8_t fp;
- uint8_t rfa;
- uint8_t rfu;
- uint16_t mnsc;
- uint16_t dflc; // modulo 5000 frame counter
+ uint8_t stat = 0;
+ uint8_t mid = 0;
+ uint8_t fp = 0;
+ uint8_t rfa = 0;
+ uint8_t rfu = 0; // MNSC is valid
+ uint16_t mnsc = 0;
+ uint16_t dflc = 0; // modulo 5000 frame counter
// ATST (optional)
- bool atstf; // presence of atst data
+ bool atstf = false; // presence of atst data
/* UTCO: Offset (in seconds) between UTC and the Seconds value. The
* value is expressed as an unsigned 8-bit quantity. As of February
@@ -93,14 +83,14 @@ class TagDETI : public TagItem
* where the TAI-UTC offset is given by the USNO bulletin using
* the ClockTAI module.
*/
- uint8_t utco;
+ uint8_t utco = 0;
void set_tai_utc_offset(int tai_utc_offset) { utco = tai_utc_offset - 32; }
/* The number of SI seconds since 2000-01-01 T 00:00:00 UTC as an
* unsigned 32-bit quantity
*/
- uint32_t seconds;
+ uint32_t seconds = 0;
void set_seconds(std::chrono::system_clock::time_point t);
@@ -110,16 +100,16 @@ class TagDETI : public TagItem
* significant 8 bits of the TIST field of the incoming STI-D(LI)
* frame, if required, may be carried in the RFAD field.
*/
- uint32_t tsta;
+ uint32_t tsta = 0xFFFFFF;
// the FIC (optional)
- bool ficf;
+ bool ficf = false;
const unsigned char* fic_data;
size_t fic_length;
// rfu
- bool rfudf;
- uint32_t rfud;
+ bool rfudf = false;
+ uint32_t rfud = 0;
};
diff --git a/src/fig/FIG.h b/src/fig/FIG.h
index 2325252..416ae44 100644
--- a/src/fig/FIG.h
+++ b/src/fig/FIG.h
@@ -36,7 +36,7 @@ namespace FIC {
class FIGRuntimeInformation {
public:
- FIGRuntimeInformation(std::shared_ptr<dabEnsemble> e) :
+ FIGRuntimeInformation(std::shared_ptr<dabEnsemble>& e) :
currentFrame(0),
ensemble(e),
factumAnalyzer(false) {}
diff --git a/src/utils.cpp b/src/utils.cpp
index 4c08e8b..38e38ec 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -402,7 +402,7 @@ static void printLinking(const shared_ptr<dabEnsemble> ensemble)
}
}
-void printEnsemble(const shared_ptr<dabEnsemble> ensemble)
+void printEnsemble(const shared_ptr<dabEnsemble>& ensemble)
{
etiLog.log(info, "Ensemble");
etiLog.log(info, " id: 0x%lx (%lu)", ensemble->id, ensemble->id);
diff --git a/src/utils.h b/src/utils.h
index 94712cd..995e8b6 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -75,7 +75,7 @@ void printComponents(std::vector<DabComponent*>& components);
void printSubchannels(std::vector<DabSubchannel*>& subchannels);
/* Print information about the whole ensemble */
-void printEnsemble(const std::shared_ptr<dabEnsemble> ensemble);
+void printEnsemble(const std::shared_ptr<dabEnsemble>& ensemble);
/* Print detailed component information */
void printComponent(DabComponent* component);
diff --git a/src/zmqinput-keygen.c b/src/zmqinput-keygen.c
index ee0042e..cb7f9b2 100644
--- a/src/zmqinput-keygen.c
+++ b/src/zmqinput-keygen.c
@@ -24,7 +24,6 @@
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
-#include <zmq_utils.h>
#include <zmq.h>
#include <sys/types.h>
#include <sys/stat.h>