Initial handling for local shared instance
This commit is contained in:
parent
27f5b8fb3e
commit
6903c7a2f6
@ -41,6 +41,13 @@ class Reticulum:
|
|||||||
Reticulum.__transport_enabled = False
|
Reticulum.__transport_enabled = False
|
||||||
Reticulum.__use_implicit_proof = True
|
Reticulum.__use_implicit_proof = True
|
||||||
|
|
||||||
|
self.local_interface_port = 37428
|
||||||
|
self.share_instance = True
|
||||||
|
|
||||||
|
self.is_shared_instance = False
|
||||||
|
self.is_connected_to_shared_instance = False
|
||||||
|
self.is_standalone_instance = False
|
||||||
|
|
||||||
if not os.path.isdir(Reticulum.storagepath):
|
if not os.path.isdir(Reticulum.storagepath):
|
||||||
os.makedirs(Reticulum.storagepath)
|
os.makedirs(Reticulum.storagepath)
|
||||||
|
|
||||||
@ -69,6 +76,41 @@ class Reticulum:
|
|||||||
|
|
||||||
atexit.register(Reticulum.exit_handler)
|
atexit.register(Reticulum.exit_handler)
|
||||||
|
|
||||||
|
def start_local_interface(self):
|
||||||
|
if self.share_instance:
|
||||||
|
try:
|
||||||
|
interface = LocalInterface.LocalServerInterface(
|
||||||
|
RNS.Transport,
|
||||||
|
self.local_interface_port
|
||||||
|
)
|
||||||
|
interface.OUT = True
|
||||||
|
RNS.Transport.interfaces.append(interface)
|
||||||
|
self.is_shared_instance = True
|
||||||
|
RNS.log("Started shared instance interface: "+str(interface), RNS.LOG_DEBUG)
|
||||||
|
except Exception as e:
|
||||||
|
try:
|
||||||
|
interface = LocalInterface.LocalClientInterface(
|
||||||
|
RNS.Transport,
|
||||||
|
"Local shared instance",
|
||||||
|
self.local_interface_port)
|
||||||
|
interface.target_port = self.local_interface_port
|
||||||
|
interface.OUT = True
|
||||||
|
RNS.Transport.interfaces.append(interface)
|
||||||
|
self.is_shared_instance = False
|
||||||
|
self.is_standalone_instance = False
|
||||||
|
self.is_connected_to_shared_instance = True
|
||||||
|
RNS.log("Connected to local shared instance via: "+str(interface), RNS.LOG_DEBUG)
|
||||||
|
except Exception as e:
|
||||||
|
RNS.log("Local shared instance appears to be running, but it could not be connected", RNS.LOG_ERROR)
|
||||||
|
RNS.log("The contained exception was: "+str(e), RNS.LOG_ERROR)
|
||||||
|
self.is_shared_instance = False
|
||||||
|
self.is_standalone_instance = True
|
||||||
|
self.is_connected_to_shared_instance = False
|
||||||
|
else:
|
||||||
|
self.is_shared_instance = False
|
||||||
|
self.is_standalone_instance = True
|
||||||
|
self.is_connected_to_shared_instance = False
|
||||||
|
|
||||||
def applyConfig(self):
|
def applyConfig(self):
|
||||||
if "logging" in self.config:
|
if "logging" in self.config:
|
||||||
for option in self.config["logging"]:
|
for option in self.config["logging"]:
|
||||||
@ -83,6 +125,12 @@ class Reticulum:
|
|||||||
if "reticulum" in self.config:
|
if "reticulum" in self.config:
|
||||||
for option in self.config["reticulum"]:
|
for option in self.config["reticulum"]:
|
||||||
value = self.config["reticulum"][option]
|
value = self.config["reticulum"][option]
|
||||||
|
if option == "share_instance":
|
||||||
|
value = self.config["reticulum"].as_bool(option)
|
||||||
|
self.share_instance = value
|
||||||
|
if option == "shared_instance_port":
|
||||||
|
value = int(self.config["reticulum"][option])
|
||||||
|
self.local_interface_port = value
|
||||||
if option == "enable_transport":
|
if option == "enable_transport":
|
||||||
v = self.config["reticulum"].as_bool(option)
|
v = self.config["reticulum"].as_bool(option)
|
||||||
if v == True:
|
if v == True:
|
||||||
@ -108,6 +156,12 @@ class Reticulum:
|
|||||||
RNS.log("", RNS.LOG_CRITICAL)
|
RNS.log("", RNS.LOG_CRITICAL)
|
||||||
Reticulum.__allow_unencrypted = True
|
Reticulum.__allow_unencrypted = True
|
||||||
|
|
||||||
|
self.start_local_interface()
|
||||||
|
|
||||||
|
if self.is_shared_instance or self.is_standalone_instance:
|
||||||
|
# TODO: Remove
|
||||||
|
RNS.log("Starting local interfaces...")
|
||||||
|
|
||||||
interface_names = []
|
interface_names = []
|
||||||
for name in self.config["interfaces"]:
|
for name in self.config["interfaces"]:
|
||||||
if not name in interface_names:
|
if not name in interface_names:
|
||||||
@ -346,16 +400,41 @@ __default_rns_config__ = '''# This is the default Reticulum config file.
|
|||||||
# Don't allow unencrypted links by default.
|
# Don't allow unencrypted links by default.
|
||||||
# If you REALLY need to allow unencrypted links, for example
|
# If you REALLY need to allow unencrypted links, for example
|
||||||
# for debug or regulatory purposes, this can be set to true.
|
# for debug or regulatory purposes, this can be set to true.
|
||||||
|
# This directive is optional and can be removed for brevity.
|
||||||
|
|
||||||
allow_unencrypted = False
|
allow_unencrypted = False
|
||||||
|
|
||||||
|
|
||||||
# If you enable Transport, your system will route traffic
|
# If you enable Transport, your system will route traffic
|
||||||
# for other peers, pass announces and serve path requests.
|
# for other peers, pass announces and serve path requests.
|
||||||
# Unless you really know what you're doing, this should be
|
# Unless you really know what you're doing, this should be
|
||||||
# done only for systems that are suited to act as transport
|
# done only for systems that are suited to act as transport
|
||||||
# nodes, ie. if they are stationary and always-on.
|
# nodes, ie. if they are stationary and always-on. This
|
||||||
|
# directive is optional and can be removed for brevity.
|
||||||
|
|
||||||
enable_transport = False
|
enable_transport = False
|
||||||
|
|
||||||
|
|
||||||
|
# By default, the first program to launch the Reticulum
|
||||||
|
# Network Stack will create a shared instance, that other
|
||||||
|
# programs can communicate with. Only the shared instance
|
||||||
|
# opens all the configured interfaces directly, and other
|
||||||
|
# local programs communicate with the shared instance over
|
||||||
|
# a local socket. This is completely transparent to the
|
||||||
|
# user, and should generally be turned on. This directive
|
||||||
|
# is optional and can be removed for brevity.
|
||||||
|
|
||||||
|
share_instance = Yes
|
||||||
|
|
||||||
|
|
||||||
|
# If you want to run multiple *different* shared instances
|
||||||
|
# on the same system, you will need to specify a different
|
||||||
|
# shared instance port for each. The default is given below,
|
||||||
|
# and again, this option is optional and can be left out.
|
||||||
|
|
||||||
|
shared_instance_port = 37428
|
||||||
|
|
||||||
|
|
||||||
[logging]
|
[logging]
|
||||||
# Valid log levels are 0 through 7:
|
# Valid log levels are 0 through 7:
|
||||||
# 0: Log only critical information
|
# 0: Log only critical information
|
||||||
|
Loading…
Reference in New Issue
Block a user