aboutsummaryrefslogtreecommitdiff
path: root/src/mm-bearer-mbim.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-07-13 16:45:16 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-07-13 16:48:50 +0200
commit06682e2806d2bceef8c8f63b49e84989465a2d33 (patch)
tree1ffd37a6b07cc9afe6285f14738c4dd969f296be /src/mm-bearer-mbim.c
parentdaf72fe169f40bcb637a0a4db1a763bd54909d20 (diff)
bearer-mbim: never update bearer properties sent by the user
We should never run any mm_bearer_properties_set_X() operations ourselves for the properties received by the user, or otherwise the logic comparing the bearers will fail and we may end up creating one bearer per connection attempt.
Diffstat (limited to 'src/mm-bearer-mbim.c')
-rw-r--r--src/mm-bearer-mbim.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/mm-bearer-mbim.c b/src/mm-bearer-mbim.c
index 101c75cd..16bffd87 100644
--- a/src/mm-bearer-mbim.c
+++ b/src/mm-bearer-mbim.c
@@ -878,6 +878,7 @@ static gboolean
load_settings_from_profile (MMBearerMbim *self,
ConnectContext *ctx,
MM3gppProfile *profile,
+ MMBearerApnType default_apn_type,
GError **error)
{
MMBearerAllowedAuth bearer_auth;
@@ -888,9 +889,12 @@ load_settings_from_profile (MMBearerMbim *self,
ctx->apn = g_strdup (mm_3gpp_profile_get_apn (profile));
apn_type = mm_3gpp_profile_get_apn_type (profile);
if (apn_type == MM_BEARER_APN_TYPE_NONE) {
- g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
- "APN type in profile is not initialized");
- return FALSE;
+ if (default_apn_type == MM_BEARER_APN_TYPE_NONE) {
+ g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
+ "APN type in profile is not initialized");
+ return FALSE;
+ }
+ apn_type = default_apn_type;
}
ctx->context_type = mm_bearer_apn_type_to_mbim_context_type (apn_type, self, &inner_error);
if (inner_error) {
@@ -951,7 +955,7 @@ get_profile_ready (MMIfaceModem3gppProfileManager *modem,
return;
}
- if (!load_settings_from_profile (self, ctx, profile, &error)) {
+ if (!load_settings_from_profile (self, ctx, profile, MM_BEARER_APN_TYPE_NONE, &error)) {
g_prefix_error (&error, "Couldn't load settings from profile: ");
g_task_return_error (task, error);
g_object_unref (task);
@@ -1209,14 +1213,14 @@ load_settings_from_bearer (MMBearerMbim *self,
return TRUE;
}
- /* If not loading from a stored profile, initialize the
- * APN type to 'internet' by default, which is what we've done
- * until now. */
- if (mm_bearer_properties_get_apn_type (properties) == MM_BEARER_APN_TYPE_NONE)
- mm_bearer_properties_set_apn_type (properties, MM_BEARER_APN_TYPE_DEFAULT);
-
- /* Use the implicit profile settings in the bearer properties */
- if (!load_settings_from_profile (self, ctx, mm_bearer_properties_peek_3gpp_profile (properties), error))
+ /* Use the implicit profile settings in the bearer properties.
+ * If not loading from a stored profile, initialize the APN type to 'internet'
+ * (TYPE_DEFAULT) by default, which is what we've done until now. */
+ if (!load_settings_from_profile (self,
+ ctx,
+ mm_bearer_properties_peek_3gpp_profile (properties),
+ MM_BEARER_APN_TYPE_DEFAULT,
+ error))
return FALSE;
/* Is this a 3GPP only modem and no APN or profile id was given? If so, error */