Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 25 additions & 27 deletions core/tcpserver.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import socket
from utils.loggers import log
import sys
import select
import threading


class TcpServer:

Expand All @@ -19,6 +20,9 @@ def __init__(self, port, timeout):

if not self.socket: return

log.info("Incoming connection accepted")

threading.Thread(target=self.receive_data).start()
self.forward_data()

def connect_socket(self):
Expand All @@ -29,6 +33,7 @@ def connect_socket(self):
else:
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

try:
server.setsockopt(socket.SOL_SOCKET, socket.TCP_NODELAY, 1)
except socket.error:
Expand All @@ -52,35 +57,28 @@ def connect_socket(self):
raise


def forward_data(self):
def receive_data(self):
while(1):
self.socket_state = True
try:
data = ''
while 1:
packet = self.socket.recv(1024)
data += packet.decode()

log.info("Incoming connection accepted")
if len(packet) < 1024:
break

self.socket.setblocking(0)
sys.stdout.write(data)
sys.stdout.flush()
except socket.error:
self.socket_state = False

while(1):
read_ready, write_ready, in_error = select.select(
[self.socket, sys.stdin], [], [self.socket, sys.stdin])

try:
buffer = self.socket.recv(100)
while(buffer != ''):
def forward_data(self):

self.socket_state = True
self.socket.setblocking(0)

sys.stdout.write(buffer)
sys.stdout.flush()
buffer = self.socket.recv(100)
if(buffer == ''):
return
except socket.error:
pass
while(1):
r, w, e = select.select([sys.stdin], [], [], 0)
if(len(r) == 0):
break
c = sys.stdin.read(1)
if(c == ''):
return
if(self.socket.sendall(c) != None):
return
while(1):
i = sys.stdin.read(1)
self.socket.sendall(i.encode())