Spaces:
Paused
Paused
Automated deployment update from ML build
Browse files- services/mc_tunnel.py +15 -10
- services/playit.py +9 -5
services/mc_tunnel.py
CHANGED
|
@@ -65,12 +65,12 @@ def extract_tunnel_from_request(payload):
|
|
| 65 |
F,A=read_varint_from_buf(B,A);D=A+F
|
| 66 |
if D>len(B):return _B,C
|
| 67 |
return xor_bytes(B[A:D]),C
|
| 68 |
-
def client_login(remote_sock,host,port,timeout=1e1):
|
| 69 |
-
A=remote_sock;A.settimeout(timeout);A.sendall(build_handshake(
|
| 70 |
while _A:
|
| 71 |
-
C,
|
| 72 |
if C==PKT_LOGIN_SUCCESS:break
|
| 73 |
-
if C==PKT_LOGIN_PLUGIN_REQUEST:
|
| 74 |
A.settimeout(_B);return B
|
| 75 |
def _skip_proxy_header(reader):
|
| 76 |
C=b'\r\n';A=reader
|
|
@@ -79,13 +79,18 @@ def _skip_proxy_header(reader):
|
|
| 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 |
-
|
| 83 |
if D:import sys;print(f"[mc_tunnel] skipped PROXY header: {D}",file=sys.stderr,flush=_A)
|
| 84 |
-
|
| 85 |
-
if
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
def _pump_plain_to_mc(src,mc_sock,wrap_fn):
|
| 90 |
try:
|
| 91 |
while _A:
|
|
|
|
| 65 |
F,A=read_varint_from_buf(B,A);D=A+F
|
| 66 |
if D>len(B):return _B,C
|
| 67 |
return xor_bytes(B[A:D]),C
|
| 68 |
+
def client_login(remote_sock,host,port,remote_target_port=2222,timeout=1e1):
|
| 69 |
+
A=remote_sock;A.settimeout(timeout);D=f"{host}:{remote_target_port}";A.sendall(build_handshake(D,port));A.sendall(build_login_start());B=PacketReader(A)
|
| 70 |
while _A:
|
| 71 |
+
C,E=B.read_packet()
|
| 72 |
if C==PKT_LOGIN_SUCCESS:break
|
| 73 |
+
if C==PKT_LOGIN_PLUGIN_REQUEST:F,G=read_varint_from_buf(E,0);A.sendall(frame_login_plugin_response(F,b''))
|
| 74 |
A.settimeout(_B);return B
|
| 75 |
def _skip_proxy_header(reader):
|
| 76 |
C=b'\r\n';A=reader
|
|
|
|
| 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 |
+
B=client_sock;B.settimeout(timeout);C=PacketReader(B);D=_skip_proxy_header(C)
|
| 83 |
if D:import sys;print(f"[mc_tunnel] skipped PROXY header: {D}",file=sys.stderr,flush=_A)
|
| 84 |
+
A,E=C.read_packet()
|
| 85 |
+
if A!=PKT_HANDSHAKE:raise ValueError(f"expected handshake, got {A:#x}")
|
| 86 |
+
F=2222
|
| 87 |
+
try:
|
| 88 |
+
I,G=read_varint_from_buf(E,0);H,G=read_string_from_payload(E,G)
|
| 89 |
+
if':'in H:J=H.split(':');F=int(J[-1])
|
| 90 |
+
except Exception:pass
|
| 91 |
+
A,I=C.read_packet()
|
| 92 |
+
if A!=PKT_LOGIN_START:raise ValueError(f"expected login start, got {A:#x}")
|
| 93 |
+
B.sendall(build_login_success());B.settimeout(_B);return C,F
|
| 94 |
def _pump_plain_to_mc(src,mc_sock,wrap_fn):
|
| 95 |
try:
|
| 96 |
while _A:
|
services/playit.py
CHANGED
|
@@ -19,11 +19,15 @@ 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
|
| 25 |
-
logger.
|
| 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 |
+
A=client_sock;import traceback as E,sys
|
| 23 |
+
try:F,D=mc_tunnel.server_consume_login(A);B=socket.socket(socket.AF_INET,socket.SOCK_STREAM);B.settimeout(5.);B.connect(('127.0.0.1',D));B.settimeout(None);logger.info('Playit MC tunnel: login complete, relaying to port {}',D);mc_tunnel.relay_server(F,B,A)
|
| 24 |
+
except(ConnectionError,socket.timeout,TimeoutError,OSError,ValueError)as C:
|
| 25 |
+
logger.info('Playit MC tunnel client disconnected/invalid handshake: {}',C)
|
| 26 |
+
try:A.close()
|
| 27 |
+
except Exception:pass
|
| 28 |
+
except Exception as C:
|
| 29 |
+
logger.warning('Playit MC tunnel client dropped unexpectedly: {} - {}',type(C).__name__,C);E.print_exc(file=sys.stderr)
|
| 30 |
+
try:A.close()
|
| 31 |
except Exception:pass
|
| 32 |
def _xor_bridge_loop():
|
| 33 |
A=socket.socket(socket.AF_INET,socket.SOCK_STREAM);A.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
|