1
1
mirror of https://github.com/OpenVoiceOS/OpenVoiceOS synced 2024-12-28 17:51:15 +01:00
OpenVoiceOS/buildroot-external/package/python-ovos-utils/0001-improve-network-checks.patch

165 lines
5.4 KiB
Diff

From 99594333cb51091f27013cb4cf8b5b5c3177c4aa Mon Sep 17 00:00:00 2001
From: jarbasai <jarbasai@mailfence.com>
Date: Sat, 10 Dec 2022 15:52:32 +0000
Subject: [PATCH 1/2] improve network checks
---
ovos_utils/network_utils.py | 71 ++++++++++++++++++++++++++++++++++---
1 file changed, 66 insertions(+), 5 deletions(-)
diff --git a/ovos_utils/network_utils.py b/ovos_utils/network_utils.py
index c7d21c2..4d75e2f 100644
--- a/ovos_utils/network_utils.py
+++ b/ovos_utils/network_utils.py
@@ -1,6 +1,25 @@
import socket
+
import requests
+from ovos_utils.log import LOG
+
+
+def get_network_tests_config():
+ """Get network_tests object from mycroft.configuration."""
+ from ovos_config import Configuration
+ config = Configuration()
+ return config.get(
+ "network_tests",
+ {
+ "ip_url": 'https://api.ipify.org',
+ "dns_primary": "1.1.1.1",
+ "dns_secondary": "8.8.8.8",
+ "web_url": "https://nmcheck.gnome.org/check_network_status.txt",
+ "web_url_secondary": "https://checkonline.home-assistant.io/online.txt"
+ }
+ )
+
def get_ip():
# taken from https://stackoverflow.com/a/28950776/13703283
@@ -17,27 +36,69 @@ def get_ip():
def get_external_ip():
- return requests.get('https://api.ipify.org').text
+ cfg = get_network_tests_config()
+ return requests.get(cfg["ip_url"]).text
-def is_connected_dns(host="1.1.1.1"):
+def is_connected_dns(host=None, port=53, timeout=3):
+ """Check internet connection by connecting to DNS servers
+ Returns:
+ True if internet connection can be detected
+ """
+
+ if host is None:
+ cfg = get_network_tests_config()
+ return is_connected_dns(cfg["dns_primary"]) or \
+ is_connected_dns(cfg["dns_secondary"])
+
try:
# connect to the host -- tells us if the host is actually reachable
- socket.create_connection((host, 53))
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.settimeout(timeout)
+ s.connect((host, port))
return True
except OSError:
pass
return False
-def is_connected_http(host="http://duckduckgo.com"):
+def is_connected_http(host=None):
+ """Check internet connection by connecting to some website
+ Returns:
+ True if connection attempt succeeded
+ """
+ if host is None:
+ cfg = get_network_tests_config()
+ return is_connected_http(cfg["web_url"]) or \
+ is_connected_http(cfg["web_url_secondary"])
+
try:
status = requests.head(host).status_code
return True
- except OSError:
+ except:
pass
return False
def is_connected():
return any((is_connected_dns(), is_connected_http()))
+
+
+def check_captive_portal(url="http://start.mycroft.ai/portal-check.html",
+ expected_text="<title>Portal Check</title>") -> bool:
+ """Returns True if a captive portal page is detected"""
+ captive_portal = False
+
+ try:
+ # We need to check a site that doesn't use HTTPS
+ html_doc = requests.get(url).text
+
+ # If something different is in the html, we likely were redirected
+ # to the portal page.
+ if expected_text not in html_doc:
+ captive_portal = True
+ except Exception:
+ LOG.exception("Error checking for captive portal")
+
+ return captive_portal
+
From a9ccc2d015752959c67a5be29053bd3097380cff Mon Sep 17 00:00:00 2001
From: jarbasai <jarbasai@mailfence.com>
Date: Sat, 10 Dec 2022 16:25:48 +0000
Subject: [PATCH 2/2] portal check
---
ovos_utils/network_utils.py | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/ovos_utils/network_utils.py b/ovos_utils/network_utils.py
index 4d75e2f..d980103 100644
--- a/ovos_utils/network_utils.py
+++ b/ovos_utils/network_utils.py
@@ -15,8 +15,10 @@ def get_network_tests_config():
"ip_url": 'https://api.ipify.org',
"dns_primary": "1.1.1.1",
"dns_secondary": "8.8.8.8",
- "web_url": "https://nmcheck.gnome.org/check_network_status.txt",
- "web_url_secondary": "https://checkonline.home-assistant.io/online.txt"
+ "web_url": "http://nmcheck.gnome.org/check_network_status.txt",
+ "web_url_secondary": "https://checkonline.home-assistant.io/online.txt",
+ "captive_portal_url": "http://nmcheck.gnome.org/check_network_status.txt",
+ "captive_portal_text": "NetworkManager is online"
}
)
@@ -84,15 +86,18 @@ def is_connected():
return any((is_connected_dns(), is_connected_http()))
-def check_captive_portal(url="http://start.mycroft.ai/portal-check.html",
- expected_text="<title>Portal Check</title>") -> bool:
+def check_captive_portal(host=None, expected_text=None) -> bool:
"""Returns True if a captive portal page is detected"""
captive_portal = False
+ if not host or not expected_text:
+ cfg = get_network_tests_config()
+ host = host or cfg["captive_portal_url"]
+ expected_text = expected_text or cfg["captive_portal_url_text"]
+
try:
# We need to check a site that doesn't use HTTPS
- html_doc = requests.get(url).text
-
+ html_doc = requests.get(host).text
# If something different is in the html, we likely were redirected
# to the portal page.
if expected_text not in html_doc: