diff --git a/src/lan/__init__.py b/src/lan/__init__.py index 5e4ef2e4..b0ce3234 100644 --- a/src/lan/__init__.py +++ b/src/lan/__init__.py @@ -7,7 +7,6 @@ from threading import Thread if TYPE_CHECKING: from toomanyobjs import TooMany -from . import server from .client import Client from .discover import learn_services, advertise_service """ @@ -31,11 +30,10 @@ class LANManager: def __init__(self, too_many: "TooMany"): self.too_many = too_many - self.peers: "exploded IP Address string" = set() + self.peers: "exploded IP Address string" = [] def start(self): - Thread(target=learn_services, args=[[]], daemon=True).start() + Thread(target=learn_services, args=[self.peers], daemon=True).start() Thread(target=advertise_service, daemon=True).start() - #Thread(tra) diff --git a/src/lan/discover.py b/src/lan/discover.py index 06ec06d7..cc085bb4 100644 --- a/src/lan/discover.py +++ b/src/lan/discover.py @@ -70,13 +70,16 @@ def learn_services(lan_service_list: List): # no return intended, list modified by reference -def advertise_service(): +def advertise_service(specific_ips=None): # regarding socket.IP_MULTICAST_TTL # --------------------------------- # for all packets sent, after three hops on the network the packet will not # be re-sent/broadcast (see https://www.tldp.org/HOWTO/Multicast-HOWTO-6.html) MULTICAST_TTL = 3 - ips = '-'.join(lan_ips) + if specific_ips is None: + ips = '-'.join(lan_ips) + else: + ips = '-'.join(specific_ips) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, MULTICAST_TTL) diff --git a/src/lan/getip.py b/src/lan/getip.py index f0486bb6..cdb18b80 100644 --- a/src/lan/getip.py +++ b/src/lan/getip.py @@ -17,3 +17,10 @@ for adapter in get_adapters(): else: lan_ips.append(ip.exploded) +for ip in lan_ips: + if '192.168' in ip: + best_ip = ip + break +else: + best_ip = lan_ips[0] + diff --git a/src/lan/server/__init__.py b/src/lan/server/__init__.py index f6a89673..127b237e 100644 --- a/src/lan/server/__init__.py +++ b/src/lan/server/__init__.py @@ -4,6 +4,14 @@ LAN transport server thread """ from gevent.pywsgi import WSGIServer from flask import Flask +from flask import Response +from gevent import sleep + +from httpapi.fdsafehandler import FDSafeHandler +from netcontroller import get_open_port +import config +from coredb.blockmetadb import get_block_list +from lan.getip import lan_ips, best_ip """ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,10 +32,24 @@ class LANServer: def __init__(self, shared_state): app = Flask(__name__) self.app = app + self.host = config.get('lan.bind_ip', '') + self.server = None + if self.host == '': + self.host = best_ip + self.port = None - @app.route("/") + @app.route('/blist/