another fix for #25

Or, to be more precise, a fix for the fix preceding the current fix for
issue #25 that just didn't fix things right. If your head spins, see the
previous commit, or call an ambulance (that is, if you are privileged
enough to access a phone and know your local helpline number)
This commit is contained in:
Pranav Jerry 2021-11-29 14:47:59 +05:30
parent 5e58df0b71
commit fc1f3d4216
No known key found for this signature in database
GPG Key ID: F1DCDC4FED0A0C5B
3 changed files with 16 additions and 21 deletions

View File

@ -42,4 +42,4 @@ given below.
# #
# In case you forgot to change the version, skip the number # In case you forgot to change the version, skip the number
# and put the next number in the next commit. # and put the next number in the next commit.
__version__ = "0.5.1a0.dev6" __version__ = "0.5.1a0.dev7"

View File

@ -28,10 +28,9 @@ examples.
""" """
import subprocess import subprocess
from multiprocessing import Process
from pathlib import Path from pathlib import Path
from dasbus.connection import SystemMessageBus from dasbus.connection import SystemMessageBus
from dasbus.loop import EventLoop from dasbus.loop import EventLoop, GLib
NETWORKD_BUS = "org.freedesktop.network1" NETWORKD_BUS = "org.freedesktop.network1"
@ -143,7 +142,6 @@ class NetworkLoop(NetworkD):
self.waitfor = None self.waitfor = None
self.wait_function = None self.wait_function = None
self.loop = EventLoop() self.loop = EventLoop()
self.timeout = 0
def start_loop(self): def start_loop(self):
"""start the dasbus loop""" """start the dasbus loop"""
@ -151,28 +149,16 @@ class NetworkLoop(NetworkD):
print("waitfor", self.waitfor) print("waitfor", self.waitfor)
print("waitfor func", self.wait_function) print("waitfor func", self.wait_function)
self.proxy.PropertiesChanged.connect(self.on_properties_changed) self.proxy.PropertiesChanged.connect(self.on_properties_changed)
process = Process(target=self.loop.run) self.loop.run()
process.start()
# wait until timeout
if self.timeout != 0:
process.join(self.timeout)
else:
process.join()
# When the process is timed out, it is not killed. We have to kill
# it manually
if process.is_alive():
self.on_timeout()
def wait_until_routable(self, timeout=0): def wait_until_routable(self, timeout=0):
""" """
Wait until timeout in seconds and returns True when any Wait until timeout in milliseconds and returns True when any
network interface is shown routable by networkd. Does not wait network interface is shown routable by networkd. Does not wait
for timeout if timeout==0 for timeout if timeout==0
""" """
print("wait until routable") print("wait until routable")
self.timeout = timeout self.setup_timeout(timeout)
self.wait_for_change("AddressState", self.on_addressstate_change) self.wait_for_change("AddressState", self.on_addressstate_change)
return self.is_routable() return self.is_routable()
@ -196,7 +182,13 @@ class NetworkLoop(NetworkD):
if self.waitfor in data: if self.waitfor in data:
return self.wait_function() return self.wait_function()
def setup_timeout(self, timeout):
"""setup a timeout"""
print("setup timeout")
if timeout != 0:
GLib.timeout_add(timeout, self.on_timeout)
def on_timeout(self): def on_timeout(self):
"""called when a timeout occurs""" """called by dasbus when a timeout occurs"""
print("on timeout") print("on timeout")
self.loop.quit() self.loop.quit()

View File

@ -63,7 +63,8 @@ def any_interface_is_routable():
logger.debug("Adding temporary config %s", i) logger.debug("Adding temporary config %s", i)
networkd.add_config(i) networkd.add_config(i)
routable = networkd.wait_until_routable(timeout=10) # timeout = 10 seconds
routable = networkd.wait_until_routable(10 * 1000)
networkd.remove_all_configs() networkd.remove_all_configs()
return routable return routable
@ -243,8 +244,10 @@ def main():
notify("STATUS=Checking for internet") notify("STATUS=Checking for internet")
# If any interface is routable, set gateway mode to server # If any interface is routable, set gateway mode to server
if any_interface_is_routable(): if any_interface_is_routable():
logger.info("Network is routable. Setting gw_mode to server")
gateway_mode = "server" gateway_mode = "server"
else: else:
logger.info("Network is not routable. Setting gw_mode to client")
gateway_mode = "client" gateway_mode = "client"
logger.info("gateway_mode set to %s", gateway_mode) logger.info("gateway_mode set to %s", gateway_mode)
elif args.gateway_mode in ["server", "client", "off"]: elif args.gateway_mode in ["server", "client", "off"]: