[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet-scheme] 33/324: include some notes on reverse-engineering GNUdir
From: |
gnunet |
Subject: |
[gnunet-scheme] 33/324: include some notes on reverse-engineering GNUdirs |
Date: |
Tue, 21 Sep 2021 13:21:13 +0200 |
This is an automated email from the git hooks/post-receive script.
maxime-devos pushed a commit to branch master
in repository gnunet-scheme.
commit ed3e0a6d1a3e1fe4b387090688acc51dade8ce44
Author: Maxime Devos <maximedevos@telenet.be>
AuthorDate: Mon Jan 4 19:39:30 2021 +0100
include some notes on reverse-engineering GNUdirs
---
doc/gnudir | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 97 insertions(+)
diff --git a/doc/gnudir b/doc/gnudir
new file mode 100644
index 0000000..5fd950c
--- /dev/null
+++ b/doc/gnudir
@@ -0,0 +1,97 @@
+;; This file is part of scheme-GNUnet, a partial Scheme port of GNUnet.
+;; Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010 GNUnet e.V.
+;; Copyright (C) 2021 Maxime Devos <maxime.devos@student.kuleuven.be>
+;;
+;; 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
+}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnunet-scheme] 20/324: Define missing constants, (continued)
- [gnunet-scheme] 20/324: Define missing constants, gnunet, 2021/09/21
- [gnunet-scheme] 23/324: Correct variable reference, gnunet, 2021/09/21
- [gnunet-scheme] 24/324: Regularise naming convention, gnunet, 2021/09/21
- [gnunet-scheme] 25/324: Extend let^, gnunet, 2021/09/21
- [gnunet-scheme] 30/324: Correct maximum in metaformats.scm and metatypes.scm, gnunet, 2021/09/21
- [gnunet-scheme] 26/324: Port meta-data-serialize/uncached, gnunet, 2021/09/21
- [gnunet-scheme] 29/324: Define meta data structures systematically, gnunet, 2021/09/21
- [gnunet-scheme] 31/324: fix netstruct, and implement wrap-reader-setter, gnunet, 2021/09/21
- [gnunet-scheme] 28/324: Define library for structures, gnunet, 2021/09/21
- [gnunet-scheme] 34/324: scripts: add incomplete script for publishing a store item, gnunet, 2021/09/21
- [gnunet-scheme] 33/324: include some notes on reverse-engineering GNUdirs,
gnunet <=
- [gnunet-scheme] 36/324: scripts: publish-store: eliminate add-name, gnunet, 2021/09/21
- [gnunet-scheme] 32/324: remove some uses of old accessors, gnunet, 2021/09/21
- [gnunet-scheme] 41/324: scripts: publish-store: fix predicate of --format option, gnunet, 2021/09/21
- [gnunet-scheme] 38/324: scripts: publish-store: publish whole trees, gnunet, 2021/09/21
- [gnunet-scheme] 37/324: scripts: publish-store: publish individual files, gnunet, 2021/09/21
- [gnunet-scheme] 40/324: scripts: publish-store: allow setting all options, gnunet, 2021/09/21
- [gnunet-scheme] 39/324: guix: suggest a package definition, gnunet, 2021/09/21
- [gnunet-scheme] 35/324: scripts: publish-store: compute file tree, gnunet, 2021/09/21
- [gnunet-scheme] 43/324: scripts: publish-store: exit after main function, gnunet, 2021/09/21
- [gnunet-scheme] 48/324: scripts: download-store: download json container, gnunet, 2021/09/21