Server Design


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:

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 or client shall not be echoed back (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 on APRS-IS.

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.