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!')
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)
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)
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!')
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()
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()
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)
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)
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!')