diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-01-21 16:34:20 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:14:55 +0100 |
commit | cf4633649443e8292529f34f055562dbf7df089e (patch) | |
tree | 9a0e5ac04754f0a549ee803217565c6df02aacaa /cli/mmcli-common.c | |
parent | 885042e3651a8a3ead8928c233522bd41297bd63 (diff) |
cli: allow specifying bearers and SIMs by index
So, these two are equivalent:
$> mmcli -b 0
$> mmcli -b /org/freedesktop/ModemManager1/Bearer/0
and also this two:
$> mmcli -s 0
$> mmcli -s /org/freedesktop/ModemManager1/SIM/0
Diffstat (limited to 'cli/mmcli-common.c')
-rw-r--r-- | cli/mmcli-common.c | 138 |
1 files changed, 100 insertions, 38 deletions
diff --git a/cli/mmcli-common.c b/cli/mmcli-common.c index 766c3eb7..325b6d9e 100644 --- a/cli/mmcli-common.c +++ b/cli/mmcli-common.c @@ -110,8 +110,6 @@ mmcli_get_manager_sync (GDBusConnection *connection) return manager; } -#define MODEM_PATH_TAG "modem-path-tag" - static MMObject * find_modem (MMManager *manager, const gchar *modem_path) @@ -141,34 +139,6 @@ find_modem (MMManager *manager, return found; } -static gchar * -get_modem_path (const gchar *modem_str) -{ - gchar *modem_path; - - /* We must have a given modem specified */ - if (!modem_str) { - g_printerr ("error: no modem was specified\n"); - exit (EXIT_FAILURE); - } - - /* Modem path may come in two ways: full DBus path or just modem index. - * If it is a modem index, we'll need to generate the DBus path ourselves */ - if (modem_str[0] == '/') - modem_path = g_strdup (modem_str); - else { - if (g_ascii_isdigit (modem_str[0])) - modem_path = g_strdup_printf (MM_DBUS_PATH "/Modems/%s", modem_str); - else { - g_printerr ("error: invalid modem string specified: '%s'\n", - modem_str); - exit (EXIT_FAILURE); - } - } - - return modem_path; -} - typedef struct { GSimpleAsyncResult *result; GCancellable *cancellable; @@ -232,9 +202,37 @@ get_manager_ready (GDBusConnection *connection, get_modem_context_complete_and_free (ctx); } +static gchar * +get_modem_path (const gchar *path_or_index) +{ + gchar *modem_path; + + /* We must have a given modem specified */ + if (!path_or_index) { + g_printerr ("error: no modem was specified\n"); + exit (EXIT_FAILURE); + } + + /* Modem path may come in two ways: full DBus path or just modem index. + * If it is a modem index, we'll need to generate the DBus path ourselves */ + if (g_str_has_prefix (path_or_index, MM_DBUS_MODEM_PREFIX)) { + g_debug ("Assuming '%s' is the full modem path", path_or_index); + modem_path = g_strdup (path_or_index); + } else if (g_ascii_isdigit (path_or_index[0])) { + g_debug ("Assuming '%s' is the modem index", path_or_index); + modem_path = g_strdup_printf (MM_DBUS_MODEM_PREFIX "/%s", path_or_index); + } else { + g_printerr ("error: invalid path or index string specified: '%s'\n", + path_or_index); + exit (EXIT_FAILURE); + } + + return modem_path; +} + void mmcli_get_modem (GDBusConnection *connection, - const gchar *modem_str, + const gchar *path_or_index, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) @@ -242,7 +240,7 @@ mmcli_get_modem (GDBusConnection *connection, GetModemContext *ctx; ctx = g_new0 (GetModemContext, 1); - ctx->modem_path = get_modem_path (modem_str); + ctx->modem_path = get_modem_path (path_or_index); ctx->result = g_simple_async_result_new (G_OBJECT (connection), callback, user_data, @@ -422,9 +420,37 @@ get_bearer_manager_ready (GDBusConnection *connection, look_for_bearer_in_modem (ctx); } +static gchar * +get_bearer_path (const gchar *path_or_index) +{ + gchar *bearer_path; + + /* We must have a given bearer specified */ + if (!path_or_index) { + g_printerr ("error: no bearer was specified\n"); + exit (EXIT_FAILURE); + } + + /* Bearer path may come in two ways: full DBus path or just bearer index. + * If it is a bearer index, we'll need to generate the DBus path ourselves */ + if (g_str_has_prefix (path_or_index, MM_DBUS_BEARER_PREFIX)) { + g_debug ("Assuming '%s' is the full bearer path", path_or_index); + bearer_path = g_strdup (path_or_index); + } else if (g_ascii_isdigit (path_or_index[0])) { + g_debug ("Assuming '%s' is the bearer index", path_or_index); + bearer_path = g_strdup_printf (MM_DBUS_BEARER_PREFIX "/%s", path_or_index); + } else { + g_printerr ("error: invalid path or index string specified: '%s'\n", + path_or_index); + exit (EXIT_FAILURE); + } + + return bearer_path; +} + void mmcli_get_bearer (GDBusConnection *connection, - const gchar *bearer_path, + const gchar *path_or_index, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) @@ -432,7 +458,7 @@ mmcli_get_bearer (GDBusConnection *connection, GetBearerContext *ctx; ctx = g_new0 (GetBearerContext, 1); - ctx->bearer_path = g_strdup (bearer_path); + ctx->bearer_path = get_bearer_path (path_or_index); if (cancellable) ctx->cancellable = g_object_ref (cancellable); ctx->result = g_simple_async_result_new (G_OBJECT (connection), @@ -447,7 +473,7 @@ mmcli_get_bearer (GDBusConnection *connection, MMBearer * mmcli_get_bearer_sync (GDBusConnection *connection, - const gchar *bearer_path, + const gchar *path_or_index, MMManager **o_manager, MMObject **o_object) { @@ -455,6 +481,9 @@ mmcli_get_bearer_sync (GDBusConnection *connection, GList *modems; GList *l; MMBearer *found = NULL; + gchar *bearer_path; + + bearer_path = get_bearer_path (path_or_index); manager = mmcli_get_manager_sync (connection); modems = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (manager)); @@ -490,6 +519,7 @@ mmcli_get_bearer_sync (GDBusConnection *connection, } g_list_free_full (modems, (GDestroyNotify) g_object_unref); + g_free (bearer_path); if (o_manager) *o_manager = manager; @@ -612,9 +642,37 @@ get_sim_manager_ready (GDBusConnection *connection, g_list_free_full (modems, (GDestroyNotify) g_object_unref); } +static gchar * +get_sim_path (const gchar *path_or_index) +{ + gchar *sim_path; + + /* We must have a given sim specified */ + if (!path_or_index) { + g_printerr ("error: no sim was specified\n"); + exit (EXIT_FAILURE); + } + + /* Sim path may come in two ways: full DBus path or just sim index. + * If it is a sim index, we'll need to generate the DBus path ourselves */ + if (g_str_has_prefix (path_or_index, MM_DBUS_SIM_PREFIX)) { + g_debug ("Assuming '%s' is the full SIM path", path_or_index); + sim_path = g_strdup (path_or_index); + } else if (g_ascii_isdigit (path_or_index[0])) { + g_debug ("Assuming '%s' is the SIM index", path_or_index); + sim_path = g_strdup_printf (MM_DBUS_SIM_PREFIX "/%s", path_or_index); + } else { + g_printerr ("error: invalid index string specified: '%s'\n", + path_or_index); + exit (EXIT_FAILURE); + } + + return sim_path; +} + void mmcli_get_sim (GDBusConnection *connection, - const gchar *sim_path, + const gchar *path_or_index, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) @@ -622,7 +680,7 @@ mmcli_get_sim (GDBusConnection *connection, GetSimContext *ctx; ctx = g_new0 (GetSimContext, 1); - ctx->sim_path = g_strdup (sim_path); + ctx->sim_path = get_sim_path (path_or_index); if (cancellable) ctx->cancellable = g_object_ref (cancellable); ctx->result = g_simple_async_result_new (G_OBJECT (connection), @@ -637,7 +695,7 @@ mmcli_get_sim (GDBusConnection *connection, MMSim * mmcli_get_sim_sync (GDBusConnection *connection, - const gchar *sim_path, + const gchar *path_or_index, MMManager **o_manager, MMObject **o_object) { @@ -645,6 +703,9 @@ mmcli_get_sim_sync (GDBusConnection *connection, GList *modems; GList *l; MMSim *found = NULL; + gchar *sim_path; + + sim_path = get_sim_path (path_or_index); manager = mmcli_get_manager_sync (connection); modems = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (manager)); @@ -684,6 +745,7 @@ mmcli_get_sim_sync (GDBusConnection *connection, } g_list_free_full (modems, (GDestroyNotify) g_object_unref); + g_free (sim_path); if (o_manager) *o_manager = manager; |