aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-bearer-qmi.c40
-rw-r--r--src/mm-modem-helpers-qmi.c16
-rw-r--r--src/mm-modem-helpers-qmi.h4
3 files changed, 55 insertions, 5 deletions
diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c
index ed1c79b3..1a2bd564 100644
--- a/src/mm-bearer-qmi.c
+++ b/src/mm-bearer-qmi.c
@@ -25,6 +25,7 @@
#include <libmm-glib.h>
#include "mm-bearer-qmi.h"
+#include "mm-modem-helpers-qmi.h"
#include "mm-serial-enums-types.h"
#include "mm-log.h"
@@ -85,6 +86,7 @@ typedef struct {
gchar *user;
gchar *password;
gchar *apn;
+ QmiWdsAuthentication auth;
gboolean no_ip_family_preference;
gboolean default_ip_family_set;
@@ -241,11 +243,14 @@ build_start_network_input (ConnectContext *ctx)
if (ctx->apn)
qmi_message_wds_start_network_input_set_apn (input, ctx->apn, NULL);
- if (ctx->user)
- qmi_message_wds_start_network_input_set_username (input, ctx->user, NULL);
+ if (ctx->auth != QMI_WDS_AUTHENTICATION_NONE) {
+ qmi_message_wds_start_network_input_set_authentication_preference (input, ctx->auth, NULL);
- if (ctx->password)
- qmi_message_wds_start_network_input_set_password (input, ctx->password, NULL);
+ if (ctx->user)
+ qmi_message_wds_start_network_input_set_username (input, ctx->user, NULL);
+ if (ctx->password)
+ qmi_message_wds_start_network_input_set_password (input, ctx->password, NULL);
+ }
/* Only add the IP family preference TLV if explicitly requested a given
* family. This TLV may be newer than the Start Network command itself, so
@@ -641,6 +646,8 @@ connect (MMBearer *self,
return;
}
+ g_object_unref (modem);
+
mm_dbg ("Launching connection with QMI port (%s/%s) and data port (%s/%s)",
mm_port_subsys_get_string (mm_port_get_subsys (MM_PORT (qmi))),
mm_port_get_device (MM_PORT (qmi)),
@@ -663,6 +670,8 @@ connect (MMBearer *self,
NULL);
if (properties) {
+ MMBearerAllowedAuth auth;
+
ctx->apn = g_strdup (mm_bearer_properties_get_apn (properties));
ctx->user = g_strdup (mm_bearer_properties_get_user (properties));
ctx->password = g_strdup (mm_bearer_properties_get_password (properties));
@@ -688,12 +697,33 @@ connect (MMBearer *self,
break;
}
+ auth = mm_bearer_properties_get_allowed_auth (properties);
g_object_unref (properties);
+
+ if (auth == MM_BEARER_ALLOWED_AUTH_UNKNOWN) {
+ mm_dbg ("Using default (PAP) authentication method");
+ ctx->auth = QMI_WDS_AUTHENTICATION_PAP;
+ } else if (ctx->auth & (MM_BEARER_ALLOWED_AUTH_PAP | MM_BEARER_ALLOWED_AUTH_CHAP)) {
+ /* Only PAP and/or CHAP are supported */
+ ctx->auth = mm_bearer_allowed_auth_to_qmi_authentication (auth);
+ } else {
+ gchar *str;
+
+ str = mm_bearer_allowed_auth_build_string_from_mask (auth);
+ g_simple_async_result_set_error (
+ ctx->result,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_UNSUPPORTED,
+ "Cannot use any of the specified authentication methods (%s)",
+ str);
+ g_free (str);
+ connect_context_complete_and_free (ctx);
+ return;
+ }
}
/* Run! */
connect_context_step (ctx);
- g_object_unref (modem);
}
/*****************************************************************************/
diff --git a/src/mm-modem-helpers-qmi.c b/src/mm-modem-helpers-qmi.c
index af1a390c..84935877 100644
--- a/src/mm-modem-helpers-qmi.c
+++ b/src/mm-modem-helpers-qmi.c
@@ -879,3 +879,19 @@ mm_sms_state_from_qmi_message_tag (QmiWmsMessageTagType tag)
return MM_SMS_STATE_UNKNOWN;
}
}
+
+/*****************************************************************************/
+
+QmiWdsAuthentication
+mm_bearer_allowed_auth_to_qmi_authentication (MMBearerAllowedAuth auth)
+{
+ QmiWdsAuthentication out;
+
+ out = 0;
+ if (auth & MM_BEARER_ALLOWED_AUTH_PAP)
+ out |= QMI_WDS_AUTHENTICATION_PAP;
+ if (auth & MM_BEARER_ALLOWED_AUTH_CHAP)
+ out |= QMI_WDS_AUTHENTICATION_CHAP;
+
+ return out;
+}
diff --git a/src/mm-modem-helpers-qmi.h b/src/mm-modem-helpers-qmi.h
index 9c3b1966..a9d5a300 100644
--- a/src/mm-modem-helpers-qmi.h
+++ b/src/mm-modem-helpers-qmi.h
@@ -77,5 +77,9 @@ MMSmsStorage mm_sms_storage_from_qmi_storage_type (QmiWmsStorageType qmi_storage
MMSmsState mm_sms_state_from_qmi_message_tag (QmiWmsMessageTagType tag);
+/*****************************************************************************/
+/* QMI/WDS to MM translations */
+
+QmiWdsAuthentication mm_bearer_allowed_auth_to_qmi_authentication (MMBearerAllowedAuth auth);
#endif /* MM_MODEM_HELPERS_QMI_H */