mirror of
https://github.com/markqvist/Reticulum.git
synced 2026-05-22 07:44:48 -07:00
Implemented external IP resolution for interface discovery announcer
This commit is contained in:
@@ -2,6 +2,7 @@ import os
|
|||||||
import RNS
|
import RNS
|
||||||
import time
|
import time
|
||||||
import threading
|
import threading
|
||||||
|
import subprocess
|
||||||
from .vendor import umsgpack as msgpack
|
from .vendor import umsgpack as msgpack
|
||||||
|
|
||||||
NAME = 0xFF
|
NAME = 0xFF
|
||||||
@@ -102,8 +103,24 @@ class InterfaceAnnouncer():
|
|||||||
LONGITUDE: interface.discovery_longitude,
|
LONGITUDE: interface.discovery_longitude,
|
||||||
HEIGHT: interface.discovery_height}
|
HEIGHT: interface.discovery_height}
|
||||||
|
|
||||||
|
reachable_on = self.sanitize(interface.reachable_on)
|
||||||
|
if not RNS.vendor.platformutils.is_windows():
|
||||||
|
try:
|
||||||
|
exec_path = os.path.expanduser(reachable_on)
|
||||||
|
if os.path.isfile(exec_path) and os.access(exec_path, os.X_OK):
|
||||||
|
RNS.log(f"Evaluating reachable_on from executable at {exec_path}", RNS.LOG_DEBUG)
|
||||||
|
exec_result = subprocess.run([exec_path], stdout=subprocess.PIPE)
|
||||||
|
exec_stdout = exec_result.stdout.decode("utf-8")
|
||||||
|
if exec_result.returncode != 0: raise ValueError("Non-zero exit code from subprocess")
|
||||||
|
reachable_on = self.sanitize(exec_stdout)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
RNS.log(f"Error while getting reachable_on from executable at {interface.reachable_on}: {e}", RNS.LOG_ERROR)
|
||||||
|
RNS.log(f"Aborting discovery announce", RNS.LOG_ERROR)
|
||||||
|
return None
|
||||||
|
|
||||||
if interface_type in ["BackboneInterface", "TCPServerInterface"]:
|
if interface_type in ["BackboneInterface", "TCPServerInterface"]:
|
||||||
info[REACHABLE_ON] = self.sanitize(interface.reachable_on)
|
info[REACHABLE_ON] = reachable_on
|
||||||
info[PORT] = interface.bind_port
|
info[PORT] = interface.bind_port
|
||||||
|
|
||||||
if interface_type == "I2PInterface" and interface.connectable and interface.b32:
|
if interface_type == "I2PInterface" and interface.connectable and interface.b32:
|
||||||
|
|||||||
Reference in New Issue
Block a user