Private
Public Access
Add receiver diagnostics and remote PicCap handover
This commit is contained in:
1 parent
ae01879d45
commit
42aeaf56ea
19 files changed
+322
-50
No files matched your search
@@ -0,0 +1,49 @@
|
||||
"""Test-only FlatBuffer TCP relay; accepts only the configured TV address."""
|
||||
import argparse
|
||||
import select
|
||||
import socket
|
||||
import socketserver
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--bind', required=True)
|
||||
parser.add_argument('--port', type=int, default=19446)
|
||||
parser.add_argument('--upstream', required=True)
|
||||
parser.add_argument('--upstream-port', type=int, default=19400)
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
class Relay(socketserver.BaseRequestHandler):
|
||||
def handle(self):
|
||||
if self.client_address[0] != args.upstream:
|
||||
return
|
||||
transferred = 0
|
||||
try:
|
||||
with socket.create_connection((args.upstream, args.upstream_port), timeout=3) as remote:
|
||||
self.request.settimeout(3)
|
||||
while True:
|
||||
readable, _, _ = select.select([self.request, remote], [], [], 3)
|
||||
if not readable:
|
||||
break
|
||||
for source in readable:
|
||||
data = source.recv(65536)
|
||||
if not data:
|
||||
return
|
||||
destination = remote if source is self.request else self.request
|
||||
destination.sendall(data)
|
||||
if source is self.request:
|
||||
if not transferred:
|
||||
print('PicCap FlatBuffer data received', flush=True)
|
||||
transferred += len(data)
|
||||
except OSError:
|
||||
pass
|
||||
finally:
|
||||
print(f'FlatBuffer connection closed: {transferred} bytes from TV', flush=True)
|
||||
|
||||
|
||||
class Server(socketserver.ThreadingTCPServer):
|
||||
daemon_threads = True
|
||||
|
||||
|
||||
with Server((args.bind, args.port), Relay) as server:
|
||||
print('FlatBuffer relay ready', flush=True)
|
||||
server.serve_forever()
|
||||
Reference in new issue
Block a user