def __init__(self, port=DEFAULT_PORT): self.port = port # Set SSL Context self.context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) self.context.verify_mode = ssl.CERT_NONE self.context.set_ciphers("HIGH") # Create socket self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Wrap socket through ssl self.sock = ssl.wrap_socket( self.sock, server_side=True, ciphers="HIGH", ssl_version=ssl.PROTOCOL_TLSv1, certfile="cert/server.crt", keyfile="cert/server.key", ) self.chat = Chat() self.__connected = list()
class Server(object): """ First and basic version of the server: For now, only allow to create Comptoirs """ def __init__(self, port=DEFAULT_PORT): self.port = port # Set SSL Context self.context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) self.context.verify_mode = ssl.CERT_NONE self.context.set_ciphers("HIGH") # Create socket self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Wrap socket through ssl self.sock = ssl.wrap_socket( self.sock, server_side=True, ciphers="HIGH", ssl_version=ssl.PROTOCOL_TLSv1, certfile="cert/server.crt", keyfile="cert/server.key", ) self.chat = Chat() self.__connected = list() def idle(self): self.sock.bind(('', self.port)) self.sock.listen(0) while True: # Waiting for a new connection # TODO log connection csock, addr = self.sock.accept() print("{0} Connection opened".format(addr[0])) # Create a new user instance usr = User("", csock) self.__connected.append(usr) # Threading the handler for the new client thread.start_new_thread(self.handle_connection, (usr,)) def handle_connection(self, usr): # Wait for username usr.nick = usr.sock.recv(1024) # Connect the user self.chat.connect(usr) usr.send_ack() # Join the comptoir cid = usr.sock.recv(1024) keyhash = usr.sock.recv(1024) self.chat.join(usr, cid, keyhash) usr.send_ack() quit = False while not quit: # TODO send ACK to client quit = self.chat.recved(cid, usr, usr.sock.recv(1024)) self.chat.disconnect(usr) usr.sock.close() def __del__(self): self.sock.close()