* implement support for LC_GROUP_UPDT (this includes the RPC between the CC and VC's to announce active TG lists); completely and entirely refactor how packet handling threads are done, use a new method introduced for this, thread pool resources. this will ultimately be more resource consuming depending on configuration as the worker threads for packet processing stay alive along side the main process. this should be more performant (because we're not constantly creating and destroying threads) and will prevent error conditions that can cause an extreme number of threads to spawn;
* reduce influx and V.24 thread pool sizes; add calculation of how long between when a packet was Rx to when it began proper processing;
* don't use void* for the task routines;
* rename ThreadPoolCallback to ThreadPoolTask; add some checking around task validness; correct a valgrind issue with RawFrameQueue() write not deleting the buffer before return;
* valgrind cleanups;
* gate active TG from CC to VC updates at 5s (prevent API spam);
* update package version;
* don't attempt to send active TG updates to 0.0.0.0;
* make notification of active TGs CC -> VC optional;
* correct ThreadPool issue on Win32; split UDP PCM audio processing into its own thread; implement user control of inter-audio frame delay and jitter buffer (if using inter-audio frame delay);
* lock queue;
* add custom classes for STL containers that support mutex locking for thread safe operation; modify ChannelLookup and AffiliationLookup to use concurrent containers; modify FNE to use concurrent containers for internal lists;
* remove mutex used for protecting udp packet deque;
* more concurrency solidification;
* further concurrency class usage; bump version number to R04H30;
* add --boot commandline argument to reboot modem into bootloader without any interactive interface;
* cleanup program -h usage display;
* incorrect opcode define;
* update README.md;
* correct incorrect string format for non-useAlternatePortForDiagnostics;
* update README.md;
* simplify influxdb worker task function;
* refactor PL_ACT_PEER_LIST opcode entirely, use zlib and compress list sent and properly block data sent;
* don't waste cycles on building the peer list repeatedly, build it once for the cycle;
* deduplicate compress/decompress code into a static C++ class;
* stylecop file formatting;
* add table locking and remove at find;
* deduplicate implementation;
* cleanup unused label; change FrameQueue's unordered_map to a concurrent one; fix incorrect setting of __lock() for concurrent containers;
* add more timestream map locking;
* fix incorrect behavior when deriving initial timestamp for a call stream; correct incorrect behavior inserting new stream in to timestamps table for frame queue; fix incorrect behavior deriving timestamp for bridge RTP;
* fix issue with naive approach to handling PL_ACT_PEER_LIST data fragementation;
* disable accidental debug code;
* instead of asserting, throw a log error message and discard network packet;
* lock the talkgroup tables when a find is in progress (this will prevent some weird concurrency behaviors because talkgroup rules does not use the concurrent vector);
* if filter headers or terminators is enabled, and the target peer is in the exclusion list, do not send headers or terminators;
* exclusion check should happen before the rewrite check;
* implement dvmpatch, this is a new utility that allows simple TG to TG patching;
* ensure FNE downstream peers that report as peer link have implicit always rules applied to them (i.e. they will *always* receive *all* traffic); correct order of operations when deleting a peer entry (delete connection *AFTER* removing from peers table);
* document concern over possible null ref concurrency issue;
* don't be overly aggressive with FNE process niceness, nice of -10 is more then sufficient;
* Initial work for a peer whitelist/blacklist
* Remove forgotten debug log
* Remove extra line
* Use a dedicated file for white/blacklists
* Add support to REST for managing the peer white/blacklist
* Fix line spaces
* Move to one example file
* implement inital code to support embedded FNE;
* continued implementation of embedded FNE;
* implement initial core functionality for handling FNE side of DMRD, P25D and NXDD;
* update README.md;
* refactor and rename files; clarify that the embedded FNE is not a "routing" FNE, but rather, a "conference bridge" FNE;
* more cleanups making the conference bridge FNE implementation clearer;
* implement proper code for handling peer inclusion/exclusion; implement proper code for validating a call stream;
* add missing comments;
* make the GCC compiler happy when compiling on 32-bit ARM; make old RPI_ARM compiler happy;
* process parrot flag for talkgroup configuration;
* deprecate and remove old tg_acl.dat file infavor of the YAML-based talkgroup rules file for the entire host; deprecate and remove custom Mutex class in favor of std::mutex; expand helper routines for the TalkgroupRulesLookup class (backwards compatibility essentially with TalkgroupIdLookup); fix issue in network core that could cause deactivated TGs to try using talkgroup lookups when talkgroup lookups may be unavailable;
* support code for future use;
* fixup CMakeLists to fix build warnings for ARM 32-bit platform;
* update detection for sendmsg and sendmmsg (handles some platforms that don't define sendmmsg); implement container classes for RTP framing;
* update CMakeLists to handle new files appropriately;
* initial implementation of FrameQueue to generate FNE RTP frames;
* fix incorrect return;
* implement a typedef for unique_ptr uint8_t arrays; fix issue where DMR, P25 and NXDN control classes were accepting BaseNetwork instead of Network; refactor how FrameQueue handles returning messages read from the network; refactor BaseNetwork, Network and FNENetwork to use FrameQueue instead of raw network writes;
* fix issue with handling network state; fix issue handling global network enable flag; fix buffer pointer cleanup;
* add option to CMake to selectively utilize the legacy (non-RTP) network protocol (embedded FNE does not support this and will be disabled for USE_LEGACY_NETWORK; cleanup some error messages when trying to initialize and read the configuration file; fix some minor issues in parsing the new talkgroup rules YAML file; complete conversion of BaseNetwork from raw socket to using the new FrameQueue class; refactor the multi-buffer UDPSocket write function to properly send multiple messages in batch down to the kernel driver (on Linux using sendmmsg); add flag to UDPSocket to indicate whether the socket is "open" or not; correct some RTP formatting issues with the extension header (the payload length is in 32-bit units);
* remove remaining native WIN32/WIN64 type support code (it was unmaintained anyway); correct issues with network socket reading; cleanup some error messages;q
* finally resolve lingering issue with frame queue having random socket issues;
* refactor how BufferVector and sendmmsg UDPSocket write operates; refactor FrameQueue to properly queue messages;
* properly queue packets to send in bursts to peers; add missing ACKs; add missing MSTPONG;
* fix up formatting; remove unnecessary debug statements;
* minor cleanups;
* remove unused function;
* add fields for function and sub-function;
* describe network functions and subfunctions;
* reorganize some code; add checking for packet sequence;
* roll next sequence properly;
* utilize typedef for std::unique_ptr<uint8_t[]>;
* fix usage of __UNIQUE_BUFFER to __UNIQUE_UINT8_ARRAY;
* clean up macro definitions;
* implement sequence counting for the FNE conference bridge;
* remove USE_LEGACY_NETWORK support;
* use macro expansions for this instead of raw buffer lists;
* implement actual transmission of new network func/sub-func behavior;
* deprecate use of packet tags for determining operation, instead use RTP FNE header function and subfunction bytes;
* fix issue with send talkgroups not setting flag to send talkgroups to peers; fix issue when compiling list of activated or deactivated TGs to send to peers; correct strangeness with the RTP sequence counting; fix talkgroup rule lookup on peer when activating or deactivating TGs;
* update copyright dates;
* complain if the RTP and FNE headers don't agree on stream ID;
* for when you forget to update a comment so things actually make sense when you look at it later...;
* remove extraneous check, this is really not necessary since FrameQueue does the size validation;
* clarify the description of the "embedded FNE";
* merge changes from https://github.com/CVSoft/dvmhost to place spec specific limits on channel spacing;
* refactor how network traffic is handled, we don't handle protocol specific stuff within BaseNetwork anymore and offload that to the specific protocol controller instead; implement support to receive peer traffic and repeat (still need to do master to peer);
* convert fatal error about Rx frequency being below base frequency to a warning instead;
* fix incorrect redefine of slotNo;
* correct ret flag for readDMR, readP25 and readNXDN not being set to true by default (stupid me); correct FNE-mode payload offsets for diagnostic packets;
* implement option to selectively enable/disable FNE mode verbose logging information; enhance FNE display of network diagnostic logs; refactor dmr::Control::processNetwork(); refactor RTP packet sequence counting;
* fix incorrect variable used for out-of-sequence log message;
* fix issues with login RTP stream; specially handle certain control opcodes with a different payload type; continued enhancements to sequence counting;
* whoops readd accidentally removed block;
* backout previous lastPeerId code; properly ensure RTP packet sequence is repeated for traffic calls;
* transmit DVM LC_CALL_TERM TSDU at the end of call or if a call drops (hopefully);
* don't reset the packet sequence for a RPTPING;
* rename some class variables for clarity and prep for some future changes;
* add support for priority/immediate Tx queues, these queues are intended to be used sparingly (and mostly for control data) to transmit priority messages [this is an experimental change and may break the build!];
* fix issue where connecting to a non-existent REST API endpoint would crash with an unhandled ASIO exception;
* increase timeout delay for the modem by 4 seconds (the original 4 second delay would be too short for some longer operations);
* use the immediate queue to prioritize control data in some situations [this is experimental and may break things!];
* reformat headers;
* implement toString() functions on TSBKs, CSBKs and RCCHs for future use to replace fixed strings; cleanup DMRDefines slightly;
* fix up and simplify RTP timestamp generation;
* reduce reliance on fixed strings, instead rely on toString() functions from TSBK, CSBK, and RCCH to ensure string consistency for logging purpsoes;
* refactor how and when releaseGrant is called in some situations; ensure channel grant messages traverse the network;
* fix reset of error count between network super-frames;
* add development helper file for VS Code to configure debug launch parameters;
* update CMakeLists to be more condusive to debugging;
* cleanup AUTHORS.md;
* implement parrot for the conference bridge FNE; implement appropriate call detection logic for conference bridge FNE and attempt to prevent call collisons for the same destination;
* add support for altering softpot levels from calibration mode;
* bump copyright information;
* reorganize CMakeLists;
* remove finalcut from the libraries list (this isn't supposed to be included yet!);
* implement initial rework of setup/calibration mode into a TUI; add ENABLE_TUI_SUPPORT CMake option to disable *all* project TUI support; add ENABLE_TUI_SETUP CMake option to disable setup TUI support for dvmhost;
* properly update isConnected flag;
* fix issue with incorrectly placed control;
* part 1 of a fix for #30, the change here would be to allow the VCs to know about the CC to be able to report back to it to release or other wise update grants;
* part 2 of the fix for #30, this implements the actual logic for a VC to notify the CC of a grant status change (touch, release) [NOTE: this could have undesirable consequences and this commit is experimental!];
* update README.md;
* fix terrible copy and paste job resulting in a poor logic check (SMH); print to log the control channel address and port at startup; use the appropriate REST API for touch (whoops);
* remove transmit overlay on shell; add F12 hotkey to trigger transmit; implement support to use F2 and F12 from various configuration/calibration modals; correct some mode strangeness when saving;
* implement support to adjust FIFO buffer sizes from the host;
* add engineering menu to adjust FIFO buffer sizes from setup;
* ensure set button state is set properly for these windows;
* fix stupid --tags non-sense in the git hash reporting;
* ensure certain error conditions for setup mode are displayed when exiting at initial startup;
* more fixes to attempt to satisfy #30 (why is this being so difficult!); correct situation where RESTClient may throw an assert instead of handling an error condition nicely;
* for #30 allow release tg grant and touch tg grant to work regardless of dedicated CC setting;
* file cleanups;
* C++11/14 cleanups, class overrides and pure-virtual implementors /worked/ but were not really correct;
* stringify modem command and reason messages (so log errors are easier on the eyes);
* late update during a branch merge, to fix some latent issues that were missed;