Generate receipts prior to raw transmit
This commit is contained in:
parent
2db400a1a0
commit
5dd2c31caf
@ -723,6 +723,29 @@ class Transport:
|
|||||||
sent = False
|
sent = False
|
||||||
outbound_time = time.time()
|
outbound_time = time.time()
|
||||||
|
|
||||||
|
generate_receipt = False
|
||||||
|
if (packet.create_receipt == True and
|
||||||
|
# Only generate receipts for DATA packets
|
||||||
|
packet.packet_type == RNS.Packet.DATA and
|
||||||
|
# Don't generate receipts for PLAIN destinations
|
||||||
|
packet.destination.type != RNS.Destination.PLAIN and
|
||||||
|
# Don't generate receipts for link-related packets
|
||||||
|
not (packet.context >= RNS.Packet.KEEPALIVE and packet.context <= RNS.Packet.LRPROOF) and
|
||||||
|
# Don't generate receipts for resource packets
|
||||||
|
not (packet.context >= RNS.Packet.RESOURCE and packet.context <= RNS.Packet.RESOURCE_RCL)):
|
||||||
|
|
||||||
|
generate_receipt = True
|
||||||
|
|
||||||
|
def packet_sent(packet):
|
||||||
|
packet.sent = True
|
||||||
|
packet.sent_at = time.time()
|
||||||
|
|
||||||
|
if generate_receipt:
|
||||||
|
packet.receipt = RNS.PacketReceipt(packet)
|
||||||
|
Transport.receipts.append(packet.receipt)
|
||||||
|
|
||||||
|
Transport.cache(packet)
|
||||||
|
|
||||||
# Check if we have a known path for the destination in the path table
|
# Check if we have a known path for the destination in the path table
|
||||||
if packet.packet_type != RNS.Packet.ANNOUNCE and packet.destination.type != RNS.Destination.PLAIN and packet.destination.type != RNS.Destination.GROUP and packet.destination_hash in Transport.destination_table:
|
if packet.packet_type != RNS.Packet.ANNOUNCE and packet.destination.type != RNS.Destination.PLAIN and packet.destination.type != RNS.Destination.GROUP and packet.destination_hash in Transport.destination_table:
|
||||||
outbound_interface = Transport.destination_table[packet.destination_hash][5]
|
outbound_interface = Transport.destination_table[packet.destination_hash][5]
|
||||||
@ -740,6 +763,7 @@ class Transport:
|
|||||||
new_raw += packet.raw[1:2]
|
new_raw += packet.raw[1:2]
|
||||||
new_raw += Transport.destination_table[packet.destination_hash][1]
|
new_raw += Transport.destination_table[packet.destination_hash][1]
|
||||||
new_raw += packet.raw[2:]
|
new_raw += packet.raw[2:]
|
||||||
|
packet_sent(packet)
|
||||||
Transport.transmit(outbound_interface, new_raw)
|
Transport.transmit(outbound_interface, new_raw)
|
||||||
Transport.destination_table[packet.destination_hash][0] = time.time()
|
Transport.destination_table[packet.destination_hash][0] = time.time()
|
||||||
sent = True
|
sent = True
|
||||||
@ -759,6 +783,7 @@ class Transport:
|
|||||||
new_raw += packet.raw[1:2]
|
new_raw += packet.raw[1:2]
|
||||||
new_raw += Transport.destination_table[packet.destination_hash][1]
|
new_raw += Transport.destination_table[packet.destination_hash][1]
|
||||||
new_raw += packet.raw[2:]
|
new_raw += packet.raw[2:]
|
||||||
|
packet_sent(packet)
|
||||||
Transport.transmit(outbound_interface, new_raw)
|
Transport.transmit(outbound_interface, new_raw)
|
||||||
Transport.destination_table[packet.destination_hash][0] = time.time()
|
Transport.destination_table[packet.destination_hash][0] = time.time()
|
||||||
sent = True
|
sent = True
|
||||||
@ -767,6 +792,7 @@ class Transport:
|
|||||||
# directly reachable, and also on which interface, so we
|
# directly reachable, and also on which interface, so we
|
||||||
# simply transmit the packet directly on that one.
|
# simply transmit the packet directly on that one.
|
||||||
else:
|
else:
|
||||||
|
packet_sent(packet)
|
||||||
Transport.transmit(outbound_interface, packet.raw)
|
Transport.transmit(outbound_interface, packet.raw)
|
||||||
sent = True
|
sent = True
|
||||||
|
|
||||||
@ -933,28 +959,9 @@ class Transport:
|
|||||||
Transport.transmit(interface, packet.raw)
|
Transport.transmit(interface, packet.raw)
|
||||||
if packet.packet_type == RNS.Packet.ANNOUNCE:
|
if packet.packet_type == RNS.Packet.ANNOUNCE:
|
||||||
interface.sent_announce()
|
interface.sent_announce()
|
||||||
|
packet_sent(packet)
|
||||||
sent = True
|
sent = True
|
||||||
|
|
||||||
if sent:
|
|
||||||
packet.sent = True
|
|
||||||
packet.sent_at = time.time()
|
|
||||||
|
|
||||||
# Don't generate receipt if it has been explicitly disabled
|
|
||||||
if (packet.create_receipt == True and
|
|
||||||
# Only generate receipts for DATA packets
|
|
||||||
packet.packet_type == RNS.Packet.DATA and
|
|
||||||
# Don't generate receipts for PLAIN destinations
|
|
||||||
packet.destination.type != RNS.Destination.PLAIN and
|
|
||||||
# Don't generate receipts for link-related packets
|
|
||||||
not (packet.context >= RNS.Packet.KEEPALIVE and packet.context <= RNS.Packet.LRPROOF) and
|
|
||||||
# Don't generate receipts for resource packets
|
|
||||||
not (packet.context >= RNS.Packet.RESOURCE and packet.context <= RNS.Packet.RESOURCE_RCL)):
|
|
||||||
|
|
||||||
packet.receipt = RNS.PacketReceipt(packet)
|
|
||||||
Transport.receipts.append(packet.receipt)
|
|
||||||
|
|
||||||
Transport.cache(packet)
|
|
||||||
|
|
||||||
Transport.jobs_locked = False
|
Transport.jobs_locked = False
|
||||||
return sent
|
return sent
|
||||||
|
|
||||||
@ -1737,9 +1744,6 @@ class Transport:
|
|||||||
if receipt.hash == proof_hash:
|
if receipt.hash == proof_hash:
|
||||||
receipt_validated = receipt.validate_proof_packet(packet)
|
receipt_validated = receipt.validate_proof_packet(packet)
|
||||||
else:
|
else:
|
||||||
# TODO: This looks like it should actually
|
|
||||||
# be rewritten when implicit proofs are added.
|
|
||||||
|
|
||||||
# In case of an implicit proof, we have
|
# In case of an implicit proof, we have
|
||||||
# to check every single outstanding receipt
|
# to check every single outstanding receipt
|
||||||
receipt_validated = receipt.validate_proof_packet(packet)
|
receipt_validated = receipt.validate_proof_packet(packet)
|
||||||
|
Loading…
Reference in New Issue
Block a user