gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]