﻿TODO Starting, stopping, and starting again fails because all ports fail to bind
TODO Add setting to enable "ignore statuscake/uptime robot checks" https://www.statuscake.com/API/Locations/txt http://uptimerobot.com/faq
TODO Add setting to specify terminal type (ascii, ansi, rip, auto-detect)

Aug 14, 2014
	- Display date and type of last connection in GameSrvConsole
	- Add options for 24hour display and simple output in GameSrvConsole

Aug 13, 2014
	- Add hotkey for clearing the screen in GameSrvConsole

Aug 12, 2014
	- Fixed a bug where RUNBBS sessions on node 1 were disconnected when a second call to node 2 came in
	- GameSrvConsole no longer uses the TimeFormatUI in the footer (some formats were too large for the space allocated)
	  - It now uses TimeFormatUI for that status messages though, and also colour codes error/warning/debug messages

Mar 7, 2014
	- Fixed websocket negotiation again, so now ancient browsers only supporting hixie-76 (like my touchpad) can connect

Feb 25, 2014
    - Fixed websocket negotiation, so now HtmlTerm in IE11 (and possibly other versions) can connect

Jan 31, 2014
	- Ensure GameSrv object is disposed on program close (prevents the exe from hanging on close)

Jan 29, 2014
	- Fixed a problem running DOS doors with Console and Service versions (output was going to GameSrv window, and
	  doors would crash when trying to run a second one during the same login session).  Thanks Ed!

Jan 4, 2014
	- History and Log windows now both visible at same time on GUI.  Hopefully nobody is still using 800x600 or smaller!

Jan 2, 2014
    - Confirm disconnect in GUI
	- Don't coninue running the logon process items if the MainMenu item throws an exception

Jul 23, 2013
	- Fix *DORINFO1 and *DORINFOx command-line specifiers (thanks Philip)

Jul 19, 2013
    - Fix RLogin connections.  Similar fix to the earlier WebSocket connection fix (terminal type detection was
	  happening before rlogin header was parsed)
	- Added new Telnet Action that can be used on the menus to connect to a remote server.
	
Jul 15, 2013
    - Slightly changed connection counters on history panel of GUI

Jul 13, 2013
	- Fix hotkey input at menu screens (if caller dropped carrier at a menu, an exception was thrown when
	  trying to access the first character of an empty string)
	- Add a new history panel to the GUI WFC

Jul 12, 2013
	- Added new icons to GUI:
	  - Configure courtesy Oliver Scholtz (and others): http://www.iconfinder.com/iconsets/humano2
	  - Disconnect courtesy Icons Land: http://www.iconfinder.com/iconsets/softwaredemo
	  - Start, Pause and Stop courtesy Icons Land: http://www.iconfinder.com/iconsets/iconslandplayer

Jul 9, 2013
    - Fixed WebSocket connections.  When I added the terminal type detection, I put it in a place that ran before the handshake occured for
	  websocket connections, so that broke things.  The handshake now occurs before terminal type detection, so all is well.
	- Fixed install.cmd to work for everyone.  For some it already worked, but for others it complained about not finding certain files
	- Take terminal type into account when displaying menus (previously only looked for menus\*.ans, now will also look for *.rip and *.asc
	  whenever appropriate)
	- Fixed the thank-you screen that should have been displayed after registering (it didn't pause after displaying before)
	- Upgrader now supports importing of LogOn and Logoff process items that used the EXEC* command
	- Add WatchDTR setting to door configuration files (see _sample.ini for info)
	- Upgraded Usurper to 0.23f
	- Updated GameSrvGUI to look more like a real GUI (should be familiar to those who used older versions of GameSrv)

Apr 24, 2013
	- Added *MINUTESLEFT and *SECONDSLEFT command-line specifiers since v10.04.02 had them and it made implementing the upgrader easier
	- Added support for running doors under DOSBox 0.73, which should allow DOS doors to work under 64bit versions of Windows.  A few very quick tests showed that
	  this worked OK for some doors, sort of OK but not really for others (output was really slow), and not at all for others.  So it's an option, but your
	  best bet is still going to be to virtualize a 32bit version of Windows I think.
	- Finished Upgrade.exe -- works OK on the test install of v10.04.02 that I installed here, but still needs additional testing

Apr 23, 2013
	- Renamed GSConfig to GameSrvConfig to match all the other EXEs
	- Started work on Upgrade.exe, which will allow you to import your settings/users/menus from GameSrv v10.04.02
	  - So far just settings for gamesrv.ini can be imported.  Still need to handle logon/logoff process, menus and users

Apr 12, 2013
	- Added filter so unplayable doors will not appear on the menu (for example 16bit DOS doors will not appear on the Doors menu when GameSrv
	  is running on a 64bit version of Windows).

Apr 5, 2013
	- Added a NewUserPassword setting to the gamesrv.ini file -- this will allow you to run a private system where someone has
	  to enter a password before they're allowed to create a new account.

Apr 3, 2013
	- Added *ALIAS, *USERNAME (same as *ALIAS) and *PASSWORD as command-line specifier variables.  By default GameSrv hashes a users password,
	  meaning the original password cannot be retrieved, and so *PASSWORD will actually pass the hash.  If you disable the hashing, then
	  *PASSWORD will pass the real password.
	- Also added option to pass the variables found in NEWUSER.INI on the command-line.  So for example if you have an [Email] entry in
	  newuser.ini, you can use *EMAIL to pass that on the command-line.
	- Please read doors\_runbbs.ini before using these new parameters though -- there's an important security note and instructions on their usage.
	- Added the ability to disable password hashing.  Not recommended, unless you have a need to do so.  If you have a need, just set PasswordPepper=DISABLE in the gamesrv.ini file
	  NOTE: You can't change between hashing and plaintext once users start to sign up -- if you do, the old users will be unable to sign in after you make the change.

Mar 15, 2013
	- Moved "Incoming connection from IP:PORT" message from ClientThread to ServerThread (which means it will be triggered sooner, so much less
	  likely to report the useless "Incoming connection from :0"
	- Added the ability to setup a list of ignored ips -- like banned ips clients connecting from an ignored ip won't be allowed into the system,
	  the difference here is no banned message will be sent to the client, nor will a log entry be added to indicate they connected.  
	  (I have a service that checks if my BBS is online every half hour, and I use this file to exclude the service check from the log file)

Feb 25, 2013
    - Added ASCII version of all ANSI files.  Also updated the way the DisplayFile* menu commands work, so you can pass a filename with no
	  extension and then GameSrv will pick the best extension based on the user's terminal type.

Feb 24, 2013
	- Upgraded Usurper to latest version (0.23b).  This version ships with binaries for both DOS and Win32, so you
	  can remove your old Usurper32 directory after updating the this version.
	  A fresh install is recommended, but if you want to you should be able to upgrade the old Usurper game by
	  overwriting the contents of the old directory with the new directory.
	  Unfortunately the old Usurper32 version is not compatible with 0.23b, so your only option is to delete the Usurper32
	  directory and have players start fresh with the new 0.23b version.

Feb 19, 2013
	- Fixed Crt unit in RMLib to be thread safe, so write lock no longer necessary in GameSrvConsole

Feb 17, 2013
	- Implemented terminal type detection (rip, ansi, ascii), thanks to Synchronet for the very thorough logic

Feb 13, 2013
	- Implemented a RichTextBox extension for handling colour highlighting of certain rows -- hopefully this will fix
	  the problem where some rows aren't coloured as they should be.

Feb 7, 2013
	- Added File menu to GameSrvConfig (which only has an Exit option for now)
	- Fixed GameSrvGUI so that if you hit CTRL-C to copy some text from the status window, then GameSrvConfig won't load as well

Feb 1, 2013
    - Started work on a configuration program
	- Removed RLoginMode configuration variable.  It is now assumed to be classic mode unless otherwise specified by the incoming connection.
	  This also means you can mix classic and web mode on one server since it is specified per connection.
	- Added TimeFormatLog and TimeFormatUI configuration variables, which allow you to customize the way dates/times
	  are displayed in the GUI and Console programs, and stored in the log file
	- Added IP_BANNED.ANS that gets displayed when an IP matches the banned IP filter

January 31, 2013
	- Add colour coding to certain message types (error, exception, warning, debug)

January 29, 2013
	- Add correct version to DOOR32.SYS file

January 21, 2013
	- Fixed a time formatting issue, which was causing times to display the current month number instead of the current minute number in some places!

January 15, 2013
	- DOS doors will now launch in a command shell on Windows, which should fix the "Out of environment space" error
	  that was occuring when new variables were created via SET, and should also fix the problem with %DATE% and %TIME%
	  being blank.

January 11, 2013
	- Implemented new WARNING level to complement ERROR level.  Will try to migrate some of the messages currently being reported as errors to be reported
	  as warnings instead (if it makes more sense to report them that way of course).

January 9, 2013
    - Connections that launch RUNBBS.INI will now update the top 3 lines of the console and gui wfc
	- Changed LocalOutput=[true|false] to WindowStyle=[Hidden|Minimized|Normal|Maximized] in the door ini files
	  The old style was equivalent to true=Minimized, false=Hidden, so with this change you have more control and can use Normal or Maximized too
	- Added the ability to setup a list of banned ips -- see config\banned-ips.txt for more information

January 7, 2013
    - Added door config option to specify how long to wait before force-quitting an external after a hangup event.  Mainly important for runbbs.ini usage,
	  where post-logoff processing may need to run, and may take quite a bit of time before it completes.
	- Added F1, P and Q hotkeys to the GUI version of the WFC (and rotated the message in the bottom-right corner so it's apparent that hitting F1 is an option)
	- GUI now indents long lines that wrap

January 6, 2013
	- Added config option to allow each of the servers to be bound to a single IP address, instead of all addresses
	  within the system.  This will allow multiple instances of GameSrv to be run on the same PC (or VM).
	- Added tray icons to the new GUI screen to let you know what's up with the server.  (Need to make 32x32 versions though!)

January 5, 2013
    - Implemented a "classic" RLogin mode, which works more like true RLogin where the user is signed in without
	  requiring any input from them.
	- Supports the same key/value pair parameters as the "modern" RLogin mode, which means a door can be auto-launched
	  after the connection is established

December 30, 2012
	- Completed NT Service, allowing GameSrv to run without having a user signed on

December 29, 2012
	- Created a proper GUI WFC screen
	- Modified the original Console WFC screen to be much more plain (which makes it more Linux Server compatible)
	- Created an NT Service WFC project, but haven't implemented anything yet

December 28, 2012
    - Modified "RUNBBS" feature to work via doors\runbbs.ini instead of RUNBBS.BAT
	  This allows for the "RUNBBS" feature to work on 64bit Windows and Linux, since the Native mode can be set

October 5, 2012
	- Added {WHOSONLINE_#_ALIAS}, {WHOSONLINE_#_IPADDRESS} and {WHOSONLINE_#_STATUS} MCI codes (where # is the node number to get the whos online status for)
	- Added a Who's Online menu to demonstrate the usage of these MCI codes.  Also demonstrates different menus for different access levels (sysops can see remote IPs, regular users cannot)

August 25, 2012
    - Changed flash socket policy server to allow other policy servers

August 8, 2012
	- Handled "An established connection was aborted by the software in your host machine" error

July 26, 2012
	- Handled "An existing connection was forcibly closed by the remote host" error

July 23, 2012
    - Troubleshooted (troubleshot?) problems with libptysharp on Ubuntu 11.10 and 12.04
	- Wrote an "installer" that will do all the steps mentioned in README.txt for you

July 20, 2012
    - Added cpulimit support to Linux version, so if you're on a shared VPS you can control how much CPU each node uses (and hopefully avoid being terminated by your host!)

July 18, 2012
	- Added F1 help screen
	- DisplayFile with @index file now reports what random file was selected

Mar 16, 2012
    - Updated TCP connection library to eliminate unnecessary delay when reading from remote user (was causing slow connections via HtmlTerm)

Mar 11, 2012
    - Added a start.sh for Linux users
	- WFC screen and log file will now show IP address for all incoming connections.  May help identify hack attempts.
	- WFC screen and log file will now show alias (after user enters alias, and before they enter password).  May help identify hack attempts.

Mar 10, 2012
    - Added some requested door games: Ambroshia, Axe & Fang, Death Masters, DoorMud, Drakeville
	  Requested but not yet added: Galaxy 5, The Lost Temple, Realm of Kisom

Mar 8, 2012
    - Implemented last caller info and counts in win32 version
	- user .ini files have a new AllowMultipleConnections property (that defaults to false) that can allow you to indicate a particular user should be allowed to connect to multiple nodes at once.  (Intended for guest accounts, but could be used for any purpose.)

Mar 7, 2012
    - Removed "you must run as root" requirement for Linux, since the new preferred method for running GameSrv is via 'privbind'

Mar 6, 2012
    - Added a sample RUNBBS.BAT.EXAMPLE file.  Rename to RUNBBS.BAT and modify accordingly to have GameSrv launch a DOS BBS program when a user connects
	- Added a DisplayFileMore action, which will display a long file with pauses every 24 lines
	- Updated DisplayFile* to allow an index file to be passed with the @ parameter, and a random filename from the index file will be displayed (see bulletins menu for example)
	- Added {FILENAME} message variable, which will be the relative path to the currently displayed file
	- Linux version now checks /etc/lsb-release for {OPERATINGSYSTEM} variable
	- Screen clears now reset the RIP window (just in case a RIP client is in use)

Jan 17, 2012
    - Fixed the Linux version (was trying to execute code that should only happen on the Windows version with the nicer GUI)
	- Added an application icon and gave the console window a meaningful title
	- Fixed the Email the SysOp option on the main menu (wasn't pausing after displaying the ansi)
	- Added {PAUSE} MCI that will pause the display of an ansi and wait for a keypress
	- Telnet server now strips LF from CRLF pairs, and converts bare LF to CR (helps with some doors and bad telnet clients)

Jan 16, 2012
    - Fixed a bug that would cause 16bit doors to lock up if launched while there was data in the input buffer (which was quite likely to happen when the door was launched via the logon process)
	- Implemented logging to file.  Changes are flushed once per minute and when GameSrv exits.

Jan 15, 2012
    - Added a system tray icon, and made the WFC hide by default (double click system tray icon to bring it back) (Windows only)

Jan 14, 2012
    - Added the missing "Id" parameter to the web callback
	- Adding the custom new user responses to the web callback
	- Added {ACCESSLEVEL} message variable
	- Implemented a better looking WFC, based on Shotgun PRO's SGMail WFC (Windows only)

Jan 13, 2012
	- Displaying logon_success.ans moved to logonprocess.ini, so it can be disabled if desired
	- logonprocess.ini and logoffprocess.ini are now run sequentially, rather than alphabetical order
	  (the alphabetical thing was a carryover from the previous version that didn't really make sense anymore)
	- Added note about entering NEW to register to the logon_enter_alias.ans file
	- Added SysopEmail configuration option
	- Added Email the SysOp menu option to MAIN menu
	- Added config\newuser.ini, which is used to configure the new user questions
	  Now the only required new user questions are alias and password, everything other than that is defined in newuser.ini
	  New user questions can be required or not, confirmed or not, and validated against a few different formats (let me know if you have suggestions for other validations)
    - Added dynamic message variables for the custom new user questions
	- Fixed a critical bug where the user could have (tried to) overwrite local files by entering a malicious alias
	  (for example entering c:\windows\win as their alias would have tried to overwrite c:\windows\win.ini with their user record)