summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Chan <benchan@chromium.org>2017-08-07 13:40:19 -0700
committerAleksander Morgado <aleksander@aleksander.es>2017-08-08 09:48:13 +0200
commitcd65ee939cbc95de7ee50e1fd3756c35fddaa41f (patch)
treeb9dba98019a1aeca94e67d3001d6b6198f59a8f8
parent2fbfb74c14ebea038aa08186af7ccaa37ee633dd (diff)
mbimcli: new '--query-pin-list' action
This patch adds a new '--query-pin-list' action to mbimcli for querying the list of PINs supported by a MBIM device and additional details for each PIN type.
-rw-r--r--src/mbimcli/mbimcli-basic-connect.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/src/mbimcli/mbimcli-basic-connect.c b/src/mbimcli/mbimcli-basic-connect.c
index 7274e1d..b27e179 100644
--- a/src/mbimcli/mbimcli-basic-connect.c
+++ b/src/mbimcli/mbimcli-basic-connect.c
@@ -54,6 +54,7 @@ static gchar *set_pin_change_str;
static gchar *set_pin_enable_str;
static gchar *set_pin_disable_str;
static gchar *set_pin_enter_puk_str;
+static gboolean query_pin_list_flag;
static gboolean query_home_provider_flag;
static gboolean query_preferred_providers_flag;
static gboolean query_visible_providers_flag;
@@ -135,6 +136,10 @@ static GOptionEntry entries[] = {
"Enter PUK",
"[(PUK),(new PIN)]"
},
+ { "query-pin-list", 0, 0, G_OPTION_ARG_NONE, &query_pin_list_flag,
+ "Query PIN list",
+ NULL
+ },
{ "query-home-provider", 0, 0, G_OPTION_ARG_NONE, &query_home_provider_flag,
"Query home provider",
NULL
@@ -273,6 +278,7 @@ mbimcli_basic_connect_options_enabled (void)
!!set_pin_enable_str +
!!set_pin_disable_str +
!!set_pin_enter_puk_str +
+ query_pin_list_flag +
query_register_state_flag +
query_home_provider_flag +
query_preferred_providers_flag +
@@ -737,6 +743,100 @@ enum {
};
static void
+print_pin_desc (const gchar *pin_name,
+ const MbimPinDesc *pin_desc)
+{
+ g_print ("\t%s:\n"
+ "\t\t Mode: '%s'\n"
+ "\t\t Format: '%s'\n"
+ "\t\tMin length: '%d'\n"
+ "\t\tMax length: '%d'\n"
+ "\n",
+ pin_name,
+ VALIDATE_UNKNOWN (mbim_pin_mode_get_string (pin_desc->pin_mode)),
+ VALIDATE_UNKNOWN (mbim_pin_format_get_string (pin_desc->pin_format)),
+ pin_desc->pin_length_min,
+ pin_desc->pin_length_max);
+}
+
+static void
+pin_list_ready (MbimDevice *device,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ MbimMessage *response;
+ GError *error = NULL;
+ MbimPinDesc *pin_desc_pin1;
+ MbimPinDesc *pin_desc_pin2;
+ MbimPinDesc *pin_desc_device_sim_pin;
+ MbimPinDesc *pin_desc_device_first_sim_pin;
+ MbimPinDesc *pin_desc_network_pin;
+ MbimPinDesc *pin_desc_network_subset_pin;
+ MbimPinDesc *pin_desc_service_provider_pin;
+ MbimPinDesc *pin_desc_corporate_pin;
+ MbimPinDesc *pin_desc_subsidy_lock;
+ MbimPinDesc *pin_desc_custom;
+
+ response = mbim_device_command_finish (device, res, &error);
+ if (!response || !mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error)) {
+ g_printerr ("error: operation failed: %s\n", error->message);
+ g_error_free (error);
+ if (response)
+ mbim_message_unref (response);
+ shutdown (FALSE);
+ return;
+ }
+
+ if (!mbim_message_pin_list_response_parse (
+ response,
+ &pin_desc_pin1,
+ &pin_desc_pin2,
+ &pin_desc_device_sim_pin,
+ &pin_desc_device_first_sim_pin,
+ &pin_desc_network_pin,
+ &pin_desc_network_subset_pin,
+ &pin_desc_service_provider_pin,
+ &pin_desc_corporate_pin,
+ &pin_desc_subsidy_lock,
+ &pin_desc_custom,
+ &error)) {
+ g_printerr ("error: couldn't parse response message: %s\n", error->message);
+ g_error_free (error);
+ mbim_message_unref (response);
+ shutdown (FALSE);
+ return;
+ }
+
+ g_print ("[%s] PIN list:\n\n",
+ mbim_device_get_path_display (device));
+
+ print_pin_desc ("PIN1", pin_desc_pin1);
+ print_pin_desc ("PIN2", pin_desc_pin2);
+ print_pin_desc ("Device SIM PIN", pin_desc_device_sim_pin);
+ print_pin_desc ("Device first SIM PIN", pin_desc_device_first_sim_pin);
+ print_pin_desc ("Network PIN", pin_desc_network_pin);
+ print_pin_desc ("Network subset PIN", pin_desc_network_subset_pin);
+ print_pin_desc ("Service provider PIN", pin_desc_service_provider_pin);
+ print_pin_desc ("Corporate PIN", pin_desc_corporate_pin);
+ print_pin_desc ("Subsidy lock", pin_desc_subsidy_lock);
+ print_pin_desc ("Custom", pin_desc_custom);
+
+ mbim_pin_desc_free (pin_desc_pin1);
+ mbim_pin_desc_free (pin_desc_pin2);
+ mbim_pin_desc_free (pin_desc_device_sim_pin);
+ mbim_pin_desc_free (pin_desc_device_first_sim_pin);
+ mbim_pin_desc_free (pin_desc_network_pin);
+ mbim_pin_desc_free (pin_desc_network_subset_pin);
+ mbim_pin_desc_free (pin_desc_service_provider_pin);
+ mbim_pin_desc_free (pin_desc_corporate_pin);
+ mbim_pin_desc_free (pin_desc_subsidy_lock);
+ mbim_pin_desc_free (pin_desc_custom);
+
+ mbim_message_unref (response);
+ shutdown (TRUE);
+}
+
+static void
ip_configuration_query_ready (MbimDevice *device,
GAsyncResult *res,
gpointer unused)
@@ -1827,6 +1927,22 @@ mbimcli_basic_connect_run (MbimDevice *device,
return;
}
+ /* Query PIN list? */
+ if (query_pin_list_flag) {
+ MbimMessage *request;
+
+ g_debug ("Asynchronously querying PIN list...");
+ request = (mbim_message_pin_list_query_new (NULL));
+ mbim_device_command (ctx->device,
+ request,
+ 10,
+ ctx->cancellable,
+ (GAsyncReadyCallback)pin_list_ready,
+ GUINT_TO_POINTER (FALSE));
+ mbim_message_unref (request);
+ return;
+ }
+
/* Query home provider? */
if (query_home_provider_flag) {
MbimMessage *request;