/// \mainpage MPEG-4 IPMP Message library
/// 
/// \section Intro Introduction
/// This documentation introduces the MOSES implementation of the MPEG-4 IPMP Extension specification ([1] and [2]).
/// The MOSES project (IST-2001-34144 "MPEG Open Security for Embedded Systems") is a European project
/// addressing specifically security issues related to intellectual property management and protection 
/// (more information on the project is available at http://www.crl.co.uk/projects/moses).
/// The code is released in the form of a library of classes that can be used by an external application (a Terminal, an 
/// authoring tool, etc.) to parse or produce bitstreams in the format specified by the MPEG-4 standard.
///
/// \section Descr Description
/// All messages defined in [1] and [2] have been implemented and tested using a regression test program which is provided as 
/// an example application. The test program generates messages in binary form and stores them on a list of files, each named with
/// its own name. Names of the various messages are exactly those defined in the specification, apart from the ByteArray class which 
/// has been renamed IPMP_ByteArray in order to avoid a possible name conflict with a pre-existing class.
/// All classes have methods to read and write their own content in binary form into a memory buffer or into a file.
/// All classes have a constructor, copy constructor and destructor (some classes have no copy constructor just because the 
/// default copy constructor works fine).
/// All classes are fully documented in the documentation provided in the /docs subdirectory.
///
/// \subsection supported Supported platforms
/// The code has been tested on PC's running Win2000/XP. However it does not use any platform specific API, so porting it to 
/// other environments should be possible with little effort.
///
/// \subsection filestruct File structure
/// The source files are organized as follows:
/// - docs: directory containing the documentation of the library. Go to docs/html/ and open index.html to view the documentation.
/// - lib: contains the compiled library
/// - MessageInterface: contains all source code
/// - test: contains the regression test example
///
/// \subsection Comp Compile Options
/// The library has been written in such a way that is possible to wrap all classes into a namespace named "MOSES". This can be useful in case some 
/// pre-existing class name clashes with names defined in the library. In order to compile the library using the namespace, 
/// add the following preprocessor definition: USE_NAMESPACES. If you leave the code as it is, the namespace will not be used. 
///
/// \subsection Building Building and running the test example
/// In order to build the library and the example test program, go to the "test" directory and open the workspace MOSEStest.dsw.  
/// Set MOSEStest as active project, then build it. Running the test will produce a list of files containing messages in binary form.
///
/// \subsection Conformance Verification of conformance
/// Currently the library has been tested internally for consistence. No exchange of bitstreams with other impementations
/// has been done so far, due to the recent release of the IPMPX specification. One of the main goals of the library is to provide a 
/// test bed for other impementation to verify conformance to the specs.
///
/// \subsection Knownlimits Known limitations
/// This library does not implement the entire MPEG-4 System specification, but is limited to the IPMP part ([1] and [2]).
/// Therefore, IOD and OD structures are not implemented.
/// Moreover, the following classes are not yet implemented (these can be included in future releases):
/// - IPMP_ToolES_AU
/// - all classes in Annex "Tool/Content transfer among distributed IPMP devices". 
///
/// \subsection KnowProblems Known problems
/// The MPEG-4 IPMP specification [1] was not officially released at the time this library was written. Therefore, all code 
/// is based on the unofficial output of the MPEG meeting held in Shanghai (October 2002). We expect this to be almost identical to the version that 
/// will be published after an editorial rearrangement.
///
/// Moreover, we found the following problems in the specification:
/// - TrustSecurityMetadata derives from IPMP_DataBaseClass but no tag is assigned to it. We decided to use the first free entry, that is tag = 0x1A;
/// - IPMP_StreamDataUpdate is mentioned in several placed in the document, altough this message had been renamed IPMP_Message; we have used IPMP_Message in every place where IPMP_StreamDataUpdate is mentioned.
/// - in IPMP_SelectiveDecryptionInit, the structure Shuffle_Specific_Info is not defined; we have used ByteArray (IPMP_ByteArray) instead (see the FieldStruct class).
/// - in many places the specification assumes the existence of a registration authority. Since this authority does not exist yet, we have assigned values ourselves. Examples are IPMP_AudioWatermarkingInit and IPMP_VideoWatermarkingInit (see InputFormatTable).
/// - in some places in the specification the type "int" is used, without specifying its length. In all these cases we assumed a lenght of the int field of 32 bits, that is int(32) in SDL terms.
/// - Document N5282 [2] specifies a tag = 0x10 for IPMP_ParametricDescription, but this tag was assigned to another message (IPMP_ToolParamCapabilitiesQuery) in [1]. We provisionally assigned to IPMP_ParametricDescription the value 0x1B instead. 
///
/// \section Contact Contact Point
/// For additional informations, or to provide feedback about bugs, or to contribute with patches, please use the following e-mail address: wp3-moses@crl.co.uk
///
/// \section References References
/// 
/// - [1] ISO/IEC JTC1/SC29/WG11 MPEG, N5284, Information technology - Coding of audio-visual objects - Part 13: Intellectual Property Management and Protection (IPMP) extension, Shanghai, Oct 2002.
/// - [2] ISO/IEC JTC1/SC29/WG11 MPEG, Text of ISO/IEC 14496-1/PDAM3, N5282, Amendment to MPEG-4 system on IPMP Extension, Shanghai, Oct 2002.
///
///
/// \section Copyright Copyright 
///
///       Copyright (c) 2003 MOSES IST-2001-34144 (
///       http://www.crl.co.uk/projects/moses )
///
///       This software code was developed by the MOSES IST-2001-34144
///       project in the course of development of the MPEG-4 IPMP
///       (Intellectual Property Management and Protection, ISO/IEC
///       14496-1:2001) standard.
///       This software code is a reference implementation of a part of
///       the MPEG-4 IPMP standard.
///       MOSES IST-2001-34144 gives users of the MPEG-4 IPMP standard
///       free license to this software code or modifications thereof for
///       use in hardware or software products claiming conformance to
///       the MPEG-4 IPMP standard.
///       Those intending to use this software code in hardware or
///       software products are advised that its use may infringe
///       existing patents. No patent license is granted by this
///       document.
///       MOSES IST-2001-34144, the subsequent editors and their
///       companies, and MPEG-4 have no liability for use of this
///       software code or modifications thereof in an implementation.
///       Copyright is not released for products not conforming to the
///       MPEG-4 IPMP standard.
///       MOSES IST-2001-34144 retains full right to use the software
///       code for its own purpose, assign or donate the code to a third
///       party and to inhibit third parties from using the code for
///       products not conforming to MPEG-4 IPMP standard.
///
///       MOSES IST-2001-34144 MAKES NO REPRESENTATIONS OR WARRANTIES
///       ABOUT THE SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR
///       IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
///       MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
///       NON-INFRINGEMENT. MOSES IST-2001-34144 SHALL NOT BE LIABLE FOR
///       ANY DAMAGES SUFFERED AS A RESULT OF USING, MODIFYING OR
///       DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
///
///       This copyright notice must be included in all copies or
///       derivative works.
///
///       This software was developed by:
///       - Massimo Balestri	 (TILAB)
///       - Giovanni Caire	 (TILAB)
///       - Filippo Chiariglione (TILAB/CRL)
///       - Leon Sucharov	 (CRL)
///       - James King 		 (CRL)
///       - Del Dennis		 (CRL)
///       - Claudio Alberti	 (EPFL)
///       - Antonio Romeo	 (EPFL)
///       - Joao Trindade 	 (ADETTI)
///
/// \author Massimo Balestri, Panos Kudumakis
/// \version 1.0
/// \date 25/Feb/2003