56 lines
1.3 KiB
Python
56 lines
1.3 KiB
Python
global ssl
|
|
import ssl
|
|
|
|
global serverThread
|
|
class serverThread(threading.Thread):
|
|
def __init__(self,socket,isHttps):
|
|
threading.Thread.__init__(self)
|
|
self.socket = socket
|
|
self.isHttps = isHttps
|
|
|
|
def run(self):
|
|
connection = False
|
|
address = False
|
|
while True:
|
|
try:
|
|
connection,address = self.socket.accept()
|
|
except:
|
|
continue
|
|
|
|
try:
|
|
if self.isHttps:
|
|
connection.settimeout(5)
|
|
connection.do_handshake()
|
|
connection.settimeout(timeout)
|
|
if not triggerEvent("onConnection",connection,address): raise excConnectionClosed
|
|
except Exception as e:
|
|
handleException(e)
|
|
try:
|
|
connection.close()
|
|
except:
|
|
pass
|
|
|
|
global makeServer
|
|
def makeServer(host,port,https):
|
|
print("Opening " +str(host)+ ":" +str(port)+ " (" +str(https)+ ") ...")
|
|
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
serverSocket.bind((host,port))
|
|
if https:
|
|
proto = False
|
|
if sys.version_info >= (3,10):
|
|
proto = ssl.PROTOCOL_TLS_SERVER
|
|
else:
|
|
proto = ssl.PROTOCOL_TLS
|
|
|
|
ctx = ssl.SSLContext(proto)
|
|
ctx.check_hostname = False
|
|
ctx.load_cert_chain(https)
|
|
serverSocket = ctx.wrap_socket(
|
|
serverSocket,
|
|
server_side = True,
|
|
do_handshake_on_connect = False
|
|
)
|
|
serverSocket.listen(65535)
|
|
thread = serverThread(serverSocket,not (https == False))
|
|
serverThreads.append(thread)
|
|
thread.start() |