123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- ;; This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
- ;; Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2021 GNUnet e.V.
- ;;
- ;; GNUnet is free software: you can redistribute it and/or modify it
- ;; under the terms of the GNU Affero General Public License as published
- ;; by the Free Software Foundation, either version 3 of the License,
- ;; or (at your option) any later version.
- ;;
- ;; GNUnet 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
- ;; Affero General Public License for more details.
- ;;
- ;; You should have received a copy of the GNU Affero General Public License
- ;; along with this program. If not, see <http://www.gnu.org/licenses/>.
- ;;
- ;; SPDX-License-Identifier: AGPL-3.0-or-later
- ;;
- ;; As a special exception to the GNU Affero General Public License,
- ;; the file may be relicensed under any license used for
- ;; most source code of GNUnet 0.13.1, or later versions, as published by
- ;; GNUnet e.V.
- ** Definitions
- uint32/be: big endian uint32_t (network order)
- ** Directory TODO
- Magic constant: "\211GND\r\n\032\n"
- structure:
- magic;
- meta-data-size as uint32;
- meta-data (size: meta-data-size);
- entry ...
- entry:
- ??? alignment padding
- uri
- ??? force to next aligment?
- meta-data-size as uint32;
- meta-data (size: meta-data-size)
- uri is null-terminated
- ** Metadata
- struct meta_data_header {
- ;; The version of the MD serialization. The highest bit is used to
- ;; indicate compression.
- ;;
- ;; Version 0 is traditional (pre-0.9) meta data (unsupported)
- ;; Version is 1 for a NULL pointer
- ;; Version 2 is for 0.9.x (and possibly higher)
- ;; Other version numbers are not yet defined.
- version as uint32/be;
- ;; How many MD entries are there?
- entries as uint32/be;
- ;; Number of bytes of meta data
- size as uint32/be;
- }
- struct meta_data {
- struct meta_data_header header;
- switch header.version {
- case 0: ???
- case 1: ???
- /* Current version! */
- case 2:
- (the following compressed iff header.version & COMPRESSION):
- a list mde (length entries) (type: struct MetaDataEntry);
- ;; XXX verify
- foreach (e in mde, in reverse) {
- /* length 0 is allowed for strings. This means the string is NULL */
- mime_type as \0 terminated ASCII (length including \0: e.mime_type_length);
- plugin_name as \0 terminated ASCII (length including \0: e.plugin_name_length);
- data as a block of byte (length: e.data_size)
- }
- break;
- default: ???
- }
- struct meta_data_entry {
- ;; Meta data type
- type as uint32_t
- ;; Meta data format (UTF8, binary, ...)
- format as uint32_t
- ;; Number of bytes in meta data.
- data_size as uint32_t/be
- ;; Number of bytes in the plugin name including 0-terminator.
- ;; 0 for no plugin name.
- plugin_name_length as uint32_t/be
- ;; Number of bytes in the mime type including 0-terminator.
- ;; 0 for NULL.
- mime_type_length as uint32_t/be
- }
|