def listen(sock): actions = { 'chmod': syscalls.chmod, 'create': syscalls.create, 'getattr': syscalls.getattr, 'open': syscalls.open, 'read': syscalls.read, 'readdir': syscalls.readdir, 'unlink': syscalls.unlink, 'write': syscalls.write, } while True: conn, addr = sock.accept() message = read_message(conn) method = message.pop('method') if method == 'write': message['data'] = message['data'].encode() try: ret = actions[method](**message) if method == 'read': ret = ret.decode() if ret is not None: write_message(conn, method=method, ret=ret) else: write_message(conn, method=method) except OSError: write_message(conn, method=method, errno=1) conn.close()
def remote_call(ipaddress, opcode, **kwargs): sock = socket(AF_INET, SOCK_STREAM) sock.connect((ipaddress, DIFUSE_PORT)) write_message(sock, opcode, **kwargs) resp = read_message(sock) sock.close() return resp
def listen(user_list, message_hist): s = socket.socket(socket.AF_INET , socket.SOCK_STREAM) assert s s.bind(('', 6283)) while 1: s.listen(1) assert s (conn , addr) = s.accept() mess = conn.recv(1024).decode() #decode convers from bin to string #Hangs untill message is recieved assert mess ## FORK HERE TO DECODE WHILE STILL BEING ABLE TO ACCEPT A NEW MESSAGE #convert to list mess_list = [ord(mess[i]) for i in range(len(mess))] # decrypt dec_mess = saber.decrypt(mess_list, 20, user_list.key) # convert to string message = '' for i in range(len(dec_mess)): message = message + chr(dec_mess[i]) rec_mess = protocol.read_message(message) #piece out message assert rec_mess if not rec_mess or rec_mess[2] == '' or rec_mess[2] == '\n': ##Empty message recieved None elif(user_list.search_users(rec_mess[0][0])): print('\n' + rec_mess[0][0] + ':\t' + rec_mess[2] + '\n' + input_message, end = '') message_hist.add_message(rec_mess[0][0], rec_mess[1][0], rec_mess[2]) else: #Send error message print('\n<<Message recieved from unknon user and discarded>>\n' + input_message, end = '') return
def __init__(self, port): self.addrs = [] self.files = {} # map: file -> addr = (ip, port) sock = listening_socket(port) actions = { 'join': self.join, 'leave': self.leave, 'readdir': self.readdir, 'find': self.find, 'create': self.create, 'unlink': self.unlink } thread = Thread(target=debug, args=(self, )) thread.daemon = True thread.start() try: while True: connsock, addr = sock.accept() message = read_message(connsock) actions[message.pop('method')](connsock, addr, message) connsock.close() except KeyboardInterrupt: pass # return from constructor
def start(self): actions = {Opcode.JOIN: self.peer_join, Opcode.LEAVE: self.peer_leave} while True: conn, addr = self.sock.accept() req = read_message(conn) try: actions[req['opcode']](conn, addr[0]) except KeyError: write_message(conn, Opcode.ERROR, message='Unsupported opcode.') conn.close()
def start(self): # Contact bootstrap and ask to join network resp = remote_call(self.bootstrap, Opcode.JOIN) if resp['opcode'] == Opcode.ERROR: print(resp['body']['message']) exit(1) self.peerlist = resp['body']['peers'] self.myhash = resp['body']['hash'] # Contact next node and ask for files neighbor = self.next_peer() # Listen and action loop actions = { Opcode.CHMOD: syscalls.chmod, Opcode.CREATE: syscalls.create, Opcode.GETATTR: syscalls.getattr, Opcode.OPEN: syscalls.open, Opcode.READ: syscalls.read, Opcode.READDIR: syscalls.readdir, Opcode.UNLINK: syscalls.unlink, Opcode.WRITE: syscalls.write, Opcode.JOIN: self.add_peer, Opcode.LEAVE: self.remove_peer } while True: conn, addr = self.sock.accept() req = read_message(conn) try: # Body consists of args to local functions args = req['body'] try: ret = actions[req['opcode']](conn, **args) except OSError as e: write_message(conn, Opcode.ERROR, message='OSError: {}'.format(e.errno)) except KeyError: write_message(conn, Opcode.ERROR, message='Unsupported opcode.') conn.close()
def listen(user_list, message_hist): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) assert s s.bind(('', 6283)) while 1: s.listen(1) assert s (conn, addr) = s.accept() mess = conn.recv(1024).decode() #decode convers from bin to string #Hangs untill message is recieved assert mess ## FORK HERE TO DECODE WHILE STILL BEING ABLE TO ACCEPT A NEW MESSAGE #convert to list mess_list = [ord(mess[i]) for i in range(len(mess))] # decrypt dec_mess = saber.decrypt(mess_list, 20, user_list.key) # convert to string message = '' for i in range(len(dec_mess)): message = message + chr(dec_mess[i]) rec_mess = protocol.read_message(message) #piece out message assert rec_mess if not rec_mess or rec_mess[2] == '' or rec_mess[ 2] == '\n': ##Empty message recieved None elif (user_list.search_users(rec_mess[0][0])): print('\n' + rec_mess[0][0] + ':\t' + rec_mess[2] + '\n' + input_message, end='') message_hist.add_message(rec_mess[0][0], rec_mess[1][0], rec_mess[2]) else: #Send error message print('\n<<Message recieved from unknon user and discarded>>\n' + input_message, end='') return
dec_test_string = '' for i in range(len(dec_t_string)): dec_test_string = dec_test_string + chr(dec_t_string[i]) print("mead == " + dec_test_string) wait = input("[Enter to Contine]") wait = None ## protocol.py print("\n\n<<<< <<<< <<<< Testing Protocol.py >>>> >>>> >>>>") print("From: Sender\nTo: Reciever\nMessage: This is a protocol test") print("v0.1") message = protocol.write_message(("Reciever", '255.255.255.255'), ("Sender", '1.1.1.1'), "This is a protocol test", '0.1') print("Composed Message:\n" + message) read_message = protocol.read_message(message) print("Decomposed Message:") print(read_message) print("v0.2") message = protocol.write_message(("Reciever", '255.255.255.255'), ("Sender", '1.1.1.1'), "This is a protocol test", '0.2') print("Composed Message:\n" + message) read_message = protocol.read_message(message) print("Decomposed Message:") print(read_message) wait = input("[Enter to Contine]") wait = None ## messages.py
break except socket.error, err: # There must be something wrong with this socket # Create a new one self._connect(dest) # Only retry when connected, if retry >= self._send_error_retry: self._locks[dest].release() raise exception.NoMoreRetryError('socket send error') # Do not need sleep here retry += 1 # Retrans here FIXME # What if error happens while read answer? Should we retry? # Set a timer here to get ack resp = protocol.read_message(self._sockets[dest]) self._locks[dest].release() if 'error' in resp: raise exception.ResponseError(resp.error) # Response must have 'value' if not have 'error' # What about payload? if 'payload' in resp: return resp.value, resp.payload else: return resp.value def bye(self, addr): # Fixme: we should close connections which are inactive # Conn:
print("Standardized CipherSaber-2 Test String:\n" + test_string) dec_t_string = saber.decrypt(t_string, 20, 'Al') dec_test_string = '' for i in range(len(dec_t_string)): dec_test_string = dec_test_string + chr(dec_t_string[i]) print("mead == " + dec_test_string) wait = input("[Enter to Contine]") wait = None ## protocol.py print("\n\n<<<< <<<< <<<< Testing Protocol.py >>>> >>>> >>>>") print("From: Sender\nTo: Reciever\nMessage: This is a protocol test") print("v0.1") message = protocol.write_message(("Reciever", '255.255.255.255'), ("Sender", '1.1.1.1'), "This is a protocol test", '0.1') print("Composed Message:\n" + message) read_message = protocol.read_message(message) print("Decomposed Message:") print(read_message) print("v0.2") message = protocol.write_message(("Reciever", '255.255.255.255'), ("Sender", '1.1.1.1'), "This is a protocol test", '0.2') print("Composed Message:\n" + message) read_message = protocol.read_message(message) print("Decomposed Message:") print(read_message) wait = input("[Enter to Contine]") wait = None ## messages.py print("\n\n<<<< <<<< <<<< Testing messages.py >>>> >>>> >>>>") mess_list = messages.message_list()