import signal import socket import sys import os def graceful_exit(signum, frame): print(f"Exit requested by {signum}") sys.exit(0) def get_env(name): value = os.environ.get(name) if value is None: print(f"Missing env variable '{name}'") print("Exiting") sys.exit(1) return value def main(): jelly_id = get_env('JELLY_ID') jelly_name = get_env('JELLY_NAME') jelly_addr = get_env('JELLY_ADDR') payload = ('{"Address":"%(addr)s","Id":"%(id)s","Name":"%(name)s","EndpointAddress":null}' % { 'addr': jelly_addr, 'id': jelly_id, 'name': jelly_name, }).encode() print("Listening for JellyFin client discovery broadcasts") print('Address: "%(addr)s", Id: "%(id)s", Name: "%(name)s"' % { 'addr': jelly_addr, 'id': jelly_id, 'name': jelly_name, }) signal.signal(signal.SIGINT, graceful_exit) signal.signal(signal.SIGTERM, graceful_exit) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(('', 7359)) while True: msg, addr = s.recvfrom(1024) if msg == b'Who is JellyfinServer?': print(f"Broadcast {addr}: {msg}") s.sendto(payload, addr) else: print(f"Unknown broadcast {addr}: {msg}") if __name__ == "__main__": main()