Emulecollection File Structure
==============================

Here below you can find some technical information about emulecollection
file structure.

From: http://code.google.com/p/amule-emc/wiki/emulecollection

Text Files
----------

Lines contain either an ed2k link or a comment starting with #.

Binary Files
------------

uint32_t emulecollection version
values:	COLLECTION_FILE_VERSION1_INITIAL		0x01
	COLLECTION_FILE_VERSION2_LARGEFILES		0x02
	
	version 2 files support files bigger than 4GB (uint64_t file sizes)

uint32_t header tag count
 
header tags:
	
	TAGTYPE_STRING					0x02
		uint16_t					0x0001	
		FT_FILENAME					0x01
		uint16_t					string length
		std::string					string value
	TAGTYPE_STRING					0x02
		uint16_t					0x0001
		FT_COLLECTIONAUTHOR	 			0x31
		uint16_t					string length
		std::string					string value
	TAGTYPE_BLOB					0x07
		uint16_t					0x0001
		FT_COLLECTIONAUTHORKEY				0x32
		uint32_t					blob size
		(notype)					blob data

uint32_t collection file count

uint32_t file tag count

	at this point the TAGTYPE 0x01 will appear as 0x81 (uType | 0x80)
	-> see eMule packets.cpp
	FT_FILERATING and FT_FILECOMMENT are optional tags
 	
 	TAGTYPE_HASH					0x01
		FT_FILEHASH					0x28
		(notype)[16]					hash data

	TAGTYPE_UINT32					0x03
		FT_FILESIZE					0x02
		uint32_t					file size
	TAGTYPE_UINT16					0x08
		FT_FILESIZE					0x02
		uint16_t					file size
	TAGTYPE_UINT8					0x09
		FT_FILESIZE					0x02
		uint8_t						file size
	TAGTYPE_UINT64					0x0B
		FT_FILESIZE					0x02
		uint64_t					file size

	TAGTYPE_STR1 to 16					0x11 to 0x20
		FT_FILENAME					0x01
		std::string					file name
	
	string length is TAGTYPE_STRx - 0x11 + 0x01 [1 to 16]

	TAGTYPE_STRING					0x02
		FT_FILENAME					0x01
		uint16_t					string length
		std::string					string value  	  	

	TAGTYPE_STRING					0x02
		FT_FILECOMMENT					0xF6
		uint16_t					string length
		std::string					string value  	  	

	TAGTYPE_UINT8					0x09
		FT_FILERATING					0xF7
		uint8_t						file rating 	

(notype) signature (only for signed files)
