diff --git a/Changelog.md b/Changelog.md index e0b58ac..da0e461 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,50 @@ +### 2024-09-25: RNS β 0.8.0 + +This maintenance release improves the interface statistics API, and updates documentation. + +**Changes** +- Added additional information to interface statistics +- Updated documentation + +**Release Hashes** +``` +fa5ff6d98230693be6805bb9a94585a6f54ec0af9cba15b771d4e676f140dc43 rns-0.8.0-py3-none-any.whl +ba20f688b69ae861c8aced251e10242a358fea15da6c22df10d4fc8846c9bf48 rnspure-0.8.0-py3-none-any.whl +``` + +### 2024-09-24: RNS β 0.7.9 + +This maintenance release improves transport reliability in certain (rare) cases. + +**Changes** +- Added handling of a transport edge-case + +**Release Hashes** +``` +4c20c46df021d366386d497145024396f904666b0de22a92f9e5c937886ea39d rns-0.7.9-py3-none-any.whl +97d26282df929eca732a15523bc9d7f66387a93ffd911e8063c94c3f8f6ad73c rnspure-0.7.9-py3-none-any.whl +``` + +### 2024-09-18: RNS β 0.7.8 + +This maintenance release adds support for the openCom XL to `rnodeconf`, fixes a number of bugs, and also includes a few fine-tunings of timing parameters. + +Thanks to @liamcottle and @jacobeva for contributing to this release! + +**Changes** +- Added interface prioritisation according to reported bitrate +- Added support for openCom XL to `rnodeconf` +- Added performance profiler to built-in debugging tools +- Tuned link traffic timeouts +- Fixed a module import error in AX25KissInterface +- Fixed a missing exception on erroneous destination initialisation + +**Release Hashes** +``` +33fb9443e3b327d1a9125baa52d8ec3208a089dda62f749b819e0a94c06730f9 rns-0.7.8-py3-none-any.whl +cdced2adef4ead146239d0510fe2b9d62f69136bcd54b22d1080686fb56f9927 rnspure-0.7.8-py3-none-any.whl +``` + ### 2024-09-09: RNS β 0.7.7 This release adds support for automatic encryption key ratcheting for all packets, not just those sent over Reticulum links. In practical terms, this adds forward secrecy to packets sent with the raw `Packet` API. diff --git a/README.md b/README.md index 68182ba..0c55bcc 100755 --- a/README.md +++ b/README.md @@ -41,21 +41,23 @@ For more info, see [reticulum.network](https://reticulum.network/) and [the FAQ ## Notable Features - Coordination-less globally unique addressing and identification -- Fully self-configuring multi-hop routing +- Fully self-configuring multi-hop routing over heterogeneous carriers - Initiator anonymity, communicate without revealing your identity + - Reticulum does not include source addresses on any packets - Asymmetric X25519 encryption and Ed25519 signatures as a basis for all communication -- Forward Secrecy with ephemeral Elliptic Curve Diffie-Hellman keys on Curve25519 + - The foundational Reticulum Identity Keys are 512-bit Elliptic Curve keysets +- Forward Secrecy is available for all communication types, both for single packets and over links - Reticulum uses the following format for encrypted tokens: - - Keys are ephemeral and derived from an ECDH key exchange on Curve25519 + - Ephemeral per-packet and link keys and derived from an ECDH key exchange on Curve25519 - AES-128 in CBC mode with PKCS7 padding - HMAC using SHA256 for authentication - IVs are generated through os.urandom() - Unforgeable packet delivery confirmations -- A variety of supported interface types +- A large variety of supported interface types - An intuitive and easy-to-use API - Reliable and efficient transfer of arbitrary amounts of data - Reticulum can handle a few bytes of data or files of many gigabytes - - Sequencing, transfer coordination and checksumming are automatic + - Sequencing, compression, transfer coordination and checksumming are automatic - The API is very easy to use, and provides transfer progress - Lightweight, flexible and expandable Request/Response mechanism - Efficient link establishment @@ -298,14 +300,15 @@ Are certain features in the development roadmap are important to you or your organisation? Make them a reality quickly by sponsoring their implementation. ## Cryptographic Primitives -Reticulum uses a simple suite of efficient, strong and modern cryptographic +Reticulum uses a simple suite of efficient, strong and well-tested cryptographic primitives, with widely available implementations that can be used both on -general-purpose CPUs and on microcontrollers. The necessary primitives are: +general-purpose CPUs and on microcontrollers. The utilised primitives are: -- Ed25519 for signatures -- X22519 for ECDH key exchanges +- Reticulum Identity Keys are 512-bit Curve25519 keysets + - A 256-bit Ed25519 key for signatures + - A 256-bit X22519 key for ECDH key exchanges - HKDF for key derivation -- Modified Fernet for encrypted tokens +- Encrypted tokens are based on the [Fernet spec](https://github.com/fernet/spec/) - Ephemeral keys derived from an ECDH key exchange on Curve25519 - AES-128 in CBC mode with PKCS7 padding - HMAC using SHA256 for message authentication diff --git a/RNS/Interfaces/Android/RNodeInterface.py b/RNS/Interfaces/Android/RNodeInterface.py index df3db02..9d6ecb2 100644 --- a/RNS/Interfaces/Android/RNodeInterface.py +++ b/RNS/Interfaces/Android/RNodeInterface.py @@ -81,6 +81,7 @@ class KISS(): PLATFORM_AVR = 0x90 PLATFORM_ESP32 = 0x80 + PLATFORM_NRF52 = 0x70 @staticmethod def escape(data): @@ -595,7 +596,7 @@ class RNodeInterface(Interface): if not self.detected: raise IOError("Could not detect device") else: - if self.platform == KISS.PLATFORM_ESP32: + if self.platform == KISS.PLATFORM_ESP32 or self.platform == KISS.PLATFORM_NRF52: self.display = True if not self.firmware_ok: diff --git a/RNS/Interfaces/RNodeInterface.py b/RNS/Interfaces/RNodeInterface.py index e0c103f..c1143ac 100644 --- a/RNS/Interfaces/RNodeInterface.py +++ b/RNS/Interfaces/RNodeInterface.py @@ -80,6 +80,7 @@ class KISS(): PLATFORM_AVR = 0x90 PLATFORM_ESP32 = 0x80 + PLATFORM_NRF52 = 0x70 @staticmethod def escape(data): @@ -285,7 +286,7 @@ class RNodeInterface(Interface): RNS.log("Could not detect device for "+str(self), RNS.LOG_ERROR) self.serial.close() else: - if self.platform == KISS.PLATFORM_ESP32: + if self.platform == KISS.PLATFORM_ESP32 or self.platform == KISS.PLATFORM_NRF52: self.display = True RNS.log("Serial port "+self.port+" is now open") diff --git a/RNS/Interfaces/RNodeMultiInterface.py b/RNS/Interfaces/RNodeMultiInterface.py index 61bee08..2eb23f9 100644 --- a/RNS/Interfaces/RNodeMultiInterface.py +++ b/RNS/Interfaces/RNodeMultiInterface.py @@ -106,6 +106,7 @@ class KISS(): PLATFORM_AVR = 0x90 PLATFORM_ESP32 = 0x80 + PLATFORM_NRF52 = 0x70 SX127X = 0x00 SX1276 = 0x01 @@ -297,7 +298,7 @@ class RNodeMultiInterface(Interface): RNS.log("Could not detect device for "+str(self), RNS.LOG_ERROR) self.serial.close() else: - if self.platform == KISS.PLATFORM_ESP32: + if self.platform == KISS.PLATFORM_ESP32 or self.platform == KISS.PLATFORM_NRF52: self.display = True RNS.log("Serial port "+self.port+" is now open") diff --git a/RNS/Link.py b/RNS/Link.py index cac791c..01641b1 100644 --- a/RNS/Link.py +++ b/RNS/Link.py @@ -125,7 +125,7 @@ class Link: link.last_inbound = time.time() link.start_watchdog() - RNS.log("Incoming link request "+str(link)+" accepted", RNS.LOG_DEBUG) + RNS.log("Incoming link request "+str(link)+" accepted on "+str(link.attached_interface), RNS.LOG_DEBUG) return link except Exception as e: @@ -762,7 +762,7 @@ class Link: self.watchdog_lock = True if not self.status == Link.CLOSED and not (self.initiator and packet.context == RNS.Packet.KEEPALIVE and packet.data == bytes([0xFF])): if packet.receiving_interface != self.attached_interface: - RNS.log("Link-associated packet received on unexpected interface! Someone might be trying to manipulate your communication!", RNS.LOG_ERROR) + RNS.log(f"Link-associated packet received on unexpected interface {packet.receiving_interface} instead of {self.attached_interface}! Someone might be trying to manipulate your communication!", RNS.LOG_ERROR) else: self.last_inbound = time.time() if packet.context != RNS.Packet.KEEPALIVE: diff --git a/RNS/Reticulum.py b/RNS/Reticulum.py index 30e4acc..427fa99 100755 --- a/RNS/Reticulum.py +++ b/RNS/Reticulum.py @@ -1258,6 +1258,10 @@ class Reticulum: else: ifstats["clients"] = None + if hasattr(interface, "parent_interface") and interface.parent_interface != None: + ifstats["parent_interface_name"] = str(interface.parent_interface) + ifstats["parent_interface_hash"] = interface.parent_interface.get_hash() + if hasattr(interface, "i2p") and hasattr(interface, "connectable"): if interface.connectable: ifstats["i2p_connectable"] = True @@ -1323,6 +1327,9 @@ class Reticulum: ifstats["announce_queue"] = None ifstats["name"] = str(interface) + ifstats["short_name"] = str(interface.name) + ifstats["hash"] = interface.get_hash() + ifstats["type"] = str(type(interface).__name__) ifstats["rxb"] = interface.rxb ifstats["txb"] = interface.txb ifstats["incoming_announce_frequency"] = interface.incoming_announce_frequency() diff --git a/RNS/Transport.py b/RNS/Transport.py index 1d5c158..1ffd332 100755 --- a/RNS/Transport.py +++ b/RNS/Transport.py @@ -1736,8 +1736,19 @@ class Transport: if packet.destination_type == RNS.Destination.LINK: for link in Transport.active_links: if link.link_id == packet.destination_hash: - packet.link = link - link.receive(packet) + if link.attached_interface == packet.receiving_interface: + packet.link = link + link.receive(packet) + else: + # In the strange and rare case that an interface + # is partly malfunctioning, and a link-associated + # packet is being received on an interface that + # has failed sending, and transport has failed over + # to another path, we remove this packet hash from + # the filter hashlist so the link can receive the + # packet when it finally arrives over another path. + while packet.packet_hash in Transport.packet_hashlist: + Transport.packet_hashlist.remove(packet.packet_hash) else: for destination in Transport.destinations: if destination.hash == packet.destination_hash and destination.type == packet.destination_type: diff --git a/RNS/Utilities/rnodeconf.py b/RNS/Utilities/rnodeconf.py index 3a6d93f..0747348 100755 --- a/RNS/Utilities/rnodeconf.py +++ b/RNS/Utilities/rnodeconf.py @@ -81,7 +81,9 @@ class KISS(): CMD_BLINK = 0x30 CMD_RANDOM = 0x40 CMD_DISP_INT = 0x45 + CMD_NP_INT = 0x65 CMD_DISP_ADR = 0x63 + CMD_DISP_BLNK = 0x64 CMD_BT_CTRL = 0x46 CMD_BT_PIN = 0x62 CMD_BOARD = 0x47 @@ -637,6 +639,20 @@ class RNode(): if written != len(kiss_command): raise IOError("An IO error occurred while sending display intensity command to device") + def set_display_blanking(self, blanking_timeout): + data = bytes([blanking_timeout & 0xFF]) + kiss_command = bytes([KISS.FEND])+bytes([KISS.CMD_DISP_BLNK])+data+bytes([KISS.FEND]) + written = self.serial.write(kiss_command) + if written != len(kiss_command): + raise IOError("An IO error occurred while sending display blanking timeout command to device") + + def set_neopixel_intensity(self, intensity): + data = bytes([intensity & 0xFF]) + kiss_command = bytes([KISS.FEND])+bytes([KISS.CMD_NP_INT])+data+bytes([KISS.FEND]) + written = self.serial.write(kiss_command) + if written != len(kiss_command): + raise IOError("An IO error occurred while sending NeoPixel intensity command to device") + def set_display_address(self, address): data = bytes([address & 0xFF]) kiss_command = bytes([KISS.FEND])+bytes([KISS.CMD_DISP_ADR])+data+bytes([KISS.FEND]) @@ -1261,8 +1277,11 @@ def main(): parser.add_argument("-p", "--bluetooth-pair", action="store_true", help="Put device into bluetooth pairing mode") parser.add_argument("-D", "--display", action="store", metavar="i", type=int, default=None, help="Set display intensity (0-255)") + parser.add_argument("-t", "--timeout", action="store", metavar="s", type=int, default=None, help="Set display timeout in seconds, 0 to disable") parser.add_argument("--display-addr", action="store", metavar="byte", type=str, default=None, help="Set display address as hex byte (00 - FF)") + parser.add_argument("--np", action="store", metavar="i", type=int, default=None, help="Set NeoPixel intensity (0-255)") + parser.add_argument("--freq", action="store", metavar="Hz", type=int, default=None, help="Frequency in Hz for TNC mode") parser.add_argument("--bw", action="store", metavar="Hz", type=int, default=None, help="Bandwidth in Hz for TNC mode") parser.add_argument("--txp", action="store", metavar="dBm", type=int, default=None, help="TX power in dBm for TNC mode") @@ -3168,6 +3187,27 @@ def main(): RNS.log("Setting display intensity to "+str(di)) rnode.set_display_intensity(di) + if isinstance(args.timeout, int): + di = args.timeout + if di < 0: + di = 0 + if di > 255: + di = 255 + if di == 0: + RNS.log("Disabling display blanking") + else: + RNS.log("Setting display timeout to "+str(di)) + rnode.set_display_blanking(di) + + if isinstance(args.np, int): + di = args.np + if di < 0: + di = 0 + if di > 255: + di = 255 + RNS.log("Setting NeoPixel intensity to "+str(di)) + rnode.set_neopixel_intensity(di) + if isinstance(args.display_addr, str): set_addr = False try: diff --git a/RNS/_version.py b/RNS/_version.py index 894cebc..777f190 100644 --- a/RNS/_version.py +++ b/RNS/_version.py @@ -1 +1 @@ -__version__ = "0.7.8" +__version__ = "0.8.0" diff --git a/Roadmap.md b/Roadmap.md index 4c68a69..e00e813 100644 --- a/Roadmap.md +++ b/Roadmap.md @@ -14,15 +14,15 @@ This document outlines the currently established development roadmap for Reticul ## Currently Active Work Areas For each release cycle of Reticulum, improvements and additions from the five [Primary Efforts](#primary-efforts) are selected as active work areas, and can be expected to be included in the upcoming releases within that cycle. While not entirely set in stone for each release cycle, they serve as a pointer of what to expect in the near future. -- The current `0.7.x` release cycle aims at completing - - [x] Automatic asynchronous key ratcheting for non-link traffic - - [ ] API improvements based on real-world usage and feedback +- The current `0.8.x` release cycle aims at completing + - [ ] Hot-pluggable interface system + - [ ] External interface plugins + - [ ] Network-wide path balancing and multi-pathing - [ ] Expanded hardware support - [ ] Overhauling and updating the documentation - [ ] Distributed Destination Naming System - - [ ] Create a standalone RNS Daemon app for Android - - [ ] Network-wide path balancing - - [ ] Add automatic retries to all use cases of the `Request` API + - [ ] A standalone RNS Daemon app for Android + - [ ] Addding automatic retries to all use cases of the `Request` API - [ ] Performance and memory optimisations of the Python reference implementation - [ ] Fixing bugs discovered while operating Reticulum systems and applications @@ -38,17 +38,9 @@ These efforts are aimed at improving the ease of which Reticulum is understood, - Update announce description - Add in-depth explanation of the IFAC system - Software - - Update Sideband screenshots - - Update Sideband description - - Update NomadNet screenshots - - Update Sideband screenshots - - Installation - - [x] Add a *Reticulum On Raspberry Pi* section - - [x] Update *Reticulum On Android* section if necessary - - [x] Update Android install documentation. + - Update software descriptions and screenshots - Communications hardware section - Add information about RNode external displays. - - [x] Packet radio modems. - Possibly add other relevant types here as well. - Setup *Best Practices For...* / *Installation Examples* section. - Home or office (example) @@ -68,6 +60,8 @@ These efforts seek to broaden the universality of the Reticulum software and har ### Functionality These efforts aim to expand and improve the core functionality and reliability of Reticulum. +- Add support for user-supplied external interface drivers +- Add interface hot-plug and live up/down control to running instances - Add automatic retries to all use cases of the `Request` API - Network-wide path balancing - Distributed Destination Naming System @@ -85,10 +79,10 @@ These effors seek to make Reticulum easier to use and operate, and to expand the ### Interfaceability These efforts aim to expand the types of physical and virtual interfaces that Reticulum can natively use to transport data. -- Filesystem interface - Plain ESP32 devices (ESP-Now, WiFi, Bluetooth, etc.) - More LoRa transceivers - AT-compatible modems +- Filesystem interface - Direct SDR Support - Optical mediums - IR Transceivers @@ -108,7 +102,7 @@ The Reticulum ecosystem is enriched by several other software and hardware proje This section lists, in no particular order, various important efforts that would be beneficial to the goals of Reticulum. - The [RNode](https://unsigned.io/rnode/) project - - [ ] Create a WebUSB-based bootstrapping utility, and integrate this directly into the [RNode Bootstrap Console](#), both on-device, and on an Internet-reachable copy. This will make it much easier to create new RNodes for average users. + - [x] Create a WebUSB-based bootstrapping utility, and integrate this directly into the [RNode Bootstrap Console](#), both on-device, and on an Internet-reachable copy. This will make it much easier to create new RNodes for average users. ## Release History diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index 1b3d3d0..43d7f00 100644 Binary files a/docs/Reticulum Manual.epub and b/docs/Reticulum Manual.epub differ diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index 74c4f2b..5cd8e13 100644 Binary files a/docs/Reticulum Manual.pdf and b/docs/Reticulum Manual.pdf differ diff --git a/docs/manual/.buildinfo b/docs/manual/.buildinfo index d1fb9b1..0880765 100644 --- a/docs/manual/.buildinfo +++ b/docs/manual/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 895ecce87b0f2ca7fbb104a33248dc3e +config: 94939fd3ce633867445ef29897b42133 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/manual/_static/documentation_options.js b/docs/manual/_static/documentation_options.js index 01b940f..5ef1ae7 100644 --- a/docs/manual/_static/documentation_options.js +++ b/docs/manual/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.7.7 beta', + VERSION: '0.8.0 beta', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/manual/examples.html b/docs/manual/examples.html index e600db9..808b98c 100644 --- a/docs/manual/examples.html +++ b/docs/manual/examples.html @@ -6,7 +6,7 @@ - Code Examples - Reticulum Network Stack 0.7.7 beta documentation + Code Examples - Reticulum Network Stack 0.8.0 beta documentation @@ -141,7 +141,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -167,7 +167,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -167,7 +167,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/docs/manual/genindex.html b/docs/manual/genindex.html index fa9df49..e744472 100644 --- a/docs/manual/genindex.html +++ b/docs/manual/genindex.html @@ -4,7 +4,7 @@ - Index - Reticulum Network Stack 0.7.7 beta documentation + Index - Reticulum Network Stack 0.8.0 beta documentation @@ -139,7 +139,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -165,7 +165,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/docs/manual/gettingstartedfast.html b/docs/manual/gettingstartedfast.html index ab10dc8..0593713 100644 --- a/docs/manual/gettingstartedfast.html +++ b/docs/manual/gettingstartedfast.html @@ -6,7 +6,7 @@ - Getting Started Fast - Reticulum Network Stack 0.7.7 beta documentation + Getting Started Fast - Reticulum Network Stack 0.8.0 beta documentation @@ -141,7 +141,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -167,7 +167,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/docs/manual/hardware.html b/docs/manual/hardware.html index 1c46ae3..becba57 100644 --- a/docs/manual/hardware.html +++ b/docs/manual/hardware.html @@ -6,7 +6,7 @@ - Communications Hardware - Reticulum Network Stack 0.7.7 beta documentation + Communications Hardware - Reticulum Network Stack 0.8.0 beta documentation @@ -141,7 +141,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -167,7 +167,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/docs/manual/index.html b/docs/manual/index.html index 8b73eab..b22f8c7 100644 --- a/docs/manual/index.html +++ b/docs/manual/index.html @@ -6,7 +6,7 @@ - Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation @@ -141,7 +141,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -167,7 +167,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/docs/manual/interfaces.html b/docs/manual/interfaces.html index 8b1cdf9..a0568b3 100644 --- a/docs/manual/interfaces.html +++ b/docs/manual/interfaces.html @@ -6,7 +6,7 @@ - Configuring Interfaces - Reticulum Network Stack 0.7.7 beta documentation + Configuring Interfaces - Reticulum Network Stack 0.8.0 beta documentation @@ -141,7 +141,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -167,7 +167,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/docs/manual/networks.html b/docs/manual/networks.html index f4122c6..c4e5720 100644 --- a/docs/manual/networks.html +++ b/docs/manual/networks.html @@ -6,7 +6,7 @@ - Building Networks - Reticulum Network Stack 0.7.7 beta documentation + Building Networks - Reticulum Network Stack 0.8.0 beta documentation @@ -141,7 +141,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -167,7 +167,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/docs/manual/objects.inv b/docs/manual/objects.inv index bceab99..521e5e1 100644 Binary files a/docs/manual/objects.inv and b/docs/manual/objects.inv differ diff --git a/docs/manual/reference.html b/docs/manual/reference.html index 6dc4431..0ae19ae 100644 --- a/docs/manual/reference.html +++ b/docs/manual/reference.html @@ -6,7 +6,7 @@ - API Reference - Reticulum Network Stack 0.7.7 beta documentation + API Reference - Reticulum Network Stack 0.8.0 beta documentation @@ -141,7 +141,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -167,7 +167,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/docs/manual/search.html b/docs/manual/search.html index 8e945d0..27a1635 100644 --- a/docs/manual/search.html +++ b/docs/manual/search.html @@ -4,7 +4,7 @@ - Search - Reticulum Network Stack 0.7.7 beta documentation + Search - Reticulum Network Stack 0.8.0 beta documentation @@ -138,7 +138,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -164,7 +164,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/docs/manual/support.html b/docs/manual/support.html index 57df028..f57702a 100644 --- a/docs/manual/support.html +++ b/docs/manual/support.html @@ -6,7 +6,7 @@ - Support Reticulum - Reticulum Network Stack 0.7.7 beta documentation + Support Reticulum - Reticulum Network Stack 0.8.0 beta documentation @@ -141,7 +141,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -167,7 +167,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/docs/manual/understanding.html b/docs/manual/understanding.html index 0246f2e..1fcdd99 100644 --- a/docs/manual/understanding.html +++ b/docs/manual/understanding.html @@ -6,7 +6,7 @@ - Understanding Reticulum - Reticulum Network Stack 0.7.7 beta documentation + Understanding Reticulum - Reticulum Network Stack 0.8.0 beta documentation @@ -141,7 +141,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -167,7 +167,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/docs/manual/using.html b/docs/manual/using.html index bfd3e72..7a2ae50 100644 --- a/docs/manual/using.html +++ b/docs/manual/using.html @@ -6,7 +6,7 @@ - Using Reticulum on Your System - Reticulum Network Stack 0.7.7 beta documentation + Using Reticulum on Your System - Reticulum Network Stack 0.8.0 beta documentation @@ -141,7 +141,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -167,7 +167,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/docs/manual/whatis.html b/docs/manual/whatis.html index a6a235a..5ff99a9 100644 --- a/docs/manual/whatis.html +++ b/docs/manual/whatis.html @@ -6,7 +6,7 @@ - What is Reticulum? - Reticulum Network Stack 0.7.7 beta documentation + What is Reticulum? - Reticulum Network Stack 0.8.0 beta documentation @@ -141,7 +141,7 @@
-
Reticulum Network Stack 0.7.7 beta documentation
+
Reticulum Network Stack 0.8.0 beta documentation
@@ -167,7 +167,7 @@
- Reticulum Network Stack 0.7.7 beta documentation + Reticulum Network Stack 0.8.0 beta documentation diff --git a/setup.py b/setup.py index 1a2dd03..7fca04f 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,6 @@ if '--pure' in sys.argv: print("Building pure-python wheel") exec(open("RNS/_version.py", "r").read()) - with open("README.md", "r") as fh: long_description = fh.read()