[aprssig] are write-only APRS-IS clients valid?
Tom Hayward
esarfl at gmail.com
Mon Dec 2 12:35:48 EST 2013
On Mon, Dec 2, 2013 at 8:50 AM, Steve Dimse <steve at dimse.com> wrote:
>
> The last heard filter is not mentioned in the filter or Igate design and details pages. Where is it explained on aprs-is.org? If I missed it I’m sorry, but it is a key piece of information I either missed or that is absent from the pages. Also I did not see info that filtering is applied based on this last-heard list. From the way you describe it, dup-checking is done on the hubs before the last-heard table is updated. So it isn’t really a last-heard table, but a first-heard table of the most last packet, right?
>
> Does the range filter override this filtering? Yes, I was assuming IGates would use a range filter specifically to be sure they would receive the messages for all stations in that area. You don’t want that, though, do you? You are trying to prevent multiple IGates from sending the same packet on RF, and doing this in the hubs instead of in the IGates. Is that right? I’ll grant you that is a good thing.
Ignore range filtering for now. Message packets don't have position data.
Let's say the igate is connected to an igate/filter port with no
filter defined. With no filter defined, the only packets the server
will send the igate are messages addressed to stations in the igate's
last heard list and position packets from the same message's source
(so recipient can see sender on the map, even if across the world).
That's the way I understand the algorithm based on past messages from
Pete. I haven't seen the source code, or even pseudo code. I'll
attempt some pseudo code below:
func receive_packet_from_igate(packet)
remove_older_than_xx_minutes(heard[packet->igate])
heard[packet->igate] += [time(), packet->source]
if not is_dupe(packet->payload)
send_to_upstream(packet)
send_to_clients(packet)
func send_to_clients(packet)
for client in connected_clients
if is_message(packet) and packet->destination in heard[client]
client->socket->write(packet)
else if client->filter_pass(packet)
client->socket->write(packet)
The ambiguities in Pete's algorithm that you can see plainly in mine are:
1) Can a source be in more than one igate's heard list at a time? If
yes, I don't think receive only igates will break 2-way messages. The
other igate can still serve the area just fine, assuming there is at
least one 2-way igate in the area.
2) Are stations added to the heard list before dupe filtering? If yes,
both 2-way and rx-only gates can be connected to the same server
without interfering with each other's heard lists.
3) What is xx_minutes? How long do packets stay in each igate's heard list?
Pete, can you clarify these ambiguities?
Tom KD7LXL
More information about the aprssig
mailing list