#!/usr/bin/env python3 import sys import os p = os.path.join pUp = os.path.dirname s = False if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'): s = os.path.realpath(sys.executable) else: s = os.path.realpath(__file__) sp = pUp(s) # script start import toml import subprocess def addressStr(addr): return addr[0] + ":" + str(addr[1]) def addressSslStr(addr): return addr[0] + ":" + str(addr[1] + 1) def perr(rtn,cmd = None,op = None): if rtn == 0: return if cmd == None: cmd = [] exc = subprocess.CalledProcessError(rtn,cmd,op) raise exc def pcallStr(*args,**kwargs): proc = subprocess.Popen(*args,**kwargs, stdout=subprocess.PIPE) response = proc.stdout.read().decode("utf-8").strip("\n") rtn = proc.wait() perr(rtn,args[0]) return response def main(): print("* Parsing config ...") configFiles = ["broadcast.toml"] if len(sys.argv) > 1: configFiles = sys.argv[1:] length = len(configFiles) index = 0 while index < length: configFiles[index] = p(sp,"config",configFiles[index]) index += 1 config = toml.load(configFiles) for key in config["args"]: os.environ["fstream_arg_" + key] = str(config["args"][key]) if not "values" in config: config["values"] = {} if not "python" in config["values"]: config["values"]["python"] = sys.executable for encoder in config["encoder"]: for i in range(len(encoder)): for key in config["values"]: encoder[i] = encoder[i].replace("$val:" +key+ "$",str(config["values"][key])) for key in os.environ: encoder[i] = encoder[i].replace("$env:" +key+ "$",os.environ[key]) ssl = False if "ssl" in config and "enabled" in config["ssl"] and config["ssl"]["enabled"] != False: if "ignoreCert" in config["ssl"] and config["ssl"]["ignoreCert"] == True: os.environ["fstream_ssl_ignoreCert"] = "1" ssl = True aes = False if "aespass" in config: if not "bufsize" in config["args"]: print("aespass is set, but args.bufsize is not.") sys.exit(1) os.environ["fstream_aespass"] = config["aespass"] os.environ["fstream_aesbuffer"] = str(config["args"]["bufsize"] - 16) aes = True address = config["address"].rsplit(":",1) address[1] = int(address[1]) if ssl == True: print("* Getting login-token ...") os.environ["fstream_ssl"] = "1" os.environ["fstream_arg_token"] = pcallStr([ sys.executable, p(sp,"fstream.py"), addressSslStr(address), "token" ]) del os.environ["fstream_arg_user_password"] del os.environ["fstream_ssl"] cmds = [] for encoder in config["encoder"]: cmds.append(encoder) if aes == True: cmds.append([sys.executable,p(sp,"util","fstream-util-pipe_to_aes.py")]) cmds.append([sys.executable,p(sp,"fstream.py"),addressStr(address),"broadcast"]) procs = [] procs.append(subprocess.Popen(cmds[0],stdout=subprocess.PIPE)) for i in range(1,len(cmds) - 1): procs.append(subprocess.Popen(cmds[i],stdin=procs[i - 1].stdout,stdout=subprocess.PIPE)) procs.append(subprocess.Popen(cmds[-1],stdin=procs[-1].stdout)) for proc in reversed(procs): proc.wait() main()