aboutsummaryrefslogtreecommitdiff
path: root/src/mm-bearer-qmi.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-bearer-qmi.c')
-rw-r--r--src/mm-bearer-qmi.c79
1 files changed, 40 insertions, 39 deletions
diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c
index a72fa48..00d17c5 100644
--- a/src/mm-bearer-qmi.c
+++ b/src/mm-bearer-qmi.c
@@ -55,11 +55,12 @@ typedef enum {
CONNECT_STEP_WDS_CLIENT_IPV4,
CONNECT_STEP_IP_FAMILY_IPV4,
CONNECT_STEP_START_NETWORK_IPV4,
+ CONNECT_STEP_GET_CURRENT_SETTINGS_IPV4,
CONNECT_STEP_IPV6,
CONNECT_STEP_WDS_CLIENT_IPV6,
CONNECT_STEP_IP_FAMILY_IPV6,
CONNECT_STEP_START_NETWORK_IPV6,
- CONNECT_STEP_GET_CURRENT_SETTINGS,
+ CONNECT_STEP_GET_CURRENT_SETTINGS_IPV6,
CONNECT_STEP_LAST
} ConnectStep;
@@ -302,7 +303,6 @@ get_current_settings_ready (QmiClientWds *client,
QmiMessageWdsGetCurrentSettingsOutput *output;
g_assert (ctx->running_ipv4 || ctx->running_ipv6);
- g_assert (!(ctx->running_ipv4 && ctx->running_ipv6));
output = qmi_client_wds_get_current_settings_finish (client, res, &error);
if (!output ||
@@ -317,12 +317,12 @@ get_current_settings_ready (QmiClientWds *client,
GArray *array;
guint8 prefix;
- if (ctx->running_ipv4) {
+ /* If the message has an IPv4 address, print IPv4 settings */
+ if (qmi_message_wds_get_current_settings_output_get_ipv4_address (output, &addr, &error)) {
mm_dbg ("QMI IPv4 Settings:");
/* IPv4 address */
- success = qmi_message_wds_get_current_settings_output_get_ipv4_address (output, &addr, &error);
- print_address4 (success, "Address", addr, error);
+ print_address4 (TRUE, "Address", addr, error);
g_clear_error (&error);
/* IPv4 gateway address */
@@ -344,12 +344,14 @@ get_current_settings_ready (QmiClientWds *client,
success = qmi_message_wds_get_current_settings_output_get_secondary_ipv4_dns_address (output, &addr, &error);
print_address4 (success, " DNS #2", addr, error);
g_clear_error (&error);
- } else {
+ }
+
+ /* If the message has an IPv6 address, print IPv6 settings */
+ if (qmi_message_wds_get_current_settings_output_get_ipv6_address (output, &array, &prefix, &error)) {
mm_dbg ("QMI IPv6 Settings:");
/* IPv6 address */
- success = qmi_message_wds_get_current_settings_output_get_ipv6_address (output, &array, &prefix, &error);
- print_address6 (success, "Address", array, prefix, error);
+ print_address6 (TRUE, "Address", array, prefix, error);
g_clear_error (&error);
/* IPv6 gateway address */
@@ -400,16 +402,13 @@ get_current_settings_ready (QmiClientWds *client,
connect_context_step (ctx);
}
-static QmiMessageWdsGetCurrentSettingsInput *
-build_get_current_settings_input (ConnectContext *ctx)
+static void
+get_current_settings (ConnectContext *ctx, QmiClientWds *client)
{
QmiMessageWdsGetCurrentSettingsInput *input;
- QmiWdsGetCurrentSettingsRequestedSettings requested = QMI_WDS_GET_CURRENT_SETTINGS_REQUESTED_SETTINGS_NONE;
+ QmiWdsGetCurrentSettingsRequestedSettings requested;
g_assert (ctx->running_ipv4 || ctx->running_ipv6);
- g_assert (!(ctx->running_ipv4 && ctx->running_ipv6));
-
- input = qmi_message_wds_get_current_settings_input_new ();
requested = QMI_WDS_GET_CURRENT_SETTINGS_REQUESTED_SETTINGS_DNS_ADDRESS |
QMI_WDS_GET_CURRENT_SETTINGS_REQUESTED_SETTINGS_GRANTED_QOS |
@@ -419,8 +418,15 @@ build_get_current_settings_input (ConnectContext *ctx)
QMI_WDS_GET_CURRENT_SETTINGS_REQUESTED_SETTINGS_DOMAIN_NAME_LIST |
QMI_WDS_GET_CURRENT_SETTINGS_REQUESTED_SETTINGS_IP_FAMILY;
+ input = qmi_message_wds_get_current_settings_input_new ();
qmi_message_wds_get_current_settings_input_set_requested_settings (input, requested, NULL);
- return input;
+ qmi_client_wds_get_current_settings (client,
+ input,
+ 10,
+ ctx->cancellable,
+ (GAsyncReadyCallback)get_current_settings_ready,
+ ctx);
+ qmi_message_wds_get_current_settings_input_unref (input);
}
static void
@@ -613,10 +619,21 @@ connect_context_step (ConnectContext *ctx)
return;
}
+ case CONNECT_STEP_GET_CURRENT_SETTINGS_IPV4: {
+ /* Retrieve and print IP configuration */
+ if (ctx->packet_data_handle_ipv4) {
+ mm_dbg ("Getting IPv4 configuration...");
+ get_current_settings (ctx, ctx->client_ipv4);
+ return;
+ }
+ /* Fall through */
+ ctx->step++;
+ }
+
case CONNECT_STEP_IPV6:
/* If no IPv6 setup needed, jump to last */
if (!ctx->ipv6) {
- ctx->step = CONNECT_STEP_GET_CURRENT_SETTINGS;
+ ctx->step = CONNECT_STEP_LAST;
connect_context_step (ctx);
return;
}
@@ -691,32 +708,16 @@ connect_context_step (ConnectContext *ctx)
return;
}
- case CONNECT_STEP_GET_CURRENT_SETTINGS:
- /* If one of IPv4 or IPv6 succeeds, get IP configuration */
- if (ctx->packet_data_handle_ipv4 || ctx->packet_data_handle_ipv6) {
- QmiMessageWdsGetCurrentSettingsInput *input;
- QmiClientWds *client;
-
- if (ctx->running_ipv4)
- client = ctx->client_ipv4;
- else if (ctx->running_ipv6)
- client = ctx->client_ipv6;
- else
- g_assert_not_reached ();
-
- mm_dbg ("Getting IP configuration...");
- input = build_get_current_settings_input (ctx);
- qmi_client_wds_get_current_settings (client,
- input,
- 45,
- ctx->cancellable,
- (GAsyncReadyCallback)get_current_settings_ready,
- ctx);
- qmi_message_wds_get_current_settings_input_unref (input);
+ case CONNECT_STEP_GET_CURRENT_SETTINGS_IPV6: {
+ /* Retrieve and print IP configuration */
+ if (ctx->packet_data_handle_ipv6) {
+ mm_dbg ("Getting IPv6 configuration...");
+ get_current_settings (ctx, ctx->client_ipv6);
return;
}
- /* Just fall down */
+ /* Fall through */
ctx->step++;
+ }
case CONNECT_STEP_LAST:
/* If one of IPv4 or IPv6 succeeds, we're connected */