Logswan 2.0.3 (2018-10-15)

- Use -std=c11, Logswan requires a C11 compiler for libmaxminddb
- Enable support for parsing HTTP/2.0 requests, for real this time
- Revert back to using INT64_MAX for strtonum() maxval, as maxval is long long
  and using UINT64_MAX caused bandwidth parsing to always fail (Thanks James Loh
  for reporting the issue)
- Move maps of countries and continents to separate files



Logswan 2.0.2 (2018-08-05)

- Use UINT64_MAX for strtonum() maxval
- Add missing headers and reorder includes
- Add support for HTTP/2.0



Logswan 2.0.1 (2018-06-27)

- Do not use -Werror by default
- Do not always call inet_pton two times per log line, this speeds things up
- Use bool types for isIPv4 and isIPv6
- Use the monotonic clock to determine runtime
- Move conditional includes for 'pledge' and 'strtonum' in compat.h



Logswan 2.0.0 (2018-03-16)

- Use type off_t for results struct member fileSize
- Reflect OpenBSD's pledge() changes
- Switch to using libmaxminddb and GeoIP2/GeoLite2 databases
- Add Antarctica to the list of continents



Logswan 1.07 (2017-02-14)

- Harmonize arrays names
- Remove array of months, it's currently unused and will likely remain so
- Simplify internal JSON array and object names
- Use OpenBSD style(9) for function prototypes and declarations
- Revert back to using strtok, at least for now
- Do not use EXIT_SUCCESS and EXIT_FAILURE macros anymore
- Fix implicit function declaration error on NetBSD (Thanks Maya Rashish)
- Remove now useless variables initialization and unnecessary includes
- Do not add an extra new line when displaying usage or version



Logswan 1.06 (2016-12-17)

- Relicensed under the BSD 2-Clause license
- Use strtok_r instead of strtok to tokenize lines
- Do not attempt to increment countries and continents arrays if there
  is no GeoIP database loaded
- Harmonize variable names for the GeoIP databases
- GeoIP lookups are now disabled by default (add a -g switch to enable)
- Use fstat on open file descriptor instead of using stat before opening
  the input file
- Count the log line as invalid if parsedLine.remoteHost is NULL
- Pass results structure by reference, not by value
- Initialize some uninitialized variables
- Headers cleanup



Logswan 1.05 (2016-02-25)

- Documentation update (notes on measuring Logswan memory usage)
- Add additional include directories for compat functions + dependencies
  to avoid using relative path in includes
- Check that *lineBuffer is not NUL before attempting to parse log line
- Perform GeoIP lookup and HLL add in the same if block
- Increment IPv4 and IPv6 hits counters individually and conditionally
- Use CMake to check if the system has OpenBSD's pledge available and
  link pledge conditionally using a null implementation when compiled
  on non OpenBSD systems
- Adding an array of months, for the upcoming split log functionalities



Logswan 1.04 (2016-01-10)

- Moving global variables into main
- Using 'size_t' instead of 'int' for array indexes in for loops
- Using 'uint32_t' for all non 'uint64_t' integers
- Do not increment hits and processed lines counter for each parsed line,
  compute total only once when everything is parsed
- Setting 'CMAKE_BUILD_TYPE' to 'Release' and formatting fixes
- Sanitize CMake script to build under NetBSD (Thanks Kamil Rytarowski)
- Initializing some uninitialized variables
- Renaming 'DATADIR' variables to 'GEOIPDIR'



Logswan 1.03 (2016-01-01)

- Remove header display and do not print name of processed file
- Print results to stderr instead of stdout
- Output JSON data to stdout instead of creating a new file
- Define GeoIP databases path in CMakeLists.txt
- Adding log file name in the JSON output
- Removing some hardcoded values and replacing them with constants
  defined in config.h
- Breaking the loop when a match is found in the request parser
- Using enumeration constants instead of macros
- Process GeoIP continent information
- Re-ordering protocols and methods with more common occurences on top of
  the list, allowing to break earlier when iterating through the array
- Adding support for reading logs from standard input
- Renaming 'definitions' files to 'config'
- Increasing countries array size, as an attempt to be future-proof
- Initial support for using pledge() on OpenBSD
- Documentation updates (HLL precision, Features list, GeoIP databases)
- Updated JSON output example
- Added a manual page



Logswan 1.02 (2015-11-02)

- Renaming 'resource' variable to 'request' in the 'logLine' struct
- Do not attempt to parse empty date tokens
- Do not attempt to parse empty request tokens (Thanks Brian Carpenter for
reporting the issue)



Logswan 1.01 (2015-10-01)

- Documentation updates
- Fixing segfault when request data is empty or malformed (Thanks Jonathan
  Armani for reporting and proposing a fix)



Logswan 1.00 (2015-09-28)

- Initial release
