From 2abd8a1aae9da6b93ae42b6e5669c017513d85d4 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Fri, 30 Sep 2022 11:26:51 +0200 Subject: [PATCH] Updated docs and manual --- RNS/Link.py | 4 ++-- RNS/Packet.py | 2 +- docs/Reticulum Manual.pdf | Bin 2365085 -> 2365177 bytes docs/manual/reference.html | 6 +++--- docs/manual/searchindex.js | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/RNS/Link.py b/RNS/Link.py index ede6b31..07c0a0c 100644 --- a/RNS/Link.py +++ b/RNS/Link.py @@ -45,7 +45,7 @@ class Link: """ This class is used to establish and manage links to other peers. When a link instance is created, Reticulum will attempt to establish verified - connectivity with the specified destination. + and encrypted connectivity with the specified destination. :param destination: A :ref:`RNS.Destination` instance which to establish a link to. :param established_callback: An optional function or method with the signature *callback(link)* to be called when the link has been established. @@ -409,7 +409,7 @@ class Link: def get_remote_identity(self): """ - :returns: The identity of the remote peer, if it is known + :returns: The identity of the remote peer, if it is known. Calling this method will not query the remote initiator to reveal its identity. Returns ``None`` if the link initiator has not already independently called the ``identify(identity)`` method. """ return self.__remote_identity diff --git a/RNS/Packet.py b/RNS/Packet.py index 9a10d47..ff9f2a8 100755 --- a/RNS/Packet.py +++ b/RNS/Packet.py @@ -29,7 +29,7 @@ import RNS class Packet: """ The Packet class is used to create packet instances that can be sent - over a Reticulum network. Packets to will automatically be encrypted if + over a Reticulum network. Packets will automatically be encrypted if they are adressed to a ``RNS.Destination.SINGLE`` destination, ``RNS.Destination.GROUP`` destination or a :ref:`RNS.Link`. diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index 1ab60fa4cf3f18402bae94b399a045e633fafedf..8c47e3241f336bdd0b7176e499fb0c8473220b05 100644 GIT binary patch delta 23370 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 U5!&Z$BoZQ`Bpe*7dTJ#92j>_#SpWb4 diff --git a/docs/manual/reference.html b/docs/manual/reference.html index d86fead..8f00b14 100644 --- a/docs/manual/reference.html +++ b/docs/manual/reference.html @@ -681,7 +681,7 @@ unless other app_data is specified in the announce method.

class RNS.Packet(destination, data, create_receipt=True)

The Packet class is used to create packet instances that can be sent -over a Reticulum network. Packets to will automatically be encrypted if +over a Reticulum network. Packets will automatically be encrypted if they are adressed to a RNS.Destination.SINGLE destination, RNS.Destination.GROUP destination or a RNS.Link.

For RNS.Destination.GROUP destinations, Reticulum will use the @@ -809,7 +809,7 @@ the send() method of a class RNS.Link(destination, established_callback=None, closed_callback=None)

This class is used to establish and manage links to other peers. When a link instance is created, Reticulum will attempt to establish verified -connectivity with the specified destination.

+and encrypted connectivity with the specified destination.

Parameters:
    @@ -928,7 +928,7 @@ thus preserved. This method can be used for authentication.

    get_remote_identity()
    Returns:
    -

    The identity of the remote peer, if it is known

    +

    The identity of the remote peer, if it is known. Calling this method will not query the remote initiator to reveal its identity. Returns None if the link initiator has not already independently called the identify(identity) method.

diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 91e0465..eb4b989 100644 --- a/docs/manual/searchindex.js +++ b/docs/manual/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["examples", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Supported Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 1, 4, 5, 6, 8, 9, 10], "number": [0, 1, 4, 5, 6, 8, 9], "ar": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10], "includ": [0, 2, 3, 4, 6, 8], "sourc": [0, 1, 2, 5, 8, 10], "distribut": [0, 1, 5, 6, 8, 9], "reticulum": [0, 4, 5], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "us": [0, 2, 3, 4, 5, 6, 8], "learn": [0, 1, 7, 8], "how": [0, 1, 2, 4, 5, 8, 10], "write": [0, 1, 4, 6, 8], "your": [0, 1, 2, 3, 4, 5, 7, 8, 10], "own": [0, 1, 5, 6, 8, 9], "program": [0, 3, 4, 6, 8, 10], "The": [0, 1, 2, 3, 4, 5, 6, 10], "demonstr": [0, 4], "bare": 0, "minimum": [0, 4, 5, 8], "setup": [0, 1, 3, 4], "requir": [0, 1, 4, 5, 8, 9, 10], "connect": [0, 2, 3, 4, 5, 6, 8, 9, 10], "network": [0, 2, 4, 6, 8, 9, 10], "from": [0, 1, 2, 4, 5, 6, 8, 9, 10], "In": [0, 1, 2, 4, 5, 6, 8, 9, 10], "about": [0, 1, 2, 4, 5, 6, 8], "five": 0, "line": [0, 1, 2, 4, 5, 8, 10], "have": [0, 1, 2, 4, 5, 6, 8, 9], "stack": [0, 1, 5, 8, 9, 10], "initialis": [0, 6, 9], "readi": [0, 1, 2, 4, 5, 6, 10], "pass": [0, 2, 4, 5, 6, 8, 9], "traffic": [0, 1, 4, 5, 6, 8, 9], "thi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10], "rn": [0, 1, 6, 8, 9], "start": [0, 2, 3, 4, 6, 8, 9], "up": [0, 1, 2, 4, 5, 8, 9, 10], "gener": [0, 1, 2, 4, 5, 6, 8, 9, 10], "new": [0, 4, 5, 6, 8, 9], "destin": [0, 1, 3, 4, 5, 9], "let": [0, 1, 4, 5, 8, 9], "user": [0, 1, 4, 5, 8, 9], "send": [0, 4, 6, 8, 9], "an": [0, 1, 2, 4, 5, 6, 8, 9, 10], "import": [0, 1, 2, 4, 5, 7, 8], "argpars": 0, "": [0, 1, 4, 5, 8, 9, 10], "defin": [0, 4, 8, 9], "app": [0, 1, 6, 8], "name": [0, 3, 4, 5, 6], "we": [0, 1, 2, 4, 7, 8], "ll": [0, 1, 10], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "creat": [0, 3, 4, 5, 6, 8, 9, 10], "sinc": [0, 1, 4, 5, 6, 8], "basic": [0, 1, 3, 6, 9], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "part": [0, 4, 5, 6, 8], "rang": [0, 1, 2, 4, 5, 8, 9, 10], "util": [0, 2, 3, 4, 8], "put": [0, 2, 4], "them": [0, 1, 2, 4, 5, 7, 8, 9], "within": [0, 1, 4, 5, 6, 8], "namespac": 0, "example_util": [0, 9], "app_nam": [0, 6], "execut": [0, 1, 4, 6, 9], "when": [0, 1, 2, 4, 5, 6, 8, 9], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 1, 4, 5, 6, 8], "first": [0, 1, 4, 6, 8, 9], "randomli": [0, 8], "ident": [0, 1, 3, 9, 10], "our": [0, 8], "just": [0, 1, 2, 4, 5, 8, 10], "endpoint": [0, 5, 6, 8], "address": [0, 1, 4, 5, 6, 8, 10], "commun": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10], "also": [0, 1, 2, 4, 5, 6, 8, 9, 10], "exist": [0, 1, 2, 4, 8, 9, 10], "which": [0, 1, 4, 5, 6, 8, 9], "know": [0, 1, 2, 5, 6, 8], "thei": [0, 1, 4, 5, 6, 8, 9], "reachabl": [0, 1, 4, 5, 6, 8, 9], "autoomat": 0, "path": [0, 1, 2, 4, 6, 8, 9], "anywher": [0, 4], "els": [0, 5, 8], "IN": [0, 6], "singl": [0, 4, 6, 8, 9, 10], "minimalsampl": 0, "configur": [0, 1, 2, 3, 4, 5, 6, 8, 10], "automat": [0, 1, 2, 4, 5, 6, 8, 9, 10], "prove": [0, 8], "packet": [0, 1, 2, 3, 4, 5, 9, 10], "adress": [0, 6], "By": [0, 1, 4, 6, 8, 9], "do": [0, 1, 2, 4, 6, 8, 10], "proof": [0, 6, 8, 9], "each": [0, 1, 4, 5, 8, 9], "incom": [0, 4, 6, 9], "transmit": [0, 4, 8], "back": [0, 4, 8, 10], "sender": [0, 1, 5, 8, 9], "anyon": [0, 1, 2, 5, 6, 8, 9], "tri": 0, "whether": [0, 4, 6, 8], "wa": [0, 2, 4, 5, 6, 8, 10], "receiv": [0, 1, 4, 6, 8, 9], "correctli": 0, "set_proof_strategi": [0, 6], "prove_al": [0, 6], "everyth": [0, 5, 8], "hand": [0, 1], "over": [0, 2, 3, 4, 6, 8, 9, 10], "control": [0, 1, 2, 3, 5, 6, 8], "loop": 0, "announceloop": 0, "log": [0, 4, 9], "prettyhexrep": 0, "hash": [0, 1, 6, 8, 9], "run": [0, 1, 2, 4, 5, 6, 8, 9, 10], "hit": 0, "enter": [0, 9], "manual": [0, 1, 4, 5, 6, 9], "ctrl": 0, "c": [0, 5], "quit": 0, "until": [0, 4, 6], "exit": [0, 1, 6, 9], "If": [0, 1, 2, 4, 5, 6, 8, 9, 10], "server": [0, 1, 2, 3, 9], "client": [0, 1, 2, 3, 6], "messag": [0, 1, 6, 8, 9], "direct": [0, 1, 2, 5, 6, 8, 9], "toward": [0, 4, 8], "while": [0, 1, 2, 4, 5, 6, 8, 10], "true": [0, 4, 6, 9], "input": [0, 9], "sent": [0, 1, 6, 8, 9], "startup": 0, "get": [0, 2, 3, 4, 6, 10], "pars": 0, "desir": [0, 2, 4, 8], "mode": [0, 1, 2, 3, 8, 9, 10], "__name__": 0, "__main__": 0, "try": [0, 3, 4], "parser": 0, "argumentpars": 0, "descript": [0, 9], "add_argu": 0, "config": [0, 1, 2, 5, 9], "action": 0, "store": [0, 2, 8, 9], "default": [0, 1, 2, 4, 5, 6, 8, 9], "none": [0, 4, 6, 8, 9], "help": [0, 2, 5, 7, 8, 9, 10], "altern": [0, 4, 9], "directori": [0, 9], "type": [0, 1, 3, 4, 5, 6, 9], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 4], "keyboardinterrupt": 0, "print": [0, 4, 9], "found": [0, 1, 4, 5, 8, 9], "http": [0, 1, 7], "github": [0, 1, 7], "com": [0, 1, 7], "markqvist": [0, 1, 7], "blob": [0, 8], "master": [0, 6], "py": [0, 1, 8], "build": [0, 1, 2, 3, 4, 8, 10], "upon": [0, 8], "previou": 0, "explor": [0, 8, 10], "notif": [0, 6], "relev": [0, 2, 4, 6, 8, 9], "set": [0, 1, 2, 4, 5, 6, 8, 9, 10], "callback": [0, 6], "applic": [0, 4, 5, 6, 8, 9], "arriv": [0, 8], "random": [0, 6, 8], "two": [0, 1, 2, 4, 5, 8], "list": [0, 1, 2, 4, 6, 8, 10], "string": [0, 6], "app_data": [0, 6], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 1], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 1, 2, 5, 8, 10], "destination_1": 0, "destination_2": 0, "handler": [0, 6], "onli": [0, 1, 2, 4, 5, 6, 8, 9, 10], "ask": [0, 2, 6], "chang": [0, 1, 4, 6, 8, 9, 10], "filter": [0, 5, 8], "see": [0, 1, 4, 5, 6, 8, 9, 10], "what": [0, 1, 3, 6, 8], "happen": [0, 6, 8], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 6], "regist": [0, 6], "transport": [0, 1, 3, 4, 5, 9, 10], "register_announce_handl": [0, 6], "select": [0, 4], "randint": 0, "0": [0, 4, 6, 8, 9, 10], "len": 0, "1": [0, 4, 6, 8, 9], "data": [0, 1, 3, 4, 5, 6, 8, 10], "encod": 0, "utf": 0, "8": [0, 4, 9], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10], "class": [0, 3, 5, 10], "method": [0, 1, 4, 6, 8], "take": [0, 1, 4, 8, 9, 10], "option": [0, 1, 2, 3, 5, 6, 8, 9], "argument": [0, 6, 9], "instanc": [0, 3, 4, 6, 8, 9], "some": [0, 1, 2, 4, 5, 8, 9], "want": [0, 1, 2, 4, 5, 8, 9, 10], "aspect": [0, 2, 4, 6, 8], "__init__": 0, "self": [0, 5, 10], "call": [0, 5, 6, 8, 10], "system": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10], "match": [0, 4, 8], "specif": [0, 2, 3, 4, 6, 10], "cannot": [0, 1], "wildcard": 0, "received_announc": [0, 6], "destination_hash": [0, 6, 9], "announced_ident": [0, 6], "contain": [0, 5, 6, 8, 9], "follow": [0, 1, 2, 4, 7, 8, 9, 10], "decod": 0, "plaintext": [0, 6], "unencrypt": [0, 6, 8], "inform": [0, 1, 3, 4, 5, 6, 8, 9], "ani": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10], "listen": [0, 4, 8, 9], "sy": 0, "channel": [0, 4, 5, 7, 8, 10], "did": 0, "one": [0, 1, 2, 4, 5, 6, 8, 9, 10], "public_inform": 0, "ad": [0, 2, 3, 4, 5, 6, 8, 10], "so": [0, 1, 2, 4, 5, 6, 7, 8, 10], "differ": [0, 1, 2, 4, 5, 6, 8, 9, 10], "plain": [0, 4, 6, 8], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 1, 2, 4, 5, 6, 9], "everi": [0, 4, 5, 6, 8], "time": [0, 1, 2, 4, 5, 6, 8, 9], "set_packet_callback": [0, 6], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 1, 2, 4, 5, 8, 9], "out": [0, 1, 2, 4, 5, 6, 8, 9, 10], "r": [0, 4, 8, 9], "n": [0, 8, 9], "end": [0, 4, 5, 6, 8, 10], "stdout": [0, 4, 9], "flush": 0, "text": [0, 1, 5, 8], "prompt": 0, "channelarg": 0, "between": [0, 4, 5, 6, 8], "interfac": [0, 2, 3, 5, 6, 9], "simpl": [0, 2, 8, 9, 10], "respond": [0, 6], "receipt": [0, 3, 8], "choos": [0, 1, 4, 8], "global": [0, 1, 4, 5, 8, 10], "server_ident": 0, "queri": [0, 1, 6], "abl": [0, 1, 4, 5, 6, 8, 9], "verifi": [0, 6, 8], "repli": [0, 9], "encrypt": [0, 1, 5, 6, 8, 10], "wai": [0, 1, 4, 5, 8], "certain": [0, 4, 5, 7, 8], "than": [0, 1, 4, 5, 8], "read": [0, 1, 4, 8, 9], "echo_destin": 0, "tell": [0, 4], "function": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10], "server_callback": 0, "wait": [0, 4, 8, 9], "go": [0, 1, 4, 8], "handl": [0, 2, 4, 5, 6, 8, 9, 10], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": 0, "dbm": [0, 4], "snr": 0, "db": 0, "destination_hexhash": 0, "timeout": [0, 6, 9], "binari": [0, 1, 8], "represent": 0, "command": [0, 1, 4, 9], "dest_len": 0, "truncated_hashlength": [0, 6], "2": [0, 4, 6, 8, 9], "rais": [0, 6], "valueerror": [0, 6], "length": [0, 4, 6, 8], "invalid": [0, 6], "hex": 0, "hexadecim": [0, 8, 9], "charact": 0, "byte": [0, 6, 8, 9, 10], "format": [0, 3, 10], "fromhex": 0, "e": [0, 5], "check": [0, 1, 6, 8], "overrid": 0, "loglevel": [0, 6, 9], "provid": [0, 1, 2, 3, 4, 5, 6, 8, 10], "feedback": [0, 3], "log_info": 0, "doe": [0, 1, 2, 3, 4, 5, 6, 8, 9], "load": [0, 1, 6, 9], "has_path": [0, 6], "To": [0, 1, 2, 4, 5, 8, 9, 10], "public": [0, 3, 4, 6], "kei": [0, 3, 5, 6, 10], "done": [0, 1, 4, 5, 8, 9], "recal": [0, 6], "modul": [0, 1, 2, 8, 9, 10], "known": [0, 6, 8, 9], "return": [0, 6, 9], "outgo": [0, 4, 6, 8, 9], "got": 0, "correct": [0, 8], "convent": 0, "request_destin": 0, "add": [0, 1, 4, 5, 9], "echo_request": 0, "get_random_hash": [0, 6], "successfulli": [0, 8], "packetreceipt": [0, 6], "packet_receipt": [0, 6], "set_timeout": [0, 6], "set_timeout_callback": [0, 6], "packet_timed_out": 0, "deliveri": [0, 1, 6, 10], "set_delivery_callback": [0, 6], "packet_deliv": 0, "yet": [0, 4, 8], "request_path": [0, 6], "statu": [0, 1, 3, 4, 6, 8, 9], "deliv": [0, 6], "rtt": [0, 6, 8], "get_rtt": [0, 6], "round": [0, 6, 9], "3": [0, 4, 8, 9, 10], "rttstring": 0, "second": [0, 4, 6, 8, 9, 10], "1000": 0, "millisecond": [0, 9], "proof_packet": 0, "valid": [0, 4, 6, 8, 9], "trip": [0, 6, 9], "fail": [0, 6], "store_tru": 0, "t": [0, 1, 4, 5, 6, 9], "metavar": 0, "float": [0, 6], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 1, 4, 5, 6, 10], "remot": [0, 6, 9], "forth": 0, "o": [0, 8, 9, 10], "refer": [0, 1, 3], "latest": [0, 1, 4], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 6], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 6], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": 0, "activ": [0, 1, 4, 6, 8], "last": [0, 4, 6], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 9], "begin": [0, 2, 6], "And": 0, "client_packet_receiv": 0, "close": [0, 5, 6, 9], "link_establish": 0, "link_clos": 0, "interact": [0, 1, 6, 8, 9], "client_loop": 0, "becom": [0, 1, 5, 8], "should_quit": 0, "fals": [0, 4, 6, 9], "should": [0, 1, 2, 4, 5, 6, 8, 9, 10], "q": [0, 9], "teardown": [0, 6], "mdu": 0, "size": [0, 1, 4, 6, 8, 9], "exce": [0, 4, 6], "log_error": 0, "error": [0, 1, 7, 9], "ha": [0, 1, 2, 4, 5, 6, 8, 10], "been": [0, 1, 2, 4, 5, 6, 8, 10], "later": [0, 1, 4], "teardown_reason": 0, "now": [0, 1, 5, 8, 9], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 4, 6, 9], "_exit": 0, "identifi": [0, 4, 6, 8, 9], "intiat": 0, "onc": [0, 1, 2, 4, 5, 6, 8, 9, 10], "initi": [0, 5, 6, 8, 10], "peer": [0, 1, 4, 6, 8, 9], "identifyexampl": 0, "set_remote_identified_callback": [0, 6], "remote_identifi": 0, "origin": [0, 5, 8], "displai": [0, 8], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 6], "client_ident": 0, "sendig": 0, "perform": [0, 1, 4, 5, 8], "random_text_gener": 0, "request_id": [0, 6], "remote_ident": [0, 6], "requested_at": [0, 6], "look": [0, 1, 4, 8, 9], "On": [0, 1, 4, 9], "full": [0, 4, 6, 8, 9, 10], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 8, 9], "awai": [0, 4, 5, 8, 9], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 6], "response_gener": [0, 6], "allow": [0, 1, 2, 4, 5, 6, 8, 9, 10], "allow_al": [0, 6], "response_callback": [0, 6], "got_respons": 0, "failed_callback": [0, 6], "request_fail": 0, "request_receipt": [0, 6], "request_receiv": 0, "implement": [0, 4, 5, 6, 7, 8, 10], "file": [0, 1, 2, 4, 5, 6, 8, 9, 10], "download": [0, 4, 9], "resourc": [0, 1, 3, 7], "effici": [0, 1, 4, 8, 10], "serv": [0, 2, 4, 5, 8, 9], "pleas": [0, 1, 4, 6, 9, 10], "note": [0, 1, 2, 4, 6, 8, 9], "larg": [0, 2, 4, 5, 6, 8, 10], "transfer": [0, 6, 8, 9, 10], "recommend": [0, 1, 2, 8], "compress": [0, 6, 8], "hashmap": 0, "sequenc": [0, 6, 8, 10], "long": [0, 1, 2, 4, 8], "slow": [0, 4, 8], "cpu": [0, 8], "probabl": [0, 5, 8, 9, 10], "result": [0, 8, 9], "befor": [0, 1, 4, 6, 8, 9], "complet": [0, 1, 2, 4, 5, 6, 8, 9, 10], "prepar": [0, 5], "bundl": 0, "instead": [0, 1, 4, 8, 9], "slice": 0, "chunk": 0, "suitabl": [0, 1, 4, 5, 8, 10], "pack": 0, "thread": 0, "vendor": [0, 2], "umsgpack": 0, "app_timeout": 0, "45": [0, 8], "serve_path": 0, "here": [0, 1, 2, 4, 8, 9], "conveni": 0, "list_fil": 0, "entri": [0, 1, 8], "actual": [0, 1, 4, 8], "listdir": 0, "isfil": 0, "join": [0, 1, 5, 7, 8], "host": [0, 1, 4, 8, 9], "still": [0, 1, 2, 5, 8], "isdir": 0, "packb": 0, "fit": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 5], "mani": [0, 1, 2, 4, 5, 6, 8, 9, 10], "split": 0, "filelist": 0, "multipl": [0, 4, 5, 8, 9], "hint": 0, "alreadi": [0, 1, 2, 5, 8, 9], "support": [0, 1, 3, 5, 8, 10], "after": [0, 4, 5, 6, 8, 9], "re": [0, 4, 6, 8], "keep": [0, 5, 6, 8, 9, 10], "open": [0, 2, 4, 5, 6, 7, 8, 9, 10], "client_request": 0, "longer": [0, 5, 8, 9], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 4], "don": [0, 1, 2, 5, 6, 9], "unknown": [0, 4, 6, 8], "conclud": [0, 6], "hasattr": 0, "avail": [0, 1, 2, 4, 5, 6, 8, 9, 10], "server_fil": 0, "current": [0, 1, 2, 3, 4, 6, 8], "current_download": 0, "current_filenam": 0, "variabl": 0, "statist": [0, 4, 7], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 4, 6, 8, 9], "normal": [0, 4, 6], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 6], "set_resource_strategi": [0, 6], "accept_al": [0, 6], "set_resource_started_callback": [0, 6], "download_began": 0, "set_resource_concluded_callback": [0, 6], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 2, 4, 6], "request_packet": 0, "create_receipt": [0, 6], "print_menu": 0, "25": [0, 3, 10], "user_input": 0, "int": 0, "screen": 0, "variou": [0, 1, 4, 5, 8], "state": 0, "It": [0, 1, 2, 4, 6, 8, 9, 10], "uninterest": 0, "won": 0, "detail": [0, 1, 3, 4, 6, 9, 10], "clear_screen": 0, "print_filelist": 0, "percent": 0, "get_progress": [0, 6], "100": [0, 4, 8], "rprogress": 0, "save_error": 0, "could": [0, 1, 4, 5, 6, 8, 10], "disk": [0, 6], "hour": [0, 4], "rem": 0, "divmod": 0, "3600": [0, 4], "minut": [0, 1, 4, 8], "60": 0, "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 8], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 3, 9], "suffix": 0, "b": [0, 5, 9], "ttransfer": 0, "press": 0, "index": [0, 1, 3], "enumer": 0, "filelist_data": 0, "unpack": 0, "extend": [0, 1, 6], "local": [0, 1, 4, 5, 6, 8, 9, 10], "unpackb": 0, "append": [0, 8], "visibl": 0, "updat": [0, 1, 6, 8], "small": [0, 4, 5, 8, 10], "job": 0, "potenti": [0, 4, 7, 8, 9], "target": [0, 4, 9], "filelist_timeout_job": 0, "setdaemon": 0, "detect": 0, "shown": 0, "progress": [0, 6, 10], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 6, 7, 8], "readabl": [0, 6, 8], "num": 0, "unit": [0, 1, 9], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 8], "pi": [0, 5, 8, 9, 10], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": 0, "m": [0, 1, 8, 9], "g": 0, "p": [0, 9], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 6, 8], "cl": 0, "nt": 0, "dir": 0, "best": [1, 8, 10], "depend": [1, 2, 5, 6, 8, 9], "guid": [1, 2, 6, 8], "outlin": [1, 2, 8], "sensibl": [1, 2], "scenario": [1, 3, 8], "built": [1, 4, 8, 10], "few": [1, 2, 4, 5, 8, 9, 10], "other": [1, 2, 4, 5, 6, 8, 9], "even": [1, 2, 4, 5, 8, 9, 10], "extrem": [1, 8, 9, 10], "low": [1, 2, 4, 5, 8, 10], "bandwidth": [1, 4, 5, 6, 8, 10], "These": [1, 4, 8, 9], "feel": 1, "work": [1, 2, 4, 5, 8, 9, 10], "design": [1, 2, 5, 8, 10], "well": [1, 2, 4, 5, 6, 8, 10], "lora": [1, 2, 3, 8, 10], "wifi": [1, 3, 4, 5, 8, 9, 10], "wire": [1, 2, 3, 4, 10], "ethernet": [1, 2, 4, 5, 8, 10], "combin": [1, 3, 5, 8], "As": [1, 2, 4, 5, 6, 8, 10], "easi": [1, 2, 4, 8, 9, 10], "experi": [1, 8], "without": [1, 2, 5, 8, 10], "transceiv": [1, 2, 4, 8, 10], "infrastructur": [1, 2, 4, 5, 8, 9], "launch": [1, 9], "separ": [1, 4, 5, 8, 9], "devic": [1, 2, 3, 4, 5, 6, 8, 9], "same": [1, 2, 4, 5, 6, 8, 9], "enough": [1, 2, 8], "physic": [1, 2, 4, 8, 9], "termin": [1, 6], "suit": [1, 2, 8, 9], "featur": [1, 7, 8, 10], "both": [1, 2, 4, 5, 6, 8, 9, 10], "delai": [1, 4, 8, 9], "offlin": 1, "share": [1, 5, 6, 8, 9], "browser": 1, "page": [1, 3, 8], "dynam": [1, 9], "render": 1, "authent": [1, 4, 5, 6, 8, 9, 10], "more": [1, 2, 4, 5, 6, 8, 9, 10], "face": [1, 4], "protocol": [1, 2, 3, 4, 10], "lxmf": 1, "anoth": [1, 6, 8, 9], "project": 1, "instal": [1, 3, 4, 5, 8, 9, 10], "via": [1, 2, 4, 7, 8, 9, 10], "pip": [1, 2, 9], "pip3": [1, 2, 9], "nomadnet": 1, "veri": [1, 2, 4, 5, 6, 7, 8, 9, 10], "might": [1, 4, 5, 8, 9], "reboot": 1, "similar": [1, 2, 4, 5, 9, 10], "again": [1, 4, 8, 9], "would": [1, 4, 5, 6, 8], "rather": 1, "graphic": 1, "linux": [1, 8], "maco": 1, "earli": [1, 2], "stage": [1, 8], "interoper": [1, 2, 5, 8, 10], "come": [1, 8], "make": [1, 2, 4, 7, 8, 9], "easier": [1, 4, 5, 9], "manag": [1, 5, 6, 8, 9], "rnsd": [1, 3], "background": [1, 4], "foreground": 1, "servic": [1, 3, 5], "rnstatu": [1, 3, 4, 8], "rnpath": [1, 3, 4], "rnprobe": [1, 3], "view": [1, 4, 8, 9], "chapter": [1, 2, 4, 5, 8, 9, 10], "locat": [1, 2, 5, 8, 9], "edit": [1, 9], "rnsconfig": 1, "broadcast": [1, 3, 4, 6, 8], "domain": [1, 4], "further": [1, 3, 4], "exampl": [1, 2, 3, 4, 6, 8, 9, 10], "tcp": [1, 2, 3, 5, 8, 10], "There": [1, 5, 8, 10], "subnet": [1, 5], "rout": [1, 4, 5, 6, 8, 9, 10], "tabl": [1, 4, 5, 8, 9], "thing": 1, "discov": [1, 4], "topographi": [1, 5, 8], "situat": [1, 2, 4, 5, 8], "where": [1, 2, 3, 4, 5, 6, 8, 9], "utilis": [1, 5, 9, 10], "extern": [1, 4, 6, 10], "often": [1, 4, 5, 8, 9], "suffici": [1, 4, 8, 9], "act": [1, 6, 8, 9], "gatewai": [1, 4, 5, 8], "enabl": [1, 2, 4, 5, 6, 8, 9], "wider": [1, 4, 8, 9], "autointerfac": [1, 2, 4, 9], "possibli": 1, "offer": [1, 3, 4, 6, 8], "i2p": [1, 3, 10], "carefulli": 1, "tcpserverinterfac": [1, 4], "access": [1, 3, 4, 5, 6, 9], "ip": [1, 2, 4, 8, 9, 10], "faster": [1, 4, 8], "lower": [1, 4, 9], "latenc": [1, 8, 10], "energi": 1, "i2pinterfac": [1, 4], "howev": [1, 5, 8], "leak": 1, "reveal": [1, 6, 8, 10], "who": [1, 8], "inspect": [1, 4, 5, 8], "someon": [1, 4], "determin": [1, 6, 8], "adversari": 1, "mai": [1, 4, 6, 8, 9], "record": [1, 8], "metadata": 1, "like": [1, 2, 4, 5, 6, 8, 9, 10], "transmiss": [1, 4, 6, 8], "though": [1, 2, 4, 8], "publicli": 1, "most": [1, 2, 4, 5, 8, 9], "anymor": 1, "through": [1, 2, 4, 5, 6, 8, 9, 10], "invis": [1, 4], "daemon": [1, 4, 6, 9], "parallel": 1, "For": [1, 2, 4, 5, 6, 8, 10], "alwai": [1, 4, 6, 8, 9], "node": [1, 3, 4, 5, 9, 10], "i2pd": [1, 4], "mix": [1, 4, 5, 9], "hide": 1, "relai": 1, "extra": [1, 4, 5, 9], "comput": [1, 8, 10], "power": [1, 2, 4, 8], "attack": 1, "form": [1, 4, 5, 6, 8], "deep": 1, "much": [1, 4, 5, 8, 9], "difficult": [1, 2], "non": [1, 6, 8], "behind": [1, 8], "firewal": [1, 4], "nat": 1, "preserv": [1, 6], "anonym": [1, 5, 6, 8, 10], "care": [1, 2, 6, 10], "slightli": 1, "experiment": [1, 2, 10], "made": [1, 6, 8], "dublin": 1, "hub": [1, 4], "tcpclientinterfac": [1, 2, 4], "ye": [1, 4, 8, 9], "target_host": [1, 4], "target_port": [1, 4], "4965": [1, 9], "frankfurt": [1, 9], "5377": 1, "uxg5kubabakh3jtnvsipingbr5574dle7bubvip7llfvwx2tgrua": 1, "b32": [1, 4], "point": [1, 2, 4, 5, 8, 9], "absolut": [1, 2, 7, 10], "usag": [1, 3, 4, 7, 9], "occasion": 1, "test": [1, 2, 8], "failur": [1, 4], "guarante": [1, 8], "compat": [1, 2, 4, 6, 8], "hardwar": [1, 3, 4, 5, 6, 8, 9, 10], "wide": [1, 2, 4, 8, 10], "section": [1, 2, 4, 5, 8, 9], "easili": [1, 4, 5, 8, 9, 10], "cheapli": 1, "rnode": [1, 3, 8, 9, 10], "purpos": [1, 2, 4, 6, 8], "digit": [1, 2, 8, 10], "integr": [1, 5, 8], "yourself": [1, 8, 10], "custom": [1, 4, 6, 8, 10], "firmwar": [1, 2, 8], "board": [1, 3, 8, 10], "auto": [1, 2, 3, 6, 8], "script": [1, 2], "prefer": [1, 8], "purchas": [1, 5, 8, 10], "supplier": [1, 3], "addit": [1, 2, 4, 8, 9, 10], "privat": [1, 4, 6, 7, 8, 10], "secur": [1, 8, 10], "uncensor": 1, "mesh": [1, 4, 5, 10], "think": 1, "welcom": 1, "head": 1, "discuss": [1, 2, 8], "propos": 1, "easiest": [1, 2, 4, 8], "releas": [1, 2, 4, 8], "abov": [1, 2, 4, 8, 9], "next": [1, 5, 6, 8], "step": [1, 2], "pyseri": 1, "netifac": 1, "api": [1, 3, 8, 10], "associ": [1, 6, 8], "case": [1, 2, 4, 5, 8, 9], "recip": 1, "cryptographi": [1, 8, 10], "clone": 1, "repositori": [1, 7, 8], "git": 1, "move": [1, 4, 8], "folder": 1, "symlink": [1, 9], "librari": 1, "cd": 1, "ln": [1, 9], "python3": [1, 2], "echo": [1, 3, 9], "unless": [1, 4, 6, 8], "ve": 1, "immedi": [1, 4, 9], "necessari": [1, 2, 4, 5, 6, 8], "nano": 1, "repeat": 1, "process": [1, 2, 4, 6, 8], "h": [1, 9], "ping": [1, 9], "replac": [1, 8, 9], "below": [1, 2, 4, 9], "3e12fc71692f8ec47bc5": 1, "filetransf": [1, 3, 6], "understand": [1, 3, 9], "architectur": 1, "precompil": 1, "dev": [1, 4, 9], "packag": [1, 4, 8], "sudo": [1, 9], "apt": 1, "relat": 1, "termux": 1, "f": 1, "droid": 1, "emul": 1, "environ": [1, 5, 8], "abil": [1, 2], "io": [1, 2, 9], "pre": [1, 2, 6, 8], "wheel": 1, "standard": [1, 2, 8], "sure": [1, 2, 9], "pkg": 1, "upgrad": [1, 8], "Then": 1, "essenti": [1, 4, 8], "openssl": [1, 8], "libffi": 1, "rust": 1, "platform": [1, 2, 8], "compil": 1, "export": 1, "cargo_build_target": 1, "aarch64": 1, "sever": [1, 5, 6, 9], "succe": 1, "softwar": [1, 2, 4, 8, 10], "possibl": [1, 2, 4, 5, 6, 8, 10], "apk": 1, "tutori": 1, "code": [1, 2, 3, 4, 9], "rare": [1, 4], "obscur": 1, "unusu": 1, "rnspure": 1, "content": [1, 5, 9], "No": [1, 4, 8, 9, 10], "matter": [1, 4], "perfectli": 1, "serial": [1, 2, 3, 8, 10], "pyca": [1, 8], "cryptograph": [1, 3, 5, 10], "primit": [1, 3], "One": [2, 6], "truli": [2, 8], "valuabl": [2, 7], "almost": [2, 4, 8, 9], "conceiv": 2, "kind": [2, 4, 5, 8], "medium": [2, 4, 5, 6, 8, 10], "flexibl": [2, 4, 10], "cover": [2, 8, 10], "wireless": [2, 5], "decad": 2, "old": [2, 7, 8], "radio": [2, 3, 4, 5, 6, 8, 9, 10], "modem": [2, 4, 5, 6, 8, 10], "modern": [2, 8], "millimet": 2, "wave": 2, "backhaul": [2, 5], "oper": [2, 4, 5, 6, 8, 9, 10], "good": [2, 5, 8, 9], "chanc": 2, "box": 2, "glue": 2, "littl": [2, 8], "effort": 2, "pipeinterfac": [2, 4], "kiss": [2, 3, 9, 10], "simplyequip": 2, "broad": 2, "abund": 2, "sometim": 2, "especi": [2, 4], "scratch": 2, "real": [2, 5, 10], "world": [2, 5, 10], "minim": [2, 3, 8], "cost": [2, 8, 10], "fundament": [2, 8], "categori": 2, "emploi": [2, 8], "reliabl": [2, 4, 5, 8, 10], "commonli": 2, "either": [2, 4, 5, 8, 9], "expens": 2, "hard": 2, "hungri": 2, "attempt": [2, 6], "allevi": 2, "particular": 2, "plaform": 2, "its": [2, 4, 6, 8], "compon": [2, 7, 8], "frequenc": [2, 4, 8], "band": [2, 8], "scheme": 2, "limit": [2, 5, 8], "common": [2, 3, 5, 8, 9, 10], "ism": [2, 8], "avoid": [2, 8, 9], "confus": [2, 8], "layer": [2, 4, 5, 8, 10], "noth": [2, 10], "lorawan": [2, 8], "central": [2, 5, 8], "iot": 2, "raw": 2, "overhead": [2, 4, 8], "high": [2, 4, 8, 10], "level": [2, 4, 8, 9], "directli": [2, 4, 6, 8, 9, 10], "replic": [2, 8], "across": [2, 5], "togeth": [2, 8, 9], "tool": [2, 8, 9, 10], "exact": [2, 4, 8], "explain": [2, 6], "approach": [2, 8, 9], "develop": [2, 3, 7, 8, 10], "boil": 2, "obtain": [2, 8], "autom": [2, 7, 8], "provis": 2, "rnodeinterfac": [2, 4, 9], "ic": 2, "semtech": 2, "sx1276": 2, "esp32": 2, "manufactur": 2, "avr": 2, "atmega1284p": 2, "rnodeconf": 2, "autoinstal": 2, "seri": 2, "question": [2, 4], "consid": [2, 6, 8, 10], "newest": [2, 8], "version": [2, 8, 9], "stabil": 2, "paramet": [2, 4, 5, 6, 8], "port": [2, 3, 4, 5, 8, 10], "air": [2, 10], "id": [2, 4, 6, 8, 9], "itself": [2, 3, 8], "touch": [2, 10], "produc": 2, "short": [2, 8, 9], "fulli": [2, 8, 10], "bridg": [2, 3], "behav": 2, "mean": [2, 4, 5, 8, 9], "link": [2, 3, 4, 5, 9, 10], "dhcp": [2, 4, 9], "dn": 2, "least": [2, 4, 8, 9, 10], "transpar": [2, 4, 8, 9], "capac": [2, 4, 6, 8], "distanc": [2, 8], "ubiqu": 2, "airmax": 2, "ltu": 2, "mikrotik": 2, "exhaust": [2, 8], "rel": [2, 8, 10], "cheap": [2, 8], "co": [2, 4, 10], "concurr": [2, 8, 9], "pattern": [2, 8], "gain": [2, 8], "antenna": 2, "backbon": 2, "area": [2, 4, 5, 8, 10], "aim": [3, 8], "particip": [3, 5, 8], "caveat": 3, "emptor": 3, "fast": [3, 4, 6, 8], "base": [3, 4, 5, 6, 8, 9, 10], "nomad": 3, "sideband": 3, "With": [3, 4, 5, 8, 9], "internet": [3, 4, 8, 10], "testnet": [3, 9], "arm64": 3, "android": 3, "pure": [3, 8], "python": [3, 8, 9, 10], "rncp": 3, "rnx": 3, "improv": [3, 4, 7], "fix": [3, 8], "motiv": 3, "goal": [3, 4], "introduct": 3, "announc": [3, 6, 9], "mechan": [3, 4], "reach": [3, 4, 5], "prioritis": [3, 4, 5, 6], "propag": [3, 4, 6], "rule": [3, 4], "udp": [3, 5, 8, 9, 10], "pipe": [3, 10], "ax": [3, 10], "concept": [3, 8, 9], "overview": [3, 4, 8], "interconnect": [3, 4, 8], "site": [3, 4], "growth": 3, "converg": [3, 8], "request": [3, 4, 8, 9], "identif": [3, 4, 10], "respons": [3, 6, 8], "donat": 3, "contribut": 3, "search": 3, "distinct": [4, 8], "topologi": [4, 8], "less": [4, 8, 10], "endless": 4, "describ": [4, 6, 8], "give": [4, 8, 9], "respect": 4, "discover": 4, "autoconfigur": [4, 10], "ipv6": [4, 9], "router": [4, 9], "sort": [4, 8], "switch": [4, 8], "os": 4, "interface_en": [4, 9], "isol": [4, 9], "lan": 4, "group": [4, 6, 8], "group_id": 4, "kernel": [4, 9, 10], "wlan0": 4, "eth1": 4, "Or": [4, 9, 10], "ignor": [4, 6, 8], "ones": [4, 9], "ignored_devic": 4, "tun0": 4, "eth0": 4, "multicast": 4, "autodiscov": 4, "discoveri": [4, 8, 9], "scope": 4, "admin": 4, "organis": [4, 5, 7], "custom_network_nam": 4, "discovery_scop": 4, "discovery_port": 4, "48555": 4, "data_port": 4, "49555": 4, "frequent": 4, "block": 4, "inbound": [4, 6], "portabl": [4, 8], "persist": [4, 9], "achiev": [4, 6, 8], "geti2p": 4, "net": 4, "websit": 4, "base32": 4, "comma": 4, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 4, "output": [4, 9], "event": 4, "simplest": [4, 8], "tunnel": [4, 8, 10], "interchang": 4, "degre": 4, "retain": 4, "eas": [4, 8], "simpler": 4, "4242": 4, "listen_ip": 4, "listen_port": 4, "bind": 4, "10": [4, 8, 9], "88": 4, "i2p_tunnel": 4, "127": 4, "5001": 4, "dedic": [4, 8], "natur": 4, "toler": 4, "intermitt": 4, "gracefulli": 4, "restor": 4, "reappear": 4, "hostnam": 4, "expos": [4, 6], "soundmodem": 4, "kiss_fram": 4, "tnc": [4, 6, 9, 10], "8001": 4, "caution": 4, "frame": 4, "conjunct": 4, "never": [4, 6, 8], "disabl": [4, 8, 9], "intern": [4, 6, 8], "recoveri": 4, "greatli": 4, "unreli": 4, "implic": 4, "better": 4, "udpinterfac": 4, "forward_ip": 4, "255": 4, "forward_port": 4, "assum": [4, 8], "55": 4, "72": 4, "24": 4, "equival": 4, "forward": [4, 6, 8, 10], "segment": [4, 5, 6, 8, 10], "cours": [4, 8], "15": 4, "16": [4, 8, 9], "ttyusb0": [4, 9], "867": 4, "mhz": [4, 8], "867200000": 4, "125": 4, "khz": 4, "125000": 4, "tx": 4, "7": [4, 9], "mw": 4, "txpower": 4, "spread": 4, "factor": [4, 6], "12": 4, "being": [4, 6, 8], "fastest": [4, 8], "longest": 4, "spreadingfactor": 4, "throough": 4, "codingr": 4, "interv": [4, 6], "id_callsign": 4, "mycal": 4, "id_interv": 4, "600": 4, "homebrew": 4, "amount": [4, 5, 6, 8, 10], "ram": 4, "flow": [4, 5], "flow_control": 4, "pair": [4, 8], "laser": 4, "serialinterfac": 4, "baud": 4, "speed": [4, 8, 9], "115200": [4, 9], "databit": [4, 9], "pariti": [4, 9], "stopbit": [4, 9], "stdin": [4, 9], "virtual": [4, 5, 8, 9, 10], "netcat": 4, "l": [4, 9], "5757": 4, "respawn": 4, "respawn_delai": 4, "continu": [4, 7, 10], "scan": 4, "eof": 4, "respawn_interv": 4, "varieti": [4, 8, 9, 10], "openmodem": [4, 10], "period": [4, 6, 8], "beacon": 4, "station": 4, "kissinterfac": [4, 9], "ttyusb1": 4, "preambl": [4, 9], "150": [4, 9], "tail": 4, "txtail": [4, 9], "cdma": 4, "reason": [4, 8], "200": [4, 9], "slottim": [4, 9], "20": [4, 8, 9], "elaps": 4, "comment": [4, 9], "buffer": 4, "amateur": [4, 10], "spectrum": [4, 8], "encapsul": [4, 10], "callsign": 4, "ssid": 4, "realli": [4, 6], "doesn": 4, "anyth": [4, 8, 9, 10], "incur": 4, "ax25kissinterfac": 4, "no1cll": 4, "ttyusb2": 4, "150m": 4, "increas": [4, 9], "squelch": 4, "rx": 4, "turnaround": 4, "kept": [4, 5, 6, 8], "wast": 4, "airtim": 4, "behaviour": [4, 9], "bring": 4, "brought": [4, 9], "valu": [4, 6, 8], "access_point": 4, "shorthand": [4, 9], "ap": 4, "shorter": 4, "expiri": 4, "mostli": [4, 5, 8], "quiet": [4, 9], "momentarili": 4, "disappear": [4, 9], "network_nam": 4, "passphras": [4, 8], "alon": 4, "ifac_s": 4, "customis": 4, "carri": [4, 6, 8, 9], "512": [4, 6, 8], "bit": [4, 6, 8, 9, 10], "announce_cap": [4, 6], "maximum": [4, 6, 8], "alloc": [4, 6, 8, 9], "given": [4, 5, 6, 8, 9], "upkeep": 4, "cap": 4, "queue": [4, 8], "nearbi": 4, "ensur": [4, 6, 8], "overwhelm": [4, 6], "rapidli": 4, "spam": 4, "opposit": 4, "effect": 4, "excess": 4, "benefici": [4, 9], "balanc": 4, "necesarri": 4, "bitrat": 4, "report": [4, 7], "guess": 4, "per": [4, 6, 8, 10], "affect": 4, "strictli": [4, 8], "complex": [4, 8], "left": [4, 6, 8, 9], "gw": 4, "addition": [4, 8], "behalf": 4, "resid": 4, "requestor": 4, "resolv": 4, "chain": 4, "along": [4, 5, 8], "boundari": 4, "remain": [4, 6, 8], "roam": 4, "mobil": [4, 8], "seen": [4, 8], "perspect": [4, 8], "vehicl": 4, "equip": [4, 5, 8], "side": [4, 10], "expir": 4, "significantli": 4, "impact": [4, 8], "announce_rate_target": 4, "announce_rate_grac": 4, "announce_rate_penalti": 4, "basi": [4, 6, 8, 9, 10], "moder": 4, "violat": 4, "enforc": 4, "penalti": 4, "7200": 4, "annouce_cap": 4, "mention": [4, 8], "strategi": [4, 6], "decis": [4, 8], "slower": [4, 6, 8], "hop": [4, 5, 6, 8, 9, 10], "right": [4, 5], "tend": 4, "conserv": 4, "span": [4, 8], "seamlessli": 4, "knowledg": [5, 8], "tradit": [5, 8], "worri": 5, "coordin": [5, 6, 8, 10], "entir": [5, 8, 9], "evolv": 5, "futur": [5, 8], "mind": [5, 10], "autonom": [5, 8], "terminologi": [5, 8], "rest": [5, 10], "billion": [5, 8], "larger": [5, 8], "higher": [5, 10], "issu": [5, 7], "discrimin": 5, "ephemer": [5, 6, 8, 10], "ellipt": [5, 6, 8, 10], "curv": [5, 6, 8, 10], "diffi": [5, 8, 10], "hellman": [5, 8, 10], "exchang": [5, 6, 8, 10], "curve25519": [5, 6, 8, 10], "throttl": 5, "thu": [5, 6, 8], "agnost": [5, 8], "equal": [5, 8], "keystor": 5, "degrad": 5, "term": [5, 8], "stationari": [5, 9], "candid": 5, "optim": 5, "intend": [5, 8], "trustless": [5, 8, 10], "leav": [5, 8], "free": [5, 7, 10], "unorganis": 5, "manner": 5, "properti": [5, 6], "far": [5, 8], "unexplor": 5, "dissolv": 5, "organ": 5, "restrict": 5, "legaci": 5, "unifi": 5, "underli": [5, 10], "carrier": [5, 10], "involv": 5, "hardlin": 5, "decid": [5, 6, 8], "illustr": [5, 8], "plan": [5, 8], "member": 5, "mainli": 5, "three": [5, 8], "hill": 5, "top": [5, 8], "chosen": [5, 8], "due": 5, "sight": 5, "becaus": [5, 8], "four": 5, "At": [5, 8], "raspberri": [5, 8, 9, 10], "usb": [5, 8, 9], "cabl": 5, "adapt": 5, "suppli": [5, 6, 8], "grow": 5, "place": [5, 8, 9], "core": [5, 8, 10], "those": [5, 8], "previous": [5, 6, 8], "d": [5, 9], "island": 5, "investig": 5, "dori": 5, "willing": 5, "she": 5, "her": 5, "home": 5, "newli": [5, 6, 8], "everyon": [5, 8], "vice": [5, 10], "versa": [5, 10], "vhf": [5, 8, 10], "outli": 5, "geograph": 5, "coverag": 5, "dai": 5, "find": [5, 8], "were": 5, "poorli": 5, "outlier": 5, "configdir": 6, "logdest": 6, "exactli": [6, 8], "independ": [6, 8, 10], "inter": 6, "soon": 6, "kill": [6, 8], "forcibli": [6, 9], "advantag": 6, "demand": 6, "mtu": [6, 8, 10], "500": [6, 8, 10], "adher": 6, "507": 6, "break": [6, 8, 10], "prerequisit": 6, "percentag": 6, "schedul": 6, "queu": [6, 9], "fewer": 6, "distant": 6, "smaller": 6, "eventu": 6, "drop": [6, 8, 9], "appli": [6, 8], "individu": [6, 8], "static": 6, "should_use_implicit_proof": 6, "explicit": 6, "implicit": [6, 8], "transport_en": 6, "create_kei": 6, "decrypt": [6, 8], "signatur": [6, 8, 10], "verif": [6, 8], "sign": [6, 8], "dh": 6, "keysiz": 6, "x25519": [6, 8, 10], "concaten": 6, "256": [6, 8], "128": [6, 8, 10], "constant": 6, "truncat": [6, 8], "recall_app_data": 6, "heard": [6, 8], "full_hash": 6, "sha": [6, 8], "truncated_hash": 6, "from_byt": 6, "prv_byte": 6, "save": [6, 8], "hazard": 6, "feed": 6, "from_fil": 6, "to_fil": 6, "Be": [6, 9], "otherwis": 6, "get_private_kei": 6, "get_public_kei": 6, "load_private_kei": 6, "load_public_kei": 6, "pub_byt": 6, "ciphertext": 6, "token": [6, 8], "keyerror": 6, "hold": [6, 8], "ciphertext_token": 6, "presenc": 6, "ingo": 6, "zero": [6, 10], "full_nam": [6, 9], "app_and_aspects_from_nam": 6, "tupl": 6, "hash_from_name_and_ident": 6, "path_respons": 6, "flag": [6, 8], "accepts_link": 6, "accept": [6, 7, 8, 9], "set_proof_requested_callback": 6, "proof_strategi": 6, "prove_non": 6, "prove_app": 6, "proof_requested_callback": 6, "allowed_list": 6, "whatev": [6, 8], "funcion": 6, "allow_non": 6, "allow_list": 6, "deregister_request_handl": 6, "deregist": 6, "symmetr": [6, 8], "typeerror": 6, "incompat": [6, 8], "set_default_app_data": 6, "callabl": 6, "clear_default_app_data": 6, "secreci": [6, 8, 10], "payload": [6, 8], "instanti": 6, "encrypted_mdu": 6, "383": 6, "plain_mdu": 6, "464": 6, "resend": 6, "get_statu": 6, "cull": 6, "successful": 6, "proven": [6, 8], "established_callback": 6, "closed_callback": 6, "establishment_timeout_per_hop": 6, "keepalive_timeout_factor": 6, "4": [6, 8, 9], "calcul": [6, 8], "stale_grac": 6, "grace": 6, "keepal": [6, 8], "360": 6, "aliv": [6, 8], "stale_tim": 6, "720": 6, "mark": [6, 8], "stale": 6, "final": [6, 8], "torn": 6, "progress_callback": 6, "info": [6, 8, 9], "requestreceipt": 6, "no_inbound_for": 6, "no_outbound_for": 6, "outbound": [6, 8], "inactive_for": 6, "purg": 6, "set_resource_callback": 6, "get_transfer_s": 6, "get_data_s": 6, "get_part": 6, "is_compress": 6, "begun": 6, "resource_strategi": 6, "accept_non": 6, "accept_app": 6, "resource_callback": 6, "unsupport": 6, "get_request_id": 6, "get_respons": 6, "get_response_tim": 6, "auto_compress": 6, "arbitrari": [6, 8, 10], "checksum": [6, 10], "Will": 6, "whenev": [6, 8], "cancel": 6, "total": [6, 8, 10], "get_seg": 6, "divid": 6, "get_hash": 6, "pathfinder_m": 6, "object": 6, "attribut": 6, "deregister_announce_handl": 6, "hops_to": 6, "next_hop": 6, "next_hop_interfac": 6, "on_interfac": 6, "tag": 6, "recurs": 6, "gratefulli": 7, "monero": 7, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 7, "ethereum": 7, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 7, "bitcoin": 7, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 7, "ko": 7, "fi": 7, "roadmap": 7, "realiti": 7, "quickli": [7, 8, 10], "sponsor": [7, 10], "dysfunct": 7, "analyt": 7, "telemetri": 7, "collect": 7, "under": [7, 9], "circumst": [7, 8], "reli": [7, 8], "fashion": 7, "u": [7, 8], "suggest": 7, "briefli": 8, "overal": 8, "principl": [8, 10], "author": 8, "That": 8, "said": 8, "document": 8, "pretti": 8, "sentiment": 8, "philosophi": 8, "problem": 8, "seek": 8, "solv": 8, "solut": 8, "primari": 8, "lack": 8, "my": 8, "belief": 8, "highli": 8, "peopl": 8, "machin": 8, "censorship": 8, "barrier": 8, "todai": 8, "centralis": 8, "trust": 8, "approv": 8, "gatekeep": 8, "inevit": 8, "lead": 8, "govern": 8, "alter": 8, "censor": 8, "persecut": 8, "unwant": 8, "actor": 8, "imposs": 8, "freeli": 8, "deploi": 8, "enhanc": 8, "agenc": 8, "freedom": 8, "permissionless": 8, "pick": 8, "ghz": 8, "off": [8, 10], "shelf": [8, 10], "ultim": 8, "vast": 8, "myriad": 8, "thousand": 8, "surveil": 8, "disassoci": 8, "oversight": 8, "beings": 8, "usabl": 8, "useabl": 8, "critic": [8, 9], "agnostic": 8, "shall": 8, "handheld": 8, "stream": 8, "modifi": [8, 9], "interest": 8, "strong": 8, "oneself": 8, "unlicens": 8, "licens": 8, "condit": 8, "pmr": 8, "cb": 8, "wish": [8, 9], "written": 8, "programm": 8, "orient": 8, "multipoint": 8, "recipi": 8, "idea": [8, 9], "singular": 8, "_represented_": 8, "deriv": [6, 8, 10], "characterist": 8, "13425ec15b621c1d928589718000d814": 8, "trade": 8, "accommod": 8, "simultan": 8, "unlik": 8, "nears": 8, "congest": 8, "galact": 8, "scale": 8, "obvious": 8, "ridicul": 8, "multi": [8, 9, 10], "special": [8, 9], "uniqu": [8, 10], "ecdh": [8, 10], "creator": 8, "correspond": 8, "possess": 8, "although": [8, 10], "abstract": 8, "capabl": 8, "dot": [8, 9], "notat": [8, 9], "repres": 8, "plenti": 8, "environment": 8, "monitor": 8, "measur": 8, "environmentlogg": 8, "remotesensor": 8, "temperatur": 8, "4faf1b2e0a077e6a9d92fa051f256038": 8, "advis": 8, "expand": 8, "structur": 8, "recap": 8, "indirectli": 8, "awar": 8, "ledger": 8, "therefor": [8, 10], "definit": 8, "messeng": 8, "nicknam": 8, "ed25519": [8, 10], "reconstruct": 8, "notic": [8, 9], "piec": 8, "intention": 8, "infer": 8, "throughout": 8, "accord": 8, "around": 8, "assign": [8, 9], "topic": 8, "necessarili": 8, "person": 8, "entiti": 8, "robot": 8, "sensor": 8, "someth": 8, "agent": 8, "manipul": 8, "multilater": 8, "creation": 8, "great": 8, "suffic": 8, "cluster": 8, "hear": 8, "But": 8, "introduc": 8, "lot": 8, "surviv": 8, "overcom": 8, "challeng": 8, "asymmetr": [8, 10], "closer": 8, "distinguish": 8, "contend": 8, "enable_transport": [8, 9], "retransmit": 8, "randomis": 8, "prioriti": 8, "invers": 8, "proport": 8, "count": 8, "insert": 8, "closest": 8, "greater": 8, "retri": 8, "newer": 8, "discard": 8, "contact": 8, "shortest": 8, "predict": 8, "constantli": 8, "earlier": 8, "opt": 8, "against": 8, "ae": [6, 8, 10], "neither": 8, "session": 8, "bidirect": 8, "travers": 8, "rememb": 8, "subsequ": 8, "ten": 8, "advanc": 8, "confirm": [8, 10], "insid": 8, "intermediari": 8, "moment": [8, 10], "methodologi": [8, 9], "answer": [8, 9], "malici": 8, "pretend": 8, "recreat": 8, "rotat": 8, "procedur": 8, "memori": 8, "thereaft": 8, "297": [8, 10], "practic": [8, 10], "neglig": 8, "1200": 8, "96": 8, "keypair": 8, "simplic": 8, "explan": [8, 9], "lki": 8, "laid": 8, "had": 8, "construct": 8, "lkr": 8, "chose": 8, "bi": 8, "unequivoc": 8, "retransmiss": 8, "reassembl": 8, "programmat": 8, "satisfi": 8, "half": [8, 10], "duplex": [8, 10], "averag": 8, "throughput": [8, 10], "x": [8, 9], "runtim": 8, "consist": 8, "whereupon": 8, "stabl": [8, 10], "maintain": 8, "year": 8, "microcontrol": 8, "430": 8, "868": 8, "900": 8, "debian": [8, 9], "recent": 8, "mac": 8, "tailor": 8, "treat": 8, "regard": 8, "preshar": 8, "ifac": [8, 9], "onto": 8, "compos": 8, "field": 8, "header": 8, "32": 8, "context": 8, "465": 8, "vari": [8, 9], "64": [8, 9], "00": [8, 9], "01": 8, "reserv": 8, "11": 8, "_______": 8, "________________": 8, "________": 8, "______": 8, "__": 8, "_": 8, "01010000": 8, "00000100": 8, "hash1": 8, "hash2": 8, "header_2": 8, "00000000": 8, "00000111": 8, "header_1": 8, "10000000": 8, "exclud": 8, "51": 8, "157": 8, "83": [8, 9], "115": 8, "99": 8, "conceptu": 8, "x22519": 8, "hkdf": 8, "fernet": [8, 10], "cbc": [8, 10], "hmac": [8, 10], "hashlib": 8, "pkcs7": [8, 10], "pad": [8, 10], "trivial": [8, 10], "consequ": 8, "backend": 8, "loss": 8, "scrutini": 8, "review": [8, 10], "risk": 8, "pose": 8, "driver": [9, 10], "privileg": 9, "light": 9, "weight": 9, "boot": 9, "verbos": 9, "exampleconfig": 9, "ie": 9, "remov": 9, "breviti": 9, "socket": 9, "turn": 9, "share_inst": 9, "shared_instance_port": 9, "37428": 9, "instance_control_port": 9, "37429": 9, "panic": 9, "unrecover": 9, "occur": [9, 10], "panic_on_interface_error": 9, "warn": 9, "6": 9, "debug": 9, "unus": 9, "order": 9, "teach": 9, "task": 9, "v": 9, "show": 9, "ifconfig": 9, "gbp": 9, "13": 9, "kb": 9, "86": 9, "mbp": 9, "63": 9, "23": 9, "80": 9, "17": 9, "tcpinterfac": 9, "unsign": 9, "187": 9, "27": 9, "74": 9, "uhf": [9, 10], "30": 9, "kbp": 9, "e702c42ba8": 9, "49": 9, "9": 9, "5245a8efe1788c6a1cd36144a270e13b": 9, "c89b4da064bf66d280f0e4d8abfd9806": 9, "f53a1c4278e0726bb73fcc623d6ce763": 9, "reticulu": 9, "w": 9, "posit": 9, "probe": 9, "2d03725b327348980d570f739a3a5708": 9, "38": 9, "469": 9, "1726dbad538775b5bf9b0ea25a4079c8": 9, "c50cc4e4f7838b6c31f60ab9032cbc62": 9, "copi": 9, "tgz": 9, "73cbd378bb0286ed11a707c13447bb1": 9, "allowed_hash": 9, "decreas": 9, "auth": 9, "941bed5e228775e5a8079fc38b1ccf3f": 9, "1b03013c25f1c2ca068a4f080b844a10": 9, "7a55144adf826958a9529a3bcf08b149": 9, "cat": 9, "proc": 9, "cpuinfo": 9, "pseudo": 9, "shell": 9, "stderr": 9, "noauth": 9, "noid": 9, "mirror": 9, "max": 9, "perman": 9, "administr": 9, "ubuntu": 9, "ftdi_ft230x_basic_uart_43891ckm": 9, "if00": 9, "port0": 9, "plug": 9, "unplug": 9, "systemd": 9, "usr": 9, "bin": 9, "etc": 9, "execstartpr": 9, "restart": 9, "restartsec": 9, "usernameher": 9, "execstart": 9, "wantedbi": 9, "systemctl": 9, "readili": 10, "unforg": 10, "acknowledg": 10, "resili": 10, "userland": 10, "beta": 10, "bug": 10, "warrant": 10, "sha256": 10, "iv": 10, "urandom": 10, "intuit": 10, "friendli": 10, "44": 10, "gigabyt": 10, "scalabl": 10, "hoc": 10, "optic": 10, "transform": 10, "stop": 10, "fact": 10, "strength": 10, "generalis": 10, "fibr": 10, "popular": 10, "ideal": 10, "stdio": 10, "hack": 10, "foremost": 10, "audit": 10, "privaci": 10, "thorough": 10, "research": 10}, "objects": {"RNS": [[6, 0, 1, "", "Destination"], [6, 0, 1, "", "Identity"], [6, 0, 1, "", "Link"], [6, 0, 1, "", "Packet"], [6, 0, 1, "", "PacketReceipt"], [6, 0, 1, "", "RequestReceipt"], [6, 0, 1, "", "Resource"], [6, 0, 1, "", "Reticulum"], [6, 0, 1, "", "Transport"]], "RNS.Destination": [[6, 1, 1, "", "accepts_links"], [6, 1, 1, "", "announce"], [6, 1, 1, "", "app_and_aspects_from_name"], [6, 1, 1, "", "clear_default_app_data"], [6, 1, 1, "", "create_keys"], [6, 1, 1, "", "decrypt"], [6, 1, 1, "", "deregister_request_handler"], [6, 1, 1, "", "encrypt"], [6, 1, 1, "", "full_name"], [6, 1, 1, "", "get_private_key"], [6, 1, 1, "", "hash"], [6, 1, 1, "", "hash_from_name_and_identity"], [6, 1, 1, "", "load_private_key"], [6, 1, 1, "", "register_request_handler"], [6, 1, 1, "", "set_default_app_data"], [6, 1, 1, "", "set_link_established_callback"], [6, 1, 1, "", "set_packet_callback"], [6, 1, 1, "", "set_proof_requested_callback"], [6, 1, 1, "", "set_proof_strategy"], [6, 1, 1, "", "sign"]], "RNS.Identity": [[6, 2, 1, "", "CURVE"], [6, 2, 1, "", "KEYSIZE"], [6, 2, 1, "", "TRUNCATED_HASHLENGTH"], [6, 1, 1, "", "decrypt"], [6, 1, 1, "", "encrypt"], [6, 1, 1, "", "from_bytes"], [6, 1, 1, "", "from_file"], [6, 1, 1, "", "full_hash"], [6, 1, 1, "", "get_private_key"], [6, 1, 1, "", "get_public_key"], [6, 1, 1, "", "get_random_hash"], [6, 1, 1, "", "load_private_key"], [6, 1, 1, "", "load_public_key"], [6, 1, 1, "", "recall"], [6, 1, 1, "", "recall_app_data"], [6, 1, 1, "", "sign"], [6, 1, 1, "", "to_file"], [6, 1, 1, "", "truncated_hash"], [6, 1, 1, "", "validate"]], "RNS.Link": [[6, 2, 1, "", "CURVE"], [6, 2, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [6, 2, 1, "", "KEEPALIVE"], [6, 2, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [6, 2, 1, "", "STALE_GRACE"], [6, 2, 1, "", "STALE_TIME"], [6, 1, 1, "", "get_remote_identity"], [6, 1, 1, "", "identify"], [6, 1, 1, "", "inactive_for"], [6, 1, 1, "", "no_inbound_for"], [6, 1, 1, "", "no_outbound_for"], [6, 1, 1, "", "request"], [6, 1, 1, "", "set_link_closed_callback"], [6, 1, 1, "", "set_packet_callback"], [6, 1, 1, "", "set_remote_identified_callback"], [6, 1, 1, "", "set_resource_callback"], [6, 1, 1, "", "set_resource_concluded_callback"], [6, 1, 1, "", "set_resource_started_callback"], [6, 1, 1, "", "set_resource_strategy"], [6, 1, 1, "", "teardown"]], "RNS.Packet": [[6, 2, 1, "", "ENCRYPTED_MDU"], [6, 2, 1, "", "PLAIN_MDU"], [6, 1, 1, "", "resend"], [6, 1, 1, "", "send"]], "RNS.PacketReceipt": [[6, 1, 1, "", "get_rtt"], [6, 1, 1, "", "get_status"], [6, 1, 1, "", "set_delivery_callback"], [6, 1, 1, "", "set_timeout"], [6, 1, 1, "", "set_timeout_callback"]], "RNS.RequestReceipt": [[6, 1, 1, "", "get_progress"], [6, 1, 1, "", "get_request_id"], [6, 1, 1, "", "get_response"], [6, 1, 1, "", "get_response_time"], [6, 1, 1, "", "get_status"]], "RNS.Resource": [[6, 1, 1, "", "advertise"], [6, 1, 1, "", "cancel"], [6, 1, 1, "", "get_data_size"], [6, 1, 1, "", "get_hash"], [6, 1, 1, "", "get_parts"], [6, 1, 1, "", "get_progress"], [6, 1, 1, "", "get_segments"], [6, 1, 1, "", "get_transfer_size"], [6, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[6, 2, 1, "", "ANNOUNCE_CAP"], [6, 2, 1, "", "MTU"], [6, 1, 1, "", "should_use_implicit_proof"], [6, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[6, 2, 1, "", "PATHFINDER_M"], [6, 1, 1, "", "deregister_announce_handler"], [6, 1, 1, "", "has_path"], [6, 1, 1, "", "hops_to"], [6, 1, 1, "", "next_hop"], [6, 1, 1, "", "next_hop_interface"], [6, 1, 1, "", "register_announce_handler"], [6, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 7, 8], "exampl": [0, 5], "minim": 0, "announc": [0, 4, 8], "broadcast": 0, "echo": 0, "link": [0, 6, 8], "identif": 0, "request": [0, 6], "respons": 0, "filetransf": 0, "get": [1, 8], "start": 1, "fast": 1, "try": 1, "us": [1, 9, 10], "reticulum": [1, 2, 3, 6, 7, 8, 9, 10], "base": [1, 2], "program": [1, 9], "nomad": 1, "network": [1, 3, 5], "sideband": 1, "includ": [1, 9], "util": [1, 9], "creat": [1, 2], "With": 1, "connect": 1, "instanc": 1, "over": [1, 5], "internet": [1, 5], "public": [1, 8], "testnet": 1, "ad": 1, "radio": 1, "interfac": [1, 4, 8, 10], "develop": 1, "particip": 1, "arm64": 1, "android": 1, "pure": 1, "python": 1, "commun": 2, "hardwar": 2, "rnode": [2, 4], "support": [2, 4, 7], "board": 2, "lilygo": 2, "lora32": 2, "v2": 2, "1": 2, "0": 2, "t": 2, "beam": 2, "heltec": 2, "unsign": 2, "x": 2, "v1": 2, "instal": 2, "usag": 2, "supplier": 2, "wifi": 2, "combin": 2, "type": [2, 8, 10], "stack": 3, "manual": 3, "indic": 3, "tabl": 3, "auto": 4, "i2p": 4, "tcp": 4, "server": 4, "client": 4, "udp": 4, "lora": [4, 5], "serial": [4, 9], "pipe": 4, "kiss": 4, "ax": 4, "25": 4, "common": 4, "option": 4, "mode": 4, "rate": 4, "control": 4, "build": 5, "concept": 5, "overview": 5, "scenario": 5, "interconnect": 5, "site": 5, "bridg": 5, "growth": 5, "converg": 5, "api": 6, "refer": [6, 8], "class": 6, "ident": [6, 8], "destin": [6, 8], "packet": [6, 8], "receipt": 6, "resourc": [6, 8], "transport": [6, 8], "donat": 7, "provid": 7, "feedback": 7, "contribut": 7, "understand": 8, "motiv": 8, "goal": 8, "introduct": 8, "basic": 8, "function": 8, "name": [8, 9], "kei": 8, "further": 8, "node": 8, "The": [8, 9], "mechan": 8, "detail": 8, "reach": 8, "establish": 8, "setup": 8, "protocol": 8, "specif": 8, "prioritis": 8, "access": 8, "wire": 8, "format": 8, "propag": 8, "rule": 8, "cryptograph": 8, "primit": 8, "your": 9, "system": 9, "configur": 9, "data": 9, "rnsd": 9, "rnstatu": 9, "rnpath": 9, "rnprobe": 9, "rncp": 9, "rnx": 9, "improv": 9, "fix": 9, "port": 9, "servic": 9, "what": 10, "i": 10, "current": 10, "statu": 10, "doe": 10, "offer": 10, "where": 10, "can": 10, "devic": 10, "caveat": 10, "emptor": 10}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"], [6, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Filetransfer": [[0, "filetransfer"]], "Getting Started Fast": [[1, "getting-started-fast"]], "Try Using a Reticulum-based Program": [[1, "try-using-a-reticulum-based-program"]], "Nomad Network": [[1, "nomad-network"]], "Sideband": [[1, "sideband"]], "Using the Included Utilities": [[1, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[1, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[1, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[1, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[1, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[1, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[1, "participate-in-reticulum-development"]], "Reticulum on ARM64": [[1, "reticulum-on-arm64"]], "Reticulum on Android": [[1, "reticulum-on-android"]], "Pure-Python Reticulum": [[1, "pure-python-reticulum"]], "Communications Hardware": [[2, "communications-hardware"]], "RNode": [[2, "rnode"]], "Creating RNodes": [[2, "creating-rnodes"]], "Supported Boards": [[2, "supported-boards"]], "LilyGO LoRa32 v2.1": [[2, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[2, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[2, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[2, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[2, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[2, "unsigned-rnode-v1-x"]], "Installation": [[2, "installation"]], "Usage with Reticulum": [[2, "usage-with-reticulum"]], "Suppliers": [[2, "suppliers"]], "WiFi-based Hardware": [[2, "wifi-based-hardware"]], "Combining Hardware Types": [[2, "combining-hardware-types"]], "Reticulum Network Stack Manual": [[3, "reticulum-network-stack-manual"]], "Indices and Tables": [[3, "indices-and-tables"]], "Supported Interfaces": [[4, "supported-interfaces"]], "Auto Interface": [[4, "auto-interface"]], "I2P Interface": [[4, "i2p-interface"]], "TCP Server Interface": [[4, "tcp-server-interface"]], "TCP Client Interface": [[4, "tcp-client-interface"]], "UDP Interface": [[4, "udp-interface"]], "RNode LoRa Interface": [[4, "rnode-lora-interface"]], "Serial Interface": [[4, "serial-interface"]], "Pipe Interface": [[4, "pipe-interface"]], "KISS Interface": [[4, "kiss-interface"]], "AX.25 KISS Interface": [[4, "ax-25-kiss-interface"]], "Common Interface Options": [[4, "common-interface-options"]], "Interface Modes": [[4, "interface-modes"]], "Announce Rate Control": [[4, "announce-rate-control"]], "Building Networks": [[5, "building-networks"]], "Concepts & Overview": [[5, "concepts-overview"]], "Example Scenarios": [[5, "example-scenarios"]], "Interconnected LoRa Sites": [[5, "interconnected-lora-sites"]], "Bridging Over the Internet": [[5, "bridging-over-the-internet"]], "Growth and Convergence": [[5, "growth-and-convergence"]], "Support Reticulum": [[7, "support-reticulum"]], "Donations": [[7, "donations"]], "Provide Feedback": [[7, "provide-feedback"]], "Contribute Code": [[7, "contribute-code"]], "Using Reticulum on Your System": [[9, "using-reticulum-on-your-system"]], "Configuration & Data": [[9, "configuration-data"]], "Included Utility Programs": [[9, "included-utility-programs"]], "The rnsd Utility": [[9, "the-rnsd-utility"]], "The rnstatus Utility": [[9, "the-rnstatus-utility"]], "The rnpath Utility": [[9, "the-rnpath-utility"]], "The rnprobe Utility": [[9, "the-rnprobe-utility"]], "The rncp Utility": [[9, "the-rncp-utility"]], "The rnx Utility": [[9, "the-rnx-utility"]], "Improving System Configuration": [[9, "improving-system-configuration"]], "Fixed Serial Port Names": [[9, "fixed-serial-port-names"]], "Reticulum as a System Service": [[9, "reticulum-as-a-system-service"]], "What is Reticulum?": [[10, "what-is-reticulum"]], "Current Status": [[10, "current-status"]], "What does Reticulum Offer?": [[10, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[10, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[10, "interface-types-and-devices"]], "Caveat Emptor": [[10, "caveat-emptor"]], "API Reference": [[6, "api-reference"]], "Classes": [[6, "classes"]], "Reticulum": [[6, "reticulum"]], "Identity": [[6, "api-identity"]], "Destination": [[6, "destination"]], "Packet": [[6, "packet"]], "Packet Receipt": [[6, "packet-receipt"]], "Request Receipt": [[6, "request-receipt"]], "Resource": [[6, "resource"]], "Transport": [[6, "transport"]], "Understanding Reticulum": [[8, "understanding-reticulum"]], "Motivation": [[8, "motivation"]], "Goals": [[8, "goals"]], "Introduction & Basic Functionality": [[8, "introduction-basic-functionality"]], "Destinations": [[8, "destinations"]], "Destination Naming": [[8, "destination-naming"]], "Public Key Announcements": [[8, "public-key-announcements"]], "Identities": [[8, "understanding-identities"]], "Getting Further": [[8, "getting-further"]], "Reticulum Transport": [[8, "reticulum-transport"]], "Node Types": [[8, "node-types"]], "The Announce Mechanism in Detail": [[8, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[8, "reaching-the-destination"]], "Link Establishment in Detail": [[8, "link-establishment-in-detail"]], "Resources": [[8, "resources"]], "Reference Setup": [[8, "reference-setup"]], "Protocol Specifics": [[8, "protocol-specifics"]], "Packet Prioritisation": [[8, "packet-prioritisation"]], "Interface Access Codes": [[8, "interface-access-codes"]], "Wire Format": [[8, "wire-format"]], "Announce Propagation Rules": [[8, "announce-propagation-rules"]], "Cryptographic Primitives": [[8, "cryptographic-primitives"]]}, "indexentries": {"announce_cap (rns.reticulum attribute)": [[6, "RNS.Reticulum.ANNOUNCE_CAP"]], "curve (rns.identity attribute)": [[6, "RNS.Identity.CURVE"]], "curve (rns.link attribute)": [[6, "RNS.Link.CURVE"]], "destination (class in rns)": [[6, "RNS.Destination"]], "encrypted_mdu (rns.packet attribute)": [[6, "RNS.Packet.ENCRYPTED_MDU"]], "establishment_timeout_per_hop (rns.link attribute)": [[6, "RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP"]], "identity (class in rns)": [[6, "RNS.Identity"]], "keepalive (rns.link attribute)": [[6, "RNS.Link.KEEPALIVE"]], "keepalive_timeout_factor (rns.link attribute)": [[6, "RNS.Link.KEEPALIVE_TIMEOUT_FACTOR"]], "keysize (rns.identity attribute)": [[6, "RNS.Identity.KEYSIZE"]], "link (class in rns)": [[6, "RNS.Link"]], "mtu (rns.reticulum attribute)": [[6, "RNS.Reticulum.MTU"]], "pathfinder_m (rns.transport attribute)": [[6, "RNS.Transport.PATHFINDER_M"]], "plain_mdu (rns.packet attribute)": [[6, "RNS.Packet.PLAIN_MDU"]], "packet (class in rns)": [[6, "RNS.Packet"]], "packetreceipt (class in rns)": [[6, "RNS.PacketReceipt"]], "requestreceipt (class in rns)": [[6, "RNS.RequestReceipt"]], "resource (class in rns)": [[6, "RNS.Resource"]], "reticulum (class in rns)": [[6, "RNS.Reticulum"]], "stale_grace (rns.link attribute)": [[6, "RNS.Link.STALE_GRACE"]], "stale_time (rns.link attribute)": [[6, "RNS.Link.STALE_TIME"]], "truncated_hashlength (rns.identity attribute)": [[6, "RNS.Identity.TRUNCATED_HASHLENGTH"]], "transport (class in rns)": [[6, "RNS.Transport"]], "accepts_links() (rns.destination method)": [[6, "RNS.Destination.accepts_links"]], "advertise() (rns.resource method)": [[6, "RNS.Resource.advertise"]], "announce() (rns.destination method)": [[6, "RNS.Destination.announce"]], "app_and_aspects_from_name() (rns.destination static method)": [[6, "RNS.Destination.app_and_aspects_from_name"]], "cancel() (rns.resource method)": [[6, "RNS.Resource.cancel"]], "clear_default_app_data() (rns.destination method)": [[6, "RNS.Destination.clear_default_app_data"]], "create_keys() (rns.destination method)": [[6, "RNS.Destination.create_keys"]], "decrypt() (rns.destination method)": [[6, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[6, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[6, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[6, "RNS.Destination.deregister_request_handler"]], "encrypt() (rns.destination method)": [[6, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[6, "RNS.Identity.encrypt"]], "from_bytes() (rns.identity static method)": [[6, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[6, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[6, "RNS.Identity.full_hash"]], "full_name() (rns.destination static method)": [[6, "RNS.Destination.full_name"]], "get_data_size() (rns.resource method)": [[6, "RNS.Resource.get_data_size"]], "get_hash() (rns.resource method)": [[6, "RNS.Resource.get_hash"]], "get_parts() (rns.resource method)": [[6, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[6, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[6, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[6, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[6, "RNS.Identity.get_public_key"]], "get_random_hash() (rns.identity static method)": [[6, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[6, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_response_time"]], "get_rtt() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[6, "RNS.Resource.get_segments"]], "get_status() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[6, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[6, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[6, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[6, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[6, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[6, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[6, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[6, "RNS.Resource.is_compressed"]], "load_private_key() (rns.destination method)": [[6, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[6, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[6, "RNS.Identity.load_public_key"]], "next_hop() (rns.transport static method)": [[6, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[6, "RNS.Transport.next_hop_interface"]], "no_inbound_for() (rns.link method)": [[6, "RNS.Link.no_inbound_for"]], "no_outbound_for() (rns.link method)": [[6, "RNS.Link.no_outbound_for"]], "recall() (rns.identity static method)": [[6, "RNS.Identity.recall"]], "recall_app_data() (rns.identity static method)": [[6, "RNS.Identity.recall_app_data"]], "register_announce_handler() (rns.transport static method)": [[6, "RNS.Transport.register_announce_handler"]], "register_request_handler() (rns.destination method)": [[6, "RNS.Destination.register_request_handler"]], "request() (rns.link method)": [[6, "RNS.Link.request"]], "request_path() (rns.transport static method)": [[6, "RNS.Transport.request_path"]], "resend() (rns.packet method)": [[6, "RNS.Packet.resend"]], "send() (rns.packet method)": [[6, "RNS.Packet.send"]], "set_default_app_data() (rns.destination method)": [[6, "RNS.Destination.set_default_app_data"]], "set_delivery_callback() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.set_delivery_callback"]], "set_link_closed_callback() (rns.link method)": [[6, "RNS.Link.set_link_closed_callback"]], "set_link_established_callback() (rns.destination method)": [[6, "RNS.Destination.set_link_established_callback"]], "set_packet_callback() (rns.destination method)": [[6, "RNS.Destination.set_packet_callback"]], "set_packet_callback() (rns.link method)": [[6, "RNS.Link.set_packet_callback"]], "set_proof_requested_callback() (rns.destination method)": [[6, "RNS.Destination.set_proof_requested_callback"]], "set_proof_strategy() (rns.destination method)": [[6, "RNS.Destination.set_proof_strategy"]], "set_remote_identified_callback() (rns.link method)": [[6, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[6, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[6, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[6, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[6, "RNS.Link.set_resource_strategy"]], "set_timeout() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[6, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[6, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[6, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[6, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[6, "RNS.Identity.to_file"]], "transport_enabled() (rns.reticulum static method)": [[6, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[6, "RNS.Identity.truncated_hash"]], "validate() (rns.identity method)": [[6, "RNS.Identity.validate"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["examples", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Supported Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 1, 4, 5, 6, 8, 9, 10], "number": [0, 1, 4, 5, 6, 8, 9], "ar": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10], "includ": [0, 2, 3, 4, 6, 8], "sourc": [0, 1, 2, 5, 8, 10], "distribut": [0, 1, 5, 6, 8, 9], "reticulum": [0, 4, 5], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "us": [0, 2, 3, 4, 5, 6, 8], "learn": [0, 1, 7, 8], "how": [0, 1, 2, 4, 5, 8, 10], "write": [0, 1, 4, 6, 8], "your": [0, 1, 2, 3, 4, 5, 7, 8, 10], "own": [0, 1, 5, 6, 8, 9], "program": [0, 3, 4, 6, 8, 10], "The": [0, 1, 2, 3, 4, 5, 6, 10], "demonstr": [0, 4], "bare": 0, "minimum": [0, 4, 5, 8], "setup": [0, 1, 3, 4], "requir": [0, 1, 4, 5, 8, 9, 10], "connect": [0, 2, 3, 4, 5, 6, 8, 9, 10], "network": [0, 2, 4, 6, 8, 9, 10], "from": [0, 1, 2, 4, 5, 6, 8, 9, 10], "In": [0, 1, 2, 4, 5, 6, 8, 9, 10], "about": [0, 1, 2, 4, 5, 6, 8], "five": 0, "line": [0, 1, 2, 4, 5, 8, 10], "have": [0, 1, 2, 4, 5, 6, 8, 9], "stack": [0, 1, 5, 8, 9, 10], "initialis": [0, 6, 9], "readi": [0, 1, 2, 4, 5, 6, 10], "pass": [0, 2, 4, 5, 6, 8, 9], "traffic": [0, 1, 4, 5, 6, 8, 9], "thi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10], "rn": [0, 1, 6, 8, 9], "start": [0, 2, 3, 4, 6, 8, 9], "up": [0, 1, 2, 4, 5, 8, 9, 10], "gener": [0, 1, 2, 4, 5, 6, 8, 9, 10], "new": [0, 4, 5, 6, 8, 9], "destin": [0, 1, 3, 4, 5, 9], "let": [0, 1, 4, 5, 8, 9], "user": [0, 1, 4, 5, 8, 9], "send": [0, 4, 6, 8, 9], "an": [0, 1, 2, 4, 5, 6, 8, 9, 10], "import": [0, 1, 2, 4, 5, 7, 8], "argpars": 0, "": [0, 1, 4, 5, 8, 9, 10], "defin": [0, 4, 8, 9], "app": [0, 1, 6, 8], "name": [0, 3, 4, 5, 6], "we": [0, 1, 2, 4, 7, 8], "ll": [0, 1, 10], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "creat": [0, 3, 4, 5, 6, 8, 9, 10], "sinc": [0, 1, 4, 5, 6, 8], "basic": [0, 1, 3, 6, 9], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "part": [0, 4, 5, 6, 8], "rang": [0, 1, 2, 4, 5, 8, 9, 10], "util": [0, 2, 3, 4, 8], "put": [0, 2, 4], "them": [0, 1, 2, 4, 5, 7, 8, 9], "within": [0, 1, 4, 5, 6, 8], "namespac": 0, "example_util": [0, 9], "app_nam": [0, 6], "execut": [0, 1, 4, 6, 9], "when": [0, 1, 2, 4, 5, 6, 8, 9], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 1, 4, 5, 6, 8], "first": [0, 1, 4, 6, 8, 9], "randomli": [0, 8], "ident": [0, 1, 3, 9, 10], "our": [0, 8], "just": [0, 1, 2, 4, 5, 8, 10], "endpoint": [0, 5, 6, 8], "address": [0, 1, 4, 5, 6, 8, 10], "commun": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10], "also": [0, 1, 2, 4, 5, 6, 8, 9, 10], "exist": [0, 1, 2, 4, 8, 9, 10], "which": [0, 1, 4, 5, 6, 8, 9], "know": [0, 1, 2, 5, 6, 8], "thei": [0, 1, 4, 5, 6, 8, 9], "reachabl": [0, 1, 4, 5, 6, 8, 9], "autoomat": 0, "path": [0, 1, 2, 4, 6, 8, 9], "anywher": [0, 4], "els": [0, 5, 8], "IN": [0, 6], "singl": [0, 4, 6, 8, 9, 10], "minimalsampl": 0, "configur": [0, 1, 2, 3, 4, 5, 6, 8, 10], "automat": [0, 1, 2, 4, 5, 6, 8, 9, 10], "prove": [0, 8], "packet": [0, 1, 2, 3, 4, 5, 9, 10], "adress": [0, 6], "By": [0, 1, 4, 6, 8, 9], "do": [0, 1, 2, 4, 6, 8, 10], "proof": [0, 6, 8, 9], "each": [0, 1, 4, 5, 8, 9], "incom": [0, 4, 6, 9], "transmit": [0, 4, 8], "back": [0, 4, 8, 10], "sender": [0, 1, 5, 8, 9], "anyon": [0, 1, 2, 5, 6, 8, 9], "tri": 0, "whether": [0, 4, 6, 8], "wa": [0, 2, 4, 5, 6, 8, 10], "receiv": [0, 1, 4, 6, 8, 9], "correctli": 0, "set_proof_strategi": [0, 6], "prove_al": [0, 6], "everyth": [0, 5, 8], "hand": [0, 1], "over": [0, 2, 3, 4, 6, 8, 9, 10], "control": [0, 1, 2, 3, 5, 6, 8], "loop": 0, "announceloop": 0, "log": [0, 4, 9], "prettyhexrep": 0, "hash": [0, 1, 6, 8, 9], "run": [0, 1, 2, 4, 5, 6, 8, 9, 10], "hit": 0, "enter": [0, 9], "manual": [0, 1, 4, 5, 6, 9], "ctrl": 0, "c": [0, 5], "quit": 0, "until": [0, 4, 6], "exit": [0, 1, 6, 9], "If": [0, 1, 2, 4, 5, 6, 8, 9, 10], "server": [0, 1, 2, 3, 9], "client": [0, 1, 2, 3, 6], "messag": [0, 1, 6, 8, 9], "direct": [0, 1, 2, 5, 6, 8, 9], "toward": [0, 4, 8], "while": [0, 1, 2, 4, 5, 6, 8, 10], "true": [0, 4, 6, 9], "input": [0, 9], "sent": [0, 1, 6, 8, 9], "startup": 0, "get": [0, 2, 3, 4, 6, 10], "pars": 0, "desir": [0, 2, 4, 8], "mode": [0, 1, 2, 3, 8, 9, 10], "__name__": 0, "__main__": 0, "try": [0, 3, 4], "parser": 0, "argumentpars": 0, "descript": [0, 9], "add_argu": 0, "config": [0, 1, 2, 5, 9], "action": 0, "store": [0, 2, 8, 9], "default": [0, 1, 2, 4, 5, 6, 8, 9], "none": [0, 4, 6, 8, 9], "help": [0, 2, 5, 7, 8, 9, 10], "altern": [0, 4, 9], "directori": [0, 9], "type": [0, 1, 3, 4, 5, 6, 9], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 4], "keyboardinterrupt": 0, "print": [0, 4, 9], "found": [0, 1, 4, 5, 8, 9], "http": [0, 1, 7], "github": [0, 1, 7], "com": [0, 1, 7], "markqvist": [0, 1, 7], "blob": [0, 8], "master": [0, 6], "py": [0, 1, 8], "build": [0, 1, 2, 3, 4, 8, 10], "upon": [0, 8], "previou": 0, "explor": [0, 8, 10], "notif": [0, 6], "relev": [0, 2, 4, 6, 8, 9], "set": [0, 1, 2, 4, 5, 6, 8, 9, 10], "callback": [0, 6], "applic": [0, 4, 5, 6, 8, 9], "arriv": [0, 8], "random": [0, 6, 8], "two": [0, 1, 2, 4, 5, 8], "list": [0, 1, 2, 4, 6, 8, 10], "string": [0, 6], "app_data": [0, 6], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 1], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 1, 2, 5, 8, 10], "destination_1": 0, "destination_2": 0, "handler": [0, 6], "onli": [0, 1, 2, 4, 5, 6, 8, 9, 10], "ask": [0, 2, 6], "chang": [0, 1, 4, 6, 8, 9, 10], "filter": [0, 5, 8], "see": [0, 1, 4, 5, 6, 8, 9, 10], "what": [0, 1, 3, 6, 8], "happen": [0, 6, 8], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 6], "regist": [0, 6], "transport": [0, 1, 3, 4, 5, 9, 10], "register_announce_handl": [0, 6], "select": [0, 4], "randint": 0, "0": [0, 4, 6, 8, 9, 10], "len": 0, "1": [0, 4, 6, 8, 9], "data": [0, 1, 3, 4, 5, 6, 8, 10], "encod": 0, "utf": 0, "8": [0, 4, 9], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10], "class": [0, 3, 5, 10], "method": [0, 1, 4, 6, 8], "take": [0, 1, 4, 8, 9, 10], "option": [0, 1, 2, 3, 5, 6, 8, 9], "argument": [0, 6, 9], "instanc": [0, 3, 4, 6, 8, 9], "some": [0, 1, 2, 4, 5, 8, 9], "want": [0, 1, 2, 4, 5, 8, 9, 10], "aspect": [0, 2, 4, 6, 8], "__init__": 0, "self": [0, 5, 10], "call": [0, 5, 6, 8, 10], "system": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10], "match": [0, 4, 8], "specif": [0, 2, 3, 4, 6, 10], "cannot": [0, 1], "wildcard": 0, "received_announc": [0, 6], "destination_hash": [0, 6, 9], "announced_ident": [0, 6], "contain": [0, 5, 6, 8, 9], "follow": [0, 1, 2, 4, 7, 8, 9, 10], "decod": 0, "plaintext": [0, 6], "unencrypt": [0, 6, 8], "inform": [0, 1, 3, 4, 5, 6, 8, 9], "ani": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10], "listen": [0, 4, 8, 9], "sy": 0, "channel": [0, 4, 5, 7, 8, 10], "did": 0, "one": [0, 1, 2, 4, 5, 6, 8, 9, 10], "public_inform": 0, "ad": [0, 2, 3, 4, 5, 6, 8, 10], "so": [0, 1, 2, 4, 5, 6, 7, 8, 10], "differ": [0, 1, 2, 4, 5, 6, 8, 9, 10], "plain": [0, 4, 6, 8], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 1, 2, 4, 5, 6, 9], "everi": [0, 4, 5, 6, 8], "time": [0, 1, 2, 4, 5, 6, 8, 9], "set_packet_callback": [0, 6], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 1, 2, 4, 5, 8, 9], "out": [0, 1, 2, 4, 5, 6, 8, 9, 10], "r": [0, 4, 8, 9], "n": [0, 8, 9], "end": [0, 4, 5, 6, 8, 10], "stdout": [0, 4, 9], "flush": 0, "text": [0, 1, 5, 8], "prompt": 0, "channelarg": 0, "between": [0, 4, 5, 6, 8], "interfac": [0, 2, 3, 5, 6, 9], "simpl": [0, 2, 8, 9, 10], "respond": [0, 6], "receipt": [0, 3, 8], "choos": [0, 1, 4, 8], "global": [0, 1, 4, 5, 8, 10], "server_ident": 0, "queri": [0, 1, 6], "abl": [0, 1, 4, 5, 6, 8, 9], "verifi": [0, 6, 8], "repli": [0, 9], "encrypt": [0, 1, 5, 6, 8, 10], "wai": [0, 1, 4, 5, 8], "certain": [0, 4, 5, 7, 8], "than": [0, 1, 4, 5, 8], "read": [0, 1, 4, 8, 9], "echo_destin": 0, "tell": [0, 4], "function": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10], "server_callback": 0, "wait": [0, 4, 8, 9], "go": [0, 1, 4, 8], "handl": [0, 2, 4, 5, 6, 8, 9, 10], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": 0, "dbm": [0, 4], "snr": 0, "db": 0, "destination_hexhash": 0, "timeout": [0, 6, 9], "binari": [0, 1, 8], "represent": 0, "command": [0, 1, 4, 9], "dest_len": 0, "truncated_hashlength": [0, 6], "2": [0, 4, 6, 8, 9], "rais": [0, 6], "valueerror": [0, 6], "length": [0, 4, 6, 8], "invalid": [0, 6], "hex": 0, "hexadecim": [0, 8, 9], "charact": 0, "byte": [0, 6, 8, 9, 10], "format": [0, 3, 10], "fromhex": 0, "e": [0, 5], "check": [0, 1, 6, 8], "overrid": 0, "loglevel": [0, 6, 9], "provid": [0, 1, 2, 3, 4, 5, 6, 8, 10], "feedback": [0, 3], "log_info": 0, "doe": [0, 1, 2, 3, 4, 5, 6, 8, 9], "load": [0, 1, 6, 9], "has_path": [0, 6], "To": [0, 1, 2, 4, 5, 8, 9, 10], "public": [0, 3, 4, 6], "kei": [0, 3, 5, 6, 10], "done": [0, 1, 4, 5, 8, 9], "recal": [0, 6], "modul": [0, 1, 2, 8, 9, 10], "known": [0, 6, 8, 9], "return": [0, 6, 9], "outgo": [0, 4, 6, 8, 9], "got": 0, "correct": [0, 8], "convent": 0, "request_destin": 0, "add": [0, 1, 4, 5, 9], "echo_request": 0, "get_random_hash": [0, 6], "successfulli": [0, 8], "packetreceipt": [0, 6], "packet_receipt": [0, 6], "set_timeout": [0, 6], "set_timeout_callback": [0, 6], "packet_timed_out": 0, "deliveri": [0, 1, 6, 10], "set_delivery_callback": [0, 6], "packet_deliv": 0, "yet": [0, 4, 8], "request_path": [0, 6], "statu": [0, 1, 3, 4, 6, 8, 9], "deliv": [0, 6], "rtt": [0, 6, 8], "get_rtt": [0, 6], "round": [0, 6, 9], "3": [0, 4, 8, 9, 10], "rttstring": 0, "second": [0, 4, 6, 8, 9, 10], "1000": 0, "millisecond": [0, 9], "proof_packet": 0, "valid": [0, 4, 6, 8, 9], "trip": [0, 6, 9], "fail": [0, 6], "store_tru": 0, "t": [0, 1, 4, 5, 6, 9], "metavar": 0, "float": [0, 6], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 1, 4, 5, 6, 10], "remot": [0, 6, 9], "forth": 0, "o": [0, 8, 9, 10], "refer": [0, 1, 3], "latest": [0, 1, 4], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 6], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 6], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": 0, "activ": [0, 1, 4, 6, 8], "last": [0, 4, 6], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 9], "begin": [0, 2, 6], "And": 0, "client_packet_receiv": 0, "close": [0, 5, 6, 9], "link_establish": 0, "link_clos": 0, "interact": [0, 1, 6, 8, 9], "client_loop": 0, "becom": [0, 1, 5, 8], "should_quit": 0, "fals": [0, 4, 6, 9], "should": [0, 1, 2, 4, 5, 6, 8, 9, 10], "q": [0, 9], "teardown": [0, 6], "mdu": 0, "size": [0, 1, 4, 6, 8, 9], "exce": [0, 4, 6], "log_error": 0, "error": [0, 1, 7, 9], "ha": [0, 1, 2, 4, 5, 6, 8, 10], "been": [0, 1, 2, 4, 5, 6, 8, 10], "later": [0, 1, 4], "teardown_reason": 0, "now": [0, 1, 5, 8, 9], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 4, 6, 9], "_exit": 0, "identifi": [0, 4, 6, 8, 9], "intiat": 0, "onc": [0, 1, 2, 4, 5, 6, 8, 9, 10], "initi": [0, 5, 6, 8, 10], "peer": [0, 1, 4, 6, 8, 9], "identifyexampl": 0, "set_remote_identified_callback": [0, 6], "remote_identifi": 0, "origin": [0, 5, 8], "displai": [0, 8], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 6], "client_ident": 0, "sendig": 0, "perform": [0, 1, 4, 5, 8], "random_text_gener": 0, "request_id": [0, 6], "remote_ident": [0, 6], "requested_at": [0, 6], "look": [0, 1, 4, 8, 9], "On": [0, 1, 4, 9], "full": [0, 4, 6, 8, 9, 10], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 8, 9], "awai": [0, 4, 5, 8, 9], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 6], "response_gener": [0, 6], "allow": [0, 1, 2, 4, 5, 6, 8, 9, 10], "allow_al": [0, 6], "response_callback": [0, 6], "got_respons": 0, "failed_callback": [0, 6], "request_fail": 0, "request_receipt": [0, 6], "request_receiv": 0, "implement": [0, 4, 5, 6, 7, 8, 10], "file": [0, 1, 2, 4, 5, 6, 8, 9, 10], "download": [0, 4, 9], "resourc": [0, 1, 3, 7], "effici": [0, 1, 4, 8, 10], "serv": [0, 2, 4, 5, 8, 9], "pleas": [0, 1, 4, 6, 9, 10], "note": [0, 1, 2, 4, 6, 8, 9], "larg": [0, 2, 4, 5, 6, 8, 10], "transfer": [0, 6, 8, 9, 10], "recommend": [0, 1, 2, 8], "compress": [0, 6, 8], "hashmap": 0, "sequenc": [0, 6, 8, 10], "long": [0, 1, 2, 4, 8], "slow": [0, 4, 8], "cpu": [0, 8], "probabl": [0, 5, 8, 9, 10], "result": [0, 8, 9], "befor": [0, 1, 4, 6, 8, 9], "complet": [0, 1, 2, 4, 5, 6, 8, 9, 10], "prepar": [0, 5], "bundl": 0, "instead": [0, 1, 4, 8, 9], "slice": 0, "chunk": 0, "suitabl": [0, 1, 4, 5, 8, 10], "pack": 0, "thread": 0, "vendor": [0, 2], "umsgpack": 0, "app_timeout": 0, "45": [0, 8], "serve_path": 0, "here": [0, 1, 2, 4, 8, 9], "conveni": 0, "list_fil": 0, "entri": [0, 1, 8], "actual": [0, 1, 4, 8], "listdir": 0, "isfil": 0, "join": [0, 1, 5, 7, 8], "host": [0, 1, 4, 8, 9], "still": [0, 1, 2, 5, 8], "isdir": 0, "packb": 0, "fit": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 5], "mani": [0, 1, 2, 4, 5, 6, 8, 9, 10], "split": 0, "filelist": 0, "multipl": [0, 4, 5, 8, 9], "hint": 0, "alreadi": [0, 1, 2, 5, 6, 8, 9], "support": [0, 1, 3, 5, 8, 10], "after": [0, 4, 5, 6, 8, 9], "re": [0, 4, 6, 8], "keep": [0, 5, 6, 8, 9, 10], "open": [0, 2, 4, 5, 6, 7, 8, 9, 10], "client_request": 0, "longer": [0, 5, 8, 9], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 4], "don": [0, 1, 2, 5, 6, 9], "unknown": [0, 4, 6, 8], "conclud": [0, 6], "hasattr": 0, "avail": [0, 1, 2, 4, 5, 6, 8, 9, 10], "server_fil": 0, "current": [0, 1, 2, 3, 4, 6, 8], "current_download": 0, "current_filenam": 0, "variabl": 0, "statist": [0, 4, 7], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 4, 6, 8, 9], "normal": [0, 4, 6], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 6], "set_resource_strategi": [0, 6], "accept_al": [0, 6], "set_resource_started_callback": [0, 6], "download_began": 0, "set_resource_concluded_callback": [0, 6], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 2, 4, 6], "request_packet": 0, "create_receipt": [0, 6], "print_menu": 0, "25": [0, 3, 10], "user_input": 0, "int": 0, "screen": 0, "variou": [0, 1, 4, 5, 8], "state": 0, "It": [0, 1, 2, 4, 6, 8, 9, 10], "uninterest": 0, "won": 0, "detail": [0, 1, 3, 4, 6, 9, 10], "clear_screen": 0, "print_filelist": 0, "percent": 0, "get_progress": [0, 6], "100": [0, 4, 8], "rprogress": 0, "save_error": 0, "could": [0, 1, 4, 5, 6, 8, 10], "disk": [0, 6], "hour": [0, 4], "rem": 0, "divmod": 0, "3600": [0, 4], "minut": [0, 1, 4, 8], "60": 0, "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 8], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 3, 9], "suffix": 0, "b": [0, 5, 9], "ttransfer": 0, "press": 0, "index": [0, 1, 3], "enumer": 0, "filelist_data": 0, "unpack": 0, "extend": [0, 1, 6], "local": [0, 1, 4, 5, 6, 8, 9, 10], "unpackb": 0, "append": [0, 8], "visibl": 0, "updat": [0, 1, 6, 8], "small": [0, 4, 5, 8, 10], "job": 0, "potenti": [0, 4, 7, 8, 9], "target": [0, 4, 9], "filelist_timeout_job": 0, "setdaemon": 0, "detect": 0, "shown": 0, "progress": [0, 6, 10], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 6, 7, 8], "readabl": [0, 6, 8], "num": 0, "unit": [0, 1, 9], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 8], "pi": [0, 5, 8, 9, 10], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": 0, "m": [0, 1, 8, 9], "g": 0, "p": [0, 9], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 6, 8], "cl": 0, "nt": 0, "dir": 0, "best": [1, 8, 10], "depend": [1, 2, 5, 6, 8, 9], "guid": [1, 2, 6, 8], "outlin": [1, 2, 8], "sensibl": [1, 2], "scenario": [1, 3, 8], "built": [1, 4, 8, 10], "few": [1, 2, 4, 5, 8, 9, 10], "other": [1, 2, 4, 5, 6, 8, 9], "even": [1, 2, 4, 5, 8, 9, 10], "extrem": [1, 8, 9, 10], "low": [1, 2, 4, 5, 8, 10], "bandwidth": [1, 4, 5, 6, 8, 10], "These": [1, 4, 8, 9], "feel": 1, "work": [1, 2, 4, 5, 8, 9, 10], "design": [1, 2, 5, 8, 10], "well": [1, 2, 4, 5, 6, 8, 10], "lora": [1, 2, 3, 8, 10], "wifi": [1, 3, 4, 5, 8, 9, 10], "wire": [1, 2, 3, 4, 10], "ethernet": [1, 2, 4, 5, 8, 10], "combin": [1, 3, 5, 8], "As": [1, 2, 4, 5, 6, 8, 10], "easi": [1, 2, 4, 8, 9, 10], "experi": [1, 8], "without": [1, 2, 5, 8, 10], "transceiv": [1, 2, 4, 8, 10], "infrastructur": [1, 2, 4, 5, 8, 9], "launch": [1, 9], "separ": [1, 4, 5, 8, 9], "devic": [1, 2, 3, 4, 5, 6, 8, 9], "same": [1, 2, 4, 5, 6, 8, 9], "enough": [1, 2, 8], "physic": [1, 2, 4, 8, 9], "termin": [1, 6], "suit": [1, 2, 8, 9], "featur": [1, 7, 8, 10], "both": [1, 2, 4, 5, 6, 8, 9, 10], "delai": [1, 4, 8, 9], "offlin": 1, "share": [1, 5, 6, 8, 9], "browser": 1, "page": [1, 3, 8], "dynam": [1, 9], "render": 1, "authent": [1, 4, 5, 6, 8, 9, 10], "more": [1, 2, 4, 5, 6, 8, 9, 10], "face": [1, 4], "protocol": [1, 2, 3, 4, 10], "lxmf": 1, "anoth": [1, 6, 8, 9], "project": 1, "instal": [1, 3, 4, 5, 8, 9, 10], "via": [1, 2, 4, 7, 8, 9, 10], "pip": [1, 2, 9], "pip3": [1, 2, 9], "nomadnet": 1, "veri": [1, 2, 4, 5, 6, 7, 8, 9, 10], "might": [1, 4, 5, 8, 9], "reboot": 1, "similar": [1, 2, 4, 5, 9, 10], "again": [1, 4, 8, 9], "would": [1, 4, 5, 6, 8], "rather": 1, "graphic": 1, "linux": [1, 8], "maco": 1, "earli": [1, 2], "stage": [1, 8], "interoper": [1, 2, 5, 8, 10], "come": [1, 8], "make": [1, 2, 4, 7, 8, 9], "easier": [1, 4, 5, 9], "manag": [1, 5, 6, 8, 9], "rnsd": [1, 3], "background": [1, 4], "foreground": 1, "servic": [1, 3, 5], "rnstatu": [1, 3, 4, 8], "rnpath": [1, 3, 4], "rnprobe": [1, 3], "view": [1, 4, 8, 9], "chapter": [1, 2, 4, 5, 8, 9, 10], "locat": [1, 2, 5, 8, 9], "edit": [1, 9], "rnsconfig": 1, "broadcast": [1, 3, 4, 6, 8], "domain": [1, 4], "further": [1, 3, 4], "exampl": [1, 2, 3, 4, 6, 8, 9, 10], "tcp": [1, 2, 3, 5, 8, 10], "There": [1, 5, 8, 10], "subnet": [1, 5], "rout": [1, 4, 5, 6, 8, 9, 10], "tabl": [1, 4, 5, 8, 9], "thing": 1, "discov": [1, 4], "topographi": [1, 5, 8], "situat": [1, 2, 4, 5, 8], "where": [1, 2, 3, 4, 5, 6, 8, 9], "utilis": [1, 5, 9, 10], "extern": [1, 4, 6, 10], "often": [1, 4, 5, 8, 9], "suffici": [1, 4, 8, 9], "act": [1, 6, 8, 9], "gatewai": [1, 4, 5, 8], "enabl": [1, 2, 4, 5, 6, 8, 9], "wider": [1, 4, 8, 9], "autointerfac": [1, 2, 4, 9], "possibli": 1, "offer": [1, 3, 4, 6, 8], "i2p": [1, 3, 10], "carefulli": 1, "tcpserverinterfac": [1, 4], "access": [1, 3, 4, 5, 6, 9], "ip": [1, 2, 4, 8, 9, 10], "faster": [1, 4, 8], "lower": [1, 4, 9], "latenc": [1, 8, 10], "energi": 1, "i2pinterfac": [1, 4], "howev": [1, 5, 8], "leak": 1, "reveal": [1, 6, 8, 10], "who": [1, 8], "inspect": [1, 4, 5, 8], "someon": [1, 4], "determin": [1, 6, 8], "adversari": 1, "mai": [1, 4, 6, 8, 9], "record": [1, 8], "metadata": 1, "like": [1, 2, 4, 5, 6, 8, 9, 10], "transmiss": [1, 4, 6, 8], "though": [1, 2, 4, 8], "publicli": 1, "most": [1, 2, 4, 5, 8, 9], "anymor": 1, "through": [1, 2, 4, 5, 6, 8, 9, 10], "invis": [1, 4], "daemon": [1, 4, 6, 9], "parallel": 1, "For": [1, 2, 4, 5, 6, 8, 10], "alwai": [1, 4, 6, 8, 9], "node": [1, 3, 4, 5, 9, 10], "i2pd": [1, 4], "mix": [1, 4, 5, 9], "hide": 1, "relai": 1, "extra": [1, 4, 5, 9], "comput": [1, 8, 10], "power": [1, 2, 4, 8], "attack": 1, "form": [1, 4, 5, 6, 8], "deep": 1, "much": [1, 4, 5, 8, 9], "difficult": [1, 2], "non": [1, 6, 8], "behind": [1, 8], "firewal": [1, 4], "nat": 1, "preserv": [1, 6], "anonym": [1, 5, 6, 8, 10], "care": [1, 2, 6, 10], "slightli": 1, "experiment": [1, 2, 10], "made": [1, 6, 8], "dublin": 1, "hub": [1, 4], "tcpclientinterfac": [1, 2, 4], "ye": [1, 4, 8, 9], "target_host": [1, 4], "target_port": [1, 4], "4965": [1, 9], "frankfurt": [1, 9], "5377": 1, "uxg5kubabakh3jtnvsipingbr5574dle7bubvip7llfvwx2tgrua": 1, "b32": [1, 4], "point": [1, 2, 4, 5, 8, 9], "absolut": [1, 2, 7, 10], "usag": [1, 3, 4, 7, 9], "occasion": 1, "test": [1, 2, 8], "failur": [1, 4], "guarante": [1, 8], "compat": [1, 2, 4, 6, 8], "hardwar": [1, 3, 4, 5, 6, 8, 9, 10], "wide": [1, 2, 4, 8, 10], "section": [1, 2, 4, 5, 8, 9], "easili": [1, 4, 5, 8, 9, 10], "cheapli": 1, "rnode": [1, 3, 8, 9, 10], "purpos": [1, 2, 4, 6, 8], "digit": [1, 2, 8, 10], "integr": [1, 5, 8], "yourself": [1, 8, 10], "custom": [1, 4, 6, 8, 10], "firmwar": [1, 2, 8], "board": [1, 3, 8, 10], "auto": [1, 2, 3, 6, 8], "script": [1, 2], "prefer": [1, 8], "purchas": [1, 5, 8, 10], "supplier": [1, 3], "addit": [1, 2, 4, 8, 9, 10], "privat": [1, 4, 6, 7, 8, 10], "secur": [1, 8, 10], "uncensor": 1, "mesh": [1, 4, 5, 10], "think": 1, "welcom": 1, "head": 1, "discuss": [1, 2, 8], "propos": 1, "easiest": [1, 2, 4, 8], "releas": [1, 2, 4, 8], "abov": [1, 2, 4, 8, 9], "next": [1, 5, 6, 8], "step": [1, 2], "pyseri": 1, "netifac": 1, "api": [1, 3, 8, 10], "associ": [1, 6, 8], "case": [1, 2, 4, 5, 8, 9], "recip": 1, "cryptographi": [1, 8, 10], "clone": 1, "repositori": [1, 7, 8], "git": 1, "move": [1, 4, 8], "folder": 1, "symlink": [1, 9], "librari": 1, "cd": 1, "ln": [1, 9], "python3": [1, 2], "echo": [1, 3, 9], "unless": [1, 4, 6, 8], "ve": 1, "immedi": [1, 4, 9], "necessari": [1, 2, 4, 5, 6, 8], "nano": 1, "repeat": 1, "process": [1, 2, 4, 6, 8], "h": [1, 9], "ping": [1, 9], "replac": [1, 8, 9], "below": [1, 2, 4, 9], "3e12fc71692f8ec47bc5": 1, "filetransf": [1, 3, 6], "understand": [1, 3, 9], "architectur": 1, "precompil": 1, "dev": [1, 4, 9], "packag": [1, 4, 8], "sudo": [1, 9], "apt": 1, "relat": 1, "termux": 1, "f": 1, "droid": 1, "emul": 1, "environ": [1, 5, 8], "abil": [1, 2], "io": [1, 2, 9], "pre": [1, 2, 6, 8], "wheel": 1, "standard": [1, 2, 8], "sure": [1, 2, 9], "pkg": 1, "upgrad": [1, 8], "Then": 1, "essenti": [1, 4, 8], "openssl": [1, 8], "libffi": 1, "rust": 1, "platform": [1, 2, 8], "compil": 1, "export": 1, "cargo_build_target": 1, "aarch64": 1, "sever": [1, 5, 6, 9], "succe": 1, "softwar": [1, 2, 4, 8, 10], "possibl": [1, 2, 4, 5, 6, 8, 10], "apk": 1, "tutori": 1, "code": [1, 2, 3, 4, 9], "rare": [1, 4], "obscur": 1, "unusu": 1, "rnspure": 1, "content": [1, 5, 9], "No": [1, 4, 8, 9, 10], "matter": [1, 4], "perfectli": 1, "serial": [1, 2, 3, 8, 10], "pyca": [1, 8], "cryptograph": [1, 3, 5, 10], "primit": [1, 3], "One": [2, 6], "truli": [2, 8], "valuabl": [2, 7], "almost": [2, 4, 8, 9], "conceiv": 2, "kind": [2, 4, 5, 8], "medium": [2, 4, 5, 6, 8, 10], "flexibl": [2, 4, 10], "cover": [2, 8, 10], "wireless": [2, 5], "decad": 2, "old": [2, 7, 8], "radio": [2, 3, 4, 5, 6, 8, 9, 10], "modem": [2, 4, 5, 6, 8, 10], "modern": [2, 8], "millimet": 2, "wave": 2, "backhaul": [2, 5], "oper": [2, 4, 5, 6, 8, 9, 10], "good": [2, 5, 8, 9], "chanc": 2, "box": 2, "glue": 2, "littl": [2, 8], "effort": 2, "pipeinterfac": [2, 4], "kiss": [2, 3, 9, 10], "simplyequip": 2, "broad": 2, "abund": 2, "sometim": 2, "especi": [2, 4], "scratch": 2, "real": [2, 5, 10], "world": [2, 5, 10], "minim": [2, 3, 8], "cost": [2, 8, 10], "fundament": [2, 8], "categori": 2, "emploi": [2, 8], "reliabl": [2, 4, 5, 8, 10], "commonli": 2, "either": [2, 4, 5, 8, 9], "expens": 2, "hard": 2, "hungri": 2, "attempt": [2, 6], "allevi": 2, "particular": 2, "plaform": 2, "its": [2, 4, 6, 8], "compon": [2, 7, 8], "frequenc": [2, 4, 8], "band": [2, 8], "scheme": 2, "limit": [2, 5, 8], "common": [2, 3, 5, 8, 9, 10], "ism": [2, 8], "avoid": [2, 8, 9], "confus": [2, 8], "layer": [2, 4, 5, 8, 10], "noth": [2, 10], "lorawan": [2, 8], "central": [2, 5, 8], "iot": 2, "raw": 2, "overhead": [2, 4, 8], "high": [2, 4, 8, 10], "level": [2, 4, 8, 9], "directli": [2, 4, 6, 8, 9, 10], "replic": [2, 8], "across": [2, 5], "togeth": [2, 8, 9], "tool": [2, 8, 9, 10], "exact": [2, 4, 8], "explain": [2, 6], "approach": [2, 8, 9], "develop": [2, 3, 7, 8, 10], "boil": 2, "obtain": [2, 8], "autom": [2, 7, 8], "provis": 2, "rnodeinterfac": [2, 4, 9], "ic": 2, "semtech": 2, "sx1276": 2, "esp32": 2, "manufactur": 2, "avr": 2, "atmega1284p": 2, "rnodeconf": 2, "autoinstal": 2, "seri": 2, "question": [2, 4], "consid": [2, 6, 8, 10], "newest": [2, 8], "version": [2, 8, 9], "stabil": 2, "paramet": [2, 4, 5, 6, 8], "port": [2, 3, 4, 5, 8, 10], "air": [2, 10], "id": [2, 4, 6, 8, 9], "itself": [2, 3, 8], "touch": [2, 10], "produc": 2, "short": [2, 8, 9], "fulli": [2, 8, 10], "bridg": [2, 3], "behav": 2, "mean": [2, 4, 5, 8, 9], "link": [2, 3, 4, 5, 9, 10], "dhcp": [2, 4, 9], "dn": 2, "least": [2, 4, 8, 9, 10], "transpar": [2, 4, 8, 9], "capac": [2, 4, 6, 8], "distanc": [2, 8], "ubiqu": 2, "airmax": 2, "ltu": 2, "mikrotik": 2, "exhaust": [2, 8], "rel": [2, 8, 10], "cheap": [2, 8], "co": [2, 4, 10], "concurr": [2, 8, 9], "pattern": [2, 8], "gain": [2, 8], "antenna": 2, "backbon": 2, "area": [2, 4, 5, 8, 10], "aim": [3, 8], "particip": [3, 5, 8], "caveat": 3, "emptor": 3, "fast": [3, 4, 6, 8], "base": [3, 4, 5, 6, 8, 9, 10], "nomad": 3, "sideband": 3, "With": [3, 4, 5, 8, 9], "internet": [3, 4, 8, 10], "testnet": [3, 9], "arm64": 3, "android": 3, "pure": [3, 8], "python": [3, 8, 9, 10], "rncp": 3, "rnx": 3, "improv": [3, 4, 7], "fix": [3, 8], "motiv": 3, "goal": [3, 4], "introduct": 3, "announc": [3, 6, 9], "mechan": [3, 4], "reach": [3, 4, 5], "prioritis": [3, 4, 5, 6], "propag": [3, 4, 6], "rule": [3, 4], "udp": [3, 5, 8, 9, 10], "pipe": [3, 10], "ax": [3, 10], "concept": [3, 8, 9], "overview": [3, 4, 8], "interconnect": [3, 4, 8], "site": [3, 4], "growth": 3, "converg": [3, 8], "request": [3, 4, 8, 9], "identif": [3, 4, 10], "respons": [3, 6, 8], "donat": 3, "contribut": 3, "search": 3, "distinct": [4, 8], "topologi": [4, 8], "less": [4, 8, 10], "endless": 4, "describ": [4, 6, 8], "give": [4, 8, 9], "respect": 4, "discover": 4, "autoconfigur": [4, 10], "ipv6": [4, 9], "router": [4, 9], "sort": [4, 8], "switch": [4, 8], "os": 4, "interface_en": [4, 9], "isol": [4, 9], "lan": 4, "group": [4, 6, 8], "group_id": 4, "kernel": [4, 9, 10], "wlan0": 4, "eth1": 4, "Or": [4, 9, 10], "ignor": [4, 6, 8], "ones": [4, 9], "ignored_devic": 4, "tun0": 4, "eth0": 4, "multicast": 4, "autodiscov": 4, "discoveri": [4, 8, 9], "scope": 4, "admin": 4, "organis": [4, 5, 7], "custom_network_nam": 4, "discovery_scop": 4, "discovery_port": 4, "48555": 4, "data_port": 4, "49555": 4, "frequent": 4, "block": 4, "inbound": [4, 6], "portabl": [4, 8], "persist": [4, 9], "achiev": [4, 6, 8], "geti2p": 4, "net": 4, "websit": 4, "base32": 4, "comma": 4, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 4, "output": [4, 9], "event": 4, "simplest": [4, 8], "tunnel": [4, 8, 10], "interchang": 4, "degre": 4, "retain": 4, "eas": [4, 8], "simpler": 4, "4242": 4, "listen_ip": 4, "listen_port": 4, "bind": 4, "10": [4, 8, 9], "88": 4, "i2p_tunnel": 4, "127": 4, "5001": 4, "dedic": [4, 8], "natur": 4, "toler": 4, "intermitt": 4, "gracefulli": 4, "restor": 4, "reappear": 4, "hostnam": 4, "expos": [4, 6], "soundmodem": 4, "kiss_fram": 4, "tnc": [4, 6, 9, 10], "8001": 4, "caution": 4, "frame": 4, "conjunct": 4, "never": [4, 6, 8], "disabl": [4, 8, 9], "intern": [4, 6, 8], "recoveri": 4, "greatli": 4, "unreli": 4, "implic": 4, "better": 4, "udpinterfac": 4, "forward_ip": 4, "255": 4, "forward_port": 4, "assum": [4, 8], "55": 4, "72": 4, "24": 4, "equival": 4, "forward": [4, 6, 8, 10], "segment": [4, 5, 6, 8, 10], "cours": [4, 8], "15": 4, "16": [4, 8, 9], "ttyusb0": [4, 9], "867": 4, "mhz": [4, 8], "867200000": 4, "125": 4, "khz": 4, "125000": 4, "tx": 4, "7": [4, 9], "mw": 4, "txpower": 4, "spread": 4, "factor": [4, 6], "12": 4, "being": [4, 6, 8], "fastest": [4, 8], "longest": 4, "spreadingfactor": 4, "throough": 4, "codingr": 4, "interv": [4, 6], "id_callsign": 4, "mycal": 4, "id_interv": 4, "600": 4, "homebrew": 4, "amount": [4, 5, 6, 8, 10], "ram": 4, "flow": [4, 5], "flow_control": 4, "pair": [4, 8], "laser": 4, "serialinterfac": 4, "baud": 4, "speed": [4, 8, 9], "115200": [4, 9], "databit": [4, 9], "pariti": [4, 9], "stopbit": [4, 9], "stdin": [4, 9], "virtual": [4, 5, 8, 9, 10], "netcat": 4, "l": [4, 9], "5757": 4, "respawn": 4, "respawn_delai": 4, "continu": [4, 7, 10], "scan": 4, "eof": 4, "respawn_interv": 4, "varieti": [4, 8, 9, 10], "openmodem": [4, 10], "period": [4, 6, 8], "beacon": 4, "station": 4, "kissinterfac": [4, 9], "ttyusb1": 4, "preambl": [4, 9], "150": [4, 9], "tail": 4, "txtail": [4, 9], "cdma": 4, "reason": [4, 8], "200": [4, 9], "slottim": [4, 9], "20": [4, 8, 9], "elaps": 4, "comment": [4, 9], "buffer": 4, "amateur": [4, 10], "spectrum": [4, 8], "encapsul": [4, 10], "callsign": 4, "ssid": 4, "realli": [4, 6], "doesn": 4, "anyth": [4, 8, 9, 10], "incur": 4, "ax25kissinterfac": 4, "no1cll": 4, "ttyusb2": 4, "150m": 4, "increas": [4, 9], "squelch": 4, "rx": 4, "turnaround": 4, "kept": [4, 5, 6, 8], "wast": 4, "airtim": 4, "behaviour": [4, 9], "bring": 4, "brought": [4, 9], "valu": [4, 6, 8], "access_point": 4, "shorthand": [4, 9], "ap": 4, "shorter": 4, "expiri": 4, "mostli": [4, 5, 8], "quiet": [4, 9], "momentarili": 4, "disappear": [4, 9], "network_nam": 4, "passphras": [4, 8], "alon": 4, "ifac_s": 4, "customis": 4, "carri": [4, 6, 8, 9], "512": [4, 6, 8], "bit": [4, 6, 8, 9, 10], "announce_cap": [4, 6], "maximum": [4, 6, 8], "alloc": [4, 6, 8, 9], "given": [4, 5, 6, 8, 9], "upkeep": 4, "cap": 4, "queue": [4, 8], "nearbi": 4, "ensur": [4, 6, 8], "overwhelm": [4, 6], "rapidli": 4, "spam": 4, "opposit": 4, "effect": 4, "excess": 4, "benefici": [4, 9], "balanc": 4, "necesarri": 4, "bitrat": 4, "report": [4, 7], "guess": 4, "per": [4, 6, 8, 10], "affect": 4, "strictli": [4, 8], "complex": [4, 8], "left": [4, 6, 8, 9], "gw": 4, "addition": [4, 8], "behalf": 4, "resid": 4, "requestor": 4, "resolv": 4, "chain": 4, "along": [4, 5, 8], "boundari": 4, "remain": [4, 6, 8], "roam": 4, "mobil": [4, 8], "seen": [4, 8], "perspect": [4, 8], "vehicl": 4, "equip": [4, 5, 8], "side": [4, 10], "expir": 4, "significantli": 4, "impact": [4, 8], "announce_rate_target": 4, "announce_rate_grac": 4, "announce_rate_penalti": 4, "basi": [4, 6, 8, 9, 10], "moder": 4, "violat": 4, "enforc": 4, "penalti": 4, "7200": 4, "annouce_cap": 4, "mention": [4, 8], "strategi": [4, 6], "decis": [4, 8], "slower": [4, 6, 8], "hop": [4, 5, 6, 8, 9, 10], "right": [4, 5], "tend": 4, "conserv": 4, "span": [4, 8], "seamlessli": 4, "knowledg": [5, 8], "tradit": [5, 8], "worri": 5, "coordin": [5, 6, 8, 10], "entir": [5, 8, 9], "evolv": 5, "futur": [5, 8], "mind": [5, 10], "autonom": [5, 8], "terminologi": [5, 8], "rest": [5, 10], "billion": [5, 8], "larger": [5, 8], "higher": [5, 10], "issu": [5, 7], "discrimin": 5, "ephemer": [5, 6, 8, 10], "ellipt": [5, 6, 8, 10], "curv": [5, 6, 8, 10], "diffi": [5, 8, 10], "hellman": [5, 8, 10], "exchang": [5, 6, 8, 10], "curve25519": [5, 6, 8, 10], "throttl": 5, "thu": [5, 6, 8], "agnost": [5, 8], "equal": [5, 8], "keystor": 5, "degrad": 5, "term": [5, 8], "stationari": [5, 9], "candid": 5, "optim": 5, "intend": [5, 8], "trustless": [5, 8, 10], "leav": [5, 8], "free": [5, 7, 10], "unorganis": 5, "manner": 5, "properti": [5, 6], "far": [5, 8], "unexplor": 5, "dissolv": 5, "organ": 5, "restrict": 5, "legaci": 5, "unifi": 5, "underli": [5, 10], "carrier": [5, 10], "involv": 5, "hardlin": 5, "decid": [5, 6, 8], "illustr": [5, 8], "plan": [5, 8], "member": 5, "mainli": 5, "three": [5, 8], "hill": 5, "top": [5, 8], "chosen": [5, 8], "due": 5, "sight": 5, "becaus": [5, 8], "four": 5, "At": [5, 8], "raspberri": [5, 8, 9, 10], "usb": [5, 8, 9], "cabl": 5, "adapt": 5, "suppli": [5, 6, 8], "grow": 5, "place": [5, 8, 9], "core": [5, 8, 10], "those": [5, 8], "previous": [5, 6, 8], "d": [5, 9], "island": 5, "investig": 5, "dori": 5, "willing": 5, "she": 5, "her": 5, "home": 5, "newli": [5, 6, 8], "everyon": [5, 8], "vice": [5, 10], "versa": [5, 10], "vhf": [5, 8, 10], "outli": 5, "geograph": 5, "coverag": 5, "dai": 5, "find": [5, 8], "were": 5, "poorli": 5, "outlier": 5, "configdir": 6, "logdest": 6, "exactli": [6, 8], "independ": [6, 8, 10], "inter": 6, "soon": 6, "kill": [6, 8], "forcibli": [6, 9], "advantag": 6, "demand": 6, "mtu": [6, 8, 10], "500": [6, 8, 10], "adher": 6, "507": 6, "break": [6, 8, 10], "prerequisit": 6, "percentag": 6, "schedul": 6, "queu": [6, 9], "fewer": 6, "distant": 6, "smaller": 6, "eventu": 6, "drop": [6, 8, 9], "appli": [6, 8], "individu": [6, 8], "static": 6, "should_use_implicit_proof": 6, "explicit": 6, "implicit": [6, 8], "transport_en": 6, "create_kei": 6, "decrypt": [6, 8], "signatur": [6, 8, 10], "verif": [6, 8], "sign": [6, 8], "dh": 6, "keysiz": 6, "x25519": [6, 8, 10], "concaten": 6, "256": [6, 8], "128": [6, 8, 10], "constant": 6, "truncat": [6, 8], "recall_app_data": 6, "heard": [6, 8], "full_hash": 6, "sha": [6, 8], "truncated_hash": 6, "from_byt": 6, "prv_byte": 6, "save": [6, 8], "hazard": 6, "feed": 6, "from_fil": 6, "to_fil": 6, "Be": [6, 9], "otherwis": 6, "get_private_kei": 6, "get_public_kei": 6, "load_private_kei": 6, "load_public_kei": 6, "pub_byt": 6, "ciphertext": 6, "token": [6, 8], "keyerror": 6, "hold": [6, 8], "ciphertext_token": 6, "presenc": 6, "ingo": 6, "zero": [6, 10], "full_nam": [6, 9], "app_and_aspects_from_nam": 6, "tupl": 6, "hash_from_name_and_ident": 6, "path_respons": 6, "flag": [6, 8], "accepts_link": 6, "accept": [6, 7, 8, 9], "set_proof_requested_callback": 6, "proof_strategi": 6, "prove_non": 6, "prove_app": 6, "proof_requested_callback": 6, "allowed_list": 6, "whatev": [6, 8], "funcion": 6, "allow_non": 6, "allow_list": 6, "deregister_request_handl": 6, "deregist": 6, "symmetr": [6, 8], "typeerror": 6, "incompat": [6, 8], "set_default_app_data": 6, "callabl": 6, "clear_default_app_data": 6, "secreci": [6, 8, 10], "payload": [6, 8], "instanti": 6, "encrypted_mdu": 6, "383": 6, "plain_mdu": 6, "464": 6, "resend": 6, "get_statu": 6, "cull": 6, "successful": 6, "proven": [6, 8], "established_callback": 6, "closed_callback": 6, "establishment_timeout_per_hop": 6, "keepalive_timeout_factor": 6, "4": [6, 8, 9], "calcul": [6, 8], "stale_grac": 6, "grace": 6, "keepal": [6, 8], "360": 6, "aliv": [6, 8], "stale_tim": 6, "720": 6, "mark": [6, 8], "stale": 6, "final": [6, 8], "torn": 6, "progress_callback": 6, "info": [6, 8, 9], "requestreceipt": 6, "no_inbound_for": 6, "no_outbound_for": 6, "outbound": [6, 8], "inactive_for": 6, "purg": 6, "set_resource_callback": 6, "get_transfer_s": 6, "get_data_s": 6, "get_part": 6, "is_compress": 6, "begun": 6, "resource_strategi": 6, "accept_non": 6, "accept_app": 6, "resource_callback": 6, "unsupport": 6, "get_request_id": 6, "get_respons": 6, "get_response_tim": 6, "auto_compress": 6, "arbitrari": [6, 8, 10], "checksum": [6, 10], "Will": 6, "whenev": [6, 8], "cancel": 6, "total": [6, 8, 10], "get_seg": 6, "divid": 6, "get_hash": 6, "pathfinder_m": 6, "object": 6, "attribut": 6, "deregister_announce_handl": 6, "hops_to": 6, "next_hop": 6, "next_hop_interfac": 6, "on_interfac": 6, "tag": 6, "recurs": 6, "gratefulli": 7, "monero": 7, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 7, "ethereum": 7, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 7, "bitcoin": 7, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 7, "ko": 7, "fi": 7, "roadmap": 7, "realiti": 7, "quickli": [7, 8, 10], "sponsor": [7, 10], "dysfunct": 7, "analyt": 7, "telemetri": 7, "collect": 7, "under": [7, 9], "circumst": [7, 8], "reli": [7, 8], "fashion": 7, "u": [7, 8], "suggest": 7, "briefli": 8, "overal": 8, "principl": [8, 10], "author": 8, "That": 8, "said": 8, "document": 8, "pretti": 8, "sentiment": 8, "philosophi": 8, "problem": 8, "seek": 8, "solv": 8, "solut": 8, "primari": 8, "lack": 8, "my": 8, "belief": 8, "highli": 8, "peopl": 8, "machin": 8, "censorship": 8, "barrier": 8, "todai": 8, "centralis": 8, "trust": 8, "approv": 8, "gatekeep": 8, "inevit": 8, "lead": 8, "govern": 8, "alter": 8, "censor": 8, "persecut": 8, "unwant": 8, "actor": 8, "imposs": 8, "freeli": 8, "deploi": 8, "enhanc": 8, "agenc": 8, "freedom": 8, "permissionless": 8, "pick": 8, "ghz": 8, "off": [8, 10], "shelf": [8, 10], "ultim": 8, "vast": 8, "myriad": 8, "thousand": 8, "surveil": 8, "disassoci": 8, "oversight": 8, "beings": 8, "usabl": 8, "useabl": 8, "critic": [8, 9], "agnostic": 8, "shall": 8, "handheld": 8, "stream": 8, "modifi": [8, 9], "interest": 8, "strong": 8, "oneself": 8, "unlicens": 8, "licens": 8, "condit": 8, "pmr": 8, "cb": 8, "wish": [8, 9], "written": 8, "programm": 8, "orient": 8, "multipoint": 8, "recipi": 8, "idea": [8, 9], "singular": 8, "_represented_": 8, "deriv": [6, 8, 10], "characterist": 8, "13425ec15b621c1d928589718000d814": 8, "trade": 8, "accommod": 8, "simultan": 8, "unlik": 8, "nears": 8, "congest": 8, "galact": 8, "scale": 8, "obvious": 8, "ridicul": 8, "multi": [8, 9, 10], "special": [8, 9], "uniqu": [8, 10], "ecdh": [8, 10], "creator": 8, "correspond": 8, "possess": 8, "although": [8, 10], "abstract": 8, "capabl": 8, "dot": [8, 9], "notat": [8, 9], "repres": 8, "plenti": 8, "environment": 8, "monitor": 8, "measur": 8, "environmentlogg": 8, "remotesensor": 8, "temperatur": 8, "4faf1b2e0a077e6a9d92fa051f256038": 8, "advis": 8, "expand": 8, "structur": 8, "recap": 8, "indirectli": 8, "awar": 8, "ledger": 8, "therefor": [8, 10], "definit": 8, "messeng": 8, "nicknam": 8, "ed25519": [8, 10], "reconstruct": 8, "notic": [8, 9], "piec": 8, "intention": 8, "infer": 8, "throughout": 8, "accord": 8, "around": 8, "assign": [8, 9], "topic": 8, "necessarili": 8, "person": 8, "entiti": 8, "robot": 8, "sensor": 8, "someth": 8, "agent": 8, "manipul": 8, "multilater": 8, "creation": 8, "great": 8, "suffic": 8, "cluster": 8, "hear": 8, "But": 8, "introduc": 8, "lot": 8, "surviv": 8, "overcom": 8, "challeng": 8, "asymmetr": [8, 10], "closer": 8, "distinguish": 8, "contend": 8, "enable_transport": [8, 9], "retransmit": 8, "randomis": 8, "prioriti": 8, "invers": 8, "proport": 8, "count": 8, "insert": 8, "closest": 8, "greater": 8, "retri": 8, "newer": 8, "discard": 8, "contact": 8, "shortest": 8, "predict": 8, "constantli": 8, "earlier": 8, "opt": 8, "against": 8, "ae": [6, 8, 10], "neither": 8, "session": 8, "bidirect": 8, "travers": 8, "rememb": 8, "subsequ": 8, "ten": 8, "advanc": 8, "confirm": [8, 10], "insid": 8, "intermediari": 8, "moment": [8, 10], "methodologi": [8, 9], "answer": [8, 9], "malici": 8, "pretend": 8, "recreat": 8, "rotat": 8, "procedur": 8, "memori": 8, "thereaft": 8, "297": [8, 10], "practic": [8, 10], "neglig": 8, "1200": 8, "96": 8, "keypair": 8, "simplic": 8, "explan": [8, 9], "lki": 8, "laid": 8, "had": 8, "construct": 8, "lkr": 8, "chose": 8, "bi": 8, "unequivoc": 8, "retransmiss": 8, "reassembl": 8, "programmat": 8, "satisfi": 8, "half": [8, 10], "duplex": [8, 10], "averag": 8, "throughput": [8, 10], "x": [8, 9], "runtim": 8, "consist": 8, "whereupon": 8, "stabl": [8, 10], "maintain": 8, "year": 8, "microcontrol": 8, "430": 8, "868": 8, "900": 8, "debian": [8, 9], "recent": 8, "mac": 8, "tailor": 8, "treat": 8, "regard": 8, "preshar": 8, "ifac": [8, 9], "onto": 8, "compos": 8, "field": 8, "header": 8, "32": 8, "context": 8, "465": 8, "vari": [8, 9], "64": [8, 9], "00": [8, 9], "01": 8, "reserv": 8, "11": 8, "_______": 8, "________________": 8, "________": 8, "______": 8, "__": 8, "_": 8, "01010000": 8, "00000100": 8, "hash1": 8, "hash2": 8, "header_2": 8, "00000000": 8, "00000111": 8, "header_1": 8, "10000000": 8, "exclud": 8, "51": 8, "157": 8, "83": [8, 9], "115": 8, "99": 8, "conceptu": 8, "x22519": 8, "hkdf": 8, "fernet": [8, 10], "cbc": [8, 10], "hmac": [8, 10], "hashlib": 8, "pkcs7": [8, 10], "pad": [8, 10], "trivial": [8, 10], "consequ": 8, "backend": 8, "loss": 8, "scrutini": 8, "review": [8, 10], "risk": 8, "pose": 8, "driver": [9, 10], "privileg": 9, "light": 9, "weight": 9, "boot": 9, "verbos": 9, "exampleconfig": 9, "ie": 9, "remov": 9, "breviti": 9, "socket": 9, "turn": 9, "share_inst": 9, "shared_instance_port": 9, "37428": 9, "instance_control_port": 9, "37429": 9, "panic": 9, "unrecover": 9, "occur": [9, 10], "panic_on_interface_error": 9, "warn": 9, "6": 9, "debug": 9, "unus": 9, "order": 9, "teach": 9, "task": 9, "v": 9, "show": 9, "ifconfig": 9, "gbp": 9, "13": 9, "kb": 9, "86": 9, "mbp": 9, "63": 9, "23": 9, "80": 9, "17": 9, "tcpinterfac": 9, "unsign": 9, "187": 9, "27": 9, "74": 9, "uhf": [9, 10], "30": 9, "kbp": 9, "e702c42ba8": 9, "49": 9, "9": 9, "5245a8efe1788c6a1cd36144a270e13b": 9, "c89b4da064bf66d280f0e4d8abfd9806": 9, "f53a1c4278e0726bb73fcc623d6ce763": 9, "reticulu": 9, "w": 9, "posit": 9, "probe": 9, "2d03725b327348980d570f739a3a5708": 9, "38": 9, "469": 9, "1726dbad538775b5bf9b0ea25a4079c8": 9, "c50cc4e4f7838b6c31f60ab9032cbc62": 9, "copi": 9, "tgz": 9, "73cbd378bb0286ed11a707c13447bb1": 9, "allowed_hash": 9, "decreas": 9, "auth": 9, "941bed5e228775e5a8079fc38b1ccf3f": 9, "1b03013c25f1c2ca068a4f080b844a10": 9, "7a55144adf826958a9529a3bcf08b149": 9, "cat": 9, "proc": 9, "cpuinfo": 9, "pseudo": 9, "shell": 9, "stderr": 9, "noauth": 9, "noid": 9, "mirror": 9, "max": 9, "perman": 9, "administr": 9, "ubuntu": 9, "ftdi_ft230x_basic_uart_43891ckm": 9, "if00": 9, "port0": 9, "plug": 9, "unplug": 9, "systemd": 9, "usr": 9, "bin": 9, "etc": 9, "execstartpr": 9, "restart": 9, "restartsec": 9, "usernameher": 9, "execstart": 9, "wantedbi": 9, "systemctl": 9, "readili": 10, "unforg": 10, "acknowledg": 10, "resili": 10, "userland": 10, "beta": 10, "bug": 10, "warrant": 10, "sha256": 10, "iv": 10, "urandom": 10, "intuit": 10, "friendli": 10, "44": 10, "gigabyt": 10, "scalabl": 10, "hoc": 10, "optic": 10, "transform": 10, "stop": 10, "fact": 10, "strength": 10, "generalis": 10, "fibr": 10, "popular": 10, "ideal": 10, "stdio": 10, "hack": 10, "foremost": 10, "audit": 10, "privaci": 10, "thorough": 10, "research": 10, "ref": []}, "objects": {"RNS": [[6, 0, 1, "", "Destination"], [6, 0, 1, "", "Identity"], [6, 0, 1, "", "Link"], [6, 0, 1, "", "Packet"], [6, 0, 1, "", "PacketReceipt"], [6, 0, 1, "", "RequestReceipt"], [6, 0, 1, "", "Resource"], [6, 0, 1, "", "Reticulum"], [6, 0, 1, "", "Transport"]], "RNS.Destination": [[6, 1, 1, "", "accepts_links"], [6, 1, 1, "", "announce"], [6, 1, 1, "", "app_and_aspects_from_name"], [6, 1, 1, "", "clear_default_app_data"], [6, 1, 1, "", "create_keys"], [6, 1, 1, "", "decrypt"], [6, 1, 1, "", "deregister_request_handler"], [6, 1, 1, "", "encrypt"], [6, 1, 1, "", "full_name"], [6, 1, 1, "", "get_private_key"], [6, 1, 1, "", "hash"], [6, 1, 1, "", "hash_from_name_and_identity"], [6, 1, 1, "", "load_private_key"], [6, 1, 1, "", "register_request_handler"], [6, 1, 1, "", "set_default_app_data"], [6, 1, 1, "", "set_link_established_callback"], [6, 1, 1, "", "set_packet_callback"], [6, 1, 1, "", "set_proof_requested_callback"], [6, 1, 1, "", "set_proof_strategy"], [6, 1, 1, "", "sign"]], "RNS.Identity": [[6, 2, 1, "", "CURVE"], [6, 2, 1, "", "KEYSIZE"], [6, 2, 1, "", "TRUNCATED_HASHLENGTH"], [6, 1, 1, "", "decrypt"], [6, 1, 1, "", "encrypt"], [6, 1, 1, "", "from_bytes"], [6, 1, 1, "", "from_file"], [6, 1, 1, "", "full_hash"], [6, 1, 1, "", "get_private_key"], [6, 1, 1, "", "get_public_key"], [6, 1, 1, "", "get_random_hash"], [6, 1, 1, "", "load_private_key"], [6, 1, 1, "", "load_public_key"], [6, 1, 1, "", "recall"], [6, 1, 1, "", "recall_app_data"], [6, 1, 1, "", "sign"], [6, 1, 1, "", "to_file"], [6, 1, 1, "", "truncated_hash"], [6, 1, 1, "", "validate"]], "RNS.Link": [[6, 2, 1, "", "CURVE"], [6, 2, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [6, 2, 1, "", "KEEPALIVE"], [6, 2, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [6, 2, 1, "", "STALE_GRACE"], [6, 2, 1, "", "STALE_TIME"], [6, 1, 1, "", "get_remote_identity"], [6, 1, 1, "", "identify"], [6, 1, 1, "", "inactive_for"], [6, 1, 1, "", "no_inbound_for"], [6, 1, 1, "", "no_outbound_for"], [6, 1, 1, "", "request"], [6, 1, 1, "", "set_link_closed_callback"], [6, 1, 1, "", "set_packet_callback"], [6, 1, 1, "", "set_remote_identified_callback"], [6, 1, 1, "", "set_resource_callback"], [6, 1, 1, "", "set_resource_concluded_callback"], [6, 1, 1, "", "set_resource_started_callback"], [6, 1, 1, "", "set_resource_strategy"], [6, 1, 1, "", "teardown"]], "RNS.Packet": [[6, 2, 1, "", "ENCRYPTED_MDU"], [6, 2, 1, "", "PLAIN_MDU"], [6, 1, 1, "", "resend"], [6, 1, 1, "", "send"]], "RNS.PacketReceipt": [[6, 1, 1, "", "get_rtt"], [6, 1, 1, "", "get_status"], [6, 1, 1, "", "set_delivery_callback"], [6, 1, 1, "", "set_timeout"], [6, 1, 1, "", "set_timeout_callback"]], "RNS.RequestReceipt": [[6, 1, 1, "", "get_progress"], [6, 1, 1, "", "get_request_id"], [6, 1, 1, "", "get_response"], [6, 1, 1, "", "get_response_time"], [6, 1, 1, "", "get_status"]], "RNS.Resource": [[6, 1, 1, "", "advertise"], [6, 1, 1, "", "cancel"], [6, 1, 1, "", "get_data_size"], [6, 1, 1, "", "get_hash"], [6, 1, 1, "", "get_parts"], [6, 1, 1, "", "get_progress"], [6, 1, 1, "", "get_segments"], [6, 1, 1, "", "get_transfer_size"], [6, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[6, 2, 1, "", "ANNOUNCE_CAP"], [6, 2, 1, "", "MTU"], [6, 1, 1, "", "should_use_implicit_proof"], [6, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[6, 2, 1, "", "PATHFINDER_M"], [6, 1, 1, "", "deregister_announce_handler"], [6, 1, 1, "", "has_path"], [6, 1, 1, "", "hops_to"], [6, 1, 1, "", "next_hop"], [6, 1, 1, "", "next_hop_interface"], [6, 1, 1, "", "register_announce_handler"], [6, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 7, 8], "exampl": [0, 5], "minim": 0, "announc": [0, 4, 8], "broadcast": 0, "echo": 0, "link": [0, 6, 8], "identif": 0, "request": [0, 6], "respons": 0, "filetransf": 0, "get": [1, 8], "start": 1, "fast": 1, "try": 1, "us": [1, 9, 10], "reticulum": [1, 2, 3, 6, 7, 8, 9, 10], "base": [1, 2], "program": [1, 9], "nomad": 1, "network": [1, 3, 5], "sideband": 1, "includ": [1, 9], "util": [1, 9], "creat": [1, 2], "With": 1, "connect": 1, "instanc": 1, "over": [1, 5], "internet": [1, 5], "public": [1, 8], "testnet": 1, "ad": 1, "radio": 1, "interfac": [1, 4, 8, 10], "develop": 1, "particip": 1, "arm64": 1, "android": 1, "pure": 1, "python": 1, "commun": 2, "hardwar": 2, "rnode": [2, 4], "support": [2, 4, 7], "board": 2, "lilygo": 2, "lora32": 2, "v2": 2, "1": 2, "0": 2, "t": 2, "beam": 2, "heltec": 2, "unsign": 2, "x": 2, "v1": 2, "instal": 2, "usag": 2, "supplier": 2, "wifi": 2, "combin": 2, "type": [2, 8, 10], "stack": 3, "manual": 3, "indic": 3, "tabl": 3, "auto": 4, "i2p": 4, "tcp": 4, "server": 4, "client": 4, "udp": 4, "lora": [4, 5], "serial": [4, 9], "pipe": 4, "kiss": 4, "ax": 4, "25": 4, "common": 4, "option": 4, "mode": 4, "rate": 4, "control": 4, "build": 5, "concept": 5, "overview": 5, "scenario": 5, "interconnect": 5, "site": 5, "bridg": 5, "growth": 5, "converg": 5, "api": 6, "refer": [6, 8], "class": 6, "ident": [6, 8], "destin": [6, 8], "packet": [6, 8], "receipt": 6, "resourc": [6, 8], "transport": [6, 8], "donat": 7, "provid": 7, "feedback": 7, "contribut": 7, "understand": 8, "motiv": 8, "goal": 8, "introduct": 8, "basic": 8, "function": 8, "name": [8, 9], "kei": 8, "further": 8, "node": 8, "The": [8, 9], "mechan": 8, "detail": 8, "reach": 8, "establish": 8, "setup": 8, "protocol": 8, "specif": 8, "prioritis": 8, "access": 8, "wire": 8, "format": 8, "propag": 8, "rule": 8, "cryptograph": 8, "primit": 8, "your": 9, "system": 9, "configur": 9, "data": 9, "rnsd": 9, "rnstatu": 9, "rnpath": 9, "rnprobe": 9, "rncp": 9, "rnx": 9, "improv": 9, "fix": 9, "port": 9, "servic": 9, "what": 10, "i": 10, "current": 10, "statu": 10, "doe": 10, "offer": 10, "where": 10, "can": 10, "devic": 10, "caveat": 10, "emptor": 10}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"], [6, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Filetransfer": [[0, "filetransfer"]], "Getting Started Fast": [[1, "getting-started-fast"]], "Try Using a Reticulum-based Program": [[1, "try-using-a-reticulum-based-program"]], "Nomad Network": [[1, "nomad-network"]], "Sideband": [[1, "sideband"]], "Using the Included Utilities": [[1, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[1, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[1, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[1, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[1, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[1, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[1, "participate-in-reticulum-development"]], "Reticulum on ARM64": [[1, "reticulum-on-arm64"]], "Reticulum on Android": [[1, "reticulum-on-android"]], "Pure-Python Reticulum": [[1, "pure-python-reticulum"]], "Communications Hardware": [[2, "communications-hardware"]], "RNode": [[2, "rnode"]], "Creating RNodes": [[2, "creating-rnodes"]], "Supported Boards": [[2, "supported-boards"]], "LilyGO LoRa32 v2.1": [[2, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[2, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[2, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[2, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[2, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[2, "unsigned-rnode-v1-x"]], "Installation": [[2, "installation"]], "Usage with Reticulum": [[2, "usage-with-reticulum"]], "Suppliers": [[2, "suppliers"]], "WiFi-based Hardware": [[2, "wifi-based-hardware"]], "Combining Hardware Types": [[2, "combining-hardware-types"]], "Reticulum Network Stack Manual": [[3, "reticulum-network-stack-manual"]], "Indices and Tables": [[3, "indices-and-tables"]], "Supported Interfaces": [[4, "supported-interfaces"]], "Auto Interface": [[4, "auto-interface"]], "I2P Interface": [[4, "i2p-interface"]], "TCP Server Interface": [[4, "tcp-server-interface"]], "TCP Client Interface": [[4, "tcp-client-interface"]], "UDP Interface": [[4, "udp-interface"]], "RNode LoRa Interface": [[4, "rnode-lora-interface"]], "Serial Interface": [[4, "serial-interface"]], "Pipe Interface": [[4, "pipe-interface"]], "KISS Interface": [[4, "kiss-interface"]], "AX.25 KISS Interface": [[4, "ax-25-kiss-interface"]], "Common Interface Options": [[4, "common-interface-options"]], "Interface Modes": [[4, "interface-modes"]], "Announce Rate Control": [[4, "announce-rate-control"]], "Building Networks": [[5, "building-networks"]], "Concepts & Overview": [[5, "concepts-overview"]], "Example Scenarios": [[5, "example-scenarios"]], "Interconnected LoRa Sites": [[5, "interconnected-lora-sites"]], "Bridging Over the Internet": [[5, "bridging-over-the-internet"]], "Growth and Convergence": [[5, "growth-and-convergence"]], "Support Reticulum": [[7, "support-reticulum"]], "Donations": [[7, "donations"]], "Provide Feedback": [[7, "provide-feedback"]], "Contribute Code": [[7, "contribute-code"]], "Using Reticulum on Your System": [[9, "using-reticulum-on-your-system"]], "Configuration & Data": [[9, "configuration-data"]], "Included Utility Programs": [[9, "included-utility-programs"]], "The rnsd Utility": [[9, "the-rnsd-utility"]], "The rnstatus Utility": [[9, "the-rnstatus-utility"]], "The rnpath Utility": [[9, "the-rnpath-utility"]], "The rnprobe Utility": [[9, "the-rnprobe-utility"]], "The rncp Utility": [[9, "the-rncp-utility"]], "The rnx Utility": [[9, "the-rnx-utility"]], "Improving System Configuration": [[9, "improving-system-configuration"]], "Fixed Serial Port Names": [[9, "fixed-serial-port-names"]], "Reticulum as a System Service": [[9, "reticulum-as-a-system-service"]], "What is Reticulum?": [[10, "what-is-reticulum"]], "Current Status": [[10, "current-status"]], "What does Reticulum Offer?": [[10, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[10, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[10, "interface-types-and-devices"]], "Caveat Emptor": [[10, "caveat-emptor"]], "Understanding Reticulum": [[8, "understanding-reticulum"]], "Motivation": [[8, "motivation"]], "Goals": [[8, "goals"]], "Introduction & Basic Functionality": [[8, "introduction-basic-functionality"]], "Destinations": [[8, "destinations"]], "Destination Naming": [[8, "destination-naming"]], "Public Key Announcements": [[8, "public-key-announcements"]], "Identities": [[8, "understanding-identities"]], "Getting Further": [[8, "getting-further"]], "Reticulum Transport": [[8, "reticulum-transport"]], "Node Types": [[8, "node-types"]], "The Announce Mechanism in Detail": [[8, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[8, "reaching-the-destination"]], "Link Establishment in Detail": [[8, "link-establishment-in-detail"]], "Resources": [[8, "resources"]], "Reference Setup": [[8, "reference-setup"]], "Protocol Specifics": [[8, "protocol-specifics"]], "Packet Prioritisation": [[8, "packet-prioritisation"]], "Interface Access Codes": [[8, "interface-access-codes"]], "Wire Format": [[8, "wire-format"]], "Announce Propagation Rules": [[8, "announce-propagation-rules"]], "Cryptographic Primitives": [[8, "cryptographic-primitives"]], "API Reference": [[6, "api-reference"]], "Classes": [[6, "classes"]], "Reticulum": [[6, "reticulum"]], "Identity": [[6, "api-identity"]], "Destination": [[6, "destination"]], "Packet": [[6, "packet"]], "Packet Receipt": [[6, "packet-receipt"]], "Request Receipt": [[6, "request-receipt"]], "Resource": [[6, "resource"]], "Transport": [[6, "transport"]]}, "indexentries": {"announce_cap (rns.reticulum attribute)": [[6, "RNS.Reticulum.ANNOUNCE_CAP"]], "curve (rns.identity attribute)": [[6, "RNS.Identity.CURVE"]], "curve (rns.link attribute)": [[6, "RNS.Link.CURVE"]], "destination (class in rns)": [[6, "RNS.Destination"]], "encrypted_mdu (rns.packet attribute)": [[6, "RNS.Packet.ENCRYPTED_MDU"]], "establishment_timeout_per_hop (rns.link attribute)": [[6, "RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP"]], "identity (class in rns)": [[6, "RNS.Identity"]], "keepalive (rns.link attribute)": [[6, "RNS.Link.KEEPALIVE"]], "keepalive_timeout_factor (rns.link attribute)": [[6, "RNS.Link.KEEPALIVE_TIMEOUT_FACTOR"]], "keysize (rns.identity attribute)": [[6, "RNS.Identity.KEYSIZE"]], "link (class in rns)": [[6, "RNS.Link"]], "mtu (rns.reticulum attribute)": [[6, "RNS.Reticulum.MTU"]], "pathfinder_m (rns.transport attribute)": [[6, "RNS.Transport.PATHFINDER_M"]], "plain_mdu (rns.packet attribute)": [[6, "RNS.Packet.PLAIN_MDU"]], "packet (class in rns)": [[6, "RNS.Packet"]], "packetreceipt (class in rns)": [[6, "RNS.PacketReceipt"]], "requestreceipt (class in rns)": [[6, "RNS.RequestReceipt"]], "resource (class in rns)": [[6, "RNS.Resource"]], "reticulum (class in rns)": [[6, "RNS.Reticulum"]], "stale_grace (rns.link attribute)": [[6, "RNS.Link.STALE_GRACE"]], "stale_time (rns.link attribute)": [[6, "RNS.Link.STALE_TIME"]], "truncated_hashlength (rns.identity attribute)": [[6, "RNS.Identity.TRUNCATED_HASHLENGTH"]], "transport (class in rns)": [[6, "RNS.Transport"]], "accepts_links() (rns.destination method)": [[6, "RNS.Destination.accepts_links"]], "advertise() (rns.resource method)": [[6, "RNS.Resource.advertise"]], "announce() (rns.destination method)": [[6, "RNS.Destination.announce"]], "app_and_aspects_from_name() (rns.destination static method)": [[6, "RNS.Destination.app_and_aspects_from_name"]], "cancel() (rns.resource method)": [[6, "RNS.Resource.cancel"]], "clear_default_app_data() (rns.destination method)": [[6, "RNS.Destination.clear_default_app_data"]], "create_keys() (rns.destination method)": [[6, "RNS.Destination.create_keys"]], "decrypt() (rns.destination method)": [[6, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[6, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[6, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[6, "RNS.Destination.deregister_request_handler"]], "encrypt() (rns.destination method)": [[6, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[6, "RNS.Identity.encrypt"]], "from_bytes() (rns.identity static method)": [[6, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[6, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[6, "RNS.Identity.full_hash"]], "full_name() (rns.destination static method)": [[6, "RNS.Destination.full_name"]], "get_data_size() (rns.resource method)": [[6, "RNS.Resource.get_data_size"]], "get_hash() (rns.resource method)": [[6, "RNS.Resource.get_hash"]], "get_parts() (rns.resource method)": [[6, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[6, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[6, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[6, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[6, "RNS.Identity.get_public_key"]], "get_random_hash() (rns.identity static method)": [[6, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[6, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_response_time"]], "get_rtt() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[6, "RNS.Resource.get_segments"]], "get_status() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[6, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[6, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[6, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[6, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[6, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[6, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[6, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[6, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[6, "RNS.Resource.is_compressed"]], "load_private_key() (rns.destination method)": [[6, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[6, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[6, "RNS.Identity.load_public_key"]], "next_hop() (rns.transport static method)": [[6, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[6, "RNS.Transport.next_hop_interface"]], "no_inbound_for() (rns.link method)": [[6, "RNS.Link.no_inbound_for"]], "no_outbound_for() (rns.link method)": [[6, "RNS.Link.no_outbound_for"]], "recall() (rns.identity static method)": [[6, "RNS.Identity.recall"]], "recall_app_data() (rns.identity static method)": [[6, "RNS.Identity.recall_app_data"]], "register_announce_handler() (rns.transport static method)": [[6, "RNS.Transport.register_announce_handler"]], "register_request_handler() (rns.destination method)": [[6, "RNS.Destination.register_request_handler"]], "request() (rns.link method)": [[6, "RNS.Link.request"]], "request_path() (rns.transport static method)": [[6, "RNS.Transport.request_path"]], "resend() (rns.packet method)": [[6, "RNS.Packet.resend"]], "send() (rns.packet method)": [[6, "RNS.Packet.send"]], "set_default_app_data() (rns.destination method)": [[6, "RNS.Destination.set_default_app_data"]], "set_delivery_callback() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.set_delivery_callback"]], "set_link_closed_callback() (rns.link method)": [[6, "RNS.Link.set_link_closed_callback"]], "set_link_established_callback() (rns.destination method)": [[6, "RNS.Destination.set_link_established_callback"]], "set_packet_callback() (rns.destination method)": [[6, "RNS.Destination.set_packet_callback"]], "set_packet_callback() (rns.link method)": [[6, "RNS.Link.set_packet_callback"]], "set_proof_requested_callback() (rns.destination method)": [[6, "RNS.Destination.set_proof_requested_callback"]], "set_proof_strategy() (rns.destination method)": [[6, "RNS.Destination.set_proof_strategy"]], "set_remote_identified_callback() (rns.link method)": [[6, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[6, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[6, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[6, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[6, "RNS.Link.set_resource_strategy"]], "set_timeout() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[6, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[6, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[6, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[6, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[6, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[6, "RNS.Identity.to_file"]], "transport_enabled() (rns.reticulum static method)": [[6, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[6, "RNS.Identity.truncated_hash"]], "validate() (rns.identity method)": [[6, "RNS.Identity.validate"]]}}) \ No newline at end of file