On Friday 27 February 2009 14:00:38 j16sdiz at freenetproject.org wrote: > Author: j16sdiz > Date: 2009-02-27 14:00:37 +0000 (Fri, 27 Feb 2009) > New Revision: 25853 > > Modified: > trunk/freenet/devnotes/specs/metadata-v0.txt > Log: > some (incomplete) doc update > > Modified: trunk/freenet/devnotes/specs/metadata-v0.txt > =================================================================== > --- trunk/freenet/devnotes/specs/metadata-v0.txt 2009-02-27 14:00:05 UTC (rev 25852) > +++ trunk/freenet/devnotes/specs/metadata-v0.txt 2009-02-27 14:00:37 UTC (rev 25853) > @@ -11,6 +11,7 @@ > size, metadata of any conceivable size, ZIP manifests and ordinary > manifests. Limits will be imposed at the client level. Comments? > > +All numbers are in java big-endian. > > 8 bytes - magic number for freenet metadata > Wasted bytes, just being paranoid. > @@ -19,78 +20,73 @@ > 0 for now. > > 1 byte - document type > -0 = simple redirect (including splitfiles) > -1 = multi-level metadata (fetch this key, then use it as metadata) > -2 = ordinary manifest > -3 = ZIP manifest > -4 = reserved for use in ZIP manifests, see below > -5+ = available > + 0 = SIMPLE_REDIRECT - simple redirect (including splitfiles) > + 1 = MULTI_LEVEL_METADATA - multi-level metadata (fetch this key, then use it as metadata) > + 2 = SIMPLE_MANIFEST - ordinary manifest > + 3 = ARCHIVE_MANIFEST - ZIP/TAR manifest > + 4 = ARCHIVE_INTERNAL_REDIRECT - reserved for use in ZIP/TAR manifests, see below > > -If multi-level metadata: > +If documentType == MULTI_LEVEL_METADATA: > 1 byte - number of levels (must decrease by 1 on each level!) > 1 byte - document type of final metadata > 8 bytes - length of final data > > -For a simple redirect, multi-level metadata, or a ZIP manifest: > +If documentType == SIMPLE_REDIRECT or SIMPLE_MANIFEST or ARCHIVE_MANIFEST or ARCHIVE_INTERNAL_REDIRECT > + 2 bytes - flags > + bit 0 = FLAGS_SPLITFILE - splitfile > + bit 1 = FLAGS_DBR - DBR (splitfile + DBR *is* valid, not supported) > + bit 2 = FLAGS_NO_MIME - no MIME type > + bit 3 = FLAGS_COMPRESSED_MIME - compressed MIME type > + bit 4 = FLAGS_EXTRA_METADATA - has extra metadata fields (ignored) > + bit 5 = FLAGS_FULL_KEYS - redirects as full keys (invalid if splitfile) > + bit 6 = FLAGS_SPLIT_USE_LENGTHS - reserved/unused > + bit 7 = FLAGS_COMPRESSED - compressed splitfile > > -2 bytes - flags > -bit 0 = splitfile > -bit 1 = DBR (splitfile + DBR *is* valid) > -bit 2 = no MIME type > -bit 3 = compressed MIME type > -bit 4 = has extra metadata fields > -bit 5 = redirects as full keys (invalid if splitfile) > -bit 6 = unused > -bit 7 = compressed splitfile (might work with normal redirects but there > -is no point as single blocks are transparently gzipped anyway) > +If documentType == ARCHIVE_MANIFEST: > + 2 bytes - ARCHIVE_TYPE > + 0 = ZIP ("application/zip", "application/x-zip") /* eventually get rid of ZIP support at some point */ > + 1 = TAR ("application/x-tar") > > -If a ZIP manifest: > -2 bytes - archive ID (initially 0 = ZIP. We may in future support 1 = > -tar, with the compressed splitfile bit set, and then a codec specified > -below, for tar.gz, tar.bz2 etc) > +If flags |= FLAGS_SPLITFILE: > + 8 bytes - real content length (compressed size, signed number) > > -If a splitfile: > -8 bytes - real content length (uncompressed) > -Note no 2GB limit. :) > +If flags |= FLAGS_COMPRESSED: > + 2 bytes - COMPRESSOR_TYPE > + 0 = GZIP > + 1 = BZIP2 > + 2 = LZMA > + 8 bytes - decompressed content length (signed number) > > -If compressed: > -2 bytes - codec ID > -Initially we only support gzip (0). > -8 bytes - decompressed content length > +If _NOT_ flags |= FLAGS_NO_MIME: > + If flags |= FLAGS_COMPRESSED_MIME: > + 2 bytes - compressedMIMEValue (base MIME type IDs) > + See DefaultMIMETypes.java for the look up table > > -If has a MIME type: > -If raw: > -1 byte - length (N) > -N bytes - string > + If compressedMIMEValue & 0x7fff == 0x7fff:
Surely the opposite - if the top bit is set, ... > + 2 bytes - compressedMIMEParams > + else > + 1 byte - length (N) > + N bytes - MIME Type (UTF-8 String) > > -If compressed: > -2 bytes - base MIME type ID; index into lookup table; last bit is not > - part of the lookup index, and defines whether parameters are necessary. > -2 bytes - if parameters are expected, parameters ID (mostly charset= for > - text/ types; other types may define other parameters) > +If flags |= DBR: (not supported yet) > + 4 bytes - period, in seconds > + 4 bytes - offset, in seconds Probably will never be supported... imho it's a bad idea. > > +If flags |= FLAGS_EXTRA_METADATA: (ignored) > + 2 bytes - number of extra metadata fields > + For each extra metadata field: > + 2 bytes - metadata field type > + 1 byte - length > + N bytes - metadata field specific information > > -If DBR: > -4 bytes - period, in seconds > -4 bytes - offset, in seconds > > -If has extra metadata fields: > -2 bytes - number of extra metadata fields > +If (!(flags |= FLAGS_SPLITFILE) && ((documentType == SIMPLE_REDIRECT) || (documentType == ARCHIVE_MANIFEST)): > + If FLAGS_FULL_KEYS > + 1 byte - length of binary key > + N bytes - binary key (this is just a compressed FreenetURI, see FreenetURI.java) > + Else > + 5+32+32 bytes - raw binary form of a CHK I thought full keys were allowed in SIMPLE_REDIRECT ?? > > -For each: > -2 bytes - metadata field type > -1 byte - length > -N bytes - metadata field specific information > - > - > -For a simple redirect: > - > -If bit 5 is set above: > -1 byte - length of binary key > -N bytes - binary key (this is just a compressed FreenetURI) > -Else: > -<fixed number yet to be determined> bytes - raw binary form of a CHK > - > For a splitfile redirect: > 2 bytes - algorithm ID > 0 = no redundancy. Invalid unless bit 6 or 5 above is set. -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 835 bytes Desc: This is a digitally signed message part. URL: <https://emu.freenetproject.org/pipermail/devl/attachments/20090303/1e111f7e/attachment.pgp>