diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-10-09 15:54:48 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-10-09 15:54:48 +0200 |
commit | 927889edbec5fc68f457303cf62c563d546d0f1b (patch) | |
tree | e30e7472cca934ed10c4066a621369c762847f6e | |
parent | 316b9fa001edee37a17d831708839016aed93e80 (diff) |
bearer-qmi: use user-specified allowed authentication methods
If none of the specified methods is supported, an error is returned.
-rw-r--r-- | src/mm-bearer-qmi.c | 40 | ||||
-rw-r--r-- | src/mm-modem-helpers-qmi.c | 16 | ||||
-rw-r--r-- | src/mm-modem-helpers-qmi.h | 4 |
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 */ |