The generic modem has several URC handlers for generic messages, like
+CIEV. But, there may be cases where the plugins themselves want to
provide their own URC handlers to be run before the generic one.

This patch enables this setup by always prepending the new URC
handlers, so that the last ones added are processed before the ones
already in the list. So if a plugin does its own unsolicited
messages setup, they can run first the parent setup and then their
own.

The only thing to consider is that the regex provided by the plugin
must be specific enough not to match the specific messages required
by the parent implementation.
---
 src/mm-port-serial-at.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/mm-port-serial-at.c b/src/mm-port-serial-at.c
index 8e2aa2aa..fb2174da 100644
--- a/src/mm-port-serial-at.c
+++ b/src/mm-port-serial-at.c
@@ -207,9 +207,12 @@ mm_port_serial_at_add_unsolicited_msg_handler 
(MMPortSerialAt *self,
         if (handler->notify)
             handler->notify (handler->user_data);
     } else {
+        /* The new handler is always PREPENDED, so that e.g. plugins can 
provide
+         * more specific matches for URCs that are also handled by the generic
+         * plugin. */
         handler = g_slice_new (MMAtUnsolicitedMsgHandler);
-        self->priv->unsolicited_msg_handlers = g_slist_append 
(self->priv->unsolicited_msg_handlers, handler);
         handler->regex = g_regex_ref (regex);
+        self->priv->unsolicited_msg_handlers = g_slist_prepend 
(self->priv->unsolicited_msg_handlers, handler);
     }
 
     handler->callback = callback;
-- 
2.12.2

_______________________________________________
ModemManager-devel mailing list
ModemManager-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel

Reply via email to