Link inbound/outbound inactivity timers
This commit is contained in:
parent
f242abcf75
commit
0c76d6a15c
18
RNS/Link.py
18
RNS/Link.py
@ -138,6 +138,7 @@ class Link:
|
|||||||
self.request_time = time.time()
|
self.request_time = time.time()
|
||||||
self.start_watchdog()
|
self.start_watchdog()
|
||||||
self.packet.send()
|
self.packet.send()
|
||||||
|
self.had_outbound()
|
||||||
RNS.log("Link request "+RNS.prettyhexrep(self.link_id)+" sent to "+str(self.destination), RNS.LOG_VERBOSE)
|
RNS.log("Link request "+RNS.prettyhexrep(self.link_id)+" sent to "+str(self.destination), RNS.LOG_VERBOSE)
|
||||||
|
|
||||||
|
|
||||||
@ -169,6 +170,7 @@ class Link:
|
|||||||
proof_data = self.pub_bytes+signature
|
proof_data = self.pub_bytes+signature
|
||||||
proof = RNS.Packet(self, proof_data, packet_type=RNS.Packet.PROOF, context=RNS.Packet.LRPROOF)
|
proof = RNS.Packet(self, proof_data, packet_type=RNS.Packet.PROOF, context=RNS.Packet.LRPROOF)
|
||||||
proof.send()
|
proof.send()
|
||||||
|
self.had_outbound()
|
||||||
|
|
||||||
def prove_packet(self, packet):
|
def prove_packet(self, packet):
|
||||||
signature = self.sign(packet.packet_hash)
|
signature = self.sign(packet.packet_hash)
|
||||||
@ -181,6 +183,7 @@ class Link:
|
|||||||
|
|
||||||
proof = RNS.Packet(self, proof_data, RNS.Packet.PROOF)
|
proof = RNS.Packet(self, proof_data, RNS.Packet.PROOF)
|
||||||
proof.send()
|
proof.send()
|
||||||
|
self.had_outbound()
|
||||||
|
|
||||||
def validateProof(self, packet):
|
def validateProof(self, packet):
|
||||||
if self.initiator:
|
if self.initiator:
|
||||||
@ -199,6 +202,7 @@ class Link:
|
|||||||
rtt_packet = RNS.Packet(self, rtt_data, context=RNS.Packet.LRRTT)
|
rtt_packet = RNS.Packet(self, rtt_data, context=RNS.Packet.LRRTT)
|
||||||
RNS.log("Sending RTT packet", RNS.LOG_EXTREME);
|
RNS.log("Sending RTT packet", RNS.LOG_EXTREME);
|
||||||
rtt_packet.send()
|
rtt_packet.send()
|
||||||
|
self.had_outbound()
|
||||||
|
|
||||||
self.status = Link.ACTIVE
|
self.status = Link.ACTIVE
|
||||||
if self.callbacks.link_established != None:
|
if self.callbacks.link_established != None:
|
||||||
@ -238,13 +242,23 @@ class Link:
|
|||||||
def getContext(self):
|
def getContext(self):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def no_inbound_for(self):
|
||||||
|
return time.time() - self.last_inbound
|
||||||
|
|
||||||
|
def no_outbound_for(self):
|
||||||
|
return time.time() - self.last_outbound
|
||||||
|
|
||||||
def inactive_for(self):
|
def inactive_for(self):
|
||||||
return min(time.time() - self.last_inbound, time.time() - self.last_outbound)
|
return min(self.no_inbound_for(), self.no_outbound_for())
|
||||||
|
|
||||||
|
def had_outbound(self):
|
||||||
|
self.last_outbound = time.time()
|
||||||
|
|
||||||
def teardown(self):
|
def teardown(self):
|
||||||
if self.status != Link.PENDING and self.status != Link.CLOSED:
|
if self.status != Link.PENDING and self.status != Link.CLOSED:
|
||||||
teardown_packet = RNS.Packet(self, self.link_id, context=RNS.Packet.LINKCLOSE)
|
teardown_packet = RNS.Packet(self, self.link_id, context=RNS.Packet.LINKCLOSE)
|
||||||
teardown_packet.send()
|
teardown_packet.send()
|
||||||
|
self.had_outbound()
|
||||||
self.status = Link.CLOSED
|
self.status = Link.CLOSED
|
||||||
if self.initiator:
|
if self.initiator:
|
||||||
self.teardown_reason = Link.INITIATOR_CLOSED
|
self.teardown_reason = Link.INITIATOR_CLOSED
|
||||||
@ -342,6 +356,7 @@ class Link:
|
|||||||
def send_keepalive(self):
|
def send_keepalive(self):
|
||||||
keepalive_packet = RNS.Packet(self, bytes([0xFF]), context=RNS.Packet.KEEPALIVE)
|
keepalive_packet = RNS.Packet(self, bytes([0xFF]), context=RNS.Packet.KEEPALIVE)
|
||||||
keepalive_packet.send()
|
keepalive_packet.send()
|
||||||
|
self.had_outbound()
|
||||||
|
|
||||||
def receive(self, packet):
|
def receive(self, packet):
|
||||||
self.watchdog_lock = True
|
self.watchdog_lock = True
|
||||||
@ -417,6 +432,7 @@ class Link:
|
|||||||
if not self.initiator and packet.data == bytes([0xFF]):
|
if not self.initiator and packet.data == bytes([0xFF]):
|
||||||
keepalive_packet = RNS.Packet(self, bytes([0xFE]), context=RNS.Packet.KEEPALIVE)
|
keepalive_packet = RNS.Packet(self, bytes([0xFE]), context=RNS.Packet.KEEPALIVE)
|
||||||
keepalive_packet.send()
|
keepalive_packet.send()
|
||||||
|
self.had_outbound()
|
||||||
|
|
||||||
|
|
||||||
# TODO: find the most efficient way to allow multiple
|
# TODO: find the most efficient way to allow multiple
|
||||||
|
Loading…
Reference in New Issue
Block a user