added test for learning lan services
This commit is contained in:
parent
7bb95c3b87
commit
d4652e1107
5 changed files with 93 additions and 40 deletions
|
@ -31,8 +31,11 @@ class LANManager:
|
|||
|
||||
def __init__(self, too_many: "TooMany"):
|
||||
self.too_many = too_many
|
||||
self.peers: "exploded IP Address string" = set()
|
||||
|
||||
|
||||
def start(self):
|
||||
Thread(target=learn_services, daemon=True).start()
|
||||
Thread(target=advertise_service, daemon=True).start()
|
||||
Thread(tra)
|
||||
|
||||
|
|
|
@ -4,6 +4,10 @@ Discover and publish private-network
|
|||
"""
|
||||
import socket
|
||||
import struct
|
||||
from typing import TYPE_CHECKING
|
||||
from typing import List
|
||||
from ipaddress import ip_address
|
||||
from socket import SHUT_RDWR
|
||||
|
||||
from .getip import lan_ips
|
||||
from utils.bettersleep import better_sleep
|
||||
|
@ -27,7 +31,10 @@ IS_ALL_GROUPS = True
|
|||
ANNOUNCE_LOOP_SLEEP = 30
|
||||
|
||||
|
||||
def learn_services():
|
||||
|
||||
def learn_services(lan_service_list: List):
|
||||
"""Take a list to infintely add lan service info to."""
|
||||
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
||||
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
if IS_ALL_GROUPS:
|
||||
|
@ -41,11 +48,26 @@ def learn_services():
|
|||
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
|
||||
|
||||
while True:
|
||||
rec_data = sock.recv(1024)
|
||||
print('reced_data', rec_data)
|
||||
service_ips = sock.recv(200).decode('utf-8')
|
||||
if 'onionr' not in service_ips:
|
||||
continue
|
||||
service_ips = service_ips.replace('onionr-', '').split('-')
|
||||
port = 0
|
||||
for service in service_ips:
|
||||
try:
|
||||
ip_address(service)
|
||||
except ValueError:
|
||||
service_ips.remove(service)
|
||||
continue
|
||||
# remove our own ips
|
||||
service_ips = set(lan_ips) ^ set(service_ips)
|
||||
# remove known ips and add to external list
|
||||
lan_service_list = set(service_ips) ^ set(lan_service_list)
|
||||
|
||||
sock.shutdown()
|
||||
|
||||
sock.shutdown(SHUT_RDWR)
|
||||
sock.close()
|
||||
# no return intended, list modified by reference
|
||||
|
||||
|
||||
def advertise_service():
|
||||
|
@ -61,5 +83,5 @@ def advertise_service():
|
|||
while True:
|
||||
sock.sendto(f"onionr-{ips}".encode('utf-8'), (MCAST_GRP, MCAST_PORT))
|
||||
better_sleep(ANNOUNCE_LOOP_SLEEP)
|
||||
sock.shutdown()
|
||||
sock.shutdown(SHUT_RDWR)
|
||||
sock.close()
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
LAN transport server thread
|
||||
"""
|
||||
from gevent.pywsgi import WSGIServer
|
||||
from flask import Flask
|
||||
"""
|
||||
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
|
||||
|
@ -16,3 +18,16 @@ LAN transport server thread
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
|
||||
class LANServer:
|
||||
def __init__(self, shared_state):
|
||||
app = Flask(__name__)
|
||||
self.app = app
|
||||
|
||||
@app.route("/")
|
||||
def ping():
|
||||
return "pong!"
|
||||
|
||||
def start_server():
|
||||
return
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue