CryptIM Change Log.

I am beginning this at .90, as no other version before this ever really got out.

S = Server
C = Client

* 1.0 BETA
SC- Renamed from Jibba Jabba to CryptIM
SC- Added the code for the mode P on chat channels.
S - Fixed the multiple logins problem (users could login more than once.)
SC- Fixed the multiple clients/servers running on the same system problem. Both now
	check for previous versions already running.
SC- Added System tray code.
S - Fixed the bug when disconnecting didnt remove the user from chat channel user lists.
SC- Fixed the bug with /mode channel +p, it wouldnt remove the channel from the list,
	if the list was already visible. Now +p removes, and -p adds.
SC- Added the DS2 encryption method. (total of 10 different methods now.)
SC- Added the ECG PRNG, better random number generator.
C - Fixed runtime 53 error when canceling the "Send File" dialog.
C - Fixed the friends list, now case-insensative.
C - Fixed when you double-click on someone in the friends list, and you already
	have a window open with them, it now gets the focus.
SC- Fixed sped up the channel message (normal chat in a channel) handling code.
	It was horribly slow (checking if the person is allowed to send the message,
	does the channel exist, ect...)
SC- Started work on "Look and Feel" new buttons (xp style).
SC- Added error handling code. A massive overhaul of the system. about 3000 lines of error
	trapping code has been added to make debuging easier.
C - Fixed the channel list window, now it doesnt pop up every time a mode changes on a
	channel.
SC- Added a Whiteboard feature. Still somewhat buggy, but working.
SC- Added user blocking. Just like the other IM systems, it stops people from messaging you.
C - Added friend and block buttons to the IM window.
C - Modified IM window's resizing code, allowing it to only get so small before snapping back
	to a minimum size.
C - Fixed the channel list window doesnt pop to the front now when the new channe list comes in.
SC- Added the Blocked Users list to the friends window in the client, and added all the code
	to both client and server to handle transfering the list.
SC- Added the list of Offline users.
SC- Added New User Signup, now users can signup remotely using a New User Password.
S - Added a Silent error mode to the option screen.  If it is on, then no error messages
	will pop up on screen, it will just recover from them automatically.
S - Added logging to file. Logging of all application messages (history), all debug messages, and
	all errors.  Its an option on the servers option screen. Logs are stored in the logs dir
	relative to the applications path. Log files are named by date, ex: debug-YYYY-MM-DD.log
S - Added automated backup system. Every hour on the hour every all settings and users are backed up.
S - Added the Directories tab to the options window, you can now specify what directory the logs
	and backups go to (independantly.)
C - Fixed the whiteboard, it is a lot better now.  Doesnt crash when you draw to much at one time.
CS- Added a better structure for the whiteboard's drawing functions.
CS- Added the Line tool to the whiteboard.
C - Redesigned the whiteboard so the window supports more tools.
CS- Added the Star drawing tool to the whiteboard.
CS- Added , now when a user closes the whiteboard with you, it tells you and closes yours.
CS- Added the Ellipse/Circle tool to the whiteboard.
CS- Added the Rectangle tool to the whiteboard.
S - Rewrote some of the UserLogin function on the server for speed improvements.
S - Added account freezing.  Now the server admin can lock users out for abuse or whatever
	other reason they see fit.
S - Added a Freeze reason. Now you can leave a message to the user that will show up when
	they try and login.  So you can tell them why the account is frozen
S - Fixed a couple more errors in the server, signoff was causing errors.
S - GUI changes on the server. Trying to make it look decent.
S - Added Client Support tab to the server options window. Allows a server operator to choose
	wether or now clients are allowed to IM, Chat and/or Whiteboard thru the server.
SC- Added initial version control support.  Client and server now both send what version they
	are to each other. For future use.
SC- Added all the code to make the Client Support options work.
S - Fixed a bug that was starting all new users that signed up with frozen accounts.
S - Added more to the new GUI look of the server.
C - Fixed options window on the client is no longer shown Modal. This was interfering with error
	handling.
C - Added the ability to IM someone from a chat channel by double clicking on their name in the list.
S - Fixed port textbox on option window.
S - Fixed win2k/xp errors with the options form apply button.
S - Fixed the forzen accounts bug. 0.0.12 would freeze accounts no matter what.
SC- Added the about window.
S - fixed the"spaces in path" error for the backup system.
S - New user signup now defaules to NOT frozen.
C - All the other forms dont disappear when the friends list minimizes.
C - The whiteboard is now a little faster. Changed the send rate.
C - Added window flashing now when an IM window doesnt have focus and gets a message.
C - Fixed the rare but annoying error where it would flood an IM window with "*** USER has connected." messages
C - Fixed the minimized form trying to resize objects error.
CS- Added the ability to change passwords from the client.
C - New user signup form now shows * instead of the password.
C - Disabled the "no repeating" code on the clieny. Repeat all you want now.
S - Added the "Clean Channels" functionality to the server, fixes any problems that might arrise over time.
C - Added a menu to the tray icon.
C - Fixed the flashing window a little better, shouldnt flash non-stop now.
C - Added some better looking graphics.
S - Added better authentication control. The server wont allow a command other than "Login" from someone who hasnt been logged in yet.
S - Fixed spoofing hole.
S - Block all non-alpha characters from the new user signup.
S - Fixed big security hole.  Users are now referenced by what they logged in as, not what comes in CIMProtocol.Sender.
SC- The server can now support sending way more channels to the client when it sends the list.
S - Server now handles "stacked" packets like the client does, making it support more data coming in at once better.
SC- Partially implemented the Away mode.  Now when you message someone who is away, you get told they are away.
SC- Fixed the topic problem on the chat channels.  Now every client that should be shown a topic change, gets it.
C - Away flag now set on a form.  So you only get told once that a person is away when messaging them.
S - Server can now minimize.
C - Chat channels no longer screw up and go 1 color for text forthe scrollback buffer.
C - Flashing window bug fixed.
C - Client no longer displays the message that anotehr user has closed their window with you.
S - Server now has a lot more cleanup code. Does user cleanup as well as channel cleanup.
SC- Switched from the Package and Deployment Wizard, to the Visual Studio Installer to release installs for both client and server.
C - Added the auto-update source code, and compiled versions.
C - Chat channels window can minimize now.
S - Manage Online Users window now shows more information.
S - User cleanup code works a little faster.
SC- Complete re-write of the friends/blocks/online list.
SC- All clients can now see who is away and who isnt.  If a user is set Away then they are blue in the list. if they are not away then they are the normal colored icons.
C - Chat Channel windows now have history on the command line.  You can hit up or down to go through all the things you've entered, and escape to clear the box.
S - Idle time on the Manage Online Users window now shows idle time in minutes and seconds instead of total milliseconds (easier to read.)
S - You can now send messages to individual users on the server from the Manage Online Users window.
S - Freeze users, and Freeze Reason both fixed working perfect now.
S - You can now freeze users from the Manage Online Users window.
S - Server now allows your client to close a channel even if the server doesnt think your in the channel anymore (odd problem, but happened a couple times.)
C - Client now has an option on the options screen for setting the amount of time before it automatically sets itself away.  Default is 10 minutes of idle time.
C - Fixed, you can now delete friends that are in the offline list, same as the ones in the normal friends list.
SC- The initial channel mode on channels is now sent correctly. Now you see the correct mode when joining a channel.
S - Channel names with spaces denied properly now.
SC- IP banning with wildcards now implemented, server interface on the options window.
S - Banning of channel names and words in channel names, with wildcards now implemented, server interface on the options window.
S - Added IP Banning to the Manage Online Users window.
C - Clicking on the Chat menu when the Channel List isnt the foreground window brings it to the front.
C - History on the chat channel entry box works a little better/faster.
C - The IM window doesnt instert a tab between the name and text now, just uses 2 spaces instead.
U - Updator doesnt ask you to update if you have the same version.
C - Channel window flashes like the IM windows.
S - Passwords must be 6 characters now.
S - Usernames must be 3 characters now.
C - "Offline Friends" and "Blocked Users" no longer allow you to double-click to IM them.
C - Added Ban and UnBan to the menu on the users in the chat channel.
C - Added /op, /deop, /voice, /devoice commands to the chat channels.
S - Server changes of modes on users in a channel, when the user doesnt exist, now tells you the user doesnt exist, instead of erroring on the server.
C - Added right click menu to the friends list.
C - Added docking, can dock to the left or right side of the screen.
C - After undocking, window isnt stuck on top now.
C - All the reported docking bugs are fixed.
C - Maximizing now disabled.
C - Added the mode button to the chat channel window (on the bottom.)
C - The text boxes that need edit menus, have one added now.
S - Ban channel button added to the Manage Current Channels window.
S - Cleanup now does a lot more with with the user objects when it runs.
S - Added a User Cleanup menu item on the main menu.  This gives you the ability to search through the users and find ones that you want to delete, based on criteria you specify.
C - Basic interface for specifying the default font for IM windows.  On the settings form.  Doesnt do anything yet.
C - Default font for IM windows working.
C - Timestamping working now.
SC- Added Keep Alive code, server and clients now Ping each other every 45 seconds.
C - All keypress events in the chat channel window go to the entry box.
C - Fixed the scrollbar on the friends list. resizes right now.
C - Can add a friend from the chat channels on the right click menu.
C - Better indication of encryption status in IM windows.
S - Added Destroy channel button to the manage current channels window. Kicks every user, bans the channel name, and tells them all that it is banned by server admin.
C - op/deop/voice/devoice in the chat channels are now case-insensative.
C - Flashing IM and Chat channel windows are now an option.
U - updater now defaults to the directory its installed in.
CS- Mode L (limit) in the chat channels is now working properly.
C - Pasting into the chat channel window now works.
C - New accounts management system on login screen.
SC- Ok, so now, really +L is fixed on the chat channels.
C - flash settings are loaded correctly on the options window now.
C - Chat channels now have a menu on the main window.
C - Chat channel list is now resizable.
C - Sorting in the names list on the channel window is working now.
C - 255 character maximum on the entery box for the chat channels now. Hopefully this fixes the Out Of Memory error.
SC- When entering a bad channel name to join, you get an error now.
C - After a successful signup the user is prompted to add it to the list of accounts.
C - Subscript ot of bounds error '9' I think is fixed.
C - The client is now based on the winsock API instead of the winsock control.
SC- Favorite channels added now. They work basically like friends.
C - Current channel list now on the main window.
C - Channel windows have a setting on the options window now. You can tell it whether or not to show them in the taskbar.
C - Auto-join favorite channels on signon, option added.
C - More small fixes for the show in taskbar option.  Now the channels disappear when minimized, instead of showing that little blockon the bottom left.
C - Added sounds.
C - Added delayed signoff and signon icon changes so the user can see who the sound was for (like aim with the little door)
S - Added more to the GUI.  It now shows more detail about any cleanup work it had to do.
CS- Server administrators can now specify permanent channels.
S - More fixes on the server for cleanup code.  C - Auto-Away code is working on the client now.  
S - User search form on the server now to help admins find things easier.  
SC-Couple misc bug fixes.
C - Getting kicked from a channel is handled better now.  
C - All of the / commands from the channel window are parsed by a central parser now (faster and more reliable.) 
S - The new user signup no longer overwrites existing users.
S - More code organization on the server.




* 0.99
C - Added the options window to the client. No options yet, but i'll come up with some.
S - Added refresh list button to the Online Users form, so you dont have to close and 
	re-open the form to get an updated list.
SC- Added the Mode command to the protocol.
C - Added the mode Menu, used to set yourself Invisible and Away.
SC- Modified the mode command.
SC- Added CMode and UMode. Modes are now separated into 3 types, Channel modes (CMode),
	User Modes (UMode), and User On Channel modes (Mode).
SC- Added a ton of code implementing channel modes T and M. Everything should be setup
	for me to easily add K, L and P mode implementations soon.
SC- Added channel mode P code.  Its now fully implemented. When it is set on a channel
	the GetChannels call doesnt return that channel with the rest of the list.
S - Modified the Channels window on the server to allow the local server admin to
	change a users mode on a channel (deop, op, voice, devoice)
S - Modified the Channels window on the server to allow the local server admin to
	change the mode of a channel (t, m, p, l, k)
SC- Changed the End of Packet string, and the Separater string.
SC- Added validation code, to make sure commands are actually legal commands before 
	sending them through the command/message parsing code.
SC- Added channel mode L code.  90% working.
SC- Modified the validation code.
S - Added the New User Password setting to the Server's options window.
C - Added options for all the colors used on the chat channel form
C - Modified the chat channel form to use the new settings.
C - Added the Chat Channel Colors tab to the clients option window, and wrote all the 
	code to use it. You can how set all the colors and they will be used.
SC- Added Channel Ban code. Now users who are opped can ban other users from the channel.
	Also added the unban code of course.
SC- Added Channel Kick code.  Now ops can kick other users from a channel.
S - Added the ability to send raw commands (you enter in all the fields) to the Online
	Users form.
SC- Modified, I restructured a ton of code. replacing duplicate code for sending commands
	to every user in a channel, with a single function SendCommandToChannel.
S - Added the Channels property to the User object (clsUser). Along with it is the
	ChannelCount property and InChannel function (tells if the user is currently
	in the channel given.)
S - Added the Connected property to the User object.  Shows when the user connected.
SC- Added file transfer capabilities. 1 file at a time at the moment, going to work
	on that.
C - Added the ability to resize a chat form, resizes like AIM's window. everything
	keeping aspect ratios as best they can.


* 0.98
C - Fixed a major bug with the command reciever (gets commands from the server).
	Now it handles it when the server sends messages to fast, so it splits up
	messages that come with more than 1 command in them.
C - Fixed a bug in the chat system, where some lines, based on odd word combiniations
	wouldnt make it through to the other users in the channel.
C - Added the /me and /topic commands in channels
	/me does an action, like on IRC
	/topic changes the channels topic.
SC- Fixed a bug in the handling of channel names, names that were all nubmers, were being
	handled as numbers, instead of strings, some of the code didnt like that, so now
	i just cstr() all channel names, no matter what. No real overhead added.
C - Added the /join and /part commands, work like IRC (no # in front of channel names)
SC- Modified the protocol to have 2 more data fields. I realized that user modes, and
	channel modes, would require me to pass a little more data than 3 fields would
	hold.
SC- Modified the BadLogin message to return the reason why they couldnt login
SC- Modified the login procedure to check to see it the user is already logged in, if so
	send a BadLogin back with that reason.
SC- Intial work on adding Modes to the chat system.
	User modes such as invisible and away.
	Channel modes such as Private, Moderated, and Only Ops Can Change Topic.
	User modes for channels such as Op, Deop, Voice.
S - Added the Channels window to the server. So the admin can see all the channels and the
	users in each channel, soon I will add the ability to modify the users attributes
	like modes, and also to kick a user from a channel.\
S - Fixed a bug with the GetUserObject function on the server. It returns the correct object
	now. It now verifies that the socket and login name both match, instead of just
	the Login name.
SC- Fixed made the channels system work, even with the half implemented Mode code. It 
	just ignores the mode stuff and works the way it did before. The mode code
	is coming along, and is almost complete.

* 0.97
SC- Re-wrote chat room system (channels) to be more IRC like.
S - Re-wrote about 65% of the server.
	This major re-write was a speed issue. I was originally storing the users
	just on screen, in a listbox in the form of Username/Socket#.
	Then when I needed to do something to the users. looping through
	all of them in the list, spliting up the user and socket, and sending
	information.
	This would get very slow with a lot of connections.  So now that I expect
	it to be able to handle a heavy load. I re-wrote it to be object-oriented
	with a user object, and a users collection object.
	This meant a major re-write of more than half the code on the server to
	use the new method.


* 0.96
SC- Fixed a buffer problem on both the server and client.  The text windows for
	the servers history, and the chat window both needed to be held under
	a certain amount of text (under 32,000 characters). Otherwise it would
	buffer overflow.
SC - Added basic chat room for multiple users
SC- Caught up on the jj-prot.txt, had to add entries for the chat room and some other
	misc stuff.


* 0.95
SC- Fonts attributes: bold, italic, underline, and strike thru, can all be changed
	on the chat window now.
SC- Every chat window brought up now randomly chooses which encryption method to use
	and generates its own key for that random encryption. So every time you
	load up a new chat window it will have a different encryption method
	and random key combination


* 0.94
S - Server's part of the protocol added to jj-prot.txt
SC- Client and server code cleaned up to match the jj-prot.txt
S - Renaming of users on the server added
C - Font size, and Font now selectable in a chat window.
 

* 0.93
SC- Started work on sending and receiving rich text (colors, font attributes).
SC- Font color now selectable.
SC- Random Key Generator fixed up even more.
C - Login screen on the client now saves the information used to login on a succesfull
	attemp. It is automatically filled in next time you load up the client.
C - Password does not automatically save on sucesfull login attemp, unles you check
	the checkbox to Remember Passwords.


* 0.92
SC- Moved the Friends list storage to the server, rewrote 90% of the Friends list code.
	This allows a user to have the same friends list, no matter what computer
	they are accessing the server from.
SC- Made use of the new random key generator in the negotion of a key for each
	individual chat window.
SC- More massive code cleanup work. Changing huge bunches of nested if statements
	over to Select Cases
SC- Started writing jj-prot.txt, fully documenting the protocol.


* 0.91
SC- Wrote a new Random Key Generator.
S - Created the interface to change the servers key (not as simple as it sounds).
	It has to use the old key to decrypt all the users passwords. Then
	take the new key and encrypt them with that, and put them back in the 
	registry.


* 0.90
C - Added Friends list (stored on client computer)
SC- Major code re-write (mostly cleanup work)
C - Changed Friends/All Users from a listbox to a TreeView to split
	the 2 things up.
C - Added the ability to add and delete friends from the friends list.
SC- Added a set of encryption classes for much stronger encryption than the bad
	implementation of rc4 that was originally used.
SC- Removed all database code.
SC- Added a registry class
S - Created the new interface for options and user management (now using the registry)
