Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
 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()
Exemplo n.º 6
0
    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()
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
                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:
Exemplo n.º 10
0
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()