From 387c41db05124e9dc8670ae3fbd8ed8386df3ce0 Mon Sep 17 00:00:00 2001 From: DasMoorhuhn Date: Sun, 1 Sep 2024 04:16:24 +0200 Subject: [PATCH] improved code --- build_docker_multi_platform.sh | 38 ++++++++++++------- ...{find_gateways.py => gateway_discovery.py} | 33 ++++++++++------ python/src/start_discovery_server.py | 2 +- 3 files changed, 47 insertions(+), 26 deletions(-) rename python/src/{find_gateways.py => gateway_discovery.py} (82%) diff --git a/build_docker_multi_platform.sh b/build_docker_multi_platform.sh index bd272d6..99147a9 100644 --- a/build_docker_multi_platform.sh +++ b/build_docker_multi_platform.sh @@ -25,6 +25,29 @@ build_docker() { docker buildx build --tag $IMAGE:$TAG --platform=$PLATFORMS --push . } +build_release() { + branch=$(git symbolic-ref --short HEAD) + git stash + git fetch --prune --prune-tags -f + git checkout $TAG + echo ------------------------------------- + git branch + echo ------------------------------------- + git status + echo ------------------------------------- + echo "!!PLEASE CHECK IF THIS IS RIGHT!!" + sleep 15 + clear + echo Build Tag $TAG + build_docker + TAG=latest + clear + echo Build Tag $TAG + build_docker + git checkout $branch + git stash pop +} + while [ "$1" != "" ]; do case $1 in -t | --tag ) @@ -60,20 +83,7 @@ while [ "$1" != "" ]; do done if [ "$RELEASE" = true ]; then - branch=$(git symbolic-ref --short HEAD) - git fetch --prune --prune-tags -f - git checkout $TAG - echo ------------------------------------- - git branch - echo ------------------------------------- - git status - echo ------------------------------------- - echo "!!PLEASE CHECK OF THIS IS RIGHT!!" - sleep 10 - build_docker - TAG=latest - build_docker - git checkout $branch + build_release else build_docker fi diff --git a/python/src/find_gateways.py b/python/src/gateway_discovery.py similarity index 82% rename from python/src/find_gateways.py rename to python/src/gateway_discovery.py index 726975a..523e7ed 100644 --- a/python/src/find_gateways.py +++ b/python/src/gateway_discovery.py @@ -1,4 +1,5 @@ # https://github.com/jholtmann/ip_discovery +"""Find other gateways and serve the udp socket""" import os import FindMyIP @@ -8,6 +9,7 @@ from logger import get_logger DEBUG = True if os.environ.get('DEBUG') is not None else False DISCOVERY_ACK = 'IP_DISCOVERY_ACK'.encode() # ACK for broadcast +DISCOVERY_OK = 'IP_DISCOVERY_OK'.encode() # Not used yet DISCOVERY_RSP_GTW = 'IP_DISCOVERY_RSP_GTW'.encode() # RSP for gateway DISCOVERY_RSP_MSH = 'IP_DISCOVERY_RSP_MSH'.encode() # RSP for mesh DISCOVERY_TIMEOUT = 0.5 @@ -16,39 +18,46 @@ PORT_SERVER = 9434 PORT_CLIENT = 9435 -def start_discovery_server(): - logger = get_logger(__name__) +def create_socket(): sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) + return sock + + +def start_discovery_server(): + """Serves the UDP socket for UDP broadcast discovery""" + logger = get_logger(__name__) + sock = create_socket() server_address = ('', PORT_SERVER) local_ip = FindMyIP.internal() + try: sock.bind(server_address) logger.info("Started discovery socket") + while True: data, addr = sock.recvfrom(4096) logger.debug(f"Received a packet from {addr}") logger.debug(f"{addr[0]} | {local_ip}") - logger.debug(f"{data} | {DISCOVERY_ACK}") + logger.debug(data) + + if str(addr[0]) == str(local_ip): continue + logger.debug("IP accepted") if data == DISCOVERY_ACK: logger.debug("ACK accepted") - if str(addr[0]) == str(local_ip): continue - logger.debug("IP accepted") sock.sendto(DISCOVERY_RSP_GTW, (addr[0], PORT_CLIENT)) logger.debug(f"Send ACK to {addr}") except Exception as err: - logger.error(err) sock.close() + logger.error(err) def start_discovery_client(): print("Started discovery client") - sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) - sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) - sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) + sock = create_socket() sock.settimeout(SOCKET_TIMEOUT) server_address = ('255.255.255.255', PORT_SERVER) start_time_stamp = get_unix_time() @@ -57,14 +66,16 @@ def start_discovery_client(): try: sock.bind(('', PORT_CLIENT)) + while delta <= DISCOVERY_TIMEOUT: delta = round(get_unix_time() - start_time_stamp, 2) sock.sendto(DISCOVERY_ACK, server_address) data, addr = sock.recvfrom(4096) + + if str(addr[0]) in discovered_devices: continue if data == DISCOVERY_RSP_GTW or data == DISCOVERY_RSP_MSH: - if str(addr[0]) in discovered_devices: continue - print('IP: ' + str(addr[0])) discovered_devices.append(str(addr[0])) + except Exception as err: print(err) diff --git a/python/src/start_discovery_server.py b/python/src/start_discovery_server.py index 2eb9c21..b539880 100644 --- a/python/src/start_discovery_server.py +++ b/python/src/start_discovery_server.py @@ -1,2 +1,2 @@ -from find_gateways import start_discovery_server +from gateway_discovery import start_discovery_server start_discovery_server()