From 06092512701ee3470d85b3f3968bbb226fa1ea4d Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Sat, 14 Jan 2023 20:51:17 +0100 Subject: [PATCH] Updated manual --- docs/Reticulum Manual.pdf | Bin 2331456 -> 2331551 bytes docs/manual/_images/sideband_1.png | Bin 64154 -> 0 bytes docs/manual/_sources/using.rst.txt | 2 ++ docs/manual/searchindex.js | 2 +- docs/manual/using.html | 2 ++ 5 files changed, 5 insertions(+), 1 deletion(-) delete mode 100644 docs/manual/_images/sideband_1.png diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index c13735266cf4cd13e066fd3ebf95d3ebfe8860ca..7a70cc6fc0221749637cfbc12da12b8354298470 100644 GIT binary patch delta 8635 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 diff --git a/docs/manual/_sources/using.rst.txt b/docs/manual/_sources/using.rst.txt index 2055ca4..bfc683e 100644 --- a/docs/manual/_sources/using.rst.txt +++ b/docs/manual/_sources/using.rst.txt @@ -450,6 +450,8 @@ to create and provision new :ref:`RNodes` from any supported hardwar -U, --force-update Update to specified firmware even if version matches or is older than installed version --fw-version version Use a specific firmware version for update or autoinstall --nocheck Don't check for firmware updates online + -e, --extract Extract firmware from connected RNode for later use + -E, --use-extracted Use the extracted firmware for autoinstallation or update -C, --clear-cache Clear locally cached firmware files -N, --normal Switch device to normal mode -T, --tnc Switch device to TNC mode diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 2a6fd35..e874906 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, 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, 6], "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, 9, 10], "write": [0, 1, 4, 6, 8], "your": [0, 1, 2, 3, 4, 5, 7, 8, 10], "own": [0, 1, 5, 6, 8, 9, 10], "program": [0, 2, 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, 9, 10], "have": [0, 1, 2, 4, 5, 6, 8, 9], "stack": [0, 1, 5, 6, 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, 2, 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, 6, 9], "let": [0, 1, 4, 5, 8, 9], "user": [0, 1, 4, 5, 8, 9, 10], "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, 9], "them": [0, 1, 2, 4, 5, 7, 8, 9, 10], "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, 6, 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, 10], "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, 1, 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, 6, 9, 10], "adress": [0, 6, 8], "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, 10], "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, 9], "quit": 0, "until": [0, 1, 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, 9], "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, 5, 9], "action": 0, "store": [0, 2, 8, 9], "default": [0, 1, 2, 4, 5, 6, 8, 9], "none": [0, 1, 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, 10], "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, 1, 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, 6, 9, 10], "register_announce_handl": [0, 6], "select": [0, 4], "randint": 0, "0": [0, 1, 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, 5, 6, 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, 9], "specif": [0, 2, 3, 4, 6, 9, 10], "cannot": [0, 1, 10], "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, 1, 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, 6, 8, 9, 10], "respond": [0, 6], "receipt": [0, 6, 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, 9], "read": [0, 1, 4, 6, 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, 9], "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, 9], "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, 3, 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, 1, 8, 9, 10], "refer": [0, 1, 3], "latest": [0, 1, 4, 9], "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, 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, 6, 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, 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, 1, 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, 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, 9, 10], "after": [0, 1, 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, 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, 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, 9], "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, 9], "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, 9], "small": [0, 4, 5, 8, 10], "job": 0, "potenti": [0, 4, 7, 8, 9, 10], "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, 3, 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, 9], "cl": 0, "nt": 0, "dir": 0, "best": [1, 8, 10], "depend": [1, 2, 5, 6, 8, 9], "guid": [1, 2, 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, 4, 5, 8, 9, 10], "extrem": [1, 8, 9, 10], "low": [1, 2, 4, 5, 8, 10], "bandwidth": [1, 4, 5, 6, 8, 9, 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": [3, 4, 5, 8, 9, 10], "via": [1, 2, 4, 7, 8, 9, 10], "pip": [1, 2, 9], "pip3": [1, 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": [], "stage": 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, 10], "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, 6, 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, 6, 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, 10], "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, 9], "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, 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, 9, 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, 9], "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, 6, 10], "slightli": 1, "experiment": [1, 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, 7, 10], "usag": [1, 3, 4, 6, 7, 9], "occasion": 1, "test": [1, 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, 9], "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, 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, 9], "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": [], "filetransf": [1, 3, 6], "understand": [1, 3, 6, 9], "submit": 1, "pull": 1, "request": [1, 3, 4, 6, 8, 9], "good": [1, 2, 5, 8, 9], "idea": [1, 8, 9], "introduc": [1, 8], "disucss": 1, "forum": 1, "maintain": [1, 8], "place": [1, 5, 8, 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": [2, 9], "pre": [6, 8], "wheel": 1, "standard": [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, 9, 10], "apk": 1, "tutori": 1, "code": [1, 2, 3, 4, 9], "startig": 1, "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], "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": [1, 2, 6], "allevi": 2, "particular": 2, "plaform": 2, "its": [2, 4, 6, 8], "compon": [2, 7, 8], "frequenc": [2, 4, 8, 9], "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, 6, 7, 8, 10], "boil": 2, "obtain": [2, 8], "autom": [2, 7, 8], "provis": [2, 9], "rnodeinterfac": [2, 4, 9], "ic": 2, "semtech": 2, "sx1276": 2, "esp32": 2, "manufactur": 2, "avr": 2, "atmega1284p": 2, "rnodeconf": [2, 3], "autoinstal": [2, 9], "seri": 2, "question": [2, 4], "paramet": [2, 4, 5, 6, 8, 9], "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, 9, 10], "bridg": [2, 3], "behav": 2, "mean": [2, 4, 5, 8, 9], "link": [1, 2, 3, 4, 5, 6, 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, 6, 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], "identif": [3, 4, 10], "respons": [3, 6, 8], "donat": 3, "contribut": 3, "requestreceipt": [3, 6], "search": 3, "distinct": [4, 8], "topologi": [4, 8], "less": [4, 8, 10], "endless": 4, "describ": [4, 6, 8], "give": [4, 8, 9], "respect": [4, 10], "discover": 4, "autoconfigur": [4, 10], "ipv6": [4, 9], "router": [4, 9], "sort": [4, 8], "switch": [4, 8, 9], "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, 9], "7": [4, 8, 9], "mw": 4, "txpower": 4, "spread": [4, 9], "factor": [4, 6, 9], "12": [4, 9], "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, 9], "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": [1, 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": [1, 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": [1, 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, 10], "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, 6, 8], "boundari": 4, "remain": [4, 6, 8], "roam": 4, "mobil": [4, 8], "seen": [4, 8], "perspect": [4, 6, 8, 10], "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, 6, 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": [3, 5, 8, 9, 10], "usb": [5, 8, 9], "cabl": 5, "adapt": 5, "suppli": [5, 6, 8], "grow": 5, "core": [5, 8, 9, 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, "signatur": [6, 8, 10], "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, 10], "static": 6, "should_use_implicit_proof": 6, "explicit": 6, "implicit": [6, 8], "transport_en": 6, "create_kei": 6, "decrypt": [6, 8], "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], "expand_nam": 6, "app_and_aspects_from_nam": 6, "full_nam": [6, 9], "tupl": 6, "hash_from_name_and_ident": 6, "path_respons": 6, "attached_interfac": 6, "tag": 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, "allow_non": 6, "allowed_list": 6, "whatev": [6, 8], "funcion": 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, "ae": [6, 8, 10], "deriv": [6, 8, 10], "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": [1, 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], "consid": [6, 8, 10], "torn": 6, "progress_callback": 6, "info": [6, 8, 9], "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, 9, 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, "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, 10], "circumst": [7, 8], "reli": [7, 8], "fashion": 7, "u": [7, 8, 9], "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": [1, 8], "machin": 8, "censorship": [8, 10], "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, 9, 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, 10], "pmr": 8, "cb": 8, "wish": [8, 9], "written": 8, "programm": 8, "orient": 8, "multipoint": 8, "recipi": 8, "singular": 8, "_represented_": 8, "characterist": 8, "13425ec15b621c1d928589718000d814": 8, "trade": 8, "accommod": 8, "simultan": 8, "unlik": 8, "nears": 8, "congest": 8, "galact": 8, "scale": [8, 10], "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, 10], "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, 10], "multilater": 8, "creation": [8, 10], "great": 8, "suffic": 8, "cluster": 8, "hear": 8, "But": 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, "newest": 8, "discard": 8, "contact": 8, "shortest": 8, "predict": 8, "constantli": 8, "earlier": 8, "opt": 8, "against": 8, "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, 10], "lkr": 8, "chose": 8, "bi": 8, "direction": 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], "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], "version": [1, 8, 9], "onto": 8, "compos": 8, "field": 8, "header": 8, "32": [1, 8], "context": 8, "465": 8, "vari": [8, 9], "64": [1, 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, "167": 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, "etc": 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": [1, 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, "execstartpr": 9, "restart": 9, "restartsec": 9, "usernameher": 9, "execstart": 9, "wantedbi": 9, "systemctl": 9, "readili": 10, "advers": 10, "unforg": 10, "acknowledg": 10, "empow": 10, "autonomi": 10, "sovereignti": 10, "subject": 10, "outsid": 10, "planetari": 10, "hierarch": 10, "beaureucrat": 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, "174a64852a75682259ad8b921b8bf416": 1, "qr": 1, "paper": 1, "pamac": 1, "dowload": 1, "py3": 1, "whl": 1, "standalon": 3, "fw": 9, "nocheck": 9, "freq": 9, "hz": 9, "bw": 9, "txp": 9, "sf": 9, "cr": 9, "eeprom": 9, "backup": 9, "dump": 9, "wipe": 9, "flash": 9, "attach": 9, "forc": 9, "older": 9, "onlin": 9, "cach": 9, "bluetooth": 9, "consol": 9, "unlock": 9}, "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, "", "expand_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, 8], "identif": 0, "request": 0, "respons": 0, "filetransf": 0, "get": [1, 8], "start": 1, "fast": 1, "try": 1, "us": [1, 9, 10], "reticulum": [1, 2, 3, 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": [1, 2], "usag": 2, "supplier": 2, "wifi": 2, "combin": 2, "type": [2, 8, 10], "stack": 3, "manual": 3, "tabl": 3, "Of": 3, "content": 3, "indic": 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], "donat": 7, "provid": 7, "feedback": 7, "contribut": 7, "understand": 8, "motiv": 8, "goal": 8, "introduct": 8, "basic": 8, "function": 8, "destin": 8, "name": [8, 9], "kei": 8, "ident": 8, "further": 8, "transport": 8, "node": 8, "The": [8, 9], "mechan": 8, "detail": 8, "reach": 8, "establish": 8, "resourc": 8, "setup": 8, "protocol": 8, "specif": 8, "packet": 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, "raspberri": 1, "pi": 1, "standalon": 1, "rnodeconf": 9}, "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"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Filetransfer": [[0, "filetransfer"]], "Getting Started Fast": [[1, "getting-started-fast"]], "Standalone Reticulum Installation": [[1, "standalone-reticulum-installation"]], "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 Raspberry Pi": [[1, "reticulum-on-raspberry-pi"]], "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"]], "Table Of Contents": [[3, "table-of-contents"]], "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"]], "API Reference": [[6, "api-reference"]], "Support Reticulum": [[7, "support-reticulum"]], "Donations": [[7, "donations"]], "Provide Feedback": [[7, "provide-feedback"]], "Contribute Code": [[7, "contribute-code"]], "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"]], "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"]], "The rnodeconf Utility": [[9, "the-rnodeconf-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"]]}, "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"]], "expand_name() (rns.destination static method)": [[6, "RNS.Destination.expand_name"]], "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"]], "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, 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, 6], "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, 9, 10], "write": [0, 1, 4, 6, 8], "your": [0, 1, 2, 3, 4, 5, 7, 8, 10], "own": [0, 1, 5, 6, 8, 9, 10], "program": [0, 2, 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, 9, 10], "have": [0, 1, 2, 4, 5, 6, 8, 9], "stack": [0, 1, 5, 6, 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, 2, 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, 6, 9], "let": [0, 1, 4, 5, 8, 9], "user": [0, 1, 4, 5, 8, 9, 10], "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, 9], "them": [0, 1, 2, 4, 5, 7, 8, 9, 10], "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, 6, 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, 10], "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, 1, 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, 6, 9, 10], "adress": [0, 6, 8], "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, 10], "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, 9], "quit": 0, "until": [0, 1, 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, 9], "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, 5, 9], "action": 0, "store": [0, 2, 8, 9], "default": [0, 1, 2, 4, 5, 6, 8, 9], "none": [0, 1, 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, 10], "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, 1, 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, 6, 9, 10], "register_announce_handl": [0, 6], "select": [0, 4], "randint": 0, "0": [0, 1, 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, 5, 6, 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, 9], "specif": [0, 2, 3, 4, 6, 9, 10], "cannot": [0, 1, 10], "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, 1, 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, 6, 8, 9, 10], "respond": [0, 6], "receipt": [0, 6, 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, 9], "read": [0, 1, 4, 6, 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, 9], "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, 9], "check": [0, 1, 6, 8, 9], "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, 3, 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, 1, 8, 9, 10], "refer": [0, 1, 3], "latest": [0, 1, 4, 9], "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, 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, 9], "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, 6, 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, 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, 1, 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, 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, 9, 10], "after": [0, 1, 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, 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, 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, 9], "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, 9], "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, 9], "small": [0, 4, 5, 8, 10], "job": 0, "potenti": [0, 4, 7, 8, 9, 10], "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, 3, 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, 9], "cl": 0, "nt": 0, "dir": 0, "best": [1, 8, 10], "depend": [1, 2, 5, 6, 8, 9], "guid": [1, 2, 8], "outlin": [1, 2, 8], "sensibl": [1, 2], "scenario": [1, 3, 8], "relat": 1, "easiest": [1, 2, 4, 8], "via": [1, 2, 4, 7, 8, 9, 10], "pip": [1, 2, 9], "packag": [1, 4, 8], "manag": [1, 5, 6, 8, 9, 10], "like": [1, 2, 4, 5, 6, 8, 9, 10], "sudo": [1, 9], "apt": 1, "python3": [1, 2], "pamac": 1, "similar": [1, 2, 4, 5, 9, 10], "dowload": 1, "releas": [1, 4, 8], "wheel": 1, "other": [1, 2, 4, 5, 6, 8, 9], "offlin": 1, "4": [1, 6, 8, 9], "6": [1, 9], "py3": 1, "whl": 1, "built": [1, 4, 8, 10], "few": [1, 2, 4, 5, 8, 9, 10], "even": [1, 4, 5, 8, 9, 10], "extrem": [1, 8, 9, 10], "low": [1, 2, 4, 5, 8, 10], "bandwidth": [1, 4, 5, 6, 8, 9, 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], "link": [1, 2, 3, 4, 5, 6, 9, 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], "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, "nomadnet": 1, "veri": [1, 2, 4, 5, 6, 7, 8, 9, 10], "might": [1, 4, 5, 8, 9], "reboot": 1, "again": [1, 4, 8, 9], "would": [1, 4, 5, 6, 8], "rather": 1, "graphic": 1, "linux": [1, 8], "maco": 1, "peopl": [1, 8], "compat": [1, 2, 4, 6, 8], "i2p": [1, 3, 10], "qr": 1, "paper": 1, "anyth": [1, 4, 8, 9, 10], "interoper": [1, 2, 5, 8, 10], "come": [1, 8], "make": [1, 2, 4, 7, 8, 9], "easier": [1, 4, 5, 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, 6, 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, 6, 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, 10], "wider": [1, 4, 8, 9], "autointerfac": [1, 2, 4, 9], "possibli": 1, "offer": [1, 3, 4, 6, 8], "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, 9], "someon": [1, 4], "determin": [1, 6, 8], "adversari": 1, "mai": [1, 4, 6, 8, 9], "record": [1, 8], "metadata": 1, "transmiss": [1, 4, 6, 8], "though": [1, 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, 9, 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, 9], "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, 6, 10], "slightli": 1, "experiment": [1, 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, 7, 10], "usag": [1, 3, 4, 6, 7, 9], "occasion": 1, "test": [1, 8], "failur": [1, 4], "guarante": [1, 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, 9], "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, "pip3": [1, 9], "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, 9], "folder": 1, "symlink": [1, 9], "librari": 1, "cd": 1, "ln": [1, 9], "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], "174a64852a75682259ad8b921b8bf416": 1, "filetransf": [1, 3, 6], "understand": [1, 3, 6, 9], "submit": 1, "pull": 1, "request": [1, 3, 4, 6, 8, 9], "good": [1, 2, 5, 8, 9], "idea": [1, 8, 9], "introduc": [1, 8], "disucss": 1, "forum": 1, "maintain": [1, 8], "place": [1, 5, 8, 9], "architectur": 1, "precompil": 1, "dev": [1, 4, 9], "64": [1, 8, 9], "bit": [1, 4, 6, 8, 9, 10], "version": [1, 8, 9], "32": [1, 8], "termux": 1, "f": 1, "droid": 1, "emul": 1, "environ": [1, 5, 8], "abil": [1, 2], "pkg": 1, "sure": [1, 2, 9], "upgrad": [1, 8], "Then": 1, "reason": [1, 4, 8], "platform": [1, 2, 8], "attempt": [1, 2, 6], "essenti": [1, 4, 8], "openssl": [1, 8], "libffi": 1, "rust": 1, "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, 9, 10], "apk": 1, "tutori": 1, "code": [1, 2, 3, 4, 9], "startig": 1, "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], "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, "allevi": 2, "particular": 2, "plaform": 2, "its": [2, 4, 6, 8], "compon": [2, 7, 8], "frequenc": [2, 4, 8, 9], "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], "standard": [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, 6, 7, 8, 10], "boil": 2, "obtain": [2, 8], "autom": [2, 7, 8], "provis": [2, 9], "rnodeinterfac": [2, 4, 9], "ic": 2, "semtech": 2, "sx1276": 2, "esp32": 2, "manufactur": 2, "io": [2, 9], "avr": 2, "atmega1284p": 2, "rnodeconf": [2, 3], "autoinstal": [2, 9], "seri": 2, "question": [2, 4], "paramet": [2, 4, 5, 6, 8, 9], "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, 9, 10], "bridg": [2, 3], "behav": 2, "mean": [2, 4, 5, 8, 9], "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, 6, 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], "standalon": 3, "instal": [3, 4, 5, 8, 9, 10], "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, "raspberri": [3, 5, 8, 9, 10], "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], "identif": [3, 4, 10], "respons": [3, 6, 8], "donat": 3, "contribut": 3, "requestreceipt": [3, 6], "search": 3, "distinct": [4, 8], "topologi": [4, 8], "less": [4, 8, 10], "endless": 4, "describ": [4, 6, 8], "give": [4, 8, 9], "respect": [4, 10], "discover": 4, "autoconfigur": [4, 10], "ipv6": [4, 9], "router": [4, 9], "sort": [4, 8], "switch": [4, 8, 9], "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, 9], "7": [4, 8, 9], "mw": 4, "txpower": 4, "spread": [4, 9], "factor": [4, 6, 9], "12": [4, 9], "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, 9], "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, "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, "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], "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, 10], "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, 6, 8], "boundari": 4, "remain": [4, 6, 8], "roam": 4, "mobil": [4, 8], "seen": [4, 8], "perspect": [4, 6, 8, 10], "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, 6, 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], "usb": [5, 8, 9], "cabl": 5, "adapt": 5, "suppli": [5, 6, 8], "grow": 5, "core": [5, 8, 9, 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, "signatur": [6, 8, 10], "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, 10], "static": 6, "should_use_implicit_proof": 6, "explicit": 6, "implicit": [6, 8], "transport_en": 6, "create_kei": 6, "decrypt": [6, 8], "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], "expand_nam": 6, "app_and_aspects_from_nam": 6, "full_nam": [6, 9], "tupl": 6, "hash_from_name_and_ident": 6, "path_respons": 6, "attached_interfac": 6, "tag": 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, "allow_non": 6, "allowed_list": 6, "whatev": [6, 8], "funcion": 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, "pre": [6, 8], "ae": [6, 8, 10], "deriv": [6, 8, 10], "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, "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], "consid": [6, 8, 10], "torn": 6, "progress_callback": 6, "info": [6, 8, 9], "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, 9, 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, "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, 10], "circumst": [7, 8], "reli": [7, 8], "fashion": 7, "u": [7, 8, 9], "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, "machin": 8, "censorship": [8, 10], "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, 9, 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, 10], "pmr": 8, "cb": 8, "wish": [8, 9], "written": 8, "programm": 8, "orient": 8, "multipoint": 8, "recipi": 8, "singular": 8, "_represented_": 8, "characterist": 8, "13425ec15b621c1d928589718000d814": 8, "trade": 8, "accommod": 8, "simultan": 8, "unlik": 8, "nears": 8, "congest": 8, "galact": 8, "scale": [8, 10], "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, 10], "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, 10], "multilater": 8, "creation": [8, 10], "great": 8, "suffic": 8, "cluster": 8, "hear": 8, "But": 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, "newest": 8, "discard": 8, "contact": 8, "shortest": 8, "predict": 8, "constantli": 8, "earlier": 8, "opt": 8, "against": 8, "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, 10], "lkr": 8, "chose": 8, "bi": 8, "direction": 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], "stage": 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, "context": 8, "465": 8, "vari": [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, "167": 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, "etc": 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, "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, "fw": 9, "nocheck": 9, "freq": 9, "hz": 9, "bw": 9, "txp": 9, "sf": 9, "cr": 9, "eeprom": 9, "backup": 9, "dump": 9, "wipe": 9, "flash": 9, "attach": 9, "forc": 9, "older": 9, "onlin": 9, "extract": 9, "cach": 9, "bluetooth": 9, "consol": 9, "unlock": 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, "execstartpr": 9, "restart": 9, "restartsec": 9, "usernameher": 9, "execstart": 9, "wantedbi": 9, "systemctl": 9, "readili": 10, "advers": 10, "unforg": 10, "acknowledg": 10, "empow": 10, "autonomi": 10, "sovereignti": 10, "subject": 10, "outsid": 10, "planetari": 10, "hierarch": 10, "beaureucrat": 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, "", "expand_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, 8], "identif": 0, "request": 0, "respons": 0, "filetransf": 0, "get": [1, 8], "start": 1, "fast": 1, "standalon": 1, "reticulum": [1, 2, 3, 7, 8, 9, 10], "instal": [1, 2], "try": 1, "us": [1, 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, "raspberri": 1, "pi": 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, "usag": 2, "supplier": 2, "wifi": 2, "combin": 2, "type": [2, 8, 10], "stack": 3, "manual": 3, "tabl": 3, "Of": 3, "content": 3, "indic": 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], "donat": 7, "provid": 7, "feedback": 7, "contribut": 7, "understand": 8, "motiv": 8, "goal": 8, "introduct": 8, "basic": 8, "function": 8, "destin": 8, "name": [8, 9], "kei": 8, "ident": 8, "further": 8, "transport": 8, "node": 8, "The": [8, 9], "mechan": 8, "detail": 8, "reach": 8, "establish": 8, "resourc": 8, "setup": 8, "protocol": 8, "specif": 8, "packet": 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, "rnodeconf": 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"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Filetransfer": [[0, "filetransfer"]], "Getting Started Fast": [[1, "getting-started-fast"]], "Standalone Reticulum Installation": [[1, "standalone-reticulum-installation"]], "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 Raspberry Pi": [[1, "reticulum-on-raspberry-pi"]], "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"]], "Table Of Contents": [[3, "table-of-contents"]], "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"]], "API Reference": [[6, "api-reference"]], "Support Reticulum": [[7, "support-reticulum"]], "Donations": [[7, "donations"]], "Provide Feedback": [[7, "provide-feedback"]], "Contribute Code": [[7, "contribute-code"]], "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"]], "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"]], "The rnodeconf Utility": [[9, "the-rnodeconf-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"]]}, "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"]], "expand_name() (rns.destination static method)": [[6, "RNS.Destination.expand_name"]], "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"]], "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 diff --git a/docs/manual/using.html b/docs/manual/using.html index 8ad4319..088744c 100644 --- a/docs/manual/using.html +++ b/docs/manual/using.html @@ -625,6 +625,8 @@ options: -U, --force-update Update to specified firmware even if version matches or is older than installed version --fw-version version Use a specific firmware version for update or autoinstall --nocheck Don't check for firmware updates online + -e, --extract Extract firmware from connected RNode for later use + -E, --use-extracted Use the extracted firmware for autoinstallation or update -C, --clear-cache Clear locally cached firmware files -N, --normal Switch device to normal mode -T, --tnc Switch device to TNC mode