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