When NatLog runs it starts the ConnectionConsumer and either the
ConntrackProducer or the DevicesProducer. 

Ending the program:
===================

The ConntrackProducer starts conntrack as a separate process which is killed
when the program ends, either (non-daemon) via ^C or (daemon) via option
--terminate.

The DevicesProducer uses threads which are ended when its mutex 'd_signaled'
is notified by the signalHandler member when SIGTERM (or SIGKILL) is received.

ProducerSignals: both ConntrackProducer and DevicesProducer are derived from
ProducerSignals, which is derived from Producer and
FBB::SignalHandler. ProducerSignals adds signals for SIGINT and SIGTERM, and
ConntrackProducer and DevicesProducer override the
FBB::SignalHandler::signalHandler member to terminate either 'conntrack' or
the DevicesProducer's threads.


Rotating log files (see also natfork/README.logging)
==================

classes UDP, TCP and ICMP receive the logDataStream

NatFork::childProcess defines 'ConnectionsConsumer connections' It remains in
existence for as long as NatLog runs (either as daemon or as forground
program).

The stream receiving the std log messages is d_stdMsg, additional msg are
inserted by imsg, when -V is specified.

ConnectionConsumer's constructor defines RotatingStream d_logDataStream, and
opens it, opening RotatingStreambuf::open. The RotatingStreambuf object is
assigned to s_dataRotate.rotationStreambuf. 

The standard log stream's RotatingStreambuf is assigned to
s_stdRotate.rotationStreambuf when NatFork::setupStdMsg is called from
NatFork's constructor.

When calling 'natfork --rotate' the signal SIGHUP is sent to the running
natlog process. When calling 'natfork --rotate-data' the signal SIGALRM is
sent to the running natlog process.

These signals are recognized by NatFork::childProcess, and are received by
NatFork::signalHandler. At SIGHUP RotatingStreambuf::logRotate is called,
rotating the standard log file, At SIGALRM RotatingStreambuf::dataRotate is
called, rotating the log-data file,
