Spaces:
Paused
Paused
Automated deployment update from ML build
Browse files- services/mc_tunnel.py +15 -6
- services/playit.py +5 -5
services/mc_tunnel.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
|
|
| 1 |
_C='utf-8'
|
| 2 |
_B=None
|
| 3 |
_A=True
|
|
@@ -29,7 +30,7 @@ def pack_string(s):A=s.encode(_C);return pack_varint(len(A))+A
|
|
| 29 |
def read_string_from_payload(payload,offset=0):
|
| 30 |
A=payload;D,C=read_varint_from_buf(A,offset);B=C+D
|
| 31 |
if B>len(A):raise ValueError('short string in packet')
|
| 32 |
-
return A[C:B].decode(_C,errors=
|
| 33 |
def pack_bytes(data):return pack_varint(len(data))+data
|
| 34 |
def xor_bytes(data):return bytes([A^XOR_KEY for A in data])
|
| 35 |
def frame_packet(packet_id,payload):A=pack_varint(packet_id)+payload;return pack_varint(len(A))+A
|
|
@@ -71,12 +72,20 @@ def client_login(remote_sock,host,port,timeout=1e1):
|
|
| 71 |
if C==PKT_LOGIN_SUCCESS:break
|
| 72 |
if C==PKT_LOGIN_PLUGIN_REQUEST:E,F=read_varint_from_buf(D,0);A.sendall(frame_login_plugin_response(E,b''))
|
| 73 |
A.settimeout(_B);return B
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
def server_consume_login(client_sock,timeout=1e1):
|
| 75 |
-
|
| 76 |
-
if
|
| 77 |
-
|
| 78 |
-
if
|
| 79 |
-
B.
|
|
|
|
|
|
|
| 80 |
def _pump_plain_to_mc(src,mc_sock,wrap_fn):
|
| 81 |
try:
|
| 82 |
while _A:
|
|
|
|
| 1 |
+
_D='replace'
|
| 2 |
_C='utf-8'
|
| 3 |
_B=None
|
| 4 |
_A=True
|
|
|
|
| 30 |
def read_string_from_payload(payload,offset=0):
|
| 31 |
A=payload;D,C=read_varint_from_buf(A,offset);B=C+D
|
| 32 |
if B>len(A):raise ValueError('short string in packet')
|
| 33 |
+
return A[C:B].decode(_C,errors=_D),B
|
| 34 |
def pack_bytes(data):return pack_varint(len(data))+data
|
| 35 |
def xor_bytes(data):return bytes([A^XOR_KEY for A in data])
|
| 36 |
def frame_packet(packet_id,payload):A=pack_varint(packet_id)+payload;return pack_varint(len(A))+A
|
|
|
|
| 72 |
if C==PKT_LOGIN_SUCCESS:break
|
| 73 |
if C==PKT_LOGIN_PLUGIN_REQUEST:E,F=read_varint_from_buf(D,0);A.sendall(frame_login_plugin_response(E,b''))
|
| 74 |
A.settimeout(_B);return B
|
| 75 |
+
def _skip_proxy_header(reader):
|
| 76 |
+
C=b'\r\n';A=reader
|
| 77 |
+
while len(A._buf)<6:A._fill()
|
| 78 |
+
if A._buf[:6]==b'PROXY ':
|
| 79 |
+
while C not in A._buf:A._fill()
|
| 80 |
+
B=A._buf.index(C)+2;D=A._buf[:B];A._buf=A._buf[B:];return D.decode(errors=_D).strip()
|
| 81 |
def server_consume_login(client_sock,timeout=1e1):
|
| 82 |
+
C=client_sock;C.settimeout(timeout);A=PacketReader(C);D=_skip_proxy_header(A)
|
| 83 |
+
if D:import sys;print(f"[mc_tunnel] skipped PROXY header: {D}",file=sys.stderr,flush=_A)
|
| 84 |
+
B,F=A.read_packet()
|
| 85 |
+
if B!=PKT_HANDSHAKE:import sys;E=A._buf[:32].hex()if A._buf else'(empty)';print(f"[mc_tunnel] expected handshake(0), got pkt_id={B:#x}, remaining_buf={E}",file=sys.stderr,flush=_A);raise ValueError(f"expected handshake, got {B:#x}")
|
| 86 |
+
B,G=A.read_packet()
|
| 87 |
+
if B!=PKT_LOGIN_START:raise ValueError(f"expected login start, got {B:#x}")
|
| 88 |
+
C.sendall(build_login_success());C.settimeout(_B);return A
|
| 89 |
def _pump_plain_to_mc(src,mc_sock,wrap_fn):
|
| 90 |
try:
|
| 91 |
while _A:
|
services/playit.py
CHANGED
|
@@ -19,11 +19,11 @@ def _load_token():
|
|
| 19 |
if A in os.environ:del os.environ[A]
|
| 20 |
return D
|
| 21 |
def _handle_client(client_sock):
|
| 22 |
-
|
| 23 |
-
try:
|
| 24 |
-
except Exception as
|
| 25 |
-
logger.warning('Playit MC tunnel client dropped: {}',D)
|
| 26 |
-
try:
|
| 27 |
except Exception:pass
|
| 28 |
def _xor_bridge_loop():
|
| 29 |
A=socket.socket(socket.AF_INET,socket.SOCK_STREAM);A.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
|
|
|
|
| 19 |
if A in os.environ:del os.environ[A]
|
| 20 |
return D
|
| 21 |
def _handle_client(client_sock):
|
| 22 |
+
C=client_sock;import traceback as D,sys
|
| 23 |
+
try:E=mc_tunnel.server_consume_login(C);A=socket.socket(socket.AF_INET,socket.SOCK_STREAM);A.settimeout(5.);A.connect(('127.0.0.1',SSH_PORT));A.settimeout(None);logger.info('Playit MC tunnel: login complete, relaying to sshd');mc_tunnel.relay_server(E,A,C)
|
| 24 |
+
except Exception as B:
|
| 25 |
+
logger.warning('Playit MC tunnel client dropped: {} - {}',type(B).__name__,B);print(f"[playit] _handle_client error: {type(B).__name__}: {B}",file=sys.stderr,flush=_A);D.print_exc(file=sys.stderr)
|
| 26 |
+
try:C.close()
|
| 27 |
except Exception:pass
|
| 28 |
def _xor_bridge_loop():
|
| 29 |
A=socket.socket(socket.AF_INET,socket.SOCK_STREAM);A.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
|