Exemple #1
0
 def receive_message(self):
     ready = select.select([self.sock], [], [], 10.0)
     if ready[0]:
         print('Starting to receive')
         reply = self.sock.recv(4096)  # 4096
         print('Reply raw:')
         print(binascii.hexlify(reply))
         print('Reply parsed:')
         print(parseReceivedMessage(reply))
     else:
         print('Timeout!')
Exemple #2
0
 def receive_message(self):
     ready = select.select([self.sock], [], [], 10.0)
     if ready[0]:
         print('Starting to receive')
         reply = self.sock.recv(4096)  # 4096
         print('Reply raw:')
         print(binascii.hexlify(reply))
         print('Reply parsed:')
         print(parseReceivedMessage(reply))
     else:
         print('Timeout!')
Exemple #3
0
def handshake(socket):
    socket.send(createMessage(msg_type=MSG_JOIN,
                              org_ip=socket.getsockname()[0]))
    response = socket.recv(1024)
    header, payload = parseReceivedMessage(response)
    # Join was successful
    if payload == ('0200'):
        global neighbours
        neighbours.append((header[6], header[4]))
        # Send PING type b to expand neighbourhood
        socket.send(createMessage(ttl=5, org_port=socket.getsockname()[1],
                                  org_ip=socket.getsockname()[0]))
        response = socket.recv(1024)
        header, payload = parseReceivedMessage(response)
        if len(payload) > 0:
            # Iterate through payload
            for i in range(1, len(payload)):
                # Add to neighbours if not already there
                if not (payload[i][0], payload[i][1]) in neighbours:
                    neighbours.append((payload[i][0], payload[i][1]))
            print("Neighbours:")
            print(neighbours)
Exemple #4
0
def forward(header, payload, sock):
    global connections
    data = struct.pack('>'+str(len(payload[0]))+'s', payload[0])
    message = createMessage(msg_type=MSG_QUERY, ttl=header[1]-1,
                            org_port=header[4], org_ip=header[6],
                            msg_id=header[7], payload=data)

    for connection in connections:
        # Don't send it back to searching node
        if sock is not connection[1]:
            print("Forwarded Message parsed:")
            print(parseReceivedMessage(message))
            connection[1].send(message)
Exemple #5
0
def main():
    app = p2pConsole()
    while (True):
        console_input = str(raw_input('node$ ')).split()
        if str(console_input[0]) == 'connect':
            if len(console_input) == 3:
                app.host = str(console_input[1])
                app.port = int(console_input[2])
                app.start_connection()
            else:
                print("Staring connection with default values. Use " +
                      "following syntax for custom values: connect " +
                      "[host] [port]")
                app.start_connection()
        elif str(console_input[0]) == 'join':
            app.sock.send(
                createMessage(msg_type=MSG_JOIN,
                              payload="",
                              org_port=app.org_port,
                              org_ip=app.org_ip))
            app.receive_message()
        elif str(console_input[0]) == 'query':
            if len(console_input) == 2:
                message = createMessage(msg_type=MSG_QUERY,
                                        ttl=3,
                                        org_port=app.org_port,
                                        org_ip=app.org_ip,
                                        payload=str(console_input[1]))
                print(parseReceivedMessage(message))
                app.sock.send(message)
                app.receive_message()
            else:
                print("Use following syntax: query [payload]")
        elif str(console_input[0]) == 'ping':
            app.sock.send(
                createMessage(ttl=3, org_port=app.org_port, org_ip=app.org_ip))
            app.receive_message()
        elif str(console_input[0]) == 'bye':
            print("Closing connection")
            app.sock.send(
                createMessage(msg_type=MSG_BYE,
                              org_port=app.org_port,
                              org_ip=app.org_ip))
            app.close_connection()
            print("Closed")
        elif str(console_input[0]) == 'quit':
            app.close_connection()
            sys.exit(0)
        else:
            print('Wrong input!')
Exemple #6
0
def p2p_replying(socket):
    connected = True
    while connected:
        message = socket.recv(1024)
        print("Message received:")
        print(binascii.hexlify(message))
        header, payload = parseReceivedMessage(message)
        print(header)
        print(payload)
        # Disconnect after BYE
        if(header[2] == MSG_BYE):
            connected = False
        process_message(header, payload, socket)

    socket.close()
Exemple #7
0
def p2p_replying(socket):
    connected = True
    while connected:
        message = socket.recv(1024)
        print("Message received:")
        print(binascii.hexlify(message))
        header, payload = parseReceivedMessage(message)
        print(header)
        print(payload)
        # Disconnect after BYE
        if (header[2] == MSG_BYE):
            connected = False
        process_message(header, payload, socket)

    socket.close()
Exemple #8
0
def handshake(socket):
    socket.send(
        createMessage(msg_type=MSG_JOIN, org_ip=socket.getsockname()[0]))
    response = socket.recv(1024)
    header, payload = parseReceivedMessage(response)
    # Join was successful
    if payload == ('0200'):
        global neighbours
        neighbours.append((header[6], header[4]))
        # Send PING type b to expand neighbourhood
        socket.send(
            createMessage(ttl=5,
                          org_port=socket.getsockname()[1],
                          org_ip=socket.getsockname()[0]))
        response = socket.recv(1024)
        header, payload = parseReceivedMessage(response)
        if len(payload) > 0:
            # Iterate through payload
            for i in range(1, len(payload)):
                # Add to neighbours if not already there
                if not (payload[i][0], payload[i][1]) in neighbours:
                    neighbours.append((payload[i][0], payload[i][1]))
            print("Neighbours:")
            print(neighbours)
Exemple #9
0
def forward(header, payload, sock):
    global connections
    data = struct.pack('>' + str(len(payload[0])) + 's', payload[0])
    message = createMessage(msg_type=MSG_QUERY,
                            ttl=header[1] - 1,
                            org_port=header[4],
                            org_ip=header[6],
                            msg_id=header[7],
                            payload=data)

    for connection in connections:
        # Don't send it back to searching node
        if sock is not connection[1]:
            print("Forwarded Message parsed:")
            print(parseReceivedMessage(message))
            connection[1].send(message)
Exemple #10
0
def main():
    app = p2pConsole()
    while(True):
        console_input = str(raw_input('node$ ')).split()
        if str(console_input[0]) == 'connect':
            if len(console_input) == 3:
                app.host = str(console_input[1])
                app.port = int(console_input[2])
                app.start_connection()
            else:
                print("Staring connection with default values. Use " +
                      "following syntax for custom values: connect " +
                      "[host] [port]")
                app.start_connection()
        elif str(console_input[0]) == 'join':
            app.sock.send(createMessage(
                msg_type=MSG_JOIN, payload="", org_port=app.org_port,
                org_ip=app.org_ip))
            app.receive_message()
        elif str(console_input[0]) == 'query':
            if len(console_input) == 2:
                message = createMessage(
                    msg_type=MSG_QUERY, ttl=3, org_port=app.org_port,
                    org_ip=app.org_ip, payload=str(console_input[1]))
                print(parseReceivedMessage(message))
                app.sock.send(message)
                app.receive_message()
            else:
                print("Use following syntax: query [payload]")
        elif str(console_input[0]) == 'ping':
            app.sock.send(createMessage(ttl=3, org_port=app.org_port,
                                        org_ip=app.org_ip))
            app.receive_message()
        elif str(console_input[0]) == 'bye':
            print("Closing connection")
            app.sock.send(createMessage(msg_type=MSG_BYE,
                                        org_port=app.org_port,
                                        org_ip=app.org_ip))
            app.close_connection()
            print("Closed")
        elif str(console_input[0]) == 'quit':
            app.close_connection()
            sys.exit(0)
        else:
            print('Wrong input!')