summaryrefslogtreecommitdiff
path: root/pkd_stub.py
diff options
context:
space:
mode:
authorCarson Fleming <cflems@cflems.net>2023-03-30 13:22:43 -0700
committerCarson Fleming <cflems@cflems.net>2023-03-30 13:22:43 -0700
commit9c78e5db5a1d743007f5a5ff97947a32f049129a (patch)
tree39ddc38b947809844e16f49d936d8ab451638d6a /pkd_stub.py
parent867c754c81b13d361a71b2081b5934bc5e3adc28 (diff)
downloadpk-9c78e5db5a1d743007f5a5ff97947a32f049129a.tar.gz
Get everything working locally
Diffstat (limited to 'pkd_stub.py')
-rw-r--r--pkd_stub.py35
1 files changed, 23 insertions, 12 deletions
diff --git a/pkd_stub.py b/pkd_stub.py
index 695db77..fb45875 100644
--- a/pkd_stub.py
+++ b/pkd_stub.py
@@ -305,7 +305,7 @@ def tcp_send_npty(sel, client):
except:
tcp_disconnect(sel, client)
-def tcp_unpty(sel, client, catchup=True, backtrack=0):
+def tcp_unpty(sel, client, catchup=True, putback=0):
if type(client['pty']) == dict:
client['pty']['pty'] = False
if client['pty']['alive']:
@@ -319,21 +319,15 @@ def tcp_unpty(sel, client, catchup=True, backtrack=0):
except:
tcp_disconnect(sel, client)
- client['sock'].stop_stream(backtrack)
+ client['sock'].stop_stream(backtrack=putback)
client['pty'] = False
if catchup:
tcp_dumpq(sel, client)
-def tcp_transport(sel, sock, client):
- global tcp_clients, privkey, bits
+def tcp_process_data(sel, sock, client, data):
+ global tcp_clients
- if not client['alive']:
- return
- try:
- data = client['sock'].recv()
- except:
- data = False
if not data or data == b'\xde\xad':
if client['pty']:
tcp_unpty(sel, client, catchup=False)
@@ -341,9 +335,17 @@ def tcp_transport(sel, sock, client):
return
elif not client['pty']:
brint('[%d]' % tcp_clients.index(client), data, end='', prompt=False)
- elif data[:6] == b'\xc0\xdenpty':
- tcp_unpty(sel, client, catchup=True, backtrack=len(data[6:]))
+ elif b'\xc0\xdenpty' in data:
+ idx = data.index(b'\xc0\xdenpty')
+ if idx > 0:
+ tcp_process_data(sel, sock, client, data[:idx])
+
+ print('[INFO] received npty from client')
+ tcp_unpty(sel, client, catchup=True, putback=len(data)-idx-6)
print('[INFO] npty acknowledged')
+
+ if idx+6 < len(data):
+ tcp_transport(sel, sock, client)
else:
try:
client['pty']['sock'].sendall(data)
@@ -351,6 +353,15 @@ def tcp_transport(sel, sock, client):
screens_detach(sel, client['pty'])
tcp_send_npty(sel, client)
+def tcp_transport(sel, sock, client):
+ if not client['alive']:
+ return
+ try:
+ data = client['sock'].recv()
+ except:
+ data = False
+ tcp_process_data(sel, sock, client, data)
+
def tcp_close(sock, client):
try:
dispatch_ccmd(client, b'tunnel')