mirror of
https://github.com/markqvist/Reticulum.git
synced 2026-06-22 03:58:51 -07:00
Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 422dc05549 | |||
| 50c0a354c9 | |||
| e98487c1cf | |||
| 50e03a24e8 | |||
| 0cc42568c7 | |||
| 41790ca707 | |||
| 20b1bfd01e | |||
| 1be5e10abe | |||
| 13a9ebed83 | |||
| aee8c3be0c | |||
| ef8ccf67ed | |||
| 91d531b053 | |||
| 0de169836e | |||
| a2ef978208 | |||
| 5b3bb050e7 | |||
| 9b9efe5fac | |||
| 482d5ac4cb | |||
| 804a7ddbe1 | |||
| 739fdd387e |
@@ -14,3 +14,4 @@ tests/rnsconfig/logfile*
|
|||||||
*.data
|
*.data
|
||||||
*.result
|
*.result
|
||||||
.buildinfo.bak
|
.buildinfo.bak
|
||||||
|
docs/Reticulum Manual.*
|
||||||
|
|||||||
+33
-116
@@ -1,14 +1,10 @@
|
|||||||
### 2026-05-28: RNS 1.3.2
|
### 2026-06-01: RNS 1.3.5
|
||||||
|
|
||||||
This release adds commit signing and validation support to the `rngit` system, as well as improvements to the blackhole functionality.
|
This maintenance release contains an important fix for `AutoInterface` reliability when roaming between different physical networks.
|
||||||
|
|
||||||
**Changes**
|
**Changes**
|
||||||
- Extended blackhole functionality to immediately terminate links from blackholed identities
|
- Fixed UDP listener replacement deadlocking inbound AutoInterface traffic when fast-roaming between physical interfaces or WiFi APs
|
||||||
- Added commit signing and validation to `rngit`
|
- Fixed some paths never resolving when using other interfaces at the same time as a deadlocked AutoInterface
|
||||||
- Added commit hash inclusion in generated release manifest to `rngit`
|
|
||||||
- Added local `verify` operation shorthand to `rngit release`
|
|
||||||
- Added option to configure blackhole update interval
|
|
||||||
- Added configuration option to log without timestamps
|
|
||||||
|
|
||||||
**Verified Retrieval**
|
**Verified Retrieval**
|
||||||
You can retrieve and verify this release over Reticulum using the built-in `rngit release` utility. To retrieve only the installation `.whl` package, and the release manifest for future updates, you can use:
|
You can retrieve and verify this release over Reticulum using the built-in `rngit release` utility. To retrieve only the installation `.whl` package, and the release manifest for future updates, you can use:
|
||||||
@@ -38,6 +34,35 @@ rnid -i bc7291552be7a58f361522990465165c -V rns_*.rsm *.rsg
|
|||||||
|
|
||||||
The `rnid` utility will then verify the signatures, and display whether they are valid. If the signature cannot be verified, the release has been tampered with and should be discarded.
|
The `rnid` utility will then verify the signatures, and display whether they are valid. If the signature cannot be verified, the release has been tampered with and should be discarded.
|
||||||
|
|
||||||
|
### 2026-05-29: RNS 1.3.4
|
||||||
|
|
||||||
|
This release fixes a regression that could cause sub-optimal path selection under conditions where the same announce was received within a very short timespan on different interfaces, as well as a few other bugs and inefficiencies.
|
||||||
|
|
||||||
|
**Changes**
|
||||||
|
- Fixed regression in inbound announce de-duplication
|
||||||
|
- Fixed missing check for shared instance type configuration conflict
|
||||||
|
- Fixed superfluous path state configuration on new announce from new destinations
|
||||||
|
- Improved cleanup of stale known destinations
|
||||||
|
- Improved shared instance RPC handling
|
||||||
|
|
||||||
|
### 2026-05-28: RNS 1.3.3
|
||||||
|
|
||||||
|
This release fixes a regression in persistence of known destination on Windows.
|
||||||
|
|
||||||
|
**Changes**
|
||||||
|
- Fixed regression in known destinations persist on Windows
|
||||||
|
|
||||||
|
### 2026-05-28: RNS 1.3.2
|
||||||
|
|
||||||
|
This release adds commit signing and validation support to the `rngit` system, as well as improvements to the blackhole functionality.
|
||||||
|
|
||||||
|
**Changes**
|
||||||
|
- Extended blackhole functionality to immediately terminate links from blackholed identities
|
||||||
|
- Added commit signing and validation to `rngit`
|
||||||
|
- Added commit hash inclusion in generated release manifest to `rngit`
|
||||||
|
- Added local `verify` operation shorthand to `rngit release`
|
||||||
|
- Added option to configure blackhole update interval
|
||||||
|
- Added configuration option to log without timestamps
|
||||||
|
|
||||||
### 2026-05-22: RNS 1.3.1
|
### 2026-05-22: RNS 1.3.1
|
||||||
|
|
||||||
@@ -46,34 +71,6 @@ This maintenance release fixes a single bug.
|
|||||||
**Changes**
|
**Changes**
|
||||||
- Fixed regression in request response transfer size accumulator
|
- Fixed regression in request response transfer size accumulator
|
||||||
|
|
||||||
**Verified Retrieval**
|
|
||||||
You can retrieve and verify this release over Reticulum using the built-in `rngit release` utility. To download all artifacts, and the release manifest for future updates, you can use the following command:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rngit release rns://7649a50d84610232d1416b41d2896aff/reticulum/reticulum fetch latest:all --signer bc7291552be7a58f361522990465165c
|
|
||||||
```
|
|
||||||
|
|
||||||
To retrieve only the `.whl` package for installation, and the release manifest, you can use:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rngit release rns://7649a50d84610232d1416b41d2896aff/reticulum/reticulum fetch "latest:rns-*-py3-none-any.whl" --signer bc7291552be7a58f361522990465165c
|
|
||||||
```
|
|
||||||
|
|
||||||
**Release Signatures**
|
|
||||||
Release artifacts include a signed `rsm` release manifest and `rsg` signature files that can be validated against the RNS release signing identity `<bc7291552be7a58f361522990465165c>` using `rngit` or `rnid`. To perform an offline verification of all release artifacts using a manifest:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rngit release rns_*.rsm fetch latest:all --offline --signer bc7291552be7a58f361522990465165c
|
|
||||||
```
|
|
||||||
|
|
||||||
To verify releases using individual `rsg` files, while also verifying the manifest itself, download the `rsm` and `rsg` signatures, make sure they are in the same folder as the release artifact, and run `rnid` signature verification with the release identity as the required signer:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rnid -i bc7291552be7a58f361522990465165c -V rns_*.rsm *.rsg
|
|
||||||
```
|
|
||||||
|
|
||||||
The `rnid` utility will then verify the signatures, and display whether they are valid. If the signature cannot be verified, the release has been tampered with and should be discarded.
|
|
||||||
|
|
||||||
### 2026-05-21: RNS 1.3.0
|
### 2026-05-21: RNS 1.3.0
|
||||||
|
|
||||||
This maintenance release fixes a number of bugs.
|
This maintenance release fixes a number of bugs.
|
||||||
@@ -88,28 +85,6 @@ This maintenance release fixes a number of bugs.
|
|||||||
- Adjusted timeouts for remote operations in `rngit`
|
- Adjusted timeouts for remote operations in `rngit`
|
||||||
- Updated documentation
|
- Updated documentation
|
||||||
|
|
||||||
**Verified Retrieval**
|
|
||||||
You can retrieve and verify this release over Reticulum using the built-in `rngit release` utility. To download all artifacts, and the release manifest for future updates, you can use the following command:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rngit release rns://7649a50d84610232d1416b41d2896aff/reticulum/reticulum fetch latest:all --signer bc7291552be7a58f361522990465165c
|
|
||||||
```
|
|
||||||
|
|
||||||
To retrieve only the `.whl` package for installation, you can use:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rngit release rns://7649a50d84610232d1416b41d2896aff/reticulum/reticulum fetch latest:rns-1.3.0-py3-none-any.whl --signer bc7291552be7a58f361522990465165c
|
|
||||||
```
|
|
||||||
|
|
||||||
**Release Signatures**
|
|
||||||
Release artifacts include a signed `rsm` release manifest and `rsg` signature files that can be validated against the RNS release signing identity `<bc7291552be7a58f361522990465165c>` using `rnid`. To verify files, download the `rsm` and `rsg` signatures, make sure they are in the same folder as the release artifact, and run `rnid` signature verification with the release identity as the required signer:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rnid -i bc7291552be7a58f361522990465165c -V manifest.rsm *.rsg
|
|
||||||
```
|
|
||||||
|
|
||||||
The `rnid` utility will then verify the signatures, and display whether they are valid. If the signature cannot be verified, the release has been tampered with and should be discarded.
|
|
||||||
|
|
||||||
### 2026-05-19: RNS 1.2.9
|
### 2026-05-19: RNS 1.2.9
|
||||||
|
|
||||||
This release completes the operational functionality of the `rngit` system, which now has full release creation, fetch and verified update support using the `rngit release` command. Additionally, two chapters have been added to the manual should cover all the things that `rngit` is currently capable of.
|
This release completes the operational functionality of the `rngit` system, which now has full release creation, fetch and verified update support using the `rngit release` command. Additionally, two chapters have been added to the manual should cover all the things that `rngit` is currently capable of.
|
||||||
@@ -125,28 +100,6 @@ This release completes the operational functionality of the `rngit` system, whic
|
|||||||
- Improved page node ref link handling in `rngit`
|
- Improved page node ref link handling in `rngit`
|
||||||
- Improved logging in various locations
|
- Improved logging in various locations
|
||||||
|
|
||||||
**Verified Retrieval**
|
|
||||||
You can retrieve and verify this release over Reticulum using the built-in `rngit release` utility. To download all artifacts, and the release manifest for future updates, you can use the following command:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rngit release rns://7649a50d84610232d1416b41d2896aff/reticulum/reticulum fetch latest:all --signer bc7291552be7a58f361522990465165c
|
|
||||||
```
|
|
||||||
|
|
||||||
To retrieve only the `.whl` package for installation, you can use:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rngit release rns://7649a50d84610232d1416b41d2896aff/reticulum/reticulum fetch latest:rns-1.2.8-py3-none-any.whl --signer bc7291552be7a58f361522990465165c
|
|
||||||
```
|
|
||||||
|
|
||||||
**Release Signatures**
|
|
||||||
Release artifacts include a signed `rsm` release manifest and `rsg` signature files that can be validated against the RNS release signing identity `<bc7291552be7a58f361522990465165c>` using `rnid`. To verify files, download the `rsm` and `rsg` signatures, make sure they are in the same folder as the release artifact, and run `rnid` signature verification with the release identity as the required signer:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rnid -i bc7291552be7a58f361522990465165c -V manifest.rsm *.rsg
|
|
||||||
```
|
|
||||||
|
|
||||||
The `rnid` utility will then verify the signatures, and display whether they are valid. If the signature cannot be verified, the release has been tampered with and should be discarded.
|
|
||||||
|
|
||||||
### 2026-05-18: RNS 1.2.8
|
### 2026-05-18: RNS 1.2.8
|
||||||
|
|
||||||
This release improves the `rngit` system with signed release manifest generation and automatic artifact signing. It also includes several additions to `rnid` and various minor fixes and improvements to the `rngit` system.
|
This release improves the `rngit` system with signed release manifest generation and automatic artifact signing. It also includes several additions to `rnid` and various minor fixes and improvements to the `rngit` system.
|
||||||
@@ -167,15 +120,6 @@ This release improves the `rngit` system with signed release manifest generation
|
|||||||
- Fixed various minor bugs and inconsistencies in `rngit`
|
- Fixed various minor bugs and inconsistencies in `rngit`
|
||||||
- Dropped `note` metadata field requirement from `rsg` structure
|
- Dropped `note` metadata field requirement from `rsg` structure
|
||||||
|
|
||||||
**Release Signatures**
|
|
||||||
Release artifacts include a signed `rsm` release manifest and `rsg` signature files that can be validated against the RNS release signing identity `<bc7291552be7a58f361522990465165c>` using `rnid`. To verify files, download the `rsm` and `rsg` signatures, make sure they are in the same folder as the release artifact, and run `rnid` signature verification with the release identity as the required signer:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rnid -i bc7291552be7a58f361522990465165c -V manifest.rsm *.rsg
|
|
||||||
```
|
|
||||||
|
|
||||||
The `rnid` utility will then verify the signatures, and display whether they are valid. If the signature cannot be verified, the release has been tampered with and should be discarded.
|
|
||||||
|
|
||||||
### 2026-05-17: RNS 1.2.7
|
### 2026-05-17: RNS 1.2.7
|
||||||
|
|
||||||
This release significantly improves the `rngit` system with fork, mirroring and empty repository creation functionality, a new work document proposals feature, improvements to the transport core reliability and efficiency and various other tweaks and improvements.
|
This release significantly improves the `rngit` system with fork, mirroring and empty repository creation functionality, a new work document proposals feature, improvements to the transport core reliability and efficiency and various other tweaks and improvements.
|
||||||
@@ -193,15 +137,6 @@ This release significantly improves the `rngit` system with fork, mirroring and
|
|||||||
- Improved transfer completed feedback in `rncp`, thanks to **neutral**
|
- Improved transfer completed feedback in `rncp`, thanks to **neutral**
|
||||||
- Improved interface transport insertion and removal
|
- Improved interface transport insertion and removal
|
||||||
|
|
||||||
**Release Signatures**
|
|
||||||
Release artifacts include `rsg` signature files that can be validated against the RNS release signing identity `<bc7291552be7a58f361522990465165c>` using `rnid`. To verify files, download the `rsg` signatures, make sure they are in the same folder as the release artifact, and run `rnid` signature verification with the release identity as the required signer:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rnid -i bc7291552be7a58f361522990465165c -V rns*.whl
|
|
||||||
```
|
|
||||||
|
|
||||||
The `rnid` utility will then verify the signatures, and display whether it is valid. If the signature cannot be verified, the file has been tampered with and should be thrown very far away in a jiffy.
|
|
||||||
|
|
||||||
### 2026-05-14: RNS 1.2.6
|
### 2026-05-14: RNS 1.2.6
|
||||||
|
|
||||||
This release adds further improvements to the `rnid` and `rngit` utilities, and includes several bugfixes and other improvements.
|
This release adds further improvements to the `rnid` and `rngit` utilities, and includes several bugfixes and other improvements.
|
||||||
@@ -223,15 +158,6 @@ This release adds further improvements to the `rnid` and `rngit` utilities, and
|
|||||||
- Fixed potential race condition in interface discovery
|
- Fixed potential race condition in interface discovery
|
||||||
- Fixed `rngit` remote helper hanging on startup if no client config had been created previously, and RNS loglevel was configured at debug or higher
|
- Fixed `rngit` remote helper hanging on startup if no client config had been created previously, and RNS loglevel was configured at debug or higher
|
||||||
|
|
||||||
**Release Signatures**
|
|
||||||
Release artifacts include `rsg` signature files that can be validated against the RNS release signing identity `<bc7291552be7a58f361522990465165c>` using `rnid`. To verify files, download the `rsg` signatures, make sure they are in the same folder as the release artifact, and run `rnid` signature verification with the release identity as the required signer:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rnid -i bc7291552be7a58f361522990465165c -V rns*.whl
|
|
||||||
```
|
|
||||||
|
|
||||||
The `rnid` utility will then verify the signatures, and display whether it is valid. If the signature cannot be verified, the file has been tampered with and should be thrown very far away in a jiffy.
|
|
||||||
|
|
||||||
### 2026-05-09: RNS 1.2.5
|
### 2026-05-09: RNS 1.2.5
|
||||||
|
|
||||||
This release brings substantial improvements to path request handling, and should significantly reduce overall network and local transport node processing loads. Path requests are now automatically ingress and egress limited per interface and sub-interface. Although the defaults are effective and sane, and should work right out of the box bring an end to practically all the PR and announce spam going on lately, the backend is fully configurable for both defaults and per interface, if you want to fiddle with the settings.
|
This release brings substantial improvements to path request handling, and should significantly reduce overall network and local transport node processing loads. Path requests are now automatically ingress and egress limited per interface and sub-interface. Although the defaults are effective and sane, and should work right out of the box bring an end to practically all the PR and announce spam going on lately, the backend is fully configurable for both defaults and per interface, if you want to fiddle with the settings.
|
||||||
@@ -260,15 +186,6 @@ For all node ops out there, I'd recomment updating to this at some sort of semi-
|
|||||||
- Ensured canonical validation functions in `rngit`
|
- Ensured canonical validation functions in `rngit`
|
||||||
- Lots of other small fixes and stability improvements to `rngit`
|
- Lots of other small fixes and stability improvements to `rngit`
|
||||||
|
|
||||||
**Release Signatures**
|
|
||||||
Release artifacts include `rsg` signature files that can be validated against the RNS release signing identity `<bc7291552be7a58f361522990465165c>` using `rnid`. To verify files, download the `rsg` signatures, make sure they are in the same folder as the release artifact, and run `rnid` signature verification with the release identity as the required signer:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
rnid -i bc7291552be7a58f361522990465165c -V rns-1.2.5-py3-none-any.whl
|
|
||||||
```
|
|
||||||
|
|
||||||
The `rnid` utility will then verify the signatures, and display whether it is valid. If the signature cannot be verified, the file has been tampered with and should be thrown very far away in a jiffy.
|
|
||||||
|
|
||||||
### 2026-05-07: RNS 1.2.4
|
### 2026-05-07: RNS 1.2.4
|
||||||
|
|
||||||
This release brings a complete rewrite and update to the `rnid` utility, which is now a lot more useful, and better at finding and saving identities. It also includes a bunch of other improvements, such as expanded `rngit` functionality, better transport performance and a few bugfixes. Enjoy!
|
This release brings a complete rewrite and update to the `rnid` utility, which is now a lot more useful, and better at finding and saving identities. It also includes a bunch of other improvements, such as expanded `rngit` functionality, better transport performance and a few bugfixes. Enjoy!
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ manual:
|
|||||||
make -C docs latexpdf epub
|
make -C docs latexpdf epub
|
||||||
|
|
||||||
distcollect:
|
distcollect:
|
||||||
cp docs/Reticulum\ Manual.* dist
|
mv docs/Reticulum\ Manual.* dist
|
||||||
|
|
||||||
build_spkg: remove_symlinks build_sdist create_symlinks
|
build_spkg: remove_symlinks build_sdist create_symlinks
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ userland, and can run on practically any system that runs Python 3.
|
|||||||
## Read The Manual
|
## Read The Manual
|
||||||
The full documentation for Reticulum is available at [markqvist.github.io/Reticulum/manual/](https://markqvist.github.io/Reticulum/manual/).
|
The full documentation for Reticulum is available at [markqvist.github.io/Reticulum/manual/](https://markqvist.github.io/Reticulum/manual/).
|
||||||
|
|
||||||
You can also download the [Reticulum manual as a PDF](https://github.com/markqvist/Reticulum/raw/master/docs/Reticulum%20Manual.pdf) or [as an e-book in EPUB format](https://github.com/markqvist/Reticulum/raw/master/docs/Reticulum%20Manual.epub).
|
You can also download the [Reticulum manual as a PDF](https://github.com/markqvist/Reticulum/releases/latest/download/Reticulum.Manual.pdf) or [as an e-book in EPUB format](https://github.com/markqvist/Reticulum/releases/latest/download/Reticulum.Manual.epub).
|
||||||
|
|
||||||
For more info, see [reticulum.network](https://reticulum.network/) and [the FAQ section of the wiki](https://github.com/markqvist/Reticulum/wiki/Frequently-Asked-Questions).
|
For more info, see [reticulum.network](https://reticulum.network/) and [the FAQ section of the wiki](https://github.com/markqvist/Reticulum/wiki/Frequently-Asked-Questions).
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ No kernel modules or drivers are required. Reticulum runs completely in userland
|
|||||||
|
|
||||||
The full documentation for Reticulum is available on `_`!`[this node`:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/index.md]`!`_.
|
The full documentation for Reticulum is available on `_`!`[this node`:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/index.md]`!`_.
|
||||||
|
|
||||||
You can also download the `_`!`[Reticulum manual as a PDF`:/file/download`g=reticulum|r=reticulum|ref=HEAD|path=docs%2FReticulum+Manual.pdf]`!`_ or `_`!`[as an e-book in EPUB format`:/file/download`g=reticulum|r=reticulum|ref=HEAD|path=docs%2FReticulum+Manual.pdf]`!`_.
|
You can also download the `_`!`[Reticulum manual as a PDF`:/file/artifact`g=reticulum|r=reticulum|t=latest|a=Reticulum+Manual.pdf]`!`_ or `_`!`[as an e-book in EPUB format`:/file/artifact`g=reticulum|r=reticulum|t=latest|a=Reticulum+Manual.epub]`!`_.
|
||||||
|
|
||||||
>> Notable Features
|
>> Notable Features
|
||||||
|
|
||||||
|
|||||||
+8
-1
@@ -218,7 +218,7 @@ class Identity:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
with open(temp_file,"wb") as file: umsgpack.dump(Identity.known_destinations.copy(), file)
|
with open(temp_file,"wb") as file: umsgpack.dump(Identity.known_destinations.copy(), file)
|
||||||
os.rename(temp_file, RNS.Reticulum.storagepath+f"/known_destinations")
|
os.replace(temp_file, RNS.Reticulum.storagepath+f"/known_destinations")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
RNS.log(f"Error while serializing and writing known destinations: {e}", RNS.LOG_ERROR)
|
RNS.log(f"Error while serializing and writing known destinations: {e}", RNS.LOG_ERROR)
|
||||||
@@ -316,6 +316,7 @@ class Identity:
|
|||||||
no_path = 0
|
no_path = 0
|
||||||
retained = 0
|
retained = 0
|
||||||
never_used = 0
|
never_used = 0
|
||||||
|
ratchetdir = RNS.Reticulum.storagepath+"/ratchets"
|
||||||
|
|
||||||
with Identity.known_destinations_lock: destination_hashes = list(Identity.known_destinations.keys())
|
with Identity.known_destinations_lock: destination_hashes = list(Identity.known_destinations.keys())
|
||||||
for destination_hash in destination_hashes:
|
for destination_hash in destination_hashes:
|
||||||
@@ -359,6 +360,12 @@ class Identity:
|
|||||||
Identity.known_destinations.pop(destination_hash)
|
Identity.known_destinations.pop(destination_hash)
|
||||||
removed += 1
|
removed += 1
|
||||||
|
|
||||||
|
try:
|
||||||
|
hexhash = RNS.hexrep(destination_hash, delimit=False)
|
||||||
|
ratchet_path = f"{ratchetdir}/{hexhash}"
|
||||||
|
if os.path.isfile(ratchet_path): os.unlink(ratchet_path)
|
||||||
|
except Exception as e: RNS.log(f"Could not clean stale ratchets for {RNS.prettyhexrep(destination_hash)}: {e}", RNS.LOG_WARNING)
|
||||||
|
|
||||||
# RNS.log(f"Total destinations: {total}, stale: {len(stale)}, removed: {removed}, no path: {no_path}, never used: {never_used}, with path: {total-no_path}, used: {total-never_used}, retained: {retained}. Completed in {RNS.prettyshorttime(time.time()-st)}", RNS.LOG_WARNING) # TODO: Remove
|
# RNS.log(f"Total destinations: {total}, stale: {len(stale)}, removed: {removed}, no path: {no_path}, never used: {never_used}, with path: {total-no_path}, used: {total-never_used}, retained: {retained}. Completed in {RNS.prettyshorttime(time.time()-st)}", RNS.LOG_WARNING) # TODO: Remove
|
||||||
if not RNS.Transport.owner.is_connected_to_shared_instance: Identity.save_known_destinations(recombine=False)
|
if not RNS.Transport.owner.is_connected_to_shared_instance: Identity.save_known_destinations(recombine=False)
|
||||||
|
|
||||||
|
|||||||
@@ -428,14 +428,22 @@ class AutoInterface(Interface):
|
|||||||
if ifname in self.interface_servers:
|
if ifname in self.interface_servers:
|
||||||
RNS.log("Shutting down previous UDP listener for "+str(self)+" "+str(ifname), RNS.LOG_DEBUG)
|
RNS.log("Shutting down previous UDP listener for "+str(self)+" "+str(ifname), RNS.LOG_DEBUG)
|
||||||
previous_server = self.interface_servers[ifname]
|
previous_server = self.interface_servers[ifname]
|
||||||
def shutdown_server():
|
def shutdown_server(): previous_server.shutdown()
|
||||||
previous_server.shutdown()
|
|
||||||
threading.Thread(target=shutdown_server, daemon=True).start()
|
threading.Thread(target=shutdown_server, daemon=True).start()
|
||||||
|
|
||||||
RNS.log("Starting new UDP listener for "+str(self)+" "+str(ifname), RNS.LOG_DEBUG)
|
RNS.log("Starting new UDP listener for "+str(self)+" "+str(ifname), RNS.LOG_DEBUG)
|
||||||
|
|
||||||
udp_server = socketserver.UDPServer(listen_address, self.handler_factory(self.process_incoming))
|
retry_delay = 1.25
|
||||||
self.interface_servers[ifname] = udp_server
|
listener_started = False
|
||||||
|
while not listener_started:
|
||||||
|
try:
|
||||||
|
time.sleep(retry_delay)
|
||||||
|
udp_server = socketserver.UDPServer(listen_address, self.handler_factory(self.process_incoming))
|
||||||
|
self.interface_servers[ifname] = udp_server
|
||||||
|
listener_started = True
|
||||||
|
except Exception as e:
|
||||||
|
RNS.log(f"Could not start new UDP listener for {self} on {listen_address}: {e}", RNS.LOG_WARNING)
|
||||||
|
RNS.log(f"Retrying in {retry_delay} seconds", RNS.LOG_WARNING)
|
||||||
|
|
||||||
thread = threading.Thread(target=udp_server.serve_forever)
|
thread = threading.Thread(target=udp_server.serve_forever)
|
||||||
thread.daemon = True
|
thread.daemon = True
|
||||||
|
|||||||
+73
-66
@@ -48,6 +48,7 @@ else:
|
|||||||
|
|
||||||
from RNS.vendor.configobj import ConfigObj
|
from RNS.vendor.configobj import ConfigObj
|
||||||
from threading import Lock
|
from threading import Lock
|
||||||
|
import RNS.vendor.umsgpack as mp
|
||||||
import configparser
|
import configparser
|
||||||
import multiprocessing.connection
|
import multiprocessing.connection
|
||||||
import importlib.util
|
import importlib.util
|
||||||
@@ -668,6 +669,9 @@ class Reticulum:
|
|||||||
self.shared_instance_type = "tcp"
|
self.shared_instance_type = "tcp"
|
||||||
self.use_af_unix = False
|
self.use_af_unix = False
|
||||||
|
|
||||||
|
if self.shared_instance_type == "tcp":
|
||||||
|
self.local_socket_path = None
|
||||||
|
|
||||||
if self.local_socket_path == None and self.use_af_unix:
|
if self.local_socket_path == None and self.use_af_unix:
|
||||||
self.local_socket_path = "default"
|
self.local_socket_path = "default"
|
||||||
|
|
||||||
@@ -1179,60 +1183,63 @@ class Reticulum:
|
|||||||
os.makedirs(Reticulum.configdir)
|
os.makedirs(Reticulum.configdir)
|
||||||
self.config.write()
|
self.config.write()
|
||||||
|
|
||||||
|
def rpc_return(self, connection, response):
|
||||||
|
connection.send_bytes(mp.packb(response))
|
||||||
|
|
||||||
def rpc_loop(self):
|
def rpc_loop(self):
|
||||||
while RNS.Transport._should_run:
|
while RNS.Transport._should_run:
|
||||||
try:
|
try:
|
||||||
rpc_connection = self.rpc_listener.accept()
|
conn = self.rpc_listener.accept()
|
||||||
call = rpc_connection.recv()
|
call = mp.unpackb(conn.recv_bytes())
|
||||||
|
|
||||||
if "get" in call:
|
if "get" in call:
|
||||||
path = call["get"]
|
path = call["get"]
|
||||||
|
|
||||||
if path == "path_table":
|
if path == "path_table":
|
||||||
mh = call["max_hops"]
|
mh = call["max_hops"]
|
||||||
rpc_connection.send(self.get_path_table(max_hops=mh))
|
self.rpc_return(conn, self.get_path_table(max_hops=mh))
|
||||||
|
|
||||||
if path == "interface_stats": rpc_connection.send(self.get_interface_stats())
|
if path == "interface_stats": self.rpc_return(conn, self.get_interface_stats())
|
||||||
if path == "rate_table": rpc_connection.send(self.get_rate_table())
|
if path == "rate_table": self.rpc_return(conn, self.get_rate_table())
|
||||||
if path == "next_hop_if_name": rpc_connection.send(self.get_next_hop_if_name(call["destination_hash"]))
|
if path == "next_hop_if_name": self.rpc_return(conn, self.get_next_hop_if_name(call["destination_hash"]))
|
||||||
if path == "next_hop": rpc_connection.send(self.get_next_hop(call["destination_hash"]))
|
if path == "next_hop": self.rpc_return(conn, self.get_next_hop(call["destination_hash"]))
|
||||||
if path == "first_hop_timeout": rpc_connection.send(self.get_first_hop_timeout(call["destination_hash"]))
|
if path == "first_hop_timeout": self.rpc_return(conn, self.get_first_hop_timeout(call["destination_hash"]))
|
||||||
if path == "link_count": rpc_connection.send(self.get_link_count())
|
if path == "link_count": self.rpc_return(conn, self.get_link_count())
|
||||||
if path == "packet_rssi": rpc_connection.send(self.get_packet_rssi(call["packet_hash"]))
|
if path == "packet_rssi": self.rpc_return(conn, self.get_packet_rssi(call["packet_hash"]))
|
||||||
if path == "packet_snr": rpc_connection.send(self.get_packet_snr(call["packet_hash"]))
|
if path == "packet_snr": self.rpc_return(conn, self.get_packet_snr(call["packet_hash"]))
|
||||||
if path == "packet_q": rpc_connection.send(self.get_packet_q(call["packet_hash"]))
|
if path == "packet_q": self.rpc_return(conn, self.get_packet_q(call["packet_hash"]))
|
||||||
if path == "blackholed_identities": rpc_connection.send(self.get_blackholed_identities())
|
if path == "blackholed_identities": self.rpc_return(conn, self.get_blackholed_identities())
|
||||||
if path == "is_blackholed": rpc_connection.send(self.is_blackholed(call["identity_hash"]))
|
if path == "is_blackholed": self.rpc_return(conn, self.is_blackholed(call["identity_hash"]))
|
||||||
|
|
||||||
if "drop" in call:
|
if "drop" in call:
|
||||||
path = call["drop"]
|
path = call["drop"]
|
||||||
if path == "path": rpc_connection.send(self.drop_path(call["destination_hash"]))
|
if path == "path": self.rpc_return(conn, self.drop_path(call["destination_hash"]))
|
||||||
if path == "all_via": rpc_connection.send(self.drop_all_via(call["destination_hash"]))
|
if path == "all_via": self.rpc_return(conn, self.drop_all_via(call["destination_hash"]))
|
||||||
if path == "announce_queues": rpc_connection.send(self.drop_announce_queues())
|
if path == "announce_queues": self.rpc_return(conn, self.drop_announce_queues())
|
||||||
|
|
||||||
if "blackhole_identity" in call:
|
if "blackhole_identity" in call:
|
||||||
identity_hash = call["blackhole_identity"]
|
identity_hash = call["blackhole_identity"]
|
||||||
until = call["until"]
|
until = call["until"]
|
||||||
reason = call["reason"]
|
reason = call["reason"]
|
||||||
rpc_connection.send(self.blackhole_identity(identity_hash, until=until, reason=reason))
|
self.rpc_return(conn, self.blackhole_identity(identity_hash, until=until, reason=reason))
|
||||||
|
|
||||||
if "unblackhole_identity" in call:
|
if "unblackhole_identity" in call:
|
||||||
identity_hash = call["unblackhole_identity"]
|
identity_hash = call["unblackhole_identity"]
|
||||||
rpc_connection.send(self.unblackhole_identity(identity_hash))
|
self.rpc_return(conn, self.unblackhole_identity(identity_hash))
|
||||||
|
|
||||||
if "destination_data" in call:
|
if "destination_data" in call:
|
||||||
operation = call["destination_data"]
|
operation = call["destination_data"]
|
||||||
destination_hash = call["destination_hash"]
|
destination_hash = call["destination_hash"]
|
||||||
if operation == "used": rpc_connection.send(self._used_destination_data(destination_hash))
|
if operation == "used": self.rpc_return(conn, self._used_destination_data(destination_hash))
|
||||||
elif operation == "retain": rpc_connection.send(self._retain_destination_data(destination_hash))
|
elif operation == "retain": self.rpc_return(conn, self._retain_destination_data(destination_hash))
|
||||||
elif operation == "unretain": rpc_connection.send(self._unretain_destination_data(destination_hash))
|
elif operation == "unretain": self.rpc_return(conn, self._unretain_destination_data(destination_hash))
|
||||||
|
|
||||||
if "identity_data" in call:
|
if "identity_data" in call:
|
||||||
operation = call["identity_data"]
|
operation = call["identity_data"]
|
||||||
identity_hash = call["identity_hash"]
|
identity_hash = call["identity_hash"]
|
||||||
if operation == "retain": rpc_connection.send(self._retain_identity(identity_hash))
|
if operation == "retain": self.rpc_return(conn, self._retain_identity(identity_hash))
|
||||||
|
|
||||||
rpc_connection.close()
|
conn.close()
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
RNS.log("An error ocurred while handling RPC call from local client: "+str(e), RNS.LOG_ERROR)
|
RNS.log("An error ocurred while handling RPC call from local client: "+str(e), RNS.LOG_ERROR)
|
||||||
@@ -1243,8 +1250,8 @@ class Reticulum:
|
|||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
try:
|
try:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"destination_data": "used", "destination_hash": destination_hash})
|
rpc_connection.send_bytes(mp.packb({"destination_data": "used", "destination_hash": destination_hash}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -1257,8 +1264,8 @@ class Reticulum:
|
|||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
try:
|
try:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"destination_data": "retain", "destination_hash": destination_hash})
|
rpc_connection.send_bytes(mp.packb({"destination_data": "retain", "destination_hash": destination_hash}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -1271,8 +1278,8 @@ class Reticulum:
|
|||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
try:
|
try:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"destination_data": "unretain", "destination_hash": destination_hash})
|
rpc_connection.send_bytes(mp.packb({"destination_data": "unretain", "destination_hash": destination_hash}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -1288,8 +1295,8 @@ class Reticulum:
|
|||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
try:
|
try:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"identity_data": "retain", "identity_hash": identity_hash})
|
rpc_connection.send_bytes(mp.packb({"identity_data": "retain", "identity_hash": identity_hash}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -1301,8 +1308,8 @@ class Reticulum:
|
|||||||
def get_interface_stats(self):
|
def get_interface_stats(self):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"get": "interface_stats"})
|
rpc_connection.send_bytes(mp.packb({"get": "interface_stats"}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
else:
|
else:
|
||||||
interfaces = []
|
interfaces = []
|
||||||
@@ -1491,8 +1498,8 @@ class Reticulum:
|
|||||||
def get_path_table(self, max_hops=None):
|
def get_path_table(self, max_hops=None):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"get": "path_table", "max_hops": max_hops})
|
rpc_connection.send_bytes(mp.packb({"get": "path_table", "max_hops": max_hops}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -1515,8 +1522,8 @@ class Reticulum:
|
|||||||
def get_rate_table(self):
|
def get_rate_table(self):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"get": "rate_table"})
|
rpc_connection.send_bytes(mp.packb({"get": "rate_table"}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -1536,8 +1543,8 @@ class Reticulum:
|
|||||||
def drop_path(self, destination):
|
def drop_path(self, destination):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"drop": "path", "destination_hash": destination})
|
rpc_connection.send_bytes(mp.packb({"drop": "path", "destination_hash": destination}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -1546,8 +1553,8 @@ class Reticulum:
|
|||||||
def drop_all_via(self, transport_hash):
|
def drop_all_via(self, transport_hash):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"drop": "all_via", "destination_hash": transport_hash})
|
rpc_connection.send_bytes(mp.packb({"drop": "all_via", "destination_hash": transport_hash}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -1562,8 +1569,8 @@ class Reticulum:
|
|||||||
def drop_announce_queues(self):
|
def drop_announce_queues(self):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"drop": "announce_queues"})
|
rpc_connection.send_bytes(mp.packb({"drop": "announce_queues"}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -1572,8 +1579,8 @@ class Reticulum:
|
|||||||
def get_next_hop_if_name(self, destination):
|
def get_next_hop_if_name(self, destination):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"get": "next_hop_if_name", "destination_hash": destination})
|
rpc_connection.send_bytes(mp.packb({"get": "next_hop_if_name", "destination_hash": destination}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -1583,8 +1590,8 @@ class Reticulum:
|
|||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
try:
|
try:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"get": "first_hop_timeout", "destination_hash": destination})
|
rpc_connection.send_bytes(mp.packb({"get": "first_hop_timeout", "destination_hash": destination}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
|
|
||||||
if self.is_connected_to_shared_instance and hasattr(self, "_force_shared_instance_bitrate") and self._force_shared_instance_bitrate:
|
if self.is_connected_to_shared_instance and hasattr(self, "_force_shared_instance_bitrate") and self._force_shared_instance_bitrate:
|
||||||
simulated_latency = ((1/self._force_shared_instance_bitrate)*8)*RNS.Reticulum.MTU
|
simulated_latency = ((1/self._force_shared_instance_bitrate)*8)*RNS.Reticulum.MTU
|
||||||
@@ -1602,8 +1609,8 @@ class Reticulum:
|
|||||||
def get_next_hop(self, destination):
|
def get_next_hop(self, destination):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"get": "next_hop", "destination_hash": destination})
|
rpc_connection.send_bytes(mp.packb({"get": "next_hop", "destination_hash": destination}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
@@ -1613,8 +1620,8 @@ class Reticulum:
|
|||||||
def get_link_count(self):
|
def get_link_count(self):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"get": "link_count"})
|
rpc_connection.send_bytes(mp.packb({"get": "link_count"}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -1623,8 +1630,8 @@ class Reticulum:
|
|||||||
def get_packet_rssi(self, packet_hash):
|
def get_packet_rssi(self, packet_hash):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"get": "packet_rssi", "packet_hash": packet_hash})
|
rpc_connection.send_bytes(mp.packb({"get": "packet_rssi", "packet_hash": packet_hash}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -1637,8 +1644,8 @@ class Reticulum:
|
|||||||
def get_packet_snr(self, packet_hash):
|
def get_packet_snr(self, packet_hash):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"get": "packet_snr", "packet_hash": packet_hash})
|
rpc_connection.send_bytes(mp.packb({"get": "packet_snr", "packet_hash": packet_hash}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -1651,8 +1658,8 @@ class Reticulum:
|
|||||||
def get_packet_q(self, packet_hash):
|
def get_packet_q(self, packet_hash):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"get": "packet_q", "packet_hash": packet_hash})
|
rpc_connection.send_bytes(mp.packb({"get": "packet_q", "packet_hash": packet_hash}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -1674,8 +1681,8 @@ class Reticulum:
|
|||||||
def get_blackholed_identities(self):
|
def get_blackholed_identities(self):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"get": "blackholed_identities"})
|
rpc_connection.send_bytes(mp.packb({"get": "blackholed_identities"}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else: return RNS.Transport.blackholed_identities
|
else: return RNS.Transport.blackholed_identities
|
||||||
@@ -1688,8 +1695,8 @@ class Reticulum:
|
|||||||
|
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"get": "is_blackholed", "identity_hash": identity_hash})
|
rpc_connection.send_bytes(mp.packb({"get": "is_blackholed", "identity_hash": identity_hash}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else: return identity_hash in RNS.Transport.blackholed_identities
|
else: return identity_hash in RNS.Transport.blackholed_identities
|
||||||
@@ -1699,8 +1706,8 @@ class Reticulum:
|
|||||||
else:
|
else:
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"blackhole_identity": identity_hash, "until": until, "reason": reason})
|
rpc_connection.send_bytes(mp.packb({"blackhole_identity": identity_hash, "until": until, "reason": reason}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else: return RNS.Transport.blackhole_identity(identity_hash, until=until, reason=reason)
|
else: return RNS.Transport.blackhole_identity(identity_hash, until=until, reason=reason)
|
||||||
@@ -1710,8 +1717,8 @@ class Reticulum:
|
|||||||
else:
|
else:
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = self.get_rpc_client()
|
rpc_connection = self.get_rpc_client()
|
||||||
rpc_connection.send({"unblackhole_identity": identity_hash})
|
rpc_connection.send_bytes(mp.packb({"unblackhole_identity": identity_hash}))
|
||||||
response = rpc_connection.recv()
|
response = mp.unpackb(rpc_connection.recv_bytes())
|
||||||
return response
|
return response
|
||||||
|
|
||||||
else: return RNS.Transport.unblackhole_identity(identity_hash)
|
else: return RNS.Transport.unblackhole_identity(identity_hash)
|
||||||
|
|||||||
+1
-1
@@ -1755,6 +1755,7 @@ class Transport:
|
|||||||
random_blob = packet.data[RNS.Identity.KEYSIZE//8+RNS.Identity.NAME_HASH_LENGTH//8:RNS.Identity.KEYSIZE//8+RNS.Identity.NAME_HASH_LENGTH//8+10]
|
random_blob = packet.data[RNS.Identity.KEYSIZE//8+RNS.Identity.NAME_HASH_LENGTH//8:RNS.Identity.KEYSIZE//8+RNS.Identity.NAME_HASH_LENGTH//8+10]
|
||||||
random_blobs = []
|
random_blobs = []
|
||||||
with Transport.inbound_announce_lock:
|
with Transport.inbound_announce_lock:
|
||||||
|
announced_destination_known |= packet.destination_hash in Transport.path_table
|
||||||
if announced_destination_known:
|
if announced_destination_known:
|
||||||
random_blobs = Transport.path_table[packet.destination_hash][IDX_PT_RANDBLOBS]
|
random_blobs = Transport.path_table[packet.destination_hash][IDX_PT_RANDBLOBS]
|
||||||
|
|
||||||
@@ -1827,7 +1828,6 @@ class Transport:
|
|||||||
else:
|
else:
|
||||||
# If this destination is unknown in our table
|
# If this destination is unknown in our table
|
||||||
# we should add it
|
# we should add it
|
||||||
Transport.mark_path_unknown_state(packet.destination_hash)
|
|
||||||
should_add = True
|
should_add = True
|
||||||
|
|
||||||
if should_add:
|
if should_add:
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
__version__ = "1.3.2"
|
__version__ = "1.3.5"
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
# Sphinx build info version 1
|
# Sphinx build info version 1
|
||||||
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
|
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||||
config: af83acf0d95a344cb0386ad87adf5695
|
config: 413fd91f2c1dcbed812c846a1cc95e82
|
||||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||||
|
|||||||
@@ -1326,7 +1326,7 @@ Each document is a numbered directory containing:
|
|||||||
|
|
||||||
**Nomad Network Interface**
|
**Nomad Network Interface**
|
||||||
|
|
||||||
When the Nomad Network page node is enabled, work documents are viewable through the web interface. The work page lists all documents with their status, and clicking a document shows its full content and updates.
|
When the Nomad Network page node is enabled, work documents are viewable through the nomadnet interface. The work page lists all documents with their status, and clicking a document shows its full content and updates.
|
||||||
|
|
||||||
Cryptographic Attribution
|
Cryptographic Attribution
|
||||||
-------------------------
|
-------------------------
|
||||||
@@ -1490,4 +1490,23 @@ To view signature information for commits, use Git's standard ``--show-signature
|
|||||||
|
|
||||||
Refactored module
|
Refactored module
|
||||||
|
|
||||||
The output shows whether the commit signature is valid, and whether the author field matches the signing identity.
|
The output shows whether the commit signature is valid, and whether the author field matches the signing identity.
|
||||||
|
|
||||||
|
.. tip::
|
||||||
|
If you want to display both the identity hash and LXMF address for authors, you can generate a ``.mailmap`` file that resolves identities to LXMF addresses with the following script:
|
||||||
|
|
||||||
|
.. code::
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||||
|
cd $DIR
|
||||||
|
|
||||||
|
id_regex="<([0-9a-f]{32})( .*)*>"
|
||||||
|
extract_id="s/.*$id_regex/\1/g"
|
||||||
|
|
||||||
|
rm -f .mailmap
|
||||||
|
git shortlog -se | grep -Ee "$id_regex" | sed -r "$extract_id" | while read -r id ; do
|
||||||
|
if lxmf=$(rnid -i $id -H lxmf.delivery | grep -Ee "destination for this Identity is" | sed -r "$extract_id"); then
|
||||||
|
echo "<$id lxmf:$lxmf> <$id>" >> .mailmap
|
||||||
|
fi
|
||||||
|
done
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
const DOCUMENTATION_OPTIONS = {
|
const DOCUMENTATION_OPTIONS = {
|
||||||
VERSION: '1.3.2',
|
VERSION: '1.3.5',
|
||||||
LANGUAGE: 'en',
|
LANGUAGE: 'en',
|
||||||
COLLAPSE_INDEX: false,
|
COLLAPSE_INDEX: false,
|
||||||
BUILDER: 'html',
|
BUILDER: 'html',
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Distributed Development - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Distributed Development - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -431,7 +431,7 @@
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Code Examples - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Code Examples - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -3648,7 +3648,7 @@
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>An Explanation of Reticulum for Human Beings - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>An Explanation of Reticulum for Human Beings - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#"><link rel="search" title="Search" href="search.html">
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#"><link rel="search" title="Search" href="search.html">
|
||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 --><title>Index - Reticulum Network Stack 1.3.2 documentation</title>
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 --><title>Index - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -202,7 +202,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -846,7 +846,7 @@
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Getting Started Fast - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Getting Started Fast - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -776,7 +776,7 @@ section of this manual.</p>
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
+23
-5
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Git Over Reticulum - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Git Over Reticulum - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -1306,7 +1306,7 @@ adm:9710b86ba12c42d1d8f30f74fe509286
|
|||||||
<li><p><code class="docutils literal notranslate"><span class="pre">N</span></code> - Numbered comment files (msgpack format)</p></li>
|
<li><p><code class="docutils literal notranslate"><span class="pre">N</span></code> - Numbered comment files (msgpack format)</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
<p><strong>Nomad Network Interface</strong></p>
|
<p><strong>Nomad Network Interface</strong></p>
|
||||||
<p>When the Nomad Network page node is enabled, work documents are viewable through the web interface. The work page lists all documents with their status, and clicking a document shows its full content and updates.</p>
|
<p>When the Nomad Network page node is enabled, work documents are viewable through the nomadnet interface. The work page lists all documents with their status, and clicking a document shows its full content and updates.</p>
|
||||||
</section>
|
</section>
|
||||||
<section id="cryptographic-attribution">
|
<section id="cryptographic-attribution">
|
||||||
<h3>Cryptographic Attribution<a class="headerlink" href="#cryptographic-attribution" title="Link to this heading">¶</a></h3>
|
<h3>Cryptographic Attribution<a class="headerlink" href="#cryptographic-attribution" title="Link to this heading">¶</a></h3>
|
||||||
@@ -1437,6 +1437,24 @@ Date: Mon Jan 15 09:30:00 2026 +0100
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<p>The output shows whether the commit signature is valid, and whether the author field matches the signing identity.</p>
|
<p>The output shows whether the commit signature is valid, and whether the author field matches the signing identity.</p>
|
||||||
|
<div class="admonition tip">
|
||||||
|
<p class="admonition-title">Tip</p>
|
||||||
|
<p>If you want to display both the identity hash and LXMF address for authors, you can generate a <code class="docutils literal notranslate"><span class="pre">.mailmap</span></code> file that resolves identities to LXMF addresses with the following script:</p>
|
||||||
|
<div class="highlight-#!/bin/bash notranslate"><div class="highlight"><pre><span></span>DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||||
|
cd $DIR
|
||||||
|
|
||||||
|
id_regex="<([0-9a-f]{32})( .*)*>"
|
||||||
|
extract_id="s/.*$id_regex/\1/g"
|
||||||
|
|
||||||
|
rm -f .mailmap
|
||||||
|
git shortlog -se | grep -Ee "$id_regex" | sed -r "$extract_id" | while read -r id ; do
|
||||||
|
if lxmf=$(rnid -i $id -H lxmf.delivery | grep -Ee "destination for this Identity is" | sed -r "$extract_id"); then
|
||||||
|
echo "<$id lxmf:$lxmf> <$id>" >> .mailmap
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
@@ -1576,7 +1594,7 @@ Date: Mon Jan 15 09:30:00 2026 +0100
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Communications Hardware - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Communications Hardware - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -676,7 +676,7 @@ can be used with Reticulum. This includes virtual software modems such as
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="#"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="#"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -719,7 +719,7 @@ to participate in the development of Reticulum itself.</p>
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Configuring Interfaces - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Configuring Interfaces - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -1774,7 +1774,7 @@ interface basis under the relevant interface configuration section.</p>
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Reticulum License - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Reticulum License - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -345,7 +345,7 @@ SOFTWARE.
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Building Networks - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Building Networks - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -664,7 +664,7 @@ differently than a mobile device roaming between radio cells.</p>
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>API Reference - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>API Reference - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -2519,7 +2519,7 @@ will announce it.</p>
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<meta name="robots" content="noindex" />
|
<meta name="robots" content="noindex" />
|
||||||
<title>Search - Reticulum Network Stack 1.3.2 documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<title>Search - Reticulum Network Stack 1.3.5 documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="#" role="search">
|
</a><form class="sidebar-search-container" method="get" action="#" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -304,7 +304,7 @@
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Programs Using Reticulum - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Programs Using Reticulum - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -513,7 +513,7 @@ plugin system for expandability.</p>
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Support Reticulum - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Support Reticulum - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -383,7 +383,7 @@ circumstances, so we rely on old-fashioned human feedback.</p>
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Understanding Reticulum - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Understanding Reticulum - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -1116,7 +1116,7 @@ those risks are acceptable to you.</p>
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Using Reticulum on Your System - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Using Reticulum on Your System - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -1639,7 +1639,7 @@ systemctl --user enable rnsd.service
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>What is Reticulum? - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>What is Reticulum? - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -505,7 +505,7 @@ network, and vice versa.</p>
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
|
||||||
|
|
||||||
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
|
||||||
<title>Zen of Reticulum - Reticulum Network Stack 1.3.2 documentation</title>
|
<title>Zen of Reticulum - Reticulum Network Stack 1.3.5 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.2 documentation</div></a>
|
<a href="index.html"><div class="brand">Reticulum Network Stack 1.3.5 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@@ -204,7 +204,7 @@
|
|||||||
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.2 documentation</span>
|
<span class="sidebar-brand-text">Reticulum Network Stack 1.3.5 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
||||||
@@ -677,7 +677,7 @@ Imagine a messaging app. You write it once. It works on a laptop connected to fi
|
|||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
</div><script src="_static/documentation_options.js?v=8ca9e7a0"></script>
|
</div><script src="_static/documentation_options.js?v=4720776d"></script>
|
||||||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
|
||||||
|
|||||||
@@ -1250,7 +1250,7 @@ Each document is a numbered directory containing:
|
|||||||
|
|
||||||
**Nomad Network Interface**
|
**Nomad Network Interface**
|
||||||
|
|
||||||
When the Nomad Network page node is enabled, work documents are viewable through the web interface. The work page lists all documents with their status, and clicking a document shows its full content and updates.
|
When the Nomad Network page node is enabled, work documents are viewable through the nomadnet interface. The work page lists all documents with their status, and clicking a document shows its full content and updates.
|
||||||
|
|
||||||
### Cryptographic Attribution
|
### Cryptographic Attribution
|
||||||
|
|
||||||
|
|||||||
+21
-2
@@ -1326,7 +1326,7 @@ Each document is a numbered directory containing:
|
|||||||
|
|
||||||
**Nomad Network Interface**
|
**Nomad Network Interface**
|
||||||
|
|
||||||
When the Nomad Network page node is enabled, work documents are viewable through the web interface. The work page lists all documents with their status, and clicking a document shows its full content and updates.
|
When the Nomad Network page node is enabled, work documents are viewable through the nomadnet interface. The work page lists all documents with their status, and clicking a document shows its full content and updates.
|
||||||
|
|
||||||
Cryptographic Attribution
|
Cryptographic Attribution
|
||||||
-------------------------
|
-------------------------
|
||||||
@@ -1490,4 +1490,23 @@ To view signature information for commits, use Git's standard ``--show-signature
|
|||||||
|
|
||||||
Refactored module
|
Refactored module
|
||||||
|
|
||||||
The output shows whether the commit signature is valid, and whether the author field matches the signing identity.
|
The output shows whether the commit signature is valid, and whether the author field matches the signing identity.
|
||||||
|
|
||||||
|
.. tip::
|
||||||
|
If you want to display both the identity hash and LXMF address for authors, you can generate a ``.mailmap`` file that resolves identities to LXMF addresses with the following script:
|
||||||
|
|
||||||
|
.. code::
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||||
|
cd $DIR
|
||||||
|
|
||||||
|
id_regex="<([0-9a-f]{32})( .*)*>"
|
||||||
|
extract_id="s/.*$id_regex/\1/g"
|
||||||
|
|
||||||
|
rm -f .mailmap
|
||||||
|
git shortlog -se | grep -Ee "$id_regex" | sed -r "$extract_id" | while read -r id ; do
|
||||||
|
if lxmf=$(rnid -i $id -H lxmf.delivery | grep -Ee "destination for this Identity is" | sed -r "$extract_id"); then
|
||||||
|
echo "<$id lxmf:$lxmf> <$id>" >> .mailmap
|
||||||
|
fi
|
||||||
|
done
|
||||||
Binary file not shown.
Reference in New Issue
Block a user