[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet-scheme] 04/49: dht/struct: New module.
From: |
gnunet |
Subject: |
[gnunet-scheme] 04/49: dht/struct: New module. |
Date: |
Sat, 25 Dec 2021 22:59:41 +0100 |
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 3e989df00f71e9c2b64fa27c8a41e2b148335ad5
Author: Maxime Devos <maximedevos@telenet.be>
AuthorDate: Wed Sep 15 23:04:38 2021 +0200
dht/struct: New module.
* gnu/gnunet/dht/struct.scm: New module.
* Makefile.am (modules): Add it.
---
Makefile.am | 2 +
gnu/gnunet/dht/struct.scm | 214 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 216 insertions(+)
diff --git a/Makefile.am b/Makefile.am
index 263bd03..b04f89c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -61,6 +61,8 @@ modules = \
gnu/gnunet/config/db.scm \
gnu/gnunet/config/fs.scm \
\
+ gnu/gnunet/dht/struct.scm \
+ \
gnu/gnunet/util/cmsg.scm \
gnu/gnunet/util/time.scm \
gnu/gnunet/icmp/struct.scm \
diff --git a/gnu/gnunet/dht/struct.scm b/gnu/gnunet/dht/struct.scm
new file mode 100644
index 0000000..f0defa1
--- /dev/null
+++ b/gnu/gnunet/dht/struct.scm
@@ -0,0 +1,214 @@
+;; This file is part of GNUnet.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2009, 2011 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
+
+(define-library (gnu gnunet dht struct)
+ (export %DHT_BLOOM_SIZE
+ /:msg:dht:client:get:stop
+ /:msg:dht:client:get
+ /:msg:dht:client:get-result-known
+ /:msg:dht:client:result
+ /:msg:dht:client:put
+ /:msg:dht:monitor:put
+ /:msg:dht:monitor:start
+ /:msg:dht:monitor:stop
+ /:msg:dht:monitor:get
+ /:msg:dht:monitor:get-response)
+ (import (only (rnrs base)
+ define begin)
+ (only (gnu gnunet util struct)
+ /:message-header /time-absolute)
+ (only (gnu gnunet hashcode struct)
+ /hashcode:512)
+ (only (gnu gnunet netstruct syntactic)
+ define-type structure/packed)
+ (only (gnu gnunet netstruct procedural)
+ u32/big u64/big s16/big))
+ (begin
+ ;; Size of the bloom filter the DT uses to filter peers.
+ (define %DHT_BLOOM_SIZE 128)
+
+ (define-type /:msg:dht:client:get:stop
+ (structure/packed
+ (synopsis "Message indicating the DHT should cancel outstanding requests
+and discard any state.")
+ (field (header /:message-header)
+ (synopsis "Type: msg:dht:client:get:stop"))
+ (field (reserved u32/big)
+ (synopsis "Always zero"))
+ (field (reserved u64/big)
+ (synopsis "Unique ID identifying this request"))
+ (field (key /hashcode:512)
+ (synopsis "Key of this request"))))
+
+ ;; Possibly followed by xquery.
+ (define-type /:msg:dht:client:get
+ (structure/packed
+ (synopsis "DHT GET message sent from clients to service, indicating a
GET
+request should be issued.")
+ (field (header /:message-header)
+ (synopsis "Type: msg:dht:client:get"))
+ (field (options u32/big)
+ (synopsis "Message options")) ; TODO enum
+ (field (desired-replication-level u32/big)
+ (synopsis "Replication level for this message"))
+ (field (type u32/big)
+ (synopsis "The type for the data for the GET request")) ; TODO
enum
+ (field (key /hashcode:512)
+ (synopsis "The key to search for"))
+ (field (unique-id u64/big)
+ (synopsis "Unique ID identifying this request, if 0 then the
client
+will not expect a response"))))
+
+ ;; Followed by an array of the hash codes of known results.
+ (define-type /:msg:dht:client:get-result-known ;; XXX plural?
+ (structure/packed
+ (synopsis "Message sent from clients to service, indicating a GET
request
+should exclude certain results which are already known.")
+ (field (header /:message-header)
+ (synopsis "Type: msg:dht:client:get-results-known"))
+ (field (reserved u32/big)
+ (synopsis "Reserved, always 0"))
+ (field (key /hashcode:512)
+ (synopsis "The key we are searching for (to make it easy to find
the
+corresponding GET inside the service)."))
+ (field (unique-id u64/big)
+ (synopsis "Unique ID identifying this request"))))
+
+ ;; put path, get path and actual data are copied to the end of this
structure
+ (define-type /:msg:dht:client:result
+ (structure/packed
+ (synopsis "Reply to a GET sent frrom the service to a client")
+ (field (header /:message-header)
+ (synopsis "Type: msg:dht:client:result"))
+ (field (type u32/big)
+ (synopsis "The type for the data"))
+ (field (put-path-length u32/big)
+ (synopsis "Number of peers recorded in the outgoing path from
+source to the storage location of this message"))
+ (field (get-path-length u32/big)
+ (synopsis "The number of peer identities recorded from the storage
+location to this peer."))
+ (field (unique-id u64/big)
+ (synopsis "Unique ID of the matching GET request"))
+ (field (expiration /time-absolute)
+ (synopsis "Expiration date of this entry"))
+ (field (key /hashcode:512)
+ (synopsis "The key that was searched for"))))
+
+ ;; Data is copied to the end of the message
+ (define-type /:msg:dht:client:put
+ (structure/packed
+ (synopsis "Message to insert data into the DHT, sent from clients to DHT
+service")
+ (field (header /:message-header)
+ (synopsis "Type msg:dht:client:put"))
+ (field (type u32/big)
+ (synopsis "The type of data to insert"))
+ (field (option u32/big)
+ (synopsis "Message options")) ; TODO enum
+ (field (desired-replication-level u32/big)
+ (synopsis "Replication level for this message"))
+ (field (expiration /time-absolute)
+ (synopsis "Requested expiration data of this data"))
+ (field (key /hashcode:512)
+ (synopsis "The key to store the value under"))))
+
+ ;; Followed by put path (if tracked) and payload
+ (define-type /:msg:dht:monitor:put
+ (structure/packed
+ (synopsis "Message to monitor put requests going through peer
+(DHT service -> clients)")
+ (field (header /:message-header)
+ (synopsis "Type: msg:dht:monitor:put"))
+ (field (options u32/big)
+ (synopsis "Message options")) ; TODO enum
+ (field (type u32/big)
+ (synopsis "The type of data in the request"))
+ (field (hop-count u32/big)
+ (synopsis "Hop count so far"))
+ (field (desired-replication-level u32/big)
+ (synopsis "Replication level for this message"))
+ (field (put-path-length u32/big)
+ (synopsis "Number of peers recorded in the outgoing path from
+source to the target location of this message."))
+ (field (expiration-time /time-absolute)
+ (synopsis "How long the data should persist"))
+ (field (key /hashcode:512)
+ (synopsis "The key to store the value under"))))
+
+ (define-type /:msg:dht:monitor:start/stop
+ (structure/packed
+ ;; TODO: also to stop monitoring messages?
+ (synopsis "Message to request monitoring messages, client -> DHT
service")
+ (field (header /:message-header)
+ (synopsis "Type: msg:dht:monitor:start or msg:dht:monitor:stop"))
+ (field (type u32/big)
+ ;; XXX block types
+ (synopsis "The type of data desired, GNUNET_BLOCK_TYPE_ANY for
all"))
+ ;; FIXME: grammar
+ (field (get? s16/big)
+ (synopsis "Flag whether to notify about GET messages"))
+ (field (get-response? s16/big)
+ (synopsis "Flag whether to notify about GET_RESPONSE messages"))
+ (field (put? s16/big)
+ (synopsis "Flag whether to notify about PUT messages"))
+ (field (filter-key? s16/big)
+ (synopsis "Flag whether to use the provided key to filter
messages"))
+ (field (key /hashcode:512)
+ (synopsis "The key to filter messages by"))))
+
+ (define-type /:msg:dht:monitor:start /:msg:dht:monitor:start/stop)
+ (define-type /:msg:dht:monitor:stop /:msg:dht:monitor:start/stop)
+
+ ;; Followed by get path (if tracked)
+ (define-type /:msg:dht:monitor:get
+ (structure/packed
+ (synopsis "Message to monitor get requests going through peer,
+DHT service -> clients.")
+ (field (header /:message-header)
+ (synopsis "Type: msg:dht:monitor:get"))
+ (field (options u32/big)
+ (synopsis "Message options")) ; TODO enum
+ (field (type u32/big)
+ (synopsis "The type of data in the request"))
+ (field (hop-count u32/big)
+ (synopsis "Hop count"))
+ (field (desired-replication-level u32/big)
+ (synopsis "Replication level for this message"))
+ (field (get-path-length u32/big)
+ (synopsis "Number of peers recorded in the outgoing path from
+source to the storage location of this message"))
+ (field (key /hashcode:512)
+ (synopsis "The key to store the value under"))))
+
+ ;; followed by put path (if tracked), get path (if tracked) and payload
+ (define-type /:msg:dht:monitor:get-response
+ (structure/packed
+ (synopsis "Message to monitor get requests going through peer,
+DHT service -> clients")
+ (field (header /:message-header)
+ ;; XXX correct?
+ (synopsis "Type: msg:dht:p2p:result"))
+ (field (type u32/big)
+ (synopsis "Content type"))
+ (field (put-path-length u32/big)
+ (synopsis "Length of the PUT path that follows (if tracked)"))
+ (field (get-path-length u32/big)
+ (synopsis "Length of the GET path that follows (if tracked)"))
+ (field (expiration-time /time-absolute)
+ (synopsis "When does the content expire?"))))))
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnunet-scheme] branch master updated (6c136b9 -> 5c7bf08), gnunet, 2021/12/25
- [gnunet-scheme] 04/49: dht/struct: New module.,
gnunet <=
- [gnunet-scheme] 01/49: Rename messge type 156., gnunet, 2021/12/25
- [gnunet-scheme] 06/49: dht/client: Implement message verifiers., gnunet, 2021/12/25
- [gnunet-scheme] 02/49: bv-slice: Support signed integers., gnunet, 2021/12/25
- [gnunet-scheme] 05/49: Define block types., gnunet, 2021/12/25
- [gnunet-scheme] 03/49: netstruct/procedural: Support signed integers., gnunet, 2021/12/25
- [gnunet-scheme] 08/49: examples: Consider extending the web interface with other services., gnunet, 2021/12/25
- [gnunet-scheme] 07/49: dht/client: Implement reconnecting., gnunet, 2021/12/25
- [gnunet-scheme] 09/49: examples/web: Connect to the DHT service., gnunet, 2021/12/25
- [gnunet-scheme] 10/49: dht/client: Register new get operations for processing., gnunet, 2021/12/25
- [gnunet-scheme] 12/49: dht/client: Send messages for new get operations., gnunet, 2021/12/25