CGA Server Change History
--------------------------------------------------------------------------------
4.1.4.0
================================[ 2025/12/16 ]==================================
- The Rise of the Triad standalone server is now built into the CGA server and 
  will be spun up on demand.  This removes the need to run ROTT in client on top
  of server mode and improves gameplay.
- Minor stability fixes. 
- A beta build is now available for Linux.
- Improved the Linux dpkg installation package.
- The default port config for TCP and UDP will now be the same port number, so
  6000/6000 for server #1 and 6001/6001 for server #2.
- Inbound IPX packet handler will now ensure all packets are at least 30 bytes
  in size (ie: the IPX header size).
- IPX packets will have their header length checked to see if it matches the
  bytes read in order to filter out bad packets.  
- The general connect, disconnect and watchdog log messages are now set to debug
  level instead of minimal in order to reduce log writing from non-CGA client
  connections.

4.1.3.0
================================[ 2025/07/07 ]==================================
- Removed IPX packet compression as it turned out to be a serious performance
  bottleneck.
- Fixed font and control size inconsistencies within the Windows server manager.
- Added a menu item to the main help menu and the tray icon menu of the Windows
  server manager named "Reinstall Latest..." which will redownload and install
  the latest version of the server.

4.1.2.0
================================[ 2025/03/30 ]==================================
- Windows service will now do a full server shutdown when Windows shuts down or
  restarts.
- Fixed the misspelling of "Change History" on the Windows Service Manger help 
  menu.
- Removed the serial relay server internals since it's no longer needed and all 
  games will now use the IPXNet relay server.
- Removed the ability to select "Serial" in the server admins and changed "IPX"
  to "IPXNet".
- Fixed bug wherein the console server admin would not save changes to the 
  server configuration file if the server was not online.

4.1.1.0
================================[ 2024/09/22 ]==================================
- Fixed issues with the local server manager when a local address is set.  It
  was unable to authenticate and was not trying to connect to the local address
  due to it always trying to connect to 127.0.0.1.  
- Updated the admin server started on port log entry to state it as a TCP port
  and not a UDP port.
- Added a caption with "Secured with" and a Let's Encrypt logo to the about
  screen.  For legacy servers (Windows XP and below) there is an additional
  caption after the LE logo which reads "and OpenSSL".  
- Timed-out client connections will now be dropped.
- After a client authenticates a check will be done for any existing client
  connections within a game room and drop them.  This will handle scenarios
  where a client crashes or disconnects ungracefully for any reason and the 
  server isn't informed of the diconnection.
- The game room connection count (ie: playing count) will now be sent when
  the server connection count is sent when clients connect and disconnect.
- Beta builds will now use a beta update site when checking for updates instead
  of the production update site.  

4.1.0.0
================================[ 2024/08/21 ]==================================
- New logo, icon and about screen in the Windows server manager!  Big thanks to
  OpenRift, THEBaratusII and ZNukem for collaborating on this effort.  
- A Windows XP/Server 2003 specifc edition is now available!  Supports all 
  features and corrects all issues with running the server under this version of
  Windows.
- A Windows 2000 specifc edition is now available!  Supports all features except
  audio chat.
- Windows NT 4 is now supported!  Supports all features except audio chat.
- The server log file and update path will now reside in the common application 
  data folder under their respective Windows versions.
- Updated IPX relay server to handle Win9x/ME native IPX clients so cross play
  between them and DOSBox clients will work.
- Windows Server Manager: Change history will now open in a window instead of 
  externally opening the changes.txt file.
- Windows Server Manager: EULA will now open in a window instead of externally
  opening the license.txt file.
- Windows Server Manager: Adedd a What's New screen to the server manager than 
  will display upon opening the main window after an update.  There is also a 
  menu item for it under the main Help menu.
- You can now set a logging level where, 0 = None, 1 = Minimal, 2 = Error and
  3 = Debug.  The conf file can be edited manually (server must be restarted)
  or the Windows Server Manager and built-in console manager can be used which
  will update the log level without restarting.
- Windows Server Manager: If the log path is changed the server manager will now
  switch to the new log file.
- Fixed bug wherein changing an instance's relay type would break the server.
- Added Windows service controls to the Windows Server Manager under a new
  "Service" main menu item.  From this menu item you can install, start, stop 
  and delete the service.  NOTE:  On Windows Vista+ these functions require 
  elevated privileges and will prompt to restart the server manager with 
  elevated privileges.
- Windows Server Manager: Moved the "Windows Service Manager" menu item from the
  Tools main menu item to the Service main menu item and removed the Tools main 
  menu item.
- Windows Server Manager: You can now start the server as a console service from
  the Service main menu item.
- Windows Server Manager: Fixed a bug in the log processing logic wherein 
  sometimes log content would missed the last log entry could potentially not be
  read properly and it would not detect that the server was shutdown and not 
  update the online status or the server contols in the UI.
- The Windows Server Manager will now start by displaying its main screen if
  run manually (ie: instead of minimized).
- Updated server ping process used by the server managers to ping until it 
  receives a response at a short interval (100ms) up to the timeout amount (2s).
- Server will now obtain an authentication access token after successfully 
  validating your CGA login credentials on startup and use it for authentication
  instead of your login credentials.  This will prevent any issues if you change
  your password after setting up your server.  If you have multiple physical
  servers your existing access token will be retrieved if login is successful.
  Your login credentials will be cleared from the config once an access token is
  obtained.  
- The server and windows server manager will not warn you about missing login
  credentials if an access token is present.
- Added some exception handling to the internal HTTP interface logic to help
  guard against potential crashes.
- Updated the HTTP interface to return the status error text message, such as 
  "Service is unavailable" instead of the HTML content.
- The Windows GUI Server Manager is now built into the main server EXE and the
  installer will remove cgaservermgr.exe and update all the links to use
  cgaserver.exe --manage --gui.  The GUI server manager can be invoked on the
  commandline by adding -g/--gui to the parameter list along with -m/--manage.
- Implemented IPX packet compression.
- The IPX relay server no longer has to wait for a client to synchronize its IPX
  connection before allowing other clients to connect.
- Updated installers to only allow installing on their respective Windows 
  versions.  
- All versions of the server now have a beta build.
- The admin server now uses TCP instead of UDP.
- The admin server is no longer used to handle ping requests and there is now
  just one admin server instead of a local and remote admin server.  The current
  admin port will be updated to the "PingPort" in the configuration and the local
  admin port will become the "AdminPort".  This makes the default "Ping" port
  9666 (UDP) and the default admin port 9660 (TCP).
- Locally administering the server now requires a password and a new local admin
  password is now confirurable.  This password will be set automatically upon
  first startup of either the server or the server manager to a random password.
- All references to "Remote Admin Settings" within the server managers is now
  just "Admin Settings", however the admin password field is now referred to as 
  the "Remote Password" field.
- A local IP address can now be configured if it's necessary via the config file
  using the LocalAddress option.  This generally would only be necessary if the
  machine the server is running on has multiple NICs.  The opened ports for all
  servers will bind to this address as well as report it to the website.
- Moved the logic to drop non-CGA Client connections from a separate thread to
  the main client socket read thread as to reduce resource usage, improve 
  efficiency and reduce complexity. 
- Fixed an issue where a connection could end up not being removed due to a
  random access violation being thrown when an internal game room network no 
  longer had any connections and was being removed incorrectly.
- Complete overhaul of backend framework (Prometheus WDE) which has increased
  API performance by reducing request handling time and reducing response time.
- Enabled dynamic content compression on backend webserver to reduce the size of
  API responses.

4.0.2.0
================================[ 2023/09/11 ]==================================
- Removed IP banning.  This should really be done in another layer of your OS or
  network, but was also causing issues in some rare scenarios for legit 
  connections.
- Cleaned up logging.  A client's user display name will now be logged with each 
  log entry when it's available.
- Unicode combability updates.
- Server will now only update its connection counts with the backend when a CGA 
  client completely connents and disconnects.  This will prevent random 
  connections from not-CGA clients from affecting server connection counts.
- Fixed bug wherein the serial relay server was not dropping TCP connections on
  its serial link when a connection failed to synchronize with a CGA client
  connection.
- Fixed bug in which the server was not properly waiting for the pending relay
  client connection and potentially causing the server to lock up and eventually
  crash.

4.0.1.0
================================[ 2022/05/25 ]==================================
- Corrected some instances where the server could not disconnect the client 
  connection when an error occurred resulting in stale TCP connections and
  server instability.
- Added a watch dog thread per server that will disconnect idle non-CGA 
  connections and idle stale connections in order to prevent stale connections
  and causing instability.
- Added an IP ban controller which will ban any non-CGA client IP that attempts
  malicious communication.  The banned IPs are stored in the server config 
  folder called ipbans.json.
- Server Manager application icon has been updated to the CGA logo on all
  platforms.
- Corrected issue which would cause the daemon version of the Linux server to
  crash attempting to stop servers from the console server manager.
- Linux daemon will now properly shutdown every time it's stopped.

4.0.0.0
================================[ 2022/02/28 ]==================================
- 32-bit and 64-bit versions (Windows).
- Linux version is now 64-bit only.
- Windows installer will now prompt for CGA login credentials and update the 
  cgaserver.conf accordingly.  These credentials will be used to register the
  server on the CGA website.
- The Windows version of the server will now store its configuration files in 
  the %ProgramData% folder under "Creative Design Interactive\CGA\Server".  An
  existing configuration file will be moved there during the install and the 
  "conf" folder will be removed from the application folder.
- Many bug, performance and stability fixes.
- The serial relay server performance has been greatly improved.
- Now requires a CGA Username/password to be configured.
- Server will now connect to the CGA website and register servers and update
  each server's online status, connection counts, etc, etc.
- Existing servers will be detected and their IDs written to the configuration
  automatically.
- A console version of the server can be run by passing the parameter -c or 
  --console to the executable in Windows and Linux.  This will allow it to be
  run directly from the command line.  
- A command line paramter has been added to allow checking the version:
  -v / --version.
- Server will now check for updates when it starts up.  The Windows service and
  Linux Daemon will log a warning if there is an update available.  The console
  version will prompt the user if they want to download the new version and 
  install it.
- A command line parameter has been added to allow checking for updates:
  -u / --update
- The TeamSpeak license allowing 512 connections has been removed as that was
  CDI's and should not have been included.  It has also been revoked.
- Audio chat connections will default to 32 connections unless a valid SDK 
  license is supplied which allows more.
- If a TeamSpeak SDK license is used the number of connections will be detected
  from the license.
- Audio chat server configuration has been changed to only 1 virtual server 
  which uses all the slots.
- The server will now send its local IP when registering servers so players
  connecting from the same remote address as the server will connect using
  the server's local IP address.
- The admin server port can now be configured.
- Each configured server that is set to use a dynamic IP will auto update after
  24 hours of inactivity.
- A remote admin password can now be configured.  This is used for managing 
  the server from the CGA Client.
- Improved server configuration/start up for ports and max connection checking.
- Improved logging.
- Improved client/server communication security.
- Servers can now be pinged.
- A welcome message can now be configured per server which will be displayed to
  players upon successfully connecting to the server.
- When a server owner is creating a new game room on their own server and the
  server is private and the server has the new "Friend Private Access" option 
  disabled they will now have the option to allow friends to access that 
  specific room without knowing the server password.
- Friends of a server owner can now create rooms on a private server with no
  player rooms enabled if the server owner enabled the new "Friend Rooms" 
  option.
- Friends of a server owner can now access game rooms on a private server 
  without knowing the password if the server owner has enabled the new option
  "Friend Private Access".
- Added a server manager utility.  The server manager will allow you to:
   - Add, edit and delete servers.
   - Start, stop and restart servers.
   - Configure your CGA username/password.
   - Check for updates.
   - File bug reports and feature requests.
   - It will allow you to see the log in real-time. 
   - Modify log settings.
   - Modidy remote admin settings.
   - Modify global audio chat settings.
   - The server has a command line version which can be accessed using the 
     parameter -m or --manage.
   - A standalone GUI version is also available for Windows and will start
     when logging into Windows and has a system tray icon.
- Attempting to run cgaserver.exe directly in Windows service mode will now 
  result in a dialog message stating that it must be run from the Windows
  Service Manager.
- The default server configuration file will now create 2 servers with 16 max
  connections each instead of 2 servers with 64 max connections each.  This is 
  because the default audio chat server is only 32 connections max.

3.2.0.0
================================[ 2014/01/10 ]==================================
- Removed the authentication check that matches the client's hostname from a DNS
  lookup to the hostname passed in from the website which could cause an access
  denied error if they did not match due to a cached DNS record that was 
  different.

3.1.0.0
================================[ 2013/04/23 ]==================================
- Improved security.
- Handles client keep-alive message.
- No longer hangs on startup if the TeamSpeak license server cannot be reached.
- TeamSpeak now logs to server log.

3.0.0.0
================================[ 2013/03/18 ]==================================
- Added integrated audio chat using TeamSpeak 3 SDK!
- Corrected logic in TCP listener threads so they shutdown properly.  This issue
  was only noticeable under Linux, however it also improves shutdown time.
- Log path is configurable from the cgaserver.conf file for Linux users.
- Now reports its OS to the website when it is polled by the master server.
- Linux users can now utilize the "service" control scripts to start, stop and
  query the status of the server.  

2.4.1.0
================================[ 2012/09/27 ]==================================
- Fixed a boneheaded error in the serial relay server code.  If the second 
  player disconnected and reconnected a new relay thread was created every time.  
  This eventually made the server become very unstable and under Windows it 
  would go into 100% CPU.  Under Linux it would just seg fault and shutdown.  
  This was because I forgot to check and make sure a thread had not already been 
  created.  
- Added some more error handling and logging.

2.4.0.0
================================[ 2012/09/22 ]==================================
- Corrected some stability issues in the threading model.
- Made some minor optimizations to the serial relay link thread logic.
- Added some exception handling and some more logging.
- Corrected the code that prevents the server from starting servers when their 
  ports are in us by another process.  Version 2.3 broke it.

2.3.0.0
================================[ 2012/09/20 ]==================================
- Changed how the serial relay handles each virtual link.  After the second 
  connection is made a thread is started which handles the link communication
  between the 2 computers.  This has increased performance and will ensure
  good performace when more than once serial link is active on one serial relay
  server.

2.2.0.0
================================[ 2012/09/20 ]==================================
- Rewrote all the TCP server code so that it is more efficient and scalable to
  a high number of connections.
- Rewrote the serial relay server code (TCP as well) for the same reasons.  The
  performance has increased dramatically for serial relay games.
- Refined and optimized the entire codebase in preparation for integrating the
  TeamSpeak 3 API for audio chat capabilities.
- Cleaned up the logging so it makes more sense.
- Servers will not start if the ports they are attempting to use are in use by
  another running process.  If no servers start then the service will not start.

2.1.0.0
================================[ 2012/07/16 ]==================================
- Private servers now supported.
- Now has a combined total connection limit of 512. 
- Now checks server ports to make sure servers do not use ports used by already
  loaded servers.

2.0.1.0
================================[ 2012/07/08 ]==================================
- Added an End-User License Agreement to the installer. (license.txt)
- Added a EULA link on the start menu group.
- Added a change history file named "changes.txt".
- Added a link to this file on the start menu group named "Change History".
- Added an INNO Setup license file. (innosetup_license.txt)
- Added a link to the start menu group named "Server Configuration" which opens
  the conf file, cgaserver.conf, in notepad.exe so it can be edited.
  NOTE:  Server service must be restarted for changes to take affect.
- Added a "Register New Account" start menu group link.
- Updated the "CGA Server on the Web" start menu group link to point to:
  http://www.classicgamingarena.com/help/cgaserver
- Once again changed the secondary port key in the conf file to be called 
  "RelayPort".  There is no need to add this manually.  The server will now
  self correct the changes made to the conf file including the RelayType key.

2.0.0.0
================================[ 2012/02/26 ]==================================
- Servers can now be configured as IPX relay severs or Serial relay servers. 
  Serial relay servers use TCP as the secondary port.
- The conf file for the server now has a key for each sever called "RelayType". 
  This must be set to eithe "ipx" or "serial". The UDPPort key has been renamed 
  to "GamePort". If you had a server installed you will need tp make these 
  changes manually since the installer will not overwrite your configuration 
  file.

1.2.2.0
================================[ 2012/01/19 ]==================================
- Minor TCP code changes.

1.2.1.0
================================[ 2011/11/01 ]==================================
- Updated how the server sends its information when the master server queries 
  it.

1.2.0.0
================================[ 2011/10/26 ]==================================
- Corrected a bug in the UDP server code that was prevented it from working 
  reliably.
- Corrected the scenario in which a TCP connection being made without a follow 
  up UDP connection would prevent the server from accepting any other 
  connections.
- Added an admin UDP server on port 9666. This port is used to PING and QUERY 
  the server from the CGA website. It will have other uses in the future.
- Each server's online and connection status (ie: current connections/max 
  connections), and name are now pulled from the website via this new port.
- There is now only one log file. It is named "cgaserver.log" and is now 
  located under the "log" folder under the installation folder.
- The configuration folder is now located under a sub folder named "conf".
- The configuration no longer requires your CGA user ID, server ID or 
  communicatin key.
- Registering your servers on the CGA website is now easier than ever!

1.1.0.0
================================[ 2011/10/01 ]==================================
- cgaw3.dll is no longer required.
- ipxnet.dll is no longer required.
- SDL and SDL_Net are no longer a dependancy (sdl.dll and sdl_net.dll 
  respectively)

1.0.0.0
================================[ 2011/01/29 ]==================================
- CGA Dedicated Server Released

================================[ 2011/01/26 ]==================================
- Test Servers Online

================================[ 2010/07/27 ]==================================
- Compiled the server under Linux!. It is working great.

================================[ 2010/07/25 ]==================================
- Updated the client and server to be cross-platform ready (preparing to release
  both client and server for Windows and Linux!). Update client before using
  test server.

================================[ 2010/05/15 ]==================================
- Will now let the client know it is full. Multiple connection from behind a
  NATed firewall will now disconnect correctly.

