This patch adds the new APRSRegistryThread,
which enabled in config, will send a small
packet of information to the as yet deployed
APRS service registry every 900 seconds.
The data that this thread will send is
the service callsign, a description of the service,
a website url for the service.
The idea being that the registry website that this thread
sends information to, will show all the services that are
running on the ARPS network, so Ham operators can discover
them and try them out.
This patch adds support for loading extenions
to APRSD!!
You can create another separate aprsd project, and register
your extension in your setup.cfg as a new entry point for aprsd
like
[entry_points]
aprsd.extension =
cool = my_project.extension
in your my_project/extension.py file
import your commmands and away you go.
This patch adds the new feature of trying to fetch the location
distance and bearing for each callsign in the webchat tabs.
This is handy when out on the go, you can get a general idea
where the other callsign is when chatting with them.
First aprsd webchat tries to fetch the location with aprs.fi
REST api call. This assumes internet access. If this fails,
then webchat will send a special message to REPEAT to ask it for
the location information for the callsign. This will send over
the air.
This patch adds a new popover in the webchat tab to show
the location information for a callsign.
webchat will try to hit aprs.fi to fetch the location from the
callsign's last beacon. If there is no internet, this will fail
and webchat will send a request to REPEAT callsign for the location
information.
This Patch updates the location plugin to allow configuring which
geopy library's supported geocoders. This patch also adds a fake
geopy geocoder class that uses the us government's API for location.
this patch fixes some issues with webchat not loading css and js
when there is no internet. The index.html was relying on internet
being available to fetch remote css and js.
The kiss client send method was always forcing the config
path. If a packet has a path specified in it, that will
override the config setting for the kiss client setting in the config.
This patch adds the new packet_dump_timeout config option, defaulting to
60 seconds. If the same packet matching the from, to, msgNo is RX'd
within that timeout the packet is considered a dupe and will be
dropped. Ack packets are not subject to dupe checking.
This patch adds the ability to webchat to set the path
on every outbound packet for the KISS clients as well as
the fake client. The path dropdown includes the options for
Default path (which will default to the config setting)
WIDE1-1,WIDE2-1
ARISS
The packet msgNo field is a string, but is typically is an integer
counter to keep track of a specific packet id. The counter was
returning an int, but the packet.msgNo is a string. So, when trying to
delete a packet from the packet tracker, the key for accessing the
packet is the msgNo, which has to be a string. Passing an int, will
cause the packet tracker to not find the packet, and hence silently
fail.
This patch forces the msgNo counter to be a string.
This patch rewrites the packet_list internally to be a dictionary
instead of a list for very fast lookups. This was needed to test for
duplicate packets already in the list.
This patch drops packets that have the same data and are < 60 seconds
in age from the last time we got the packet. On RF based clients
we can get dupes!!
Sometimes over KISS clients (RF), we can get duplicate packets
due to having many digipeters in range of the TNC that aprsd is
connected to. We will now filter out any dupe packets that aprsd
is still in the process of doing it's 3 acks.
After the refactor of the messages object in webchat, we are sending
a direct json dict version of the packet now. This means there is no
msg.id in the dict, but msg.msgNo instead. This should help fix
the display of dupes.
This patch adds an auto mouseover hover popover for displaying
the raw APRS packet.
This patch also adds the notification counter for an unselected tab.
This patch changes the layout containers a bit. Moved the tabs to the
header section and made the tab contents fill the rest of the height of
the browser and it is the only portion that scrolls.
This patch will set the to_call form field to the callsign of the
tab when the tab is activated in the UI.
NOTE: still need to populate it when clicking on the already active
tab.
This patch reworks the webchat UI to work in both desktop
and mobile layouts. Comprimises were made, but there is 1
codebase now between both desktop and mobile.
This patch also includes the new imessage/sms chat look.
This patch saves the webchat conversations messages in the browser's
local storage. When the user comes back to the page, the
conversations are restored.
This patch changes the order of the threads starting. The Keepalive
thread's job is to test the aprsis/kiss client to see if it's up and
running, and then issue a reset if it's down. On SIGINT, the keepalive
might issue that reset in the middle of a shutdown, which might cause
things to hang when everything should be shutting down. Making the
KeepaliveThread first, means it will be the first to be shut down as
well, preventing the next loop from resetting the client.
This patch updates the web ui for webchat to suppress the displaying
of duplicate recieved messages. Dupes can happen over the KISS
interface due to packets being encapsulated by nearby repeaters into 3rd
party packets.
When a dupe message is recieved, the dupe message is flashed 3 times.
This patch makes use of the gps settings in the webchat section.
If the user sets the latitude and longitude in the config file, then
the gps beacon button will be enabled. The gps button will still be
enabled if the http connection is over SSL.
This patch adds a new webchat config section to specify:
web_ip (the ip address to listen on)
web_port
latitude (latitude to use for the GPS beacon button)
longitude (long to use for the GPS beacon button)
The kiss clients now detect if the incomming packet is a third party
packet and then sends up the subpacket instead of the encapsulated
packet up to the consumer.
This immediately breaks the beacon button.
This patch removes the dep for pyopenssl and cryptography
so that aprsd install on the rpi.
Unfortunately in order for the web page to get the Lat/Lon, the
browser must be connected over SSL. Will have to create a workaround
for this later.
The KISS client sends the path as part of the headers, so we had
to strip out the path from the payload of each message so the path
wouldn't get listed twice.
When running the web admin interface with
'python -m aprsd.wsgi' the Flask app global now uses
the web_ip config entry for listening. Also disabled
debug output.
This patch adjusts the backoff mechanism for aprs client
reconnect to a max backoff sleep of 5 seconds. This prevents
an exponential backoff when connection retrying.
This patch starts the work to replace flask-socketio with
python-socketio so that uwsgi can be used instead of gunicorn.
uwsgi can support websockets.
Have to rework webchat command next
This patch removed the dependency on flask-classful. This required
making all of the flask web routing non class based.
This patch also changes the aprsis class to allow retries for failed
connections when the aprsis servers are full and not responding to
login requests.
You can now fetch and view the stats of a live running aprsd server
if it has enabled the rpc server in the config file's rpc_settings
block.
You just have to match the magic word as specified in the config file to
authorize against the rpc server.
aprsd fetch-stats --ip-address <ip of aprsd> --port <port> --magic-word
<magic word>
This patch replaces the ratelimiter library with rush for rate limiting
as the ratelimiter package doesn't work with python 3.11.
This patch also refactors the flask.pu to admin_web.py and
aprsd.py to main.py
Added the ability to start the rpc server for fetching stats from the
listen command. If the rpc server is enabled in config, the rpc
server will now start.
Added geopy as a dependency for the location plugin.
The us weather service API is now broken upstream.
Reworked the requirements.txt and dev-requirements.txt files
This patch updates the aprsd listen command to add the packet-plugins
argument which allows enabling a single plugin to work against the
packets recieved from the aprsis network.
This patch adds basic ratelimiting to sending out AckPackets
and non AckPackets. This provides a basic way to prevent
aprsd from sending out packets as fast as possible, which isn't
great for a bandwidth limited network.
This patch also adds some keepalive checks to all threads in the
threadslist as well as the network client objects (apris, kiss)