Initial commit
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.env
|
||||
|
||||
15
docker-compose.yml
Normal file
15
docker-compose.yml
Normal file
@@ -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
|
||||
|
||||
54
jelly.py
Normal file
54
jelly.py
Normal file
@@ -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()
|
||||
|
||||
3
sample.env
Normal file
3
sample.env
Normal file
@@ -0,0 +1,3 @@
|
||||
JELLY_NAME="server name"
|
||||
JELLY_ID="server hash"
|
||||
JELLY_ADDR="server address"
|
||||
Reference in New Issue
Block a user