This patch also updates the QueryPlugin to allow the configured user
to immediately resend all Delayed messages!
This patch updates the QueryPlugin to allow the configured user
to immediately Flush/delete all messages!
This patch adds the new MsgTrack object replacing the
global ack_dict. the ack_dict was not thread safe.
the new MsgTrack is a singleton object that keeps track of
all outbound TextMessage objects. When a TextMessage.send() is called
it is added to the MsgTrack object, and when an ack is received for that
message, the message is removed from the MsgTrack object.
TODO: Add an automatic mechanism for saving the messages in MsgTrack
so that when CTRL-C is called to exit aprsd server, then the MsgTrack
state is saved to storage. When aprsd server is started up again, add
the option to try and reload state of MsgTrack.
This patch also reworked the email thread into an APRSDThread object
that can exit gracefully with CTRL-C.
NOTE: Don't call sleep() with a long time (greater than 5 seconds), as
it causes a delay in exiting aprsd until the last sleep() finishes.
Since aprsd has so many threads now for processing incoming messages and
outgoing messages, we need to coordinate all thread operations so that
they don't block the exiting of the app.
This patch reworks the threading code for processing
messages. This patch also extends the aprslib IS class
to allow us to stop processing the consumer packets when
someone hits CTRL-C correctly. Alloing the app to exit.
This patch updates the messaging lib to use Message Objects
for each message type (text, ack) that know how to send
themselves with the same interface.
This patch refactored the process_packet method
and adjusted the logic for determining if we got
a message to filter on. We now look at the format
to make a determination. Also isolated the processing
of message packets, ack packets and mic-e packets into
their own functions.
The changelog is generated by pbr automatically when you run
python setup.py sdist bdist_wheel
So when you are ready for a new release, run
python setup.py sdist bdist_wheel
git add Changelog && git commit -m "Updated ChangeLog for version XXXX"
git tag -a vXXXX -m "Release version XXX"
git push origin --tags
Then release to pypi
twine check dist/*
twine upload dist/*
This patch ensures that after we get an ACK, then proessing of the ack
message is complete and we don't try and send the ack through plugin
filtering.
Created send_ack_direct for the send-message command.
Also added logic to the send-message command to ensure we wait for an
ack from the command sent to APRSD and we also wait for a response
message and send an ack to that response before we exit.
This patch fixes a minor issue with the new send-message command
You now should use nargs to send the email command because it includes
a - as the start. click assumed that any -<foo> looks ike an argument.
So call aprsd with
aprsd send-command <callsign> -- -wb sendmap
This patch also adds -h as a help option for aprsd to make it simpler to
type.
This patch adds the VersionPlugin so you can remotely request the
version of aprsd that's running.
I want to add some tests but before that I want git to ignore the venv folder and all the Idea (Pycharm) settings that get created in the home folder by default.
This commit adds the new send-message command for sending messages.
This also redoes the logging of sent/rx'd packets to a single method
which is syncrhonized, so we don't get intermixed log messages for
packets.
Also adds email address validation during startup, and
optionally disables the validation via a command line switch. without
email validation for production running aprsd, emails sent can turn up
garbage and cause issues when those emails are received by aprsd
message processing as invalid content.
This branch refactors the majority of main.py out into individual
modules to compartmentalize the code. Migrated all email related
features unti email.py, sending of messages into messaging.py
Also refactored all of the socket code to use aprslib for all APRS-IS
communication as well as message/packet processing.
Moved the email command into it's own Plugin.
Some emails that had an unknown character set. when that happens
we can't decode the body of the message properly, so the default body
string was being used, and was attempting to be decoded. Only byte
strings can be decoded, so the default string is now labeled as a byte
encoding.
This patch updates the Dockerfile for building the official container
image and includes the ability to load external pypi modules as plugins
at container startup.
This patch reworked the loading of plugins. Python2 is dead.
Previously was using the imp module to easily load the plugins from
a separate directory, which is a bit of a pita. Found a python3 lib
that takes care of the difference between py3.3, 3.4 and 3.5+ module
loading called "thesmuggler"
This patch fixes the Usage string for a call message
that isn't matched by any plugin.
Plugin object now must impleent a 'command_name' attribute
that is the usage string for that plugin.
This patch adds the new APRSD Command Plugin architecture.
All Comand plugins must implement the same object API, which includes
plugin object is subclass of APRSDPluginBase
version attribute
command_regex attribute
command method
When an APRS command is detected, then the regex is run against
the command. If the command_regex matches, then the plugin's
command() method will be called. If the command() method returns
a string, then that string is sent as a reply to the APRS caller.
A new aprs.yml config section is added to support selecting
which plugins to enable.
If you want all plugins enabled, then omit "enabled_plugins" entirely
from the aprs section of the config.
To load custom plugins:
1) create a directory with an __init__.py file
2) Add a plugin.py file that contains your plugin
Look at the exmaples directory for an example plugin.
This patch refactors the socket management
to use select, as well as refactor all of the
commands into a COMMAND_ENVELOPE dictionary.
This patch also adds the Dockerfile and
docker-compose.yml files