commit 935fe6500ad5509811c37d28418f9340e9aa3432 Author: Tõnis Kevvai Date: Wed Feb 12 20:47:16 2025 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..30bd623 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.env + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7037ff9 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +services: + jelly_proxy: + image: python:3.11 + restart: unless-stopped + working_dir: /app + environment: + - JELLY_NAME=${JELLY_NAME:?Missing Name} + - JELLY_ID=${JELLY_ID:?Missing ID} + - JELLY_ADDR=${JELLY_ADDR:?Missing Address} + volumes: + - ./jelly.py:/app/jelly.py + ports: + - 7359:7359/udp + command: python -u jelly.py + diff --git a/jelly.py b/jelly.py new file mode 100644 index 0000000..69e0cc4 --- /dev/null +++ b/jelly.py @@ -0,0 +1,54 @@ +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(f"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() + diff --git a/sample.env b/sample.env new file mode 100644 index 0000000..466244e --- /dev/null +++ b/sample.env @@ -0,0 +1,3 @@ +JELLY_NAME="server name" +JELLY_ID="server hash" +JELLY_ADDR="server address"