2022-02-23 16:40:31 +00:00
|
|
|
import socket
|
|
|
|
import os
|
|
|
|
import random
|
|
|
|
import string
|
|
|
|
|
|
|
|
from . import sam
|
|
|
|
|
|
|
|
def get_free_port():
|
|
|
|
"""Get a free port on your local host"""
|
|
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
|
|
s.bind(('', 0))
|
|
|
|
free_port = s.getsockname()[1]
|
|
|
|
s.close()
|
|
|
|
return free_port
|
|
|
|
|
|
|
|
def is_address_accessible(address):
|
|
|
|
"""Check if address is accessible or down"""
|
|
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
is_accessible = s.connect_ex(address) == 0
|
|
|
|
s.close()
|
|
|
|
return is_accessible
|
|
|
|
|
|
|
|
def address_from_string(address_string):
|
|
|
|
"""Address tuple from host:port string"""
|
|
|
|
address = address_string.split(":")
|
|
|
|
return (address[0], int(address[1]))
|
|
|
|
|
|
|
|
def get_sam_address():
|
|
|
|
"""
|
|
|
|
Get SAM address from environment variable I2P_SAM_ADDRESS, or use a default
|
|
|
|
value
|
|
|
|
"""
|
|
|
|
value = os.getenv("I2P_SAM_ADDRESS")
|
|
|
|
return address_from_string(value) if value else sam.DEFAULT_ADDRESS
|
|
|
|
|
|
|
|
def generate_session_id(length=6):
|
|
|
|
"""Generate random session id"""
|
|
|
|
rand = random.SystemRandom()
|
|
|
|
sid = [rand.choice(string.ascii_letters) for _ in range(length)]
|
2024-10-07 08:44:18 +00:00
|
|
|
return f"reticulum-{''.join(sid)}"
|
2022-02-23 16:40:31 +00:00
|
|
|
|