=> 9d6be61051ecd82d37ed8517fce32c8422655ea6
[1mdiff --git a/install b/install[m [1mindex 791a711..3546814 100755[m [1m--- a/install[m [1m+++ b/install[m [36m@@ -1,6 +1,8 @@[m #! /usr/bin/env python3[m [m import os[m [32m+[m[32mimport sys[m [32m+[m from string import Template[m from subprocess import check_call[m [m [36m@@ -12,7 +14,8 @@[m [mCURRENT_DIR = os.path.dirname(os.path.realpath(__file__))[m EXEC_PATH = os.path.join(CURRENT_DIR, EXEC)[m SERVICE_TEMPLATE = os.path.join(CURRENT_DIR, SERVICE)[m SERVICE_FILE = os.path.join(SYSTEM_DIR, SERVICE)[m [31m-EXEC_START = f'python3 {EXEC}'[m [32m+[m[32mPYTHON = sys.executable[m [32m+[m[32mEXEC_START = f'{PYTHON} {EXEC}'[m [m with open(SERVICE_TEMPLATE) as f:[m serviceTemplate = Template(f.read())[m [1mdiff --git a/wifi-keepalive.py b/wifi-keepalive.py[m [1mindex 92f318c..0061ac2 100644[m [1m--- a/wifi-keepalive.py[m [1m+++ b/wifi-keepalive.py[m [36m@@ -3,30 +3,89 @@[m [mfrom subprocess import CalledProcessError, check_output[m from sys import exit[m from time import sleep[m [m [32m+[m[32mINITIAL_DELAY_IN_SECONDS = 40[m PING_INTERVAL_IN_SECONDS = 80[m [m [31m-signal(SIGTERM, lambda signum, frame: exit(0))[m [m [32m+[m[32mclass WifiKeepalive:[m [m [31m-def getDefaultRoute():[m [31m- routes = check_output(['route', '-n']).decode('utf-8').splitlines()[m [31m- defaults = [r.split()[1] for r in routes if r.startswith('0.0.0.0')][m [32m+[m[32m def __init__(self):[m [32m+[m[32m self.defaultRoute = self.getDefaultWifiRoute()[m [32m+[m[32m self.initialDelay = INITIAL_DELAY_IN_SECONDS[m [32m+[m[32m self.pingInterval = PING_INTERVAL_IN_SECONDS[m [32m+[m[32m self.isConnected = True[m [32m+[m[32m self.pingCommand = 'ping -c 1 -W 2 -n'[m [m [31m- return defaults[0] if defaults else None[m [32m+[m[32m def run(self):[m [32m+[m[32m sleep(self.initialDelay)[m [m [32m+[m[32m while self.isRunning():[m [32m+[m[32m self.keepalive()[m [32m+[m[32m sleep(self.pingInterval)[m [m [31m-def keepalive(defaultRoute):[m [31m- while True:[m [31m- sleep(PING_INTERVAL_IN_SECONDS)[m [31m- ping(defaultRoute)[m [32m+[m[32m def isRunning(self):[m [32m+[m[32m return True[m [m [32m+[m[32m def keepalive(self):[m [32m+[m[32m if self.defaultRoute:[m [32m+[m[32m self.pingDefaultRoute()[m [32m+[m[32m else:[m [32m+[m[32m self.attemptWifiConnection()[m [m [31m-def ping(address):[m [31m- try:[m [31m- check_output(['ping', '-c', '1', address])[m [31m- except CalledProcessError as e:[m [31m- pass[m [32m+[m[32m def pingDefaultRoute(self):[m [32m+[m[32m if not self.isConnected:[m [32m+[m[32m print('Connected to Wifi', flush=True)[m [m [32m+[m[32m self.isConnected = True[m [32m+[m[32m isPingSuccess = self.ping()[m [m [31m-defaultRoute = getDefaultRoute()[m [31m-keepalive(defaultRoute) if defaultRoute else print('No default route')[m [32m+[m[32m if not isPingSuccess:[m [32m+[m[32m self.defaultRoute = self.getDefaultWifiRoute()[m [32m+[m [32m+[m[32m def attemptWifiConnection(self):[m [32m+[m[32m if self.isConnected:[m [32m+[m[32m print('No Wifi Connection', flush=True)[m [32m+[m [32m+[m[32m self.isConnected = False[m [32m+[m[32m self.defaultRoute = self.getDefaultWifiRoute()[m [32m+[m [32m+[m[32m def ping(self):[m [32m+[m[32m try:[m [32m+[m[32m check_output([*self.pingCommand.split(), self.defaultRoute])[m [32m+[m[32m except CalledProcessError as e:[m [32m+[m[32m return False[m [32m+[m [32m+[m[32m return True[m [32m+[m [32m+[m[32m def getDefaultWifiRoute(self):[m [32m+[m[32m defaults = [[m [32m+[m[32m r['gateway'] for r in self.getRoutes() if self.isDefaultWifiRoute(r)[m [32m+[m[32m ][m [32m+[m [32m+[m[32m return defaults[0] if defaults else None[m [32m+[m [32m+[m[32m def getRoutes(self):[m [32m+[m[32m outputLines = check_output([m [32m+[m[32m ['route', '-n'][m [32m+[m[32m ).decode('utf-8').splitlines()[2:][m [32m+[m [32m+[m[32m routes = map(lambda r: self.parseRoute(r), outputLines)[m [32m+[m [32m+[m[32m return routes[m [32m+[m [32m+[m[32m def parseRoute(self, routeLine):[m [32m+[m[32m destination, gateway, _, _, _, _, _, interface = routeLine.split()[m [32m+[m [32m+[m[32m return {'destination': destination, 'gateway': gateway, 'interface': interface}[m [32m+[m [32m+[m[32m def isDefaultWifiRoute(self, route):[m [32m+[m[32m return route['destination'] == '0.0.0.0' and route['interface'].startswith('w')[m [32m+[m [32m+[m [32m+[m[32mdef main():[m [32m+[m[32m signal(SIGTERM, lambda s, f: exit(0))[m [32m+[m[32m WifiKeepalive().run()[m [32m+[m [32m+[m [32m+[m[32mif __name__ == '__main__':[m [32m+[m[32m main()[m
text/gemini; charset=utf-8
This content has been proxied by September (3851b).