Agent: Add TCPConnectionHandler
This commit is contained in:
parent
2e7be823a1
commit
1f723b174e
|
@ -0,0 +1,43 @@
|
||||||
|
import socket
|
||||||
|
from ipaddress import IPv4Address
|
||||||
|
from threading import Thread
|
||||||
|
from typing import Callable
|
||||||
|
|
||||||
|
PROXY_TIMEOUT = 2.5
|
||||||
|
|
||||||
|
|
||||||
|
class TCPConnectionHandler(Thread):
|
||||||
|
"""Accepts connections on a TCP socket."""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
local_port: int,
|
||||||
|
local_host: str = "",
|
||||||
|
client_connected: Callable[[socket.socket, IPv4Address], None] = None,
|
||||||
|
):
|
||||||
|
self.local_port = local_port
|
||||||
|
self.local_host = local_host
|
||||||
|
self._client_connected = client_connected
|
||||||
|
super().__init__()
|
||||||
|
self.daemon = True
|
||||||
|
self._stopped = False
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
l_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
l_socket.bind((self.local_host, self.local_port))
|
||||||
|
l_socket.settimeout(PROXY_TIMEOUT)
|
||||||
|
l_socket.listen(5)
|
||||||
|
|
||||||
|
while not self._stopped:
|
||||||
|
try:
|
||||||
|
source, address = l_socket.accept()
|
||||||
|
except socket.timeout:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if self._client_connected:
|
||||||
|
self._client_connected(source, IPv4Address(address[0]))
|
||||||
|
|
||||||
|
l_socket.close()
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
self._stopped = True
|
Loading…
Reference in New Issue