# @(#) Gigapxy change log.
#*****************************************************************
# Copyright 2012-2020 Pavel V. Cherenkov (pcherenkov@gigapxy.com)
#
#  This file is part of Gigapxy.
#
#  Gigapxy is commercial software: all rights to it belong
#  to Pavel V. Cherenkov, its author.
#
#*****************************************************************/

##
#  Version 1.0 (Release 1.0):
##
* Thu Jul 25 2024 Pavel Cherenkov <pcherenkov@gigapxy.com> - 1.0-2.40
- FIX: Builds under FreeBSD 14.1.
* Wed Jan 17 2024 Pavel Cherenkov <pcherenkov@gigapxy.com> - 1.0-2.39
- FIX: (lib) allow platform evaluation for RHEL clones other than CentOS;
- FIX: Debian 12 build issues;
- FIX: script updated (for proxmox compatibility);
- FIX: duplicate global struct definitions (to build under Debian 11);
- FIX: build utils under Ubuntu 20.04;
- FIX: large reports would be polluted with zero bytes.

* Thu Apr 30 2020 Pavel Cherenkov <pcherenkov@gigapxy.com> - 1.0-2.30
-   FIX: gws may quit if /tmp is cleaned out;
-   FIX: speed_delta must be <0 to be RED in html reports.

* Mon Dec 9 2019 Pavel Cherenkov <pcherenkov@gigapxy.com> - 1.0-2.27
-   FIX: builds under FreeBSD 12.01 (clang 8.x)

* Sun Dec 8 2019 Pavel Cherenkov <pcherenkov@gigapxy.com> - 1.0-2.26
-   ADD: log invalid URL in a rejected request;
-   ADD: -4 logpfx for gws/gng;
-   ADD: warnings logged if license expires soon;
-   FIX: ng.bufd.burst_mode is 2 (BURST) by default;
-   FIX: bug#691: client_busy_timeout_sec is now 0=unlimited by default;
-   FIX: bug#661: ws.auth.no_query_fwd disables passing queries to chained servers;

* Fri Dec 28 2018 Pavel Cherenkov <pcherenkov@gigapxy.com> - 1.0-2.17
-   FIX: bug#648: gws might redirect disabled access log to another file;

* Wed Dec 26 2018 Pavel Cherenkov <pcherenkov@gigapxy.com> - 1.0-2.16
-   ADD: gigapxy_setup.pdf document (/usr/share/doc/gigapxy);
-   FIX: gigapxy user keeps home directory (/opt/gigapxy) after reboot;
-   ADD: bufd-dedicated document (on the website);

* Fri Dec 14 2018 Pavel Cherenkov <pcherenkov@gigapxy.com> - 1.0-2.12
-   ADD: Ubuntu 18.04 LTS support;
-   FIX: added dependency on net-tools (to include ifconfig);
-   FIX: installation on Proxmox enabled;
-   FIX: accept long URLs, increases nametag length to 384;
-   FIX: support licenses till 2022-09-25;

* Tue Mar 21 2017 Pavel Cherenkov <pcherenkov@gigapxy.com> - 1.0-2.2
-   FIX: bug386: issues handling (by single gng) >1024 clients under FreeBSD;
-   ADD: allow 2-year licenses;

* Thu Feb 16 2017 Pavel Cherenkov <pcherenkov@gigapxy.com> - 1.0-2.0
-   ADD: fea#327: gws supports HTTP 302 redirects from source URL's;
-   ADD: fea#339: source-specific multicast (IGMPv3) URL's supported;
-   ADD: fea#336: max number of user listeners is 32, 4 for admin;
-   ADD: fea#351: HEAD is the default method for buffering (was MIN-CACHED);
-   FIX: bug#333: long auth messages allowed (up to 1024 bytes);
-   FIX: bug#341: fixed possible crash at RTP stripping;

* Wed Jul 27 2016 Pavel Cherenkov <pcherenkov@gigapxy.com> - 1.0-1.4
-   FIX: bug#292: gng crashes on a file:// channel.

* Mon Apr 27 2016 Pavel Cherenkov <pcherenkov@gigapxy.com> - 1.0-1.3
-   FIX: bug#282: gws crashes trying to access channel data in sync_ng();
-   ADD: fea#260: Allow gws to postpone listening until N gng's are up;
-   FIX: bug#281: gws crashes trying to remove a channel;
-   FIX: bug#279: gng crashes (SEGV) trying to notify gws of a failed client submission;
-   ADD: fea#229: B2P A-attribute for User-Agent;
-   ADD: fea#232: channel splitting using ng.pick_method for each client;
-   ADD: fea#215: 'reset' admin command, SIGUSR2 as kill-all signal for gng;
-   ADD: fea#233: URI encryption support dropped;
-   FIX: bug#252: gng's would not start when buffers are backed up by files;
-   FIX: bug#247: Added ng.no_rtp_strip flag to disable RTP parsing/stripping;
-   FIX: bug#234: LONG HTTP requests may cause gws crash;

* Mon Feb 15 2016 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.3-9.10
##
#  Version 0.3 (Release Candidate):
##
* Mon Feb 15 2016 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.3-9.10
-   ADD: fea#223: Add configuration to allow/disable syslogging from Gigapxy logs;
-   ADD: fea#209: Cache auth-rejected URLs in gws;
-   FIX: bug#230: IMPORTANT: TCP_NODELAY was NOT enabled when configured;
-   FIX: bug#224: ASAN issues an alert handling handle_b2p() for bad memory access;
-   FIX: bug#225: send_fd() does not check for underwrite;
-   FIX: bug#216: gng crashes randomly with SEGV;
-   FIX: bug#214: gws would not quit on SIGINT at times;
-   FIX: bug#213: gng crashes on rtp_xtract_payload;
-   FIX: bug#212: gws detects client-tag collisions in cache;
-   FIX: bug#167: gws crashes on a duplicate client;
-   ADD: fea#208: gws/gng should rename old log (if found);
-   FIX: bug#206: License evaluation gives random errors on gng's;
-   FIX: bug#204: Platform evaluation fails if OS version is not specified;
-   ADD: fea#162: Add authorization explanation & setup manpage;
-   ADD: fea#203: Allow complete URL re-write by auth helpers;
-   ADD: fea#202: Channel-group settings need to be refreshed when config changes;
-   ADD: fea#201: Requests from a listener marked 'safe' should by-pass authorization;
-   ADD  fea#168: Add client-session expiration capability - ng.client_busy_timeout_sec;
-   ADD: fea#170: Older-version (v.1) licenses disabled;
-   FIX: bug#173: Report always shows zero uptime for channels;
-   FIX: bug#171: Deb 8 build (with ASAN) crashes;
-   FIX: bug#161: /var/run/gigapxy disappears on reboot, comm socket moved to /tmp;
-   FIX: bug#194: Newer BIOS's prevented license verification;
-   FIX: bug#181: address sanitizer should not be used in production builds;
-   FIX: bug#193: CentOS 7 is properly identified in system key output;
-   FIX: bug#172: License verification fails on VMware Player 12;
-   ADD: fea#102: RTP streams are recognized and automatically stripped to MPEG-TS;
-   FIX: bug#163: gng confuses raw binary traffic with RTP;
-   ADD: fea#165: Add support for Debian 8 and CentOS 7;
-   FIX: bug#164: gws crashes on long URI's in user requests;
-   FIX: bug#160: gws crashes when trying to double-release a channel;
-   FIX: bug#153: gng could stop responding to requests due to buffer exhaustion;
-   FIX: bug#152: npx build fails (internal);
-   FIX: bug#151: Operation not supported error initializing bufd;
-   FIX: bug#150: expiration-date limit corrected;
-   ADD: fea#140: Hardware-locked licensing, license v.2;
-   ADD: fea#134: Produce an access log entry when GNG dies ungracefully;
-   FIX: bug#136: Both no-delay and cork options are on by default;
-   FIX: bug#129: gws crashed at affirm_wcha() - a rare case;

* Sun Feb 22 2015 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.3-6.0
-   FIX: bug#150: long-term licenses deemed invalid;
-   ADD: fea#140: Hardware-locked licensing, v.2;
-   ADD: Logs will include version info at rotatiion point;
-   ADD: feature#126: optimize the use of sendfile(2) under FreeBSD - up to 25% drop in CPU usage;
-   ADD: feature#118: allow gws/gng limit its memory footprint;
-   FIX: bug#130: tput_update_client_tps[xxx] ERROR(35): Resource temporarily unavailable message;
# 0.3-6.0

* Sun Feb 1 2015 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.3-5.0
# 0.3-5.10
-   FIX: bug#137: gws crashes shortly after a HEAD request removes a channel.
# 0.3-5.9
-   FIX: bug#122: default data spooling timeout set to 100 ms.
# 0.3-5.8
-   FIX: bug#125: gws crashes (ABRT) after relaying a client;
# 0.3-5.7
-   FIX: bug#124: gws crashes trying to remove/clean up a channel;
-   FIX: bug#78: core dump at channel switch;
-   FIX: bug#120: daisy-chained channels fail intermittently;
-   FIX: bug#119: When GNG quits information doesnt reach access log;
-   FIX: bug#115: gws responds to a non-HTTP request with HTTP 400;
-   FIX: bug#114: gws goes in a loop if cannot bind a port;

* Thu Jan 15 2015 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.3-4.0
# 0.3-4.2
-   FIX: bug#122: default data spooling timeout set to 100 ms.
# 0.3-4.1
-   FIX: bug#90: Default gigapxy.conf settings are not up to date/confusing/lacking;
-   FIX: bug#107: bcounter_persec() is CPU-costly;
-   FIX: bug#113: gng SEGV trying to update datagram sequence;
-   FIX: bug#111: long command-line options are now fully accepted;
-   FIX: bug#110: gng memory/descriptor leak fixed;
-   FIX: bug#108: File-based I/O stream fails with Bad address error;
-   ADD: write delay/spooling is enabled by default (1Mb/200ms) - see gng.conf manpage;
-   ADD: multiple optimization changes to reduce CPU consumption;
-   ADD: build features/flags displayed by -? (--help) output;
-   ADD: build date is displayed by -v output and on the website;
# 0.3-4.0
-   ADD: feature#76: client catches up with the stream if being slow;
# 0.3-4.0
-   ADD: feature#85: gws can reply to status/ping messages on user-request port (if so configured);
-   FIX: bug#94: User-request listener must be disabled upon disconnect of the last gng;
-   FIX: bug#78: client-counter leak fixed when removing channels from gws;
-   FIX: bug#98: non-udpxy style requests using auth parameter fail with HTTP 500;


* Sun Nov 30 2014 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.3-2.0
-   FIX: bug#96: Specific multicast interface is not bound to for outgoing data;
-   FIX: bug#84: on-the-fly license change ensured;
-   FIX: bug#83: "burst" mode allows to drop slow clients and free up locked buffers;
-   FIX: bug#87: removed file-descriptor leak at gws;
-   FIX: bug#91: enforce_core_dupms option added to override system core-dump settings;
-   FIX: bug#88: license-checking bug fixed (was not looking in /var/run/gigapxy);
-   FIX: bug#89: rpm upgrade fails;
-   FIX: bug#84: on-the-fly license update is enabled;
-   ADD: feature#85: gws HTTP "ping" added;

* Sat Sep 27 2014  Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.3-1.0
-   FIX: bug#82: Gigapxy stopped to serve some channels;
-   FIX: bug#79: gng tries to recursively rotate logs;
-   FIX: bug#77: HEAD request prevents further GET requests to the same channel;
-   FIX: bug#72: GWS not picking a GNG after GNG channel/client count goes out of balance;
-   FIX: bug#75: TPS reports are inconsistent after gws goes down & up;
-   FIX: bug#74: gws suddenly crashes;
-   FIX: bug#72: client/channel counters going out of sync;
-   FIX: bug#69: DROP requests not accepted;
-   FIX: bug#70: authentication vulnerability fixed;
-   FIX: bug#71: echo -n used by gauth.sh to pipe auth tokens into MD5;

##
#  Version 0.2 (public beta):
##

# Build 4 (17-Aug-2014) PUBLIC BETA
* Sun Aug 17 2014  Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.2-4.0
-   ADD: feature#60 - add multi-listener support;
-   ADD: feature#64 - Pass listener credentials to auth helpers;
-   FIX: bug#61 - gws assuming CPU0 affinity by default;
-   FIX: bug#62 - confusing error messages at license check;
-   ADD: feature#65: EDGE mode, client start w/o cached data;
-   ADD: feature#67: advance client output pointer if client lags behind;
-   FIX: multicast channel drops after EAGAIN while reading data;

# Build 3 (7-Jul-2014) PUBLIC BETA
* Mon Jul 7 2014  Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.2-3.0
-   ADD: feature#25 - channel name rewrite (aliased channels);
-   ADD: feature#35 - static builds for embedded systems (requires librt.a to build);
-   ADD: feature#41 - HTTP HEAD request support;
-   ADD: feature#42 - redirection of unauthorized channels (to a dedicated channel);
-   ADD: FreeBSD 8.3 support;
-   FIX: bug#45 - auth section parameters are evaluated when authentication is disabled from CLI;
-   FIX: bug#44 - error trying to set SO_REUSEPORT;
-   FIX: bug#43 - gws adds an extra zero byte to auth requests;
-   FIX: bug#40 - flooded gws assigns all clients/channels to the same gng;
-   FIX: bug#47 - redirection of unreachable channels (to a dedicated channel);
-   FIX: bug#46 - gws exits 'gracefully' when a channel gets invalidated during handshake;
-   FIX: bug#48 - gws would not start with default config (0.2-3.0);
-   FIX: bug#49 - getaddrinfo(3) PF_LOCAL unsupported case (FreeBSD 8.3);
-   FIX: bug#50 - sem_trywait ERROR(22): Invalid argument trying to init TPS channel on a gng (FreeBSD 8.x-specific);
-   FIX: bug#29 - Report shows inconsistent stats (another attempt to fix);
-   FIX: bug#51 - udpxy-style URIs lose all parameters;
-   FIX: bug#52 - attempts to rotate stdout/stderr-bound logs;
-   FIX: bug#53 - gws crashes on accepting a new channel;
-   FIX: bug#54 - URI parser error when doing an admin request;
-   ADD: feature#55 - allow setting CPU affinity for gws;
-   FIX: bug#59 - gws sometimes crashes trying to close a channel;

# Build 2 (3-Jun-2014) PUBLIC BETA
* Fri May 16 2014 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.2-2.0
-   ADD: feature#28 - Ability to disconnect clients/channels via HTTP request;
-   FIX: bug#29 - TPS report stats inconsistencies, locking channels and clients while building report;

# Build 1 (10-May-2014) PUBLIC BETA
* Sat May 10 2014 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.2-1.0
-   FIX: bug#34 - ported to build under CentOS 5.10;
-   FIX: bug#33 - explanatory warning expanded when attempting to run gigapxy binary;
-   FIX: bug#31 - libconfig is linked statically in most cases (except when under CentOS 6.x);
-   FIX: bug#27 - ws.use_http10_get = true can be set to avoid chunked streams;
-   FIX: bug#26 - no-hassle Debian install script added (install-deb.sh);
-   FIX: build with clang 3.3 on FreeBSD 10.0;
-   FIX: de-installation issues on FreeBSD 9.2;
-   FIX: default config now puts logs into /var/log/gigapxy;
-   FIX: immediate (non-async) connect to HTTP channel caused a core dump;
-   FIX: removed unnecessary error messages upon graceful shutdown of gng under FreeBSD 9.2;

##
#  Version 0.1 (alpha):
##

# Build 7 (08-May-2014) BETA CANDIDATE 2
* Thu May 8 2014 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.1-7.0
-   ADD: gws requests, gng channels/clients are tagged, tag displayed as group in log;
-   ADD: gcc 4.8+ -Og optimization option enabled when gcc 4.8 is detected (Linux);
-   ADD: gcc 4.8+ build enables memory sanitizer;
-   FIX: bug#12 integer representation of IP addresses behaviour;
-   ADD: logging request/session tags in gws & gng to group entries by;
-   FIX: FreeBSD 9.x build fixed;
-   FIX: Build with clang 3.2 on Linux;

# Build 6 (17-Apr-2014) BETA CANDIDATE 1
* Thu Apr 17 2014 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.1-6.0
-   ADD: expiration verification code revised;
-   FIX: SIGCHLD processing cuts to minimum during shutdown;
-   FIX: (bug#21) incorrect setting of term flag in call to detach_auth_helper() results in exhaustion of auth helpers;
-   FIX: (bug#21) incorrect state change results in exhaustion of auth helpers;
-   ADD: switched to dynamic linking of libconfig.so;
-   ADD: rpm(8) generation added;
-   FIX: deb(5) package would not remove user/group & /var/log/gigapxy;
-   ADD: DDOS protection: gws(1) will suspend receiving requests when request queue fills up;
-   ADD: TPS reports include 'speed delta' column, measuring the deviation between client & channel speeds;
-   ADD: client/channel speed is measured/displayed for the nearest time period (not being the total average);
-   FIX: removed unnecessary calls to kill(2) when shutting down auth helpers;
-   ADD: manpages revised, more thorough explanation of ng.bufd section added;

# Build 5 (16-Mar-2014):
* Sun Mar 16 2014 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.1-5.0
-   ADD: NG_ATTACH/DETACH events added to access log on gng(1) being added to/removed from gws(1).
-   FIX: channels would NOT get created with authorization enabled - FIXED;
-   ADD: ws.auth.deny_no_auth added: DENY if cannot perform authorization;
-   ADD: ws.auth.no_spawn_tmout: time to disallow helper launches after a cascading crash (5 sec by default);
-   FIX: HTTP 403 (Access Denied) code returned if access to resource is DENIED;
-   ADD: AUTH_START/EXIT access log entry generated on each auth helper's launch/exit.
-   FIX: gws(1) crashes if started with authentication forcibly disabled (-U);
-   ADD: ARMv7l platform support added to deb packages;
-   FIX: gws(1) crashes when new auth helpers get launched.
-   FIX: gng(1) crashes when a client exits and its channel closes in the same event;
-   FIX: gws(1) internal counters do not reset on gng(1) detach;
-   ADD: gigapxy.1 manpage updated with 'cached={0|1}' parameter for report requests;
-   FIX: incorrect reset of instenal structures causing abort(2);
-   ADD: warning is given on socket-error events in gws(1), error handlers are invoked even if data is pending.
-   ADD: stack trace is logged prior to core-dumping by assert(3);
-   FIX: authentication id is not verified when receiving helper's response;
-   FIX: gws(1) will not start reading auth helper's response w/o any data in the pipe (BUG#13);
-   FIX: gws(1) will kill(2) auth helper if it is still attached to a request being removed/timed out (BUG#13,14);
-   FIX: gws(1) attempts to purge a channel that's not in cache;
-   FIX: gng(1) tries to remove the same client twice.
    FIX: BUG#18: gws(1) tries to act on a dead/defunct request;
    FIX: gws(1) will NOT exit if it catches a SIGCHLD on a process it cannot identify (will warn);
    FIX: gws(1) will check for channel's validity prior to passing the request to gng(1);
    FIX: gws(1) will keep track of auth helper pid's up till SIGCHLD is handled.
    FIX: gws(1) will NOT shut down gng(1)'s [even if so configured] unless exiting due to a graceful-exit signal/command.
    FIX: BUG#19 - improved tracking of auth helpers;

# Build 4 (13-Nov-2013):
* Wed Nov 13 2013 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.1-4.0
-   FIX: numnerous bugfixes in npx(1);
-   ADD: Socket-size options added to npx(1): -R, -S;
-   FIX: numerous minor fixes in gng(1) applied;
-   ADD: performance sensors added to gws(1), gng(1) and npx(1);
-   ADD: authorization helper support;
-   FIX: man pages brought in sync with gigapxy-commented.conf;
-   ADD: PID can be logged in every entry;
-   ADD: min-clients NG-picking method added;
-   FIX: gigapxy.conf discrepancies resolved;
-   FIX: gng(1)'s attaching to the newly-created buffer/stream storage on gws(1) re-start;
-   FIX: gws(1) no longer blocks on TCP/HTTP connect(2) and handshake;
-   FIX: HTML/XML escape characters (&, <, >, etc.) replaced with escape sequences in reports;
-   FIX: corrected bugs handling report generation;
-   FIX: report will be generated even if it cannot be saved (into file);
-   FIX: NG picking (min_cha, min_cli) now uses correct limit to scan for vacant NG slots.
-   FIX: gauth.sh: removed call to a deleted function; corrected ambiguous variable naming;
-   FIX: corrected erroneous references & comments in gigapxy-commented.cfg.

# Build 3 (18-Jun-2013):
* Tue Jun 18 2013 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.1-3.0
-   ADD: access log support;
-   FIX: epoll(2) error events processed properly;
-   ADD: URI path encoding (BASE64);
-   FIX: pipe-redirected logs work now;
-   FIX: gng(1) would not shut down due to a single emergency-recycled client;
-   FIX: URI parser looks for query after the last slash;
-   FIX: numerous minor fixes for gng(1) and gws(1);
-   FIX: buffer/stream management internals simplified, made more reliable to withstand 500+ client load;
-   ADD: client re-direction to custom URL if channel is unavailable;
-   ADD: stream speed info added to npx(1).

# Build 2 (23-Apr-2013):
* Tue Apr 23 2013 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.1-2.0
-   FIX: sendfile(2) was not invoked when it should be;
-   ADD: ng.bufd.mmap_anon switch (false by default) to enable buffers w/o filesystem backing;
-   ADD: buffers are shared (between channels) within an NG;
-   ADD: ng.prealloc_count (if > 0) buffers get pre-allocated and pre-faulted on NG startup;
-   ADD: ng.mlockall added to lock buffers in RAM (prohibit swapping them to disk);
-   FIX: bug0000004 - gng issues an error and declines creation of a new channel if limit is exceeded;
-   ADD: Log rotation file limit added (log.max_files);
-   ADD: Fine-grained locking for TPUT stats (Linux only so far).
-   FIX: GWS checks for validity of tput.max_channel_records, tput.max_client_record and exits gracefully;
-   FIX: GNG checks for validity of ng.max_channels, ng.max_channel_clients and exits gracefully.

# Build 1 (25-Mar-2013):
* Mon Mar 25 2013 Pavel Cherenkov <pcherenkov@gigapxy.com> - 0.1-1.0
-   FIX: Crash when gng hits 21st client on specific multicast channel.
-   FIX: TPS entries are not cleaned up from shared memory if a GNG crashes.
-   ADD: ng.max_channels, ng.max_channel_clients config settings.

# __EOF__

