55 lines
1.3 KiB
Python
55 lines
1.3 KiB
Python
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()
|
|
|