mirror of https://github.com/craigerl/aprsd.git
Added support for RX replyacks
This patch adds support for processing incoming packets that have the 'new' acks embedded in messages called replyacks as described here: http://www.aprs.org/aprs11/replyacks.txt
This commit is contained in:
parent
dc4879a367
commit
8d86764c23
|
@ -89,6 +89,7 @@ class Packet:
|
||||||
addresse: Optional[str] = field(default=None)
|
addresse: Optional[str] = field(default=None)
|
||||||
format: Optional[str] = field(default=None)
|
format: Optional[str] = field(default=None)
|
||||||
msgNo: Optional[str] = field(default=None) # noqa: N815
|
msgNo: Optional[str] = field(default=None) # noqa: N815
|
||||||
|
ackMsgNo: Optional[str] = field(default=None) # noqa: N815
|
||||||
packet_type: Optional[str] = field(default=None)
|
packet_type: Optional[str] = field(default=None)
|
||||||
timestamp: float = field(default_factory=_init_timestamp, compare=False, hash=False)
|
timestamp: float = field(default_factory=_init_timestamp, compare=False, hash=False)
|
||||||
# Holds the raw text string to be sent over the wire
|
# Holds the raw text string to be sent over the wire
|
||||||
|
|
|
@ -158,6 +158,14 @@ class APRSDProcessPacketThread(APRSDThread):
|
||||||
pkt_tracker = packets.PacketTrack()
|
pkt_tracker = packets.PacketTrack()
|
||||||
pkt_tracker.remove(ack_num)
|
pkt_tracker.remove(ack_num)
|
||||||
|
|
||||||
|
def process_piggyback_ack(self, packet):
|
||||||
|
"""We got an ack embedded in a packet."""
|
||||||
|
ack_num = packet.ackMsgNo
|
||||||
|
LOG.debug(f"Got PiggyBackAck for message {ack_num}")
|
||||||
|
packets.PacketList().rx(packet)
|
||||||
|
pkt_tracker = packets.PacketTrack()
|
||||||
|
pkt_tracker.remove(ack_num)
|
||||||
|
|
||||||
def process_reject_packet(self, packet):
|
def process_reject_packet(self, packet):
|
||||||
"""We got a reject message for a packet. Stop sending the message."""
|
"""We got a reject message for a packet. Stop sending the message."""
|
||||||
ack_num = packet.msgNo
|
ack_num = packet.msgNo
|
||||||
|
@ -200,6 +208,10 @@ class APRSDProcessPacketThread(APRSDThread):
|
||||||
):
|
):
|
||||||
self.process_reject_packet(packet)
|
self.process_reject_packet(packet)
|
||||||
else:
|
else:
|
||||||
|
if hasattr(packet, "ackMsgNo") and packet.ackMsgNo:
|
||||||
|
# we got an ack embedded in this packet
|
||||||
|
# we need to handle the ack
|
||||||
|
self.process_piggyback_ack(packet)
|
||||||
# Only ack messages that were sent directly to us
|
# Only ack messages that were sent directly to us
|
||||||
if isinstance(packet, packets.MessagePacket):
|
if isinstance(packet, packets.MessagePacket):
|
||||||
if to_call and to_call.lower() == our_call:
|
if to_call and to_call.lower() == our_call:
|
||||||
|
|
Loading…
Reference in New Issue