def main(args): # Packet encoder encoder = NdnTlvEncoder( ) if args.format == 'ndntlv' else SimpleStringEncoder # Generate interest packet first_interest: Interest = Interest(args.name) encoded_first_interest = encoder.encode(first_interest) # Send interest packet sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(5) sock.bind(("0.0.0.0", 0)) try: resolved_hostname = socket.gethostbyname(args.ip) except: print("Resolution of hostname failed.") sys.exit(-2) sock.sendto(encoded_first_interest, (resolved_hostname, args.port)) # Receive content object try: wire_packet_first, addr = sock.recvfrom(8192) except: print("Timeout.") sys.exit(-1) # Wait time_to_wait = int(encoder.decode_data(wire_packet_first)[1]) print("Waiting for result: " + str(time_to_wait)) time.sleep(time_to_wait * 1.2) # Send second interest new_components = args.name.split("/")[1:-1] new_components.append("resultpNFN") new_name = "/" + '/'.join(new_components) second_interest: Interest = Interest(new_name) encoded_second_interest = encoder.encode(second_interest) sock.sendto(encoded_second_interest, (resolved_hostname, args.port)) # Receive result try: wire_packet_second, addr = sock.recvfrom(8192) except: print("Timeout.") sys.exit(-1) # Print if args.plain is False: printer = NdnTlvPrinter(wire_packet_second) printer.formatted_print() else: encoder = NdnTlvEncoder() if encoder.is_content(wire_packet_second): sys.stdout.buffer.write( encoder.decode_data(wire_packet_second)[1] + b"\n") else: sys.exit(-2)
class test_NdnTlvEncoder(unittest.TestCase): """Test the NdnTlvEncoder""" def setUp(self): self.encoder = NdnTlvEncoder() def tearDown(self): pass def test_Interest_Creation_no_wireformat(self): """Test the creation of an interest message with no wireformat given""" name: Name = Name("/test/data") i1: Interest = Interest(name) enc_i1 = self.encoder.encode(i1) self.assertEqual(enc_i1[0], 0x5) self.assertTrue(self.encoder.is_interest(enc_i1)) self.assertFalse(self.encoder.is_content(enc_i1)) self.assertFalse(self.encoder.is_nack(enc_i1)) dec_i1 = self.encoder.decode(enc_i1) self.assertEqual(dec_i1, i1) def test_Content_Creation_no_wireformat(self): """Test the creation of a content object message with no wireformat given""" name: Name = Name("/test/data") c1: Content = Content(name, "HelloWorld") enc_c1 = self.encoder.encode(c1) self.assertEqual(enc_c1[0], 0x6) self.assertFalse(self.encoder.is_interest(enc_c1)) self.assertTrue(self.encoder.is_content(enc_c1)) self.assertFalse(self.encoder.is_nack(enc_c1)) dec_c1 = self.encoder.decode(enc_c1) self.assertEqual(dec_c1, c1) def test_Nack_Creation_no_wireformat(self): """Test the creation of a nack object message with no wireformat given""" name: Name = Name("/test/data") i1: Interest = Interest(name) n1: Nack = Nack(name, NackReason.NO_ROUTE, interest=i1) enc_n1 = self.encoder.encode(n1) self.assertEqual(enc_n1[0], 0x64) self.assertEqual(enc_n1[3], 0x03) self.assertEqual(enc_n1[4], 0x20) self.assertFalse(self.encoder.is_interest(enc_n1)) self.assertFalse(self.encoder.is_content(enc_n1)) self.assertTrue(self.encoder.is_nack(enc_n1)) dec_n1 = self.encoder.decode(enc_n1) self.assertEqual(dec_n1, n1)
def run_singel_interest(format, ip, port, plain, interestName, logger, sock): # Packet encoder # print("\n Sending Interest "+ str(interestName)+"\n") t1=time.time() encoder = NdnTlvEncoder() if format == 'ndntlv' else SimpleStringEncoder # Generate interest packet interest: Interest = Interest(interestName) encoded_interest = encoder.encode(interest) # Send interest packet try: resolved_hostname = socket.gethostbyname(ip) except: print("Resolution of hostname failed.") sys.exit(-2) sock.sendto(encoded_interest, (resolved_hostname, port)) # Receive content object try: wire_packet, addr = sock.recvfrom(8192) except: print("Timeout.") sys.exit(-1) # Print # if plain is False: # printer = NdnTlvPrinter(wire_packet) # printer.formatted_print() # else: # encoder = NdnTlvEncoder() # if encoder.is_content(wire_packet): # sys.stdout.buffer.write(encoder.decode_data(wire_packet)[1]) # else: # sys.exit(-2) # logger.info("Content Received "+ str(interestName)) #print("\n Content Received "+ str(interestName)+"\n") t2 = time.time() print("The response time for"+str(interestName)+","+ str(t1) + "," + str(t2) + "," +str(t2-t1))
def main(args): # Packet encoder encoder = NdnTlvEncoder( ) if args.format == 'ndntlv' else SimpleStringEncoder() # Generate interest packet interest: Interest = Interest(args.name) encoded_interest = encoder.encode(interest) # Send interest packet sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(args.timeout) sock.bind(("0.0.0.0", 0)) try: resolved_hostname = socket.gethostbyname(args.ip) except: print("Resolution of hostname failed.") sys.exit(-2) sock.sendto(encoded_interest, (resolved_hostname, args.port)) # Receive content object try: wire_packet, addr = sock.recvfrom(8192) except: print("Timeout.") sys.exit(-1) # Print if args.plain is False: printer = NdnTlvPrinter(wire_packet) printer.formatted_print() else: encoder = NdnTlvEncoder() if encoder.is_content(wire_packet): sys.stdout.buffer.write(encoder.decode_data(wire_packet)[1]) else: sys.exit(-2)