/*
 * GNU.FREE 2001
 *
 * Copyright (c) 1999, 2000, 2001 The Free Software Foundation (www.fsf.org)
 *
 * GNU.FREE Co-ordinator: Jason Kitcat <jeep@thecouch.org>
 *
 * GNU site: http://www.gnu.org/software/gnu.free/gnufree.html
 * 
 * FREE e-democracy site: http://www.thecouch.org/free/
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program (gpl.txt); if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 */

ChangeLog

* FreeInstall.Install.doInstallation():
  Changed file reference to reflect new directory structure of release.
* FreeClient.FCFrame4.jButton1ActionPerformed():
  Fixed small AWT-conversion related bug that prevented vote screen from appearing.
* Free.DBase.init():
  Alter Totals table creation to make total be VARCHAR(12).
* Free.DBase.storeTotal():
  Corrected minor boundary check bug. Also sub-totals were being stored as INTEGER in the DB
  but with encryption this conflicted. Altered to use VARCHAR instead.
* Free.TimeOutThread:
  Updated to handle time outs more gracefully.
* Free.RTServer.startDaemon():
  Modified to support AWT button in T/R switch
* Free.ServerProtocol.process():
  Totals section updated to support expanded Vector style. Also time stamp bug had not been
  fixed. Rectified.
* ERServer.ERServer.startDaemon():
  Created to allow DB password frame to appear first
* Free.DBase(), ERServer.DBase():
  Use MetaData interface to report database version
* Free.DBase():
  Changed HSQL URL to jdbc:HypersonicSQL:rtserver from jdbc:HypersonicSQL:erserver
* FreeClient.FCFrame3:
  Password textfield changed to echo * instead of char
* Free.DBase.isSafe(), ERServer.DBase.isSafe():
  Changed from private to protected to allow use elsewhere.
* Free.RTServer, Free.Intro:
  Modified to support CryptFrame
* Free.CryptFrame, ERServer.CryptFrame:
  File added to collect run-time database encryption password from user
* ERServer.DBase, RTServer.DBase:
  Modified to use connection pooling
* Free.DBPool:
  Package create for JDBC connection pooling. The majority of the performance overhead
  for Database work is opening and closing connections.
* ERServer.TCPServer.run(Socket data), RTServer.TCPServer.run(Socket data),
  FreeClient.TCPClient.run(), RTServer.TCPClient.run():
  The PrintWriter was not buffered so was decorated with a OutputStreamWriter and BufferedWriter
* FreeClient.FCFrame4, FreeClient.TCPClient:
  Corrections for AWT port - Changed frame4.jButton1.setVisible() (or jButton2) to setEnabled()
* Free.ServerProtocol:
  Vector initialisation changed so that start with a size of 1000 as opposed to 1.
  Growth is very expensive performance wise.
* Free.* & ERServer.*:
  All DEV.debug() log4j entries have been put into conditional DEV.isDebugEnabled() loops.
  This optimisation cuts the String appending overhead etc if DEV is not enabled.
* Free.DBase.doSQL(), ERServer.DBase.doSQL():
  Unused StringBuffer 'temp' removed.
* Free.util.AuthSys.makeDigest():
  StringBuffer constructor optimisation.
* Free.DBase.encrypt(), ERServer.DBase.encrypt():
  String.getBytes() replaced with asciiGetBytes().
* Free.AuthKey.build(), ERServer.AuthKey.build():
  asciiGetBytes() replaces use of String.getBytes(). Also some string optimisation.
* Free.util.AuthSys.makeDigest():
  String.getBytes() replaced with asciiGetBytes()
  makeDigest is key in all three applications and an performance improvements are important.
* Free.util.StringByteTools:
  Class created for faster Byte <-> String conversions in ASCII only situations.
* Free.ServerProtocol.process():
  String.equalsIgnoreCase() changed to String.equals().
* ERServer.ERServerProtocol.process():
  String.equalsIgnoreCase() changed to String.equals().
  More fussy but faster.
* FreeClient.Comms:
  sendVote(), sendAuth(), sendDiag() string optimisations on packet creation.
  Not really necessary on client but done for uniformity.
* Free.ClientProtocol.process():
  String optimisations
* Free.Comms:
  sendDiag() & sendTotals() string optimisations on packet creation
* ERServerProtocol.process():
  String optimisations
* FreeInstall & FreeTest:
  Also modified to AWT 1.1
* RTServer: DBFrame, Intro, RTServer, RTFrame:
  Altered to support AWT 1.1
* ERServer: ERServer, ERFrame1, ERFrame2:
  Altered to support AWT 1.1
* FreeClient:FCFrame4, ClientProtocol:
  Changed button action to setEnabled from setVisible
* FreeClient: FClient, VoteFrame, FCFrame2, FCFrame3, FCFrame4:
  Radically changed to support AWT1.1 instead of Swing
* FreeClient.FCFrame3:
  Modified to support isSafe()
* FreeClient.FClient:
  isSafe() added
* Free.TCPServer, ERServer.TCPServer:
  added feature to log socket info (including IP)
* ERServer.ERServerProtocol.process():
  Bug fixed where different message was given to MAC then actually sent if auth failed.
* FreeInstall.Install:
  Added version reporting - starts at 0.4
* FreeInstall.Install:
  Updated for new version of log4j
* FreeInstall.ScreenAppender:
  Updated for new version of log4j
* Free.TimeOutThread.run():
  New threadStatus check added to prevent spurious errors
* Free.TCPClient.run():
  New command to prevent timeout errors even if successful
* FClient.TimeOutThread.run():
  New threadStatus check added to prevent spurious errors
* Free.DBase.authKeyCheck():
  Corrected SQL statement, only implementing encryption highlighted error
* FClient.TCPClient.run():
  New command to prevent timeout errors even if successful
* ERServer.DBase.confirmVoted():
  Corrected SQL to support encryption
* Free.DBase.removeKey():
  Corrected SQL to support encryption
* log4j.erserver.properties, log4j.rtserver.properties:
  Changed to support new log4j naming
* ScreenAppender:
  Now also import org.apache.log4j.spi.* and included several new empty methods to remaind compliant with Appender interface
* ScreenAppender, ERServer, RTServer:
  Changed to support new naming of log4j
* log4j:
  log4j-full.jar is now log4j.jar
* FreeClient.Comms.sendAuth():
  Updated to message digest PIN and password
* ERServer.DBase:
  Changed to support message digest of PIN and password instead of plaintext
* FreeInstall:
  Prompts changed to support IP or DNS addresses
* NOTE:
  DBase.doSQL() is broken for most SQL due to encryption
* ERServer.DBase:
  all database methods changed to support encryption
* Free.DBase:
  all database methods changed to support encryption
* ERServer.DBase:
  same methods added to offer equivalent database encryption
* Free.DBase:
  created encrypt() and decrypt() methods to implement encryption of all data in database
* Free.ClientProtocol:
  Calls sendTotals() on receipt of getTotalVoted() 'X' packet
* Free.RTFrame:
  Now calls Comms.getTotalVoted() instead of sendTotals()
* Free.TCPClient():
  Added recognition of 'Q' packets
* DBase.isSafe():
  Added correct escape character to switch case ''' => '\''
* FreeTest:
  Updated to support new features
* Free.DBase.verCheck():
  Built to make comparison between ERServer and RTServer totals
* Free.ClientProtocol():
  Added a 'Q' section
* DBase.usersVoted():
  Added to total up how many users have voted
* ERServer.ERServerProtocol():
  A 'Q' section was created to support validity queries
* Free.getTotalVoted():
  Created to support new validity check
* TimeOutThread:
  Updated TimeOutThreads to prevent use of deprecated stop() method which was thread unsafe
* Free.ServerProtocol:
  validity check changes
* ERServer.ERServerProtocol:
  changes made to validity checks as new MAC is 39 chars long compared to 31 previously
* Free.util.AuthSys:
  updated to support the more secure SHA-1 Message Digest algorithm instead of MD5
* Install.isSafe()
  added to make sure installation strings are ok
* ERServer.DBase:
  boundary checking added
* Free.DBase:
  boundary checking added to ensure no control characters sneak into SQL commands
* DBase.isSafe():
  Created for boundary checking after regular expression packages proved way too slow
* DBase.doSQL():
  Changed "Executing:..." log statement from NORM to DEV level
* RTServer.DBase:
  importKeys() created to read + decrypt our file of keys
* ERServer.ERFRame1:
  New button added to activate make all keys
* AuthKey:
  encrypt() method added
* FreeInstall:
  some cosmetic changes
* FreeInstall.Install.buildKey():
  Creates key with random input and alphanumeric password
* FreeInstall.AuthInstallFrame:
  Updated to connect to KeyInstallFrame
* FreeInstall.KeyInstallFrame:
  Created to allow input to build secret keys
* FreeInstall.Install:
  Update install strings to support new variables
* Free.ServerProtocol.process():
  Altered to tidy up properly if an AuthKey check fails
* ERServer.DBase.makeAllKeys():
  Created for key export
* Free.Comms:
  added ER_address constant
* Free.DBase.removeKey():
  Created to obscure used AuthKeys
* ERServer.DBase.confirmVoted():
  Method created to support improved robustness of protocol
* Free.ClientProtocol:
  Now supports K packets so that connection can be closed
* ERServer.ERServerProtocol.process():
  K section added
* FreeClient.TCPClient:
  defensive coding added to prevent unknown packet types going to ERServer
* Free.TCPClient:
  Updated to support the new packet type of K
* Free.Comms.sendKey():
  Created to support improved system reliabilty by confirming votes
* AuthKey:
  Added decryption functionality
* Free.DBase.init():
  Now creates Keys table if one doesn't already exist
* Free.DBase:
  Added authKeyCheck() to perform the security and reliable voted tallying process
* Free.RTServer:
  Edited to initalise Free.AuthKey
* Free:
  RTServer taken up to version 0.8
* Free.AuthKey:
  file created to support Authorisation Keys system (same as ERServer.AuthKey except package)
* Free.ServerProtocol:
  Created Vector checkAuthKey & setCheckAK() to retain AuthKey data while timestamp anti-replay check is performed. Change other Vector methods to accomodate this new Vector.
* Free.ServerProtocol.setCheck():
  Changed initialisation of variable where a new check date is inserted to prevent potential bug which might have only been detected on v.large scale testing
* Free.ServerProtocol.process():
  Altered V section to collect AuthKey
* Free.ServerProtocol.process():
  V section, changed packet length check to 112 (63+49 of AuthKey)
* FreeClient.Comms.sendVote():
  Altered to now also send ERAuthKey with vote
* ERServer.DBase.checkER():
  If user logs in and 'voted' set to C then extra log entry written
* FreeClient.ClientProtocol.process():
  stores key in ERAuthKey if valid voter who hasn't voted
* ERServer.DBase.checkER():
  Changed so that initial login only sets 'voted' field to C
* FreeClient.Comms:
  ERAuthKey + accessor methods added to store AuthKey before sending to RTServer
* FreeClient.ClientProtocol.process():
  Modified to accept AuthKey as well as result flag
* ERServer.AuthKey:
  Blowfish chosen for ERServer.AuthKey using 40-char key (alg could be rotated from choice of accepted algs)
* ERServer:
  Taken up to version 0.6
* ERServer.ERServerProtocol.process():
  'E' section edited to support AuthKeys
* ERServer.AuthKey:
  file created to support the Authorisation Keys system
* Docs:
  Miscellaneous JavDoc comments updated
* JNLP-INSTALL:
  created
* Free.ServerProtocol.process():
  Rewrote 'V' section to no longer depend on fixed length dates
* FreeInstall.Install.doInstallation():
  Removed erroneous quote marks from install values
* FreeInstall.AuthInstallFrame:
  Created to support AuthSys setup
* FreeInstall.VoteInstallFrame:
  Created to support party setup
* Updated comments to support FreeInstall
* ERServer.ERServer:
  Fixed constructor to make full use of ERServer.ScreenAppender
* log4j.jar:
  Now log4j-full.jar
* ERServer.ScreenAppender.doAppend:
  Migrated to use LoggingEvent
* RTServer.ScreenAppender.doAppend:
  Migrated to use LoggingEvent
* log4j.rtserver.properties:
  log4j.additivity.DEV corrected from .DEBUG
* log4j.erserver.properties:
  log4j.additivity.DEV corrected from .DEBUG
* File started 1.2.1

EOF ChangeLog