Version 1.13.16 (Build 16) with qirc patch
------------------------------------------

04/23/01  qirc-1.40
	- Asynchronus reverse DNS resolving support by utilizing GNU adns library

04/22/01  qirc-1.26
	- Ban format changed to free-form wildcard(*,?) format
	  See: game.ban.example
	  
04/16/00  qirc-1.24
	- Fix check_timeout bug which can cause avalanche disconnection
	- Separate timeout cycle time for gameplay and suddendeath/custom
	  This is in turn reduce CPU usage significantly
	- Fix bug which allows a player to perform a switch with dead players 
	- Remove fscanf routine in numerous places and replace with new code
	  to avoid infinite loop bug for notepad-based server runner
	- Ignore csx where x is not 1,2 or 4 in the game with special blocks.
	  Adjust level update detection parameters for cheat/lag
	- Make the program display something when the server start :) to avoid
          newbie confusion of seeing nothing
	- Fix buffer overflow bug in sendwinlist 
	
03/18/00  qirc-1.23
	- Fix buffer overflow in lvprintf() 
	  which happens to all version of tetrix!
	- Fix /who in qirc support
	- Put the support for /quote set in qirc for basic channel settings
	
02/06/00  qirc-1.22
	- Fix bug in level_increase setting reported by gimp/ekn
	- Fix motd bug reported by gimp

01/03/00  qirc-1.21-final

12/05/99  qirc-1.20

        - Spectator support for gtetrinet and tspec is now ready
	- Major code clean up. Create net_playback_send()
	- Rewrite arg part of lvprintf lprintf tprintf net_query_parser()
	  to use a portable vsnprintf. varargs.h style is obsoleted. Also
	  fix the buffer overflow potential due to "vsprintf".
	- Fix various part in spectator support
	- Fix a various minor bugs in irc support
	- Block invalid/corrupt field send by clients
	- This version will obsolete the qirc-0.5x development. qirc-0.5x
	  will no longer be maintained
 
11/07/99  qirc-1.08d *beta release*
	- Fix nick/team name check to better detect invalid nick/team name 
	- Fix spectator support for /move, invalid / command, add /help
	- Fix qirc to be more rfc1459 compliant

10/16/99  qirc-1.06m *experimental*

	- Game play watch (spectators) / playback support for gtetrinet
	  and Tspec. (README.qirc.spectators)
	- New ban format: See examples in ./bin directory. 
	  This makes it possible to handle both hostname and IP.
	- New ban scheme and files: game.(ban, compromise, allow)  
	  Server first checks game.ban (hard banlist) and ban that person
	  immediately.  After a player has logged on (server received
	  team name), server checks game.ban.compromise and game.allow
	  the players will be banned if they are in compromise file but
	  not in game.allow file.  Allow file contains nickname/password
	  which will be allowed as privilledge access. (password = teamname)
	  i.e You can allow just your close AOL friends to play but not
	      other AOL users.
	- To make new ban/allow list take effect you need to go to an irc
	  session and type /quote readaccesslist !!!! (This is to reduce
	  server resource consumption. We don't want to read banfile on
          each player join).  Restart the server would also do it.
	- Add game type "nickonly". Server ignores teamnames when 
	  updating winlist. Players who teamup will not get any points.
	- Fix server did not aware of a color in nickname (report by dynweb)
	- More aggressive cheat detector especially for PURE! Server counts
          no. of pieces drops and analyze it. i.e. you cannot drop only 3
	  pieces in total and add 1 line to all.  This in turn prevents the
	  lag effect from previous game (have you seen someone playing
          previous game while you are playing current game?).  Server
	  detects a bogus message pattern. And detect invalid lvl update
	  which could cause immediate level increase for all players.  
	  To look for a cheater do  "cat game.log |grep Cheating" 
	- Add broadcast message command "/quote wall" to qirc
	- Server now informs qirc clients when a qirc client exits.
	- Optimize server CPU usage in many places.  Also remove most 
	  lvprintf line (Only important events are logged).
	- Fix qirc not to allow same nicknames (irc/player/spectators)
	- Fix a minor tetrix typo which made the channel STATE INGAME
	  even noone is on the channel.
	- Change scoring. Winner get 2or3 points runner-up get 0or1 point
	- Fix unsafe pline command parsing code in original Tetrix.
	- Fix win report on non-playing sockets.
	- Add a small code to make it possible for a client
          to know that this server is a unix server.
			  
03/10/99  qirc-1.05a	

	- Patch against attack using EOL in nick or teamname
	- Block cheater who uses special in PURE channel
	- Support 2 winlists which can be set using winlist_file (1, 2 or -1)
	  where -1 = no score recorded.
	- /winlist #channelname
	- Fix /msg bug suggested by ekn
			  
02/15/99  qirc-1.04     

	- Implement flood control at game start to prevent people 
	  get flooded off
	- Implement new timeout control scheme. Timeout is now reset
	  at net_activity, net_telnet and pline. Each net_t has 2 
	  timeout variables to handle each case.
	- Add wlist_cache variable to net_t to possibly reduce the 
	  winlist update time. Also remove readwinlist() at game start
	  and increase MAXWINLIST to 800. Add net_query_creadwinlist
	- Minor change to net_query_cuserhost and cmode
	- Bound check strcpy() in various places

02/01/99  qirc-1.03

	- Fixed the mysterious access violation bugs =)

01/30/99  qirc-1.02

	- Fix pause thingy.
	- Bound check /topic (net_query_ctopic)
	- Change startgame 0 so that game can be stopped when paused.
	- Change MAXWINLIST to 200. suggested by ekn.

01/28/99  qirc-1.01

	- add nickname to server chat message :) suggested by ekn

01/26/99  qirc-1.0

	- First public release with qirc patch

Version 1.13.16 (Build 16)
--------------------------
Comments:
	Treat this as just a version of bug fixes :)
Changes:
	* Added better logging
		More logging added, and it's easier to understand.
	* Eradicated coredump on timeout
	* Changed /Priority
		Now if you give a channel a priority of 0, no-one will
		autojoin it.
	* Fixed bug, when play
	* Fixed SuddenDeath Addlines
		Ok, my addlines didn't look proffesional :). Now it
		just adds lines to you, and doesn't say ANYTHING in the
		information window. Yep, iAM informed me that TetriNET
		for Win95 already had the feature, so I didn't need
		to recreate it, thank heavens, since having a line
		added to you from <blank> looks pretty suspicious.
	* FIXED a bug that used up file handles
		game.motd was being opened and never closed. Eventually
		the server is killed due to lack of filehandles, or
		is hard to log into. Damn this was a bastard to find :P.
	* IP column to /who  (Suggestion by Hinder - 1/1/1999)
		If you are an authenticated OP, and type /who,
		there is an additional column, IP, which shows each
		players IP. This is added in, with a /ban keyword
		in mind for a future version (hopefully the next).


Version 1.13.15 (Build 15)
--------------------------
Comments:
	Found a few small bugs in Build 14, so I fixed them, plus I've
	decided to be daring and remove as many of the large loops in the
	server as I can, since it's chewing CPU time. So now people are
	grouped by channels instead of in one huge big list, which really
	makes much more sense.
Changes:
	* Fixed wierd bug
		Commented out about 30 lines of code. What THE HELL was
		that doing there :). Should clear a few bugs.
	* Group Network sockets by Channels
		Eradicate long loops and program overhead
	* Fixed preset channels
		A small bug in Build 14 made preset channels disapear.
		FIXED!



Version 1.13.14 (Build 14)
--------------------------
Comments:
	I have discovered something. I program as a kind of stress relief.
	During my most happiest days in my life, the last 3 months :), I've
	programmed just about zilch. Now that I'm getting extemely worried
	about things, IE, very worried for my beautiful girlfriend, who
	has certainly changed my life, I program, and boy do I. Many MANY
	changes in this version. Ok, probably not very interesting 
	information to you, but if a physcologist happens to read this,
	who knows :P
Changes:
	* MORE bug fixes. Oh hell, someone kill me.
	* SUDDENDEATH mode  (So many people requested this)
		After a set number of seconds, the game can go into
		suddendeath, where lines start being added to everyones
		screen.
	* Persistant channels (Requested by so many people)
		You can now create preset channels in game.conf, AND
		you can even on the tetrinet game, make certain channels
		persistant. Added the following commands:
			- /persistant <0/1>
				Make a channel persistant
			- /save
				SAVE persistant channels and info
				to game.conf. Reasonably intelligent.
			- /reset
				LOAD all configuration from game.conf
	* Updated logging
		New game.conf tag:  verbose. Setting a value to this
		from 0-10, sets how verbose the log is. A good setting
		is 4. An extremely noisy setting is 10.
	* /SET command
		Added a new TetriNET command. /Set.
		Type /set help   to find out what options there are.
		/Set allows you to set the type of configuration, like
		percentage of block types on a per channel basis.
		If you get a channel just the way you want, AND you
		own the server, AND you want to keep that channel for
		future use. Just go /persistant  to make it persistant, and
		then /save  to save it :). Saves having to try create
		the info manually in game.conf.


Version 1.13.13 (Build 13)
--------------------------
Comments:
	My last version was to put it plainly and very very nicely, 
	horribly horribly buggy. I'm hoping I've managed to quash
	every one of those extemely annoying and frustrating bugs.
	Introducing channels caused a LOT of problems. However,
	things should be ok now.
Changes:
	* Bug files galore   (Too many to list)
	* Update network engine
		I found the eggdrop code I originally used a little
		bit limiting. So I've heavily modified it to provide
		full dynamic allocation of resources. This should
		save a stack of memory. Next version, I'll
		erradicate the many many loops.


Version 1.13.12 (Build 12)
--------------------------
Comments:
	Quite a radical change in this one. Introduction of an IRC type
	channel structure, to allow really powerful servers to run
	multiple "virtual" tetrinet servers on the same port :) and IP.
Changes:
	* Fixed up uninitilisation bugs
		WOW, going through my code, I found so many places where
		I simply did not initialize important variable because
		I'd added them at a later date, and forgot to add
		that in. How the previous versions worked, escapes me ;)
	* Channel structure (Combined discussion anut, rainbrot, me)
		Redesign the server to allow channels or "virtual" servers.
		Essentially, when the server is configured to allow more
		than just one channel, players may "/join" other channels,
		and play on them, just as if they were seperate servers.
		Also, When one channel fulls up, new players overflow to
		new channels...
	* Binding to IP's (Suggestion by [Op] - 2/11/98)
		Before, the server listened to ALL IP's on the system.
		If you want to run a seperate server on seperate IP's, then
		you can now bind the server to specific IP's. Edit
		game.conf and modify "bindip", and change it from 0.0.0.0
		(All IP's), to that specific IP. Then you can run multiple
		instances of the tetrinet server, if and only if they bind
		to different IP's (and thus have different game.conf files).
	* Added built-in commands:
			- /join <#channelname|number>
			    Join or create a new virtual channel.
			- /list
			    List all virtual channels on the server.
			- /priority <Channel priority (1-99)>
			    Change channel priority. When a new player
			    connects to the server, they join the lowest
			    priority channel that is not full.
			- /topic <channel topic>
			    Change topic of channel, showed in /list
			- /who
			    Show ALL logged in players, and what channel
			    they are in.
	* Added game.conf entries:
			- bindip [0.0.0.0]
			    What IP to bind server to, or ALL (0.0.0.0)
			- maxchannels [1]
			    How many virtual channels the server will
			    allow. The default 1, means no other channels
			    are available. You probably want to change this.
			- command_join
			- command_list
			- command_priority
			- command_topic
			- commant_who
			    Permissions to use these commands.
	

Version 1.13.11 (Build 11)
--------------------------
Comments:
	Geez, I seem to be making new builds daily :) I had to rush this
	one out, because of one incredibly serious flaw in Build 10 that
	I introduced by mistake. It didn't have a limit on the number of
	players allowed to connect, and as soon as 7 players connect, havoc
	reigns. Fixed phew.
Changes:
	* Fixed max number of players
	* Supports AdvancedQuery standard (Added by dds - 13/10/98)
		Port 31456 allows the following advanced queries to
		be sent to it:
			- securequery server_password
			    Gives back <gameslot> <nick> <team> <host>
			    of each logged in player.
			- killplayer server_password gameslot
			    Kicks the player occupying gameslot off server.
		All the query code was sent in by dds.
	* Fixed "playerquery" to count people waiting for teams as well
		Whoops, forgot them, not that it would affect many servers.
	* Introduced timeout variables in game.conf
		Two new tags in game.conf introduced:
			- timeout_ingame    [60]
			- timeout_outgame   [1200]
		They are the number of seconds of no activity before a
		player is considered timed out, and dropped, when a person
		is playing a game and when they are not. Note that during
		a game, because the fields should update at most intervals
		of 30seconds, the timeout for that should be much less,
		then for when no game is player, when people do just
		tend to sit there quietly (but not surely for 1200 seconds:)



Version 1.13.10 (Build 10)
--------------------------
Changes:
	* Introduced timeouts	(Suggestion by crazor - 17/9/98)
		If no activity from a player, they are eventually
		disconnected from the game.
	* Updated playerquery	(Suggestion by dds - 12/9/98)
		Now returns a more accurate figure for number of logged
		in players, since it now ONLY counts players that
		are properly logged in, NOT ghost connections.
	* Updated /msg /kick etc (Suggestion by iAM - 8/10/98)
		Now, /msg etc... take for the playernumber argument
		multiple playernumbers... IE: To msg players 2,3,5, you'd
		write "/msg 235 My message". To kick players 1 and 6, you'd
		write "/kick 16 My message" 
	* Fixed Winlist under TetriNET
		I noticed that when someone has colour in their nicks,
		and they get onto the winlist, then if the server sends
		their nick _in colour_ to TetriNET client winlist, the
		next time that person starts TetriNET client, it crashes.
		Colour is now stripped out of the data sent to TetriNET
		client winlist now.
	* Added security levels (Suggestion by dds - 11/10/98)
		dds suggested that I introduce a way to prevent /kicks or 
		/clears from being done by any player who just happens
		to get op. So I've introduced security levels. The game.conf
		options "command_<command>=number", has now been modified
		so that you can have number to be one of the following:
			0: disabled (IE:command_kick=0)
			1: anyone can use (IE:command_winlist=1)
			2: OP by position can use (IE:command_kick=2)
			3: OP by "/op" can use (IE:command_clear=3)
		This is so you can configure your server so that some
		rogue person who happens to get position #1 can't say
		/clear your winlist on a ladder server :P

Version 1.13.09 (Build 09)
--------------------------
Changes:
	* Added tags to game.conf to allow more customization
		stripcolour		(Strip colour in gmsg's)
		serverannounce		(Server announces winner?)
		pingintercept		(Intercept Pings?)
		command_kick		(Allow /kick?)
		command_msg		(Allow /msg?)
		command_op		(Allow /op?)
		command_winlist		(Allow /winlist?)
		command_help		(Allow /help?)
		command_clear		(Allow /clear?)
	* Patched /op command
		Doesn't allow /op command while game is going :).





Version 1.13.08 (Build 08)
--------------------------
Comments:
	Been about 2 or 3 weeks since I've worked on this, and for the
	simple reason that I've completely head over heels fallen in
	love :-). But I'm back onto it. Thanks for all those really
	nice emails that came in.

Changes:
	* Check for invalid winlist files.
		If a winlist file is in the wrong format (Say from a
		previous version) it is reset. Is there much need for
		backwards compatibility here?
	* Updated security
		I knew I'd find some. Buffer overruns. Fixed.
	* Updated /help
		Now includes help on the new /msg, /winlist. Also looks
		prettier ;)
	* Added /op keyword (Suggestion by (jawfx@hotmail.com 21/9/98))
		I've added some security functions as well, by popular
		request.
		In game.secure, if you uncomment the "op_password" tag
		and put a password there, then if a player types
		"/op <password>", where <password> is what is given
		in the game.secure file, then that player will swap
		places with the OP player. Yes, it works :)
		If you don't have a game.secure file, then run the server
		and it will automatically create one for you. Default's
		to no password, which disables this feature.
	* Made the colour stripping in gmsg less strict
		Now only strips exact colour codes, not characters below
		ascii 32
	* Added /clear keyword (Suggestion by n|ck 6/10/98)
		When the OP types /clear, the server will clear
		it's internal winlist, and update all the clients.
		



 

Version 1.13.07 (Build 07)
--------------------------
Comments:
	Oh geez, what a list of bugs ;). I've still not fixed some, but 
	as soon as I trace what they are, we'll see what can be done.
	Please NOTE: This version uses a different format WINLIST file, and
	has an extra option in the game.conf file. You will definately
	have to delete "game.winlist", and you may want to delete
	"game.conf" file. Yeah, I should have a mechanism that detects
	corrupt winlist files... I will next version ;), otherwise
	TetriNET client literally shits itself when funny winlist values
	come through. Don't blame it either.

Changes:
	* Fixed Winlist score.  (dds reported it 18/9/98)
		Fixed a silly error where I used signed numbers for
		the winlist score, and thus -1 became some ridiculously
		large number.
	* Fixed TET_DEBUG entries in code
	* Added "/winlist xx" to partyline (crazor 17/9/98)
		If a person type "/winlist xx", where xx is the number of
		winlist entries they want to display, then a rank
		of the top xx entries are displayed, with the players
		own team and player name highlighted in red.
	* Added "/msg <playernum> <message>" (crazor 17/9/98)
		Added a rather crude way to privately message someone
		else in the party line. Crude in that the client
		does not handle it too well, but hey, it works :)
	* Added Hotswap of game.conf and game.winlist (crazor 17/9/98)
		Before every game, the game config and winlist are re-read
		so that if they are modified, the server does NOT have
		to restart.
	* Fixed Field Updating incorrectly on-join (iAM 17/9/98)
		What a stupid error to make. Took me ages to trace it down.
	* Added PID file (jawfx@hotmail.com - Ken Iverson 21/9/98)
		Added open "pidfile" to game.conf. The server now writes
		its PID to this file.




Version 1.13.06 (Build #6)
--------------------------
Changes:
	* Better handling of what to do when a player quits.
		In previous versions, when a currently playing player
		leaves, my server didn't do a good enough job
		of checking to see if only 1 team or 1 player was
		left playing. Now it should stop the game and 
		add score to the winners properly.
	* Modified "playerquery\xff" to "playerquery\n"
		I thought that if you sent "playerquery\xff" to a real
		TetriNET server it would be treated as junk and ignored.
		However, it is interpreted and crashes it, so I've
		changed it to "playerquery\n", where \n is newline, which
		works as it should. What a mistaka to maka.
	* Removed all snprintf and vsnprintf  (drslum - 17/9/98)
		For security reasons, I usually use bounds checking
		functions. drslum has notified me that snprintf does not
		exist under SUN systems. I now use other methods AND at
		the same time fixed some small potential buffer over-run
		problems. I would still not recommend the server be run as
		root.
	* Removed Colour VIOLET from being forced before every action.
		This is due to the fact that TetriNET client actually
		uses colours like toggles. If the action was already
		VIOLET, that is, the player had no colour codes in their
		nick, then it became black. I'll fix this by scanning
		the nick for colour codes in my next build ;)

Version 1.13.01-1.13.05 (Build #1, #2, #3, #4, #5)
--------------------------------------------------
Consider these version as the "undistributed" versions. They were my private
major changes to the TetriNET server, each time I wanted to add something
in.
At this stage, the server behaves and looks from the client exactly like a
TetriNET Server behaves, with some small exceptions, listed in the
"Features" section.

Features:
	* /kick <playernumber>
		The "op" of the server can now kick players using this
		keyword in the partyline. Normally, unless YOU are the
		server, TetriNET won't allow you to kick a player.
	* PING-PONG in GameMessage
		I got sick of people filling the game message with "t", to
		test the speed of the Server. While a completely valid thing
		to do, sometimes it scrolled important messages away.
		Now, if a player in a game sends "t" to the game message,
		the server will reply to them, and only to them "PONG", and
		not forward the "t" to the other players.
	* Colour Nicks in Game Message
		People with color nicks were just about unrecognizable in
		game messages, because colour is not parsed there by the
		client. Now if a player has colour codes in their nick, and
		they send a game message, that message has the colour
		codes stripped out of the nick portion.
	* Colour Nicks in Party Line
		Before every message, a "BLACK" colour code is placed, so
		that the colour from the nick doesn't reach the line.
		Before every action, a "VIOLET" colour code is placed, so
		that the colour from the nick doesn't affect the action.
	* game.motd
		When a player connects to the server, if there is a
		game.motd file, it is sent to them as from "<Server>".
	* End of game, annouce winner
		Ever wonder who won? At the end of a game, the "<Server>"
		will announce the player or team that won.
	* /help partyline keyword
		If someone types "/help" in the party line, they get a list
		of commands that are available, like "/me" and "/kick".
	* playerquery
		If a client connects to the Server, and instead of sending
		their INIT string, sends "playerquery\n", \n is newline 
			"Number of players logged in: n"
		Where n is the number of players logged in. This is
		fully compatible with real TetriNET servers, since they
		will just disconnect you, whereas mine returns the number
		of players before disconnecting you.
	* 100 item winlist
		Yep, for those incredibly long ladder games, I've extended
		the winlist to store the top 100 teams/players. Of course
		only the top 10 are shown in the TetriNET winlist, but
		now you know you can work you way up :)


