[PATCH] mbimcli: new '--query-pin-list' action
Aleksander Morgado
aleksander at aleksander.es
Tue Aug 8 07:52:25 UTC 2017
On Mon, Aug 7, 2017 at 10:40 PM, Ben Chan <benchan at chromium.org> wrote:
> 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.
Pushed to git master, thanks.
> ---
> src/mbimcli/mbimcli-basic-connect.c | 116 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 116 insertions(+)
>
> 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 +
> @@ -736,6 +742,100 @@ enum {
> DISCONNECT
> };
>
> +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,
> @@ -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;
> --
> 2.14.0.rc1.383.gd1ce394fe2-goog
>
--
Aleksander
https://aleksander.es
More information about the libmbim-devel
mailing list