summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2018-11-04 16:43:53 +0100
committerDan Williams <dcbw@redhat.com>2018-11-07 17:04:56 +0000
commita7b6be938af94cf2d54d4352d899831394276b6e (patch)
tree5950574027b2708cf1083cbec48ef365bb3a388b
parentdc3c5923fa19620360b198bc1ce66fed16ec97ff (diff)
downloadlibmbim-aleksander/lte-attach.tar.gz
ms-basic-connect-extensions: implement 'LTE attach state'aleksander/lte-attach
-rw-r--r--data/mbim-service-ms-basic-connect-extensions.json36
-rw-r--r--docs/reference/libmbim-glib/libmbim-glib-common.sections5
-rw-r--r--src/libmbim-glib/mbim-enums.h12
-rw-r--r--src/mbimcli/mbimcli-ms-basic-connect-extensions.c71
4 files changed, 122 insertions, 2 deletions
diff --git a/data/mbim-service-ms-basic-connect-extensions.json b/data/mbim-service-ms-basic-connect-extensions.json
index 4562237..cce9cac 100644
--- a/data/mbim-service-ms-basic-connect-extensions.json
+++ b/data/mbim-service-ms-basic-connect-extensions.json
@@ -80,5 +80,39 @@
{ "name" : "Configurations",
"format" : "ref-struct-array" ,
"struct-type" : "MbimLteAttachConfiguration",
- "array-size-field" : "ConfigurationCount" } ] }
+ "array-size-field" : "ConfigurationCount" } ] },
+
+ // *********************************************************************************
+
+ { "name" : "MbimLteAttachStatus",
+ "type" : "Struct",
+ "contents" : [ { "name" : "LteAttachState",
+ "format" : "guint32",
+ "public-format" : "MbimLteAttachState" },
+ { "name" : "IpType",
+ "format" : "guint32",
+ "public-format" : "MbimContextIpType" },
+ { "name" : "AccessString",
+ "format" : "string" },
+ { "name" : "UserName",
+ "format" : "string" },
+ { "name" : "Password",
+ "format" : "string" },
+ { "name" : "Compression",
+ "format" : "guint32",
+ "public-format" : "MbimCompression" },
+ { "name" : "AuthProtocol",
+ "format" : "guint32",
+ "public-format" : "MbimAuthProtocol" } ] },
+
+ { "name" : "Lte Attach Status",
+ "service" : "Ms Basic Connect Extensions",
+ "type" : "Command",
+ "query" : [],
+ "response" : [ { "name" : "LteAttachStatus",
+ "format" : "struct",
+ "struct-type" : "MbimLteAttachStatus" } ],
+ "notification" : [ { "name" : "LteAttachStatus",
+ "format" : "struct",
+ "struct-type" : "MbimLteAttachStatus" } ] }
]
diff --git a/docs/reference/libmbim-glib/libmbim-glib-common.sections b/docs/reference/libmbim-glib/libmbim-glib-common.sections
index 180cb60..7634a7b 100644
--- a/docs/reference/libmbim-glib/libmbim-glib-common.sections
+++ b/docs/reference/libmbim-glib/libmbim-glib-common.sections
@@ -318,6 +318,7 @@ MbimPcoType
MbimContextSource
MbimLteAttachContextOperation
MbimLteAttachContextRoamingControl
+MbimLteAttachState
<SUBSECTION Methods>
mbim_device_type_get_string
mbim_cellular_class_build_string_from_mask
@@ -373,6 +374,7 @@ mbim_pco_type_get_string
mbim_context_source_get_string
mbim_lte_attach_context_operation_get_string
mbim_lte_attach_context_roaming_control_get_string
+mbim_lte_attach_state_get_string
<SUBSECTION Private>
mbim_device_type_build_string_from_mask
mbim_cellular_class_get_string
@@ -430,6 +432,7 @@ mbim_pco_type_build_string_from_mask
mbim_context_source_build_string_from_mask
mbim_lte_attach_context_operation_build_string_from_mask
mbim_lte_attach_context_roaming_control_build_string_from_mask
+mbim_lte_attach_state_build_string_from_mask
<SUBSECTION Standard>
MBIM_TYPE_ACTIVATION_COMMAND
MBIM_TYPE_ACTIVATION_STATE
@@ -490,6 +493,7 @@ MBIM_TYPE_PCO_TYPE
MBIM_TYPE_CONTEXT_SOURCE
MBIM_TYPE_LTE_ATTACH_CONTEXT_OPERATION
MBIM_TYPE_LTE_ATTACH_CONTEXT_ROAMING_CONTROL
+MBIM_TYPE_LTE_ATTACH_STATE
mbim_activation_command_get_type
mbim_activation_state_get_type
mbim_auth_protocol_get_type
@@ -549,6 +553,7 @@ mbim_pco_type_get_type
mbim_context_source_get_type
mbim_lte_attach_context_operation_get_type
mbim_lte_attach_context_roaming_control_get_type
+mbim_lte_attach_state_get_type
</SECTION>
<SECTION>
diff --git a/src/libmbim-glib/mbim-enums.h b/src/libmbim-glib/mbim-enums.h
index 2e66c4f..c85243a 100644
--- a/src/libmbim-glib/mbim-enums.h
+++ b/src/libmbim-glib/mbim-enums.h
@@ -1082,6 +1082,18 @@ typedef enum {
MBIM_CONTEXT_SOURCE_DEVICE = 4
} MbimContextSource;
+/**
+ * MbimLteAttachState:
+ * @MBIM_LTE_ATTACH_STATE_DETACHED: Detached.
+ * @MBIM_LTE_ATTACH_STATE_ATTACHED: Attached.
+ *
+ * LTE attach state.
+ */
+typedef enum {
+ MBIM_LTE_ATTACH_STATE_DETACHED = 0,
+ MBIM_LTE_ATTACH_STATE_ATTACHED = 1
+} MbimLteAttachState;
+
G_END_DECLS
#endif /* _LIBMBIM_GLIB_MBIM_ENUMS_H_ */
diff --git a/src/mbimcli/mbimcli-ms-basic-connect-extensions.c b/src/mbimcli/mbimcli-ms-basic-connect-extensions.c
index e4c5444..092afbb 100644
--- a/src/mbimcli/mbimcli-ms-basic-connect-extensions.c
+++ b/src/mbimcli/mbimcli-ms-basic-connect-extensions.c
@@ -45,6 +45,7 @@ static Context *ctx;
/* Options */
static gchar *query_pco_str;
static gboolean query_lte_attach_configuration_flag;
+static gboolean query_lte_attach_status_flag;
static gboolean query_pco_arg_parse (const char *option_name,
const char *value,
@@ -60,6 +61,10 @@ static GOptionEntry entries[] = {
"Query LTE attach configuration",
NULL
},
+ { "ms-query-lte-attach-status", 0, 0, G_OPTION_ARG_NONE, &query_lte_attach_status_flag,
+ "Query LTE attach status",
+ NULL
+ },
{ NULL }
};
@@ -129,7 +134,8 @@ mbimcli_ms_basic_connect_extensions_options_enabled (void)
return !!n_actions;
n_actions = (!!query_pco_str +
- query_lte_attach_configuration_flag);
+ query_lte_attach_configuration_flag +
+ query_lte_attach_status_flag);
if (n_actions > 1) {
g_printerr ("error: too many Microsoft Basic Connect Extensions Service actions requested\n");
@@ -265,6 +271,53 @@ query_lte_attach_configuration_ready (MbimDevice *device,
shutdown (TRUE);
}
+static void
+query_lte_attach_status_ready (MbimDevice *device,
+ GAsyncResult *res)
+{
+ MbimMessage *response;
+ GError *error = NULL;
+ MbimLteAttachStatus *lte_attach_status = NULL;
+
+ 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;
+ }
+
+ g_print ("[%s] Successfully queried LTE attach status\n",
+ mbim_device_get_path_display (device));
+
+ if (!mbim_message_ms_basic_connect_extensions_lte_attach_status_response_parse (
+ response,
+ &lte_attach_status,
+ &error)) {
+ g_printerr ("error: couldn't parse response message: %s\n", error->message);
+ g_error_free (error);
+ mbim_message_unref (response);
+ shutdown (FALSE);
+ return;
+ }
+
+#define VALIDATE_NA(str) (str ? str : "n/a")
+ g_print (" Attach state: %s\n", mbim_lte_attach_state_get_string (lte_attach_status->lte_attach_state));
+ g_print (" IP type: %s\n", mbim_context_ip_type_get_string (lte_attach_status->ip_type));
+ g_print (" Access string: %s\n", VALIDATE_NA (lte_attach_status->access_string));
+ g_print (" Username: %s\n", VALIDATE_NA (lte_attach_status->user_name));
+ g_print (" Password: %s\n", VALIDATE_NA (lte_attach_status->password));
+ g_print (" Compression: %s\n", mbim_compression_get_string (lte_attach_status->compression));
+ g_print (" Auth protocol: %s\n", mbim_auth_protocol_get_string (lte_attach_status->auth_protocol));
+#undef VALIDATE_NA
+
+ mbim_lte_attach_status_free (lte_attach_status);
+ mbim_message_unref (response);
+ shutdown (TRUE);
+}
+
void
mbimcli_ms_basic_connect_extensions_run (MbimDevice *device,
GCancellable *cancellable)
@@ -319,5 +372,21 @@ mbimcli_ms_basic_connect_extensions_run (MbimDevice *device,
return;
}
+ /* Request to query LTE attach status? */
+ if (query_lte_attach_status_flag) {
+ MbimMessage *request;
+
+ g_debug ("Asynchronously querying LTE attach status...");
+ request = mbim_message_ms_basic_connect_extensions_lte_attach_status_query_new (NULL);
+ mbim_device_command (ctx->device,
+ request,
+ 10,
+ ctx->cancellable,
+ (GAsyncReadyCallback)query_lte_attach_status_ready,
+ NULL);
+ mbim_message_unref (request);
+ return;
+ }
+
g_warn_if_reached ();
}