* simplify and refactor peer-link packet handling;
* bump version number to match dev branch; alter logging for peer-link data;
* warn on packets generated over 4K;
* don't clear map directly, use clear() helper;
* use parens vs braces for initializers; correct case fall-thru on SysView;
* for clarity relabel RPT_CLOSING and MST_CLOSING to RPT_DISC and MST_DISC;
* discontinue support for TRANSFER command on the traffic port entirely; hide useAlternatePortForDiagnostics and allowActivityTransfer options in FNE configuration; add stern warnings and alerts if the FNE disabled either useAlternatePortForDiagnostics or allowActivityTransfer (these are really critical operations); alert in peer log if the master does not report support for the alternate port for diagnostics;
* make oversized packet warning clearer (this warning is not a end-user warning, the user can't do antyhing about this this is a developer BUGBUG warning);
* apply recv timeout on InfluxDB operations (this hopefully will prevent stuck queries if the InfluxDB server dies while query is in progress);
* prevent InfluxDB query from becoming stuck in a tight infinite loop within select();
* don't bother handling responses from the influx query, remove fluxQL (we don't make queries with this library);
* cleanup unused vars;
* generate an error log if a fluxql worker fails to write data to influx;
* implement support to save/retain configuration pushed from peer link connections;
* fix memory leak caused by not deleting unused packetbuffer;
* refactor ACL updates;
* refactor log messages for channels to be <channel ID>-<channel No> in most cases where applicable;
* add more <channel ID>-<channel No> changes;
* whoops wrong variable type;
* correct fatal bug where update lookup timer was never started;
* check the RF state at the bottom of a talkgroup hang expiration timer for RF talkgroup activity, if the state is not listening, handle the end of call as if it was a frame loss;
* fix potential memory leak in PacketBuffer fragmenter, the encoder was not deleting the storage buffer before end of scope;
* ensure decompressed buffer is deleted;
* ensure decompressed buffer is deleted in error conditions too;
* add support to disable adjacent site broadcast;
* lay the groundwork for explicit channel configuration;
* [EXPERIMENTAL] implement experimental support for a CC to define explicit channel identity information for voice channels (NOTE: this does *NOT* implement support for hotspots to operate in explicit channel mode!);
* don't use the concurrent::unordered_map for this (this gives me great pause for a problem...);
* add some extra debug trace;
* add some extra debug trace;
* display MI data during calibration; update modem submodule;
* this is ugly, and I hate it, but to fix very strange WIN32 deadlock situations, we'll selectively use our concurrent unordered_map on non-WIN32, and on WIN32 use the std unordered_map + a local mutex;
* update modem submodule; change P25 Voice MI logging messages from DEBUG to MESSAGE; fix issue in HostSetup/HostCal where PDU header decoding was broken;
* only dump MI data if the call is encrypted (don't bother displaying zeros for a clear call);
* whoops check right variable;
* cleanup and clarify MI logging;
* cleanup and clarify MI logging (again LDU2 was out of log sequence);
* hate me later, dont use a colon as the string separator for the MI bytes, use equals;
* log DMR PI MI dta;
* refactor debug messaging for HDU;
* reorganize core meta-programming macros, move class property macros into ClassProperties.h, move bit manipulation into BitManipulation.h, move VLA into VariableLengthArray.h; rename meta-programming macros for clarity most of these macros declare some sort of variable and/or functions, as such I'm dropping the notation for __BLAHBLAH and using DECLARE_BLAHBLAH instead; better document class property meta-programming macros; refactor __GET/__SET_UINT16 into __GET/__SET_UINT24 these macros set 24-bit values from and to buffers, this will reduce programming confusion;
* add property documentation for some KMM classes;
* correct file copyright headers;
* change commenting to reflect section more clearly;
* use proper GPL license for file;
* detect arch and properly update internal variable;
* handle instance where the system does not return a valid processor type for arch detection;
* display target arch along side host arch if we're cross compiling;
* strip newlines;
* fix missing parens around response encoding;
* 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;
* add support for building TUI on arm64 and arm
* update deprecated asset release action
* add support for building TUI on arm64 and arm; update deprecated asset release action
* migrate away from REST API for inter-dvmhost operations towards a custom UDP RPC framework;
* replace config parameters for REST API in some places with properly named RPC; swap peer Network, FNE DiagNetwork and FNENetwork over from if-else-if ladders to switch statements (switch statements perform logically better after compilation because the compiler tends to optimize these into jump-tables which execute faster);
* continued work on inter-dvmhost REST to RPC transition;
* update build bumper for R04G20 to R04G21;
* cleanup config file;
* clean up doc/commenting;