An APRS-IS server primarily performs 2 functions: verifying client logins and
broadcasting all received packets unchanged to all clients. Verifying client
logins is done using the algorithm discussed in Connecting to APRS-IS and
available from me by contacting me directly. If a client does not pass
verification, the client may not send any packets to APRS-IS. The
unverified client may receive packets which facilitates receive-only clients
like javAPRS.
The basic concept of a server is to allow all clients to receive all packets
seen by the server. Because of the growth of APRS-IS, Roger Bille SM5NRK
designed and implemented javAPRSFilter to work as an adjunct to javAPRSSrvr to
allow the clients to reduce the flow of packets from the server to them. I
will first address the basic server principles here and then comment on what is
necessary for a server to implement javAPRSFilter or any other filtering
technique on a client port.
The following are basic "musts" in a server:
- Verify logins per the format shown on Connecting to APRS-IS
- Pass all non-duplicate TNC2 format lines with the data unchanged (no
modification of the portion following the colon)
- All lines must be terminated by a CR/LF sequence
- AEA format lines should be converted to TNC2 format before rebroadcast
- Implement the q algorithm on all valid lines
- Duplicate checking is based on the origin call, destination call, data length,
and data content. Note that the path is ignored in duplicate checking. The
origin and destination calls are case-sensitive.
- Duplicate checking is done over a 30 second sliding window for each line
- All packets directly received from the station with a verified login shall only
have TCPIP* in the path followed by the qAC construct.
- Gated packets (not from the logged-in station) shall not have the path
modified except per the q algorithm.
Servers should only connect to a single upstream server and should never be
connected to more than one server at a time. This is critical to preventing
loops. All lines received from an upstream server shall not be echoed back to
the upstream server (by definition, echoing is a loop).
The case of the header fields (origin, destination, and path) shall not be
changed and considered unique.
There are references to unverified logins using TCPXX* in the path. This has
been depricated and no packets from unverified logins shall be passed by the
server.
If filtering of packets to the client is to be done, the server must properly
support APRS messaging. APRS messaging requires that the client receive any APRS
messages destined for the client or any station the client has gated to APRS-IS.
The client must also receive the next available position packet for the sending
station of those message packets.