
                                CHANGE HISTORY

===============================================================================
  Product:	RCDb Client & RCDb Library
===============================================================( 1.23-b75 )====
-------------------------------------------------------------------------------
ISSUE:		The transferPlaylist() method does not provide a means to limit 
			the number of clips to transfer.  More control is needed in order 
			for streaming applications to better manage the clips they are 
			downloading.

RESOLVED:	07/02/2010

RESOLUTION:	Added new transferPlaylist() API that lets the application 
			specify how many clips to transfer.
-------------------------------------------------------------------------------
ISSUE:		RCDb Client does not provide an API just for deleting a Progressive 
			PlayList clip.  Use of disablePlaylistClip() is problematic when 
			trying to delete a clip that is not enabled. 

RESOLVED:	07/02/2010

RESOLUTION:	Added new deletePlaylistClip() API and clarified the javadocs for 
			disablePlaylistClip().
-------------------------------------------------------------------------------
===============================================================( 1.23-b74 )====
-------------------------------------------------------------------------------
ISSUE:		The new filesMatch() routine in the UpdateManager fails with 
			IndexOutOfBoundsException when checking the BUMF of an existing 
			update.

RESOLVED:	07/01/2010

RESOLUTION:	Fixed error.
-------------------------------------------------------------------------------
===============================================================( 1.23-b73 )====
-------------------------------------------------------------------------------
ISSUE:		A switch is needed to allow PMSN reporting to the server.

RESOLVED:	06/30/2010

RESOLUTION:	Added new -enable.pmsn Xlet parameter and "pmsn.on" file for 
			activating PMSN reporting to the server.
-------------------------------------------------------------------------------
===============================================================( 1.23-b72 )====
-------------------------------------------------------------------------------
ISSUE:		Under rare conditions, the file comparison routine used by the 
			RCDb Client Update Manager could return a false negative result, 
			though this has never been observed in use.

RESOLVED:	06/24/2010

RESOLUTION:	Fixed logic to prevent false negative results.
-------------------------------------------------------------------------------
ISSUE:		On select players, the file transfer mechanism implemented by the 
			RCDb Client can be optimized for much higher performance than 
			currently achieved, with no significant impact on other devices.

RESOLVED:	06/24/2010

RESOLUTION:	Optimized file transfer mechanism for further performance gains.
-------------------------------------------------------------------------------
===============================================================( 1.23-b71 )====
-------------------------------------------------------------------------------
ISSUE:		StringKit#countryCodeToString() and languageCodeToString() may 
			return unusable values if given invalid codes.

RESOLVED:	06/03/2010

RESOLUTION:	Added validity checks to the return values to ensure that only 
			alphabetic characters ['a'..'z', 'A'..'Z'] are returned.
-------------------------------------------------------------------------------
ISSUE:		BDLiveRelay#serviceAction() javadocs do not explain what to do 
			when a value of 'null' is returned.

RESOLVED:	06/03/2010

RESOLUTION:	Improved javadocs for serviceAction() method.
-------------------------------------------------------------------------------
===============================================================( 1.22-b69 )====
-------------------------------------------------------------------------------
ISSUE:		The "-D_NET:xxxx" Xlet parameter option fails to activate network 
			logging.

RESOLVED:	02/26/2010

RESOLUTION:	Fixed bug.
-------------------------------------------------------------------------------
===============================================================( 1.21-b67 )====
-------------------------------------------------------------------------------
ISSUE:		RCDb Client should provide a way for the server to distinguish 
			individual versions of discs with the same RCDb Disc ID (i.e. 
			V-ISAN).

RESOLVED:	02/11/2010

RESOLUTION:	Added new "rcdb.disc.version" property for specifying RCDb Disc 
			Version in the config.xml file, which is now included in every 
			message request sent to the server.
-------------------------------------------------------------------------------
ISSUE:		RCDb Client should provide a way to modify trace log output options 
			via the RCDb Server by including a new log level property in the 
			GetRelatedContent response.

RESOLVED:	02/10/2010

RESOLUTION:	Added new "rcdb.log.level" property for specifying trace log 
			parameters, and BDLiveClient#setLogLeve() to process it.
-------------------------------------------------------------------------------
ISSUE:		RCDb Client should provide a way to get the current time, as 
			synchronized with the RCDb server, and therefore more likely to 
			be representative to date/time in the real world.
			
RESOLVED:	02/03/2010

RESOLUTION:	Added BDLiveRelay#getCurrentTime().
-------------------------------------------------------------------------------
ISSUE:		RCDb Client should provide a way for applications to set one or 
			more global properties that are included in the XML messages sent 
			back to the server.

RESOLVED:	01/29/2010

RESOLUTION:	Added BDLiveRelay#setMessageProperty().
-------------------------------------------------------------------------------
ISSUE:		An error was found in which a call to the refreshRelatedContent() 
			API can result in the RCDb Client state being set to CONNECTED 
			even if a connection failure occurs during the operation.
			
RESOLVED:	01/29/2010

RESOLUTION:	Fixed bug so that state is only set to CONNECTED if the operation 
			completes without a network failure.
-------------------------------------------------------------------------------
ISSUE:		RCDb Client should have a way of checking the status of the RCDb 
			Server to ensure that it can be reached and is processing service 
			action requests.

RESOLVED:	01/29/2010

RESOLUTION:	Added BDLiveRelay#pingServer() API and associated processing in 
			the RCDb Client to perform the operation.
-------------------------------------------------------------------------------
ISSUE:		If the BDLiveRelay is unable to attach to the RCDb Exchange upon 
			initial start, it creates a Timer thread to repeat attempts.  
			However, even if it later attaches successfully, the Timer 
			continues to exist until the Relay is eventually disposed.  
			The unused Timer should be disposed as soon as a the Relay 
			successfully attaches to the Exchange.
			
RESOLVED:	01/24/2010

RESOLUTION:	Added code to BDLiveClient#attachExchange() that cancels and 
			releases the Timer upon successful attachment, if present.
-------------------------------------------------------------------------------
===============================================================( 1.20-b62 )====
-------------------------------------------------------------------------------
ISSUE:		The RCDb Client can, under certain condition, put an invalid error 
			code into the value returned by BDLiveRelay#getLastErrorCode().  
			Only RCDbError constants should be used.  A new RCDbError code 
			needs to be created for server errors, and the specific error 
			code and message from the server should be made available in 
			the getLastErrorMessage() response.
			
RESOLVED:	01/20/2010

RESOLUTION:	Added RCDbError#SERVER_ERROR_CODE and modified all RCDb Client 
			actions to set this error code in the event of a negative 
			return code from the server, with the actual return code and 
			message included in the error message given.
-------------------------------------------------------------------------------
ISSUE:		NullPointerException can occur in BDLiveClientXlet#getPlayerId()
			under certain conditions.
			
RESOLVED:	01/18/2010

RESOLUTION:	Added guards on additional variables to ensure they are properly 
			accessed.
-------------------------------------------------------------------------------
===============================================================( 1.20-b61 )====
-------------------------------------------------------------------------------
ISSUE:		The checkUpdate() and checkUpdates() operations will check the 
			existence of every content file before checking the manifest and 
			signature files of an update descriptor, which can be a time 
			consuming operation for large updates.  The manifest and 
			signature should be checked first to determine if the update 
			is ACTIVE before bothering with all of the content files 
			in order to provide a faster response.  (If an update is ACTIVE, 
			then the content files will be present and locked by the player.)  
			
RESOLVED:	11/30/2009

RESOLUTION:	Optimized UpdateManager#getUpdateStatus() to return quickly.
-------------------------------------------------------------------------------
ISSUE:		A call to enablePlaylistClip() can cause some players to crash 
			if an invalid clip number is provided due to an unhandled 
			exception that propagates up from the VFSManager.  Try..catch 
			protection needs to be added to this and similar methods to 
			prevent such crashes.
			
RESOLVED:	11/30/2009

RESOLUTION:	Added try..catch blocks and appropriate error reporting to all 
			methods that require the VFSManager.
-------------------------------------------------------------------------------
ISSUE:		RCDb Client javadocs do not clearly indicate where various state 
			and error constants are defined.

RESOLVED:	11/25/2009

RESOLUTION:	Added the necessary javadoc language.
-------------------------------------------------------------------------------
ISSUE:		RCDb Client javadocs do not clearly indicate when and for which 
			methods a calling application needs to wait for asynchronous 
			update operations to complete via the UpdateStateChangeEvent.

RESOLVED:	11/25/2009

RESOLUTION:	Added the necessary javadoc language.
-------------------------------------------------------------------------------
ISSUE:		Update RCDb Client to support the use of BUDA credentials.
			
RESOLVED:	11/09/2009

RESOLUTION:	Updated UpdateManager to support the use of BUDA credentials with 
			the use of "rcdb.vfs.update.#.credential" and other related 
			properties.
-------------------------------------------------------------------------------
ISSUE:		Update Debug library to allow trace log output via network port.
			
RESOLVED:	11/09/2009

RESOLUTION:	Updated Debug library to support trace log output via network 
			port (44001) using the "-D3" or "-D_NET:port" parameters.  
			A "NetLog" utility is available from RCDb for accessing these 
			logs.
-------------------------------------------------------------------------------
ISSUE:		Update Debug library to allow trace log output to a file in the 
			local storage of the device.  (This feature was previously 
			implemented but not in the production version of the build.)
			
RESOLVED:	11/09/2009

RESOLUTION:	Updated Debug library to latest version, which supports trace log 
			output to a file in the BUDA using the "-D:file" parameter.
-------------------------------------------------------------------------------
===============================================================( 1.10-b54 )====
-------------------------------------------------------------------------------
ISSUE:		The transferPlaylist() method currently requires the VFS update 
			to be activate in order to download the associated file(s).  There 
			are many cases, however, in which downloading the files should not 
			be dependent on the update being active.

RESOLVED:	09/24/2009

RESOLUTION:	Modified transferPlaylist() behavior to only require the VFS
			update to be active if the 'autoEnable' feature is turned on.  
			(Enabling a clip requires that the VFS update be active.)
-------------------------------------------------------------------------------
===============================================================( 1.00-b52 )====
-------------------------------------------------------------------------------
ISSUE:		The ".target" property for a file or clip in an RCDb Update 
			may contain either a single file (usually) or a path that is 
			relative to the update's local storage directory.  However, 
			if this path contains "../" or "./", some players do not 
			handle it properly, resulting in the update files being 
			stored in different locations depending on the player.

RESOLVED:	09/15/2009

RESOLUTION:	Added UpdateManager#getTargetPath() private method to process 
			these target file locations to collapse instances of "./" and "../".
-------------------------------------------------------------------------------
===============================================================( 1.00-b50 )====
-------------------------------------------------------------------------------
ISSUE:		UpdateManager#selectManifest() and selectSignature() fail to 
			return anything but 'false'.  This masks erroneous behavior 
			for normal VFS Updates (e.g. manifest exists but signature 
			does not), and causes progressive playlist to fail completely.

RESOLVED:	5/08/2009

RESOLUTION:	Updated methods to return correct values.
-------------------------------------------------------------------------------
===============================================================( 1.00-b49 )====
-------------------------------------------------------------------------------
ISSUE:		BDLiveRelay#restartTitle() is an invalid implementation of 
			title restarting and should be removed.

RESOLVED:	4/20/2009

RESOLUTION:	Removed BDLiveRelay#restartTitle().
-------------------------------------------------------------------------------
===============================================================( 1.00-b48 )====
-------------------------------------------------------------------------------
ISSUE:		After performing a VFS Update and subsequent title jump, a call 
			to the transferPlaylist() method fails, claiming that the update 
			is not active even when it is.

RESOLVED:	4/20/2009

RESOLUTION:	Modified UpdateManager#transferPlaylist and getPlaylistClips() 
			to not check update status directly.  Improved the method 
			UpdateManager#processSelectPlaylist() to select manifest and 
			signature information, and added UpdateManager#isUpdateActive() 
			to determine if the given update is currently active or not.  
			Finally, modified UpdateManager#processTransferPlaylist() to 
			call this new method in order to ensure the update is, in fact, 
			active before beginning to transfer the playlist clip files.
-------------------------------------------------------------------------------
===============================================================( 1.00-b45 )====
-------------------------------------------------------------------------------
ISSUE:		RCDb Client release package includes a permission request file (PRF) 
			in the core application JAR that is organization-specific and 
			should be removed.

RESOLVED:	2/05/2009

RESOLUTION:	Modified build process to exclude PRF files from distribution JAR.
-------------------------------------------------------------------------------
ISSUE:		FOX requested that an uncompressed 8,192-byte padding.pad file be 
			added to the root level of all JAR files in order to meet FOX 
			BD-J requirements.

RESOLVED:	2/05/2009

RESOLUTION:	Modified build process to include padding files.
-------------------------------------------------------------------------------
ISSUE:		If BDLiveRelay#dispose() is called on the last remaining instance 
			count of the class, but then subsequent method calls continue to be 
			made on that instance, the relay may behave in an unexpected manner, 
			attempting to connect to the Exchange, etc.
			
RESOLVED:	1/21/2009

RESOLUTION:	Modified attachExchange() to fail fast if the instance of the 
			relay has been disposed of, rendering that instance of the 
			relay inactive.
-------------------------------------------------------------------------------
ISSUE:		The current implementation of BDLiveRelay#getUpdateByName() may 
			result in numerous IXC transactions for a single call, which is 
			excessive.  The same operation can be handled with a single IXC 
			transaction, reducing the processing overhead.

RESOLVED:	1/21/2009

RESOLUTION:	Implemented BDLiveExchange#getUpdateByName() to handle the 
			search operation in a single IXC transaction.
-------------------------------------------------------------------------------
===============================================================( 1.00-b41 )====
-------------------------------------------------------------------------------
ISSUE:		Files, such as player.dat, userinfo.dat, and update.dat are not 
			being overwritten with new information if they already exist.  
			This causes information not to be updated when it should be.

RESOLVED:	12/18/2008

RESOLUTION:	Modified writeTextData() to add a parameter to indicate if the 
			file should be overwritten if it exists already.
-------------------------------------------------------------------------------
===============================================================( 1.00-b40 )====
-------------------------------------------------------------------------------
ISSUE:		RCDb Server returns the property "rcdb.user.pin.valid" to indicate
			if the PIN code sent by ValidatePIN is valid for the given user.  
			However, the client does not check this property, resulting in an 
			invalid response.
			
RESOLVED:	12/11/2008

RESOLUTION:	Modified ValidatePIN to return false if either the return code 
			from the server is negative or "rcdb.user.pin.valid" is not 
			"true".
-------------------------------------------------------------------------------
===============================================================( 1.00-b39 )====
-------------------------------------------------------------------------------
ISSUE:		The ValidatePIN service action is currently using the property 
			"rcdb.user.pin" to send the PIN code that is to be validated.
			However, this is inconsistent with the GetUsers action, for 
			whom a ".pin" property is just an indicator of whether or 
			not the user account requires a PIN code challenge to be 
			authenticated.  ValidatePIN should be changed to use ".pincode" 
			instead.  A similar problem is found with "rcdb.user.new.pin" 
			in the ChangePIN service action.
			
RESOLVED:	12/10/2008

RESOLUTION:	Renamed ".pin" to ".pincode" in both cases.
-------------------------------------------------------------------------------
ISSUE:		The static BDLiveRelay#getInstance(XletContext) is often unusable 
			since not all modules have access to the XletContext.  An alternate 
			pair of methods BDLiveRelay#setXletContext() and getInstance() 
			should be provided, allowing the XletContext to be set early by 
			the Xlet, such as during initXlet(), while allowing other modules 
			to use the generic getInstance() later.  An IllegalStateException 
			could be thrown in cases where getInstance() is used prior to 
			an XletContext having been set either by setXletContext() or 
			getInstance(XletContext).
			
RESOLVED:	12/05/2008

RESOLUTION:	Added BDLiveRelay#setXletContext() and getInstance() in order to 
			separate assignment of the Xlet context from instantiation and 
			access to the BDLiveRelay singleton object.  This allows much 
			more flexible access to the BDLiveRelay as long as the context 
			is set when the Xlet starts.
-------------------------------------------------------------------------------
ISSUE:		A request has been made for a method getEnabledPlaylistClips() to 
			compliment the existing getDisabledPlaylistClips() method.

RESOLVED:	12/05/2008

RESOLUTION:	Added BDLiveRelay#getEnabledPlaylistClips() and updated the 
			call back chain all the way to the UpdateManager, where 
			getDisabledPlaylistClips() was changed to getPlaylistClips() 
			with an additional parameter indicating whether the enabled 
			or disabled clips are requested.
-------------------------------------------------------------------------------
ISSUE:		The removePlaylist() method generates undue error traffic for  
			each attempt to disable an already disabled clip resulting in 
			a "false" response.
			
RESOLVED:	12/05/2008

RESOLUTION:	Modified the UpdateManager#disableClip() method to include a 
			boolean parameter indicating whether or not to report errors.
			This value is set to false during processRemovePlaylist() to 
			prevent unnecessary error messages.
-------------------------------------------------------------------------------
===============================================================( 1.00-b38 )====
-------------------------------------------------------------------------------
ISSUE:		A parsing or read failure that generates an exception when 
			receiving a response from the RCDb server causes the client 
			to fall back to the DISCONNECTED state.  Instead, it should 
			simple return a null response.

RESOLVED:	12/04/2008

RESOLUTION:	Modified the exception handling in MessageManager to not 
			pass parsing errors up the chain but just return null 
			responses in such cases.
-------------------------------------------------------------------------------
ISSUE:		If the source URL for an update's manifest or signature file 
			contains a query string or otherwise results in a file name 
			that is invalid for the platform, transferUpdate() and 
			performUpdate() operations will fail.  

RESOLVED:	12/04/2008

RESOLUTION:	Modified the operations to always use the RCDb standard file 
			names for BUMF and BUSF files:  "update.bmf" and "update.bsf".
-------------------------------------------------------------------------------
ISSUE:		If an update is reverted via a call to BDLiveRelay.revertUpdate(), 
			the update information pertaining to the last update performed, 
			as stored in the file update.dat, as well as the corresponding 
			RCDb property "rcdb.vfs.last.update", are not reset. 

RESOLVED:	12/02/2008

RESOLUTION:	Added BDLiveClient#removeUpdateInfo(), which is now called by 
			BDLiveClient#revertUpdate() after successfully reverting an 
			update.
-------------------------------------------------------------------------------
===============================================================( 1.00-b37 )====
-------------------------------------------------------------------------------
ISSUE:		The validatePIN() and selectUser() methods both return false 
			even though a valid PIN code is given for the specified user 
			account and the server indicates that validation was succesful.  
			The problem is caused by "double-dipping" in which the 
			MessageHandler interface processes Validate PIN messages, 
			removing the processed properties before the validatePIN() 
			method has a chance to essentially do the same processing.

RESOLVED:	11/28/2008

RESOLUTION:	Removed processValidatePIN() from MessageHandler and messageProcess().
			Moved processing functionality directly into the validatePIN() 
			method in the BDLiveClientXlet.
-------------------------------------------------------------------------------
ISSUE:		RCDb Client library does not provide a publicly exposed constant 
			value for the default "Anonymous" user's User ID or User Name.  
			This is needed for determining when the current user is not 
			the default "Anonymous" user, as well as other tasks.
			
RESOLVED:	11/26/2008, 1.00-b37

RESOLUTION:	Added StdProperty.ANONYMOUS_USER_NAME and 
			StdProperty.ANONYMOUS_USER_ID.
-------------------------------------------------------------------------------
===============================================================( 1.00-b36 )====
-------------------------------------------------------------------------------
ISSUE:		Selecting a different user account is not reflected in messages 
			being sent to the server.  The changeUser() method is not updating 
			the MessageManager's current user ID setting.
			
RESOLVED:	11/26/2008, 1.00-b36

RESOLUTION:	Added MessageManager.setUserID() call to BDLiveClient.changeUser() 
			to make sure message included updated User ID call.
-------------------------------------------------------------------------------
===============================================================( 1.00-b35 )====
-------------------------------------------------------------------------------
ISSUE:		New firmware updates for Sony BDP-S1/S300/S500 and Pioneer 
			BDP-HD1/94/95 have introduced eager-linking to their JVM's.  
			This, in turn, causes the RCDb Client to fail to load at all 
			because AACS Online API's are not present on these players.
			
RESOLVED:	11/19/2008, 1.00-b35

RESOLUTION:	Added acquireAACSAttributes() to acquire AACS Online attributes 
			via reflection, therefore avoiding eager-linking problems. 
-------------------------------------------------------------------------------
ISSUE:		Methods for CreateUser and GetUserInfo service actions are 
			required in the RCDb Client for X-Files 2.
			
RESOLVED:	11/19/2008, 1.00-b35

RESOLUTION:	Added createUser() and getUserInfo() methods, as well as the 
			UserAccountError interface of constants. 
-------------------------------------------------------------------------------
===============================================================( 1.00-b34 )====
-------------------------------------------------------------------------------
ISSUE:		Volume ID is not reported properly by RCDb Client to server.  
			Javelin_Foundation's StringKit#bytesToHex() does not properly 
			create a hexadecimal string representation of the given array.
			
RESOLVED:	11/12/2008, 1.00-b34

RESOLUTION:	Modified StringKit#bytesToHex() algorithm to convert properly, 
			and tested with assorted values to ensure proper behavior. 
-------------------------------------------------------------------------------
===============================================================( 1.00-b32 )====
-------------------------------------------------------------------------------
ISSUE:		Currently User and Player Information is transmitted to the RCDb 
			server by default.  The opt-out flags "-disable.userinfo" and 
			"-disable.playerinfo" are provided, but they could easily be 
			left out by mistake, potentially creating a legal problem.  
			These features should be changed to an opt-in variety, using 
			"-enable.userinfo" and "-enable.playerinfo" to activate the 
			features.

RESOLVED:	11/02/2008, 1.00-b32

RESOLUTION:	Changed opt-out flags from "-disable.userinfo" and "-disable.playerinfo" 
			to opt-in flags "-enable.userinfo" and "-enable.playerinfo".  In addition, 
			changed opt-out files from "userinfo.off" and "playinfo.off" to opt-in 
			files "userinfo.on" and "playinfo.on". 
-------------------------------------------------------------------------------
