From: Denis Kenzior <denkenz@gmail.com>
To: connman@lists.linux.dev
Cc: Denis Kenzior <denkenz@gmail.com>
Subject: [PATCH 1/4] ofono: Add generic method to convert a list of strings to flags
Date: Wed, 27 Mar 2024 14:43:32 -0500 [thread overview]
Message-ID: <20240327194337.2735677-1-denkenz@gmail.com> (raw)
oFono D-Bus APIs are string based, with several string list based
properties that convey information that might require tracking. For
example:
- Interfaces -> list of interfaces supported
- Features -> list of features supported
- Capabilities -> modem capabilities
Introduce a new convenience method that can be used to convert such
string lists to a set of flags (bitmap). Make extract_interfaces()
use it. While here, tighten up error checking and do not attempt to
parse non-string list signatures.
---
plugins/ofono.c | 49 ++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 40 insertions(+), 9 deletions(-)
diff --git a/plugins/ofono.c b/plugins/ofono.c
index 65a722fd85d6..1906843335cf 100644
--- a/plugins/ofono.c
+++ b/plugins/ofono.c
@@ -685,29 +685,60 @@ static bool has_interface(uint8_t interfaces,
return false;
}
-static uint8_t extract_interfaces(DBusMessageIter *array)
+struct flag_map {
+ const char *value;
+ uint32_t flag;
+};
+
+static int string_list_to_flags(DBusMessageIter *array,
+ const struct flag_map *map, size_t map_len,
+ uint32_t *out_flags)
{
DBusMessageIter entry;
- uint8_t interfaces = 0;
+ uint32_t flags = 0;
+
+ if (dbus_message_iter_get_arg_type(array) != DBUS_TYPE_ARRAY)
+ return -EINVAL;
+
+ if (dbus_message_iter_get_element_type(array) != DBUS_TYPE_STRING)
+ return -EINVAL;
dbus_message_iter_recurse(array, &entry);
while (dbus_message_iter_get_arg_type(&entry) == DBUS_TYPE_STRING) {
+ size_t i;
const char *name;
dbus_message_iter_get_basic(&entry, &name);
- if (g_str_equal(name, OFONO_SIM_INTERFACE))
- interfaces |= OFONO_API_SIM;
- else if (g_str_equal(name, OFONO_NETREG_INTERFACE))
- interfaces |= OFONO_API_NETREG;
- else if (g_str_equal(name, OFONO_CM_INTERFACE))
- interfaces |= OFONO_API_CM;
+ for (i = 0; i < map_len; i++)
+ if (!strcmp(name, map[i].value))
+ flags |= map[i].flag;
dbus_message_iter_next(&entry);
}
- return interfaces;
+ if (out_flags)
+ *out_flags = flags;
+
+ return 0;
+}
+
+static uint8_t extract_interfaces(DBusMessageIter *array)
+{
+ static const struct flag_map interfaces_map[] = {
+ { .value = OFONO_SIM_INTERFACE, .flag = OFONO_API_SIM },
+ { .value = OFONO_NETREG_INTERFACE, .flag = OFONO_API_NETREG },
+ { .value = OFONO_CM_INTERFACE, .flag = OFONO_API_CM },
+ };
+ uint32_t flags;
+
+ if (string_list_to_flags(array, interfaces_map,
+ G_N_ELEMENTS(interfaces_map),
+ &flags) < 0)
+ return 0;
+
+ return flags;
}
static char *extract_nameservers(DBusMessageIter *array)
--
2.43.0
next reply other threads:[~2024-03-27 19:43 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-27 19:43 Denis Kenzior [this message]
2024-03-27 19:43 ` [PATCH 2/4] ofono: Set modem->interfaces earlier Denis Kenzior
2024-03-27 19:43 ` [PATCH 3/4] ofono: combine create_device and ready_to_create_device Denis Kenzior
2024-03-27 19:43 ` [PATCH 4/4] ofono: delay device creation until lte settings are provisioned Denis Kenzior
2024-04-17 17:00 ` [PATCH 1/4] ofono: Add generic method to convert a list of strings to flags patchwork-bot+connman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240327194337.2735677-1-denkenz@gmail.com \
--to=denkenz@gmail.com \
--cc=connman@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.