Spec seems pretty clear, and seems to match what aprslib is doing. I just need to insert the subpacket into the db, not the original one.
THIRD PARTY FORMAT: One special format character } allows any APRS
packet to be carried or transmitted by any other station. This is
what allows the both the ZIPLAN and IGATE messaging capability! On
receipt of a 3rd party packet, the original header is dropped and the
packet is recursively parsed again, beginning at the {. To show that
it has been carried by another station, the call of that station is
extracted from the as-received header and inserted as a pseudo digi*
in the digi path. Example:
W3XYZ>APRS,DIGI*:}W4ABC>APRS,WIDE:>121234zStatus
will be processed as W4ABC>APRS,WIDE,W3XYZ,DIGI*:>121234zStatus
Notice how the "carrying station" W3XYZ is inserted as if it had been
a digi in the path
It's also probably useful to keep the original header packet around in case it is needed for debugging (http://www.aprs.org/doc/APRS101.PDF).
Action on Receiving a Third- Party packet
When another station receives a third-party packet, it can extract the callsign of the original sending station from the Third-Party Header, if it is needed to acknowledge receipt of a message. The other addresses in the Third-Party Header may be useful for network diagnostic purposes.
For example: K0RQ-1>APDW16,KB0UGF-3,WIDE1,WIDE2-1:}KD0IOE>APRX29,TCPIP,K0RQ-1*:;KD0IOE-R *111111z4651.16N/09652.75WrPHG41504/444.625MHz +5 CC1 https://kd0ioe.com/repeater
Header: K0RQ-1>APDW16,KB0UGF-3,WIDE1,WIDE2-1:
Packet to store or map: KD0IOE>APRX29,TCPIP,K0RQ-1*:;KD0IOE-R *111111z4651.16N/09652.75WrPHG41504/444.625MHz +5 CC1 https://kd0ioe.com/repeater
TODO:
store what is now in subpacket field in the main fields of the db
create a header field
store the header in the header field (could be whole raw packet or just header)
[Spec](http://www.aprs.org/APRS-docs/PROTOCOL.TXT) seems pretty clear, and seems to match what `aprslib` is doing. I just need to insert the `subpacket` into the db, not the original one.
```
THIRD PARTY FORMAT: One special format character } allows any APRS
packet to be carried or transmitted by any other station. This is
what allows the both the ZIPLAN and IGATE messaging capability! On
receipt of a 3rd party packet, the original header is dropped and the
packet is recursively parsed again, beginning at the {. To show that
it has been carried by another station, the call of that station is
extracted from the as-received header and inserted as a pseudo digi*
in the digi path. Example:
W3XYZ>APRS,DIGI*:}W4ABC>APRS,WIDE:>121234zStatus
will be processed as W4ABC>APRS,WIDE,W3XYZ,DIGI*:>121234zStatus
Notice how the "carrying station" W3XYZ is inserted as if it had been
a digi in the path
```
It's also probably useful to keep the original header packet around in case it is needed for debugging (http://www.aprs.org/doc/APRS101.PDF).
```
Action on Receiving a Third- Party packet
When another station receives a third-party packet, it can extract the callsign of the original sending station from the Third-Party Header, if it is needed to acknowledge receipt of a message. The other addresses in the Third-Party Header may be useful for network diagnostic purposes.
```
For example:
`K0RQ-1>APDW16,KB0UGF-3,WIDE1,WIDE2-1:}KD0IOE>APRX29,TCPIP,K0RQ-1*:;KD0IOE-R *111111z4651.16N/09652.75WrPHG41504/444.625MHz +5 CC1 https://kd0ioe.com/repeater`
Header: `K0RQ-1>APDW16,KB0UGF-3,WIDE1,WIDE2-1:`
Packet to store or map: `KD0IOE>APRX29,TCPIP,K0RQ-1*:;KD0IOE-R *111111z4651.16N/09652.75WrPHG41504/444.625MHz +5 CC1 https://kd0ioe.com/repeater`
TODO:
- [ ] store what is now in `subpacket` field in the main fields of the db
- [ ] create a `header` field
- [ ] store the header in the header field (could be whole raw packet or just header)
matt
added the bug label 2023-12-13 10:53:17 -06:00
But to really show where the packets are coming from, you need to update the full path. In the example above, it should be KD0IOE>APRX29,TCPIP,K0RQ-1,KB0UGF-3
right?
Or here's another: K0RQ-1>APDW16,KB0UGF-3,WIDE1,WIDE2-1:}KD0IOE>APRX29,TCPIP,K0RQ-1*:;145.35-FM*111111z4652.05N/09645.35Wr145.350MHz T123 R30m W0ILO Fargo Mhd
But to really show where the packets are coming from, you need to update the full path. In the example above, it should be
`KD0IOE>APRX29,TCPIP,K0RQ-1,KB0UGF-3`
right?
Or here's another:
`K0RQ-1>APDW16,KB0UGF-3,WIDE1,WIDE2-1:}KD0IOE>APRX29,TCPIP,K0RQ-1*:;145.35-FM*111111z4652.05N/09645.35Wr145.350MHz T123 R30m W0ILO Fargo Mhd `
IGates must use the 3rd-party format on RF of IGATECALL>APRS,GATEPATH}FROMCALL>TOCALL,TCPIP,IGATECALL*:original packet data
where GATEPATH is the path that the gated packet is to follow on RF. This format will allow IGates to prevent gating the packet back to APRS-IS.
It's important to keep the header packet separately because it tells you that the header station is still operating as of whatever date and it can be mapped (if we have a last position for the station). The you need to keep the header info available so the routing is correct. In the above example, KB0UGF-3 would otherwise be dropped.
https://www.aprs-is.net/IGateDetails.aspx and http://aprsisce.wikidot.com/me-not-3rd.
> IGates must use the 3rd-party format on RF of
> `IGATECALL>APRS,GATEPATH}FROMCALL>TOCALL,TCPIP,IGATECALL*:original packet data`
>where GATEPATH is the path that the gated packet is to follow on RF. This format will allow IGates to prevent gating the packet back to APRS-IS.
Yeah, aprslib parses very simply and doesn't seem to adjust the path: https://github.com/rossengeorgiev/aprs-python/blob/master/aprslib/parsing/thirdparty.py
It's important to keep the header packet separately because it tells you that the header station is still operating as of whatever date and it can be mapped (if we have a last position for the station). The you need to keep the header info available so the routing is correct. In the above example, KB0UGF-3 would otherwise be dropped.
Still have this to do after #43:
- [ ] store the id of the superpacket with the subpacket
- [ ] build the actual path as in http://www.aprs.org/APRS-docs/PROTOCOL.TXT ("THIRD PARTY FORMAT")
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Under #20 I added "subpacket" as a field just to get them into the DB, but it's not a great solution.
Subpackets need to go into the database right, but I need to make sure of how APRS says they are to be used.
Spec seems pretty clear, and seems to match what
aprslibis doing. I just need to insert thesubpacketinto the db, not the original one.It's also probably useful to keep the original header packet around in case it is needed for debugging (http://www.aprs.org/doc/APRS101.PDF).
For example:
K0RQ-1>APDW16,KB0UGF-3,WIDE1,WIDE2-1:}KD0IOE>APRX29,TCPIP,K0RQ-1*:;KD0IOE-R *111111z4651.16N/09652.75WrPHG41504/444.625MHz +5 CC1 https://kd0ioe.com/repeaterHeader:
K0RQ-1>APDW16,KB0UGF-3,WIDE1,WIDE2-1:Packet to store or map:
KD0IOE>APRX29,TCPIP,K0RQ-1*:;KD0IOE-R *111111z4651.16N/09652.75WrPHG41504/444.625MHz +5 CC1 https://kd0ioe.com/repeaterTODO:
subpacketfield in the main fields of the dbheaderfieldBut to really show where the packets are coming from, you need to update the full path. In the example above, it should be
KD0IOE>APRX29,TCPIP,K0RQ-1,KB0UGF-3right?
Or here's another:
K0RQ-1>APDW16,KB0UGF-3,WIDE1,WIDE2-1:}KD0IOE>APRX29,TCPIP,K0RQ-1*:;145.35-FM*111111z4652.05N/09645.35Wr145.350MHz T123 R30m W0ILO Fargo Mhdhttps://www.aprs-is.net/IGateDetails.aspx and http://aprsisce.wikidot.com/me-not-3rd.
Yeah, aprslib parses very simply and doesn't seem to adjust the path: https://github.com/rossengeorgiev/aprs-python/blob/master/aprslib/parsing/thirdparty.py
It's important to keep the header packet separately because it tells you that the header station is still operating as of whatever date and it can be mapped (if we have a last position for the station). The you need to keep the header info available so the routing is correct. In the above example, KB0UGF-3 would otherwise be dropped.
Still have this to do after #43: