|
import socket |
|
import sys |
|
import ssl |
|
from multiprocessing import Process |
|
|
|
class Server(object): |
|
def __init__(self, port=5054): |
|
self.port = port |
|
|
|
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|
self.incoming = [] |
|
self.server_process = None |
|
|
|
def process_start(self, response): |
|
if not self.server_process: |
|
self.server_process = Process(target=self.start, args=(response,)) |
|
self.server_process.start() |
|
|
|
def end(self): |
|
self.server_process.join(5) |
|
if self.server_process.is_alive(): |
|
self.server_process.terminate() |
|
|
|
def start(self, response): |
|
self.socket.bind(('localhost', self.port)) |
|
self.socket.listen(5) |
|
client_socket, _ = self.socket.accept() |
|
self.handle_client(client_socket, response) |
|
|
|
def handle_client(self, client_socket, response): |
|
client_socket.send(response) |
|
client_socket.close() |
|
|
|
class SecureServer(Server): |
|
def __init__(self, key_file_path, cert_file_path, port=5054): |
|
super(FakeSecureServer, self).__init__(port=5054) |
|
self.key_file_path = key_file_path |
|
self.cert_file_path = cert_file_path |
|
|
|
def handle_client(self, client_socket, response): |
|
secure_socket = ssl.wrap_socket(client_socket, server_side=True, certfile=self.cert_file_path, keyfile=self.key_file_path, ssl_version=ssl.PROTOCOL_SSLv23) |
|
super(FakeSecureServer, self).handle_client(secure_socket, response) |
|
|
|
if __name__ == "__main__": |
|
server = SecureServer(sys.argv[1], sys.argv[2]) |
|
server.process_start("foo") |
|
server.server_process.join() |