aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/novatel/mm-broadband-bearer-novatel.c177
-rw-r--r--plugins/novatel/mm-broadband-bearer-novatel.h4
2 files changed, 171 insertions, 10 deletions
diff --git a/plugins/novatel/mm-broadband-bearer-novatel.c b/plugins/novatel/mm-broadband-bearer-novatel.c
index db163b0f..04fd01a2 100644
--- a/plugins/novatel/mm-broadband-bearer-novatel.c
+++ b/plugins/novatel/mm-broadband-bearer-novatel.c
@@ -34,8 +34,26 @@
G_DEFINE_TYPE (MMBroadbandBearerNovatel, mm_broadband_bearer_novatel, MM_TYPE_BROADBAND_BEARER);
+enum {
+ PROP_0,
+ PROP_USER,
+ PROP_PASSWORD,
+ PROP_LAST
+};
+
+static GParamSpec *properties[PROP_LAST];
+
/*****************************************************************************/
+
+
+struct _MMBroadbandBearerNovatelPrivate {
+ /* Username for authenticating to APN */
+ gchar *user;
+ /* Password for authenticating to APN */
+ gchar *password;
+};
+
typedef struct {
MMBroadbandBearer *self;
MMBaseModem *modem;
@@ -204,7 +222,7 @@ connect_3gpp_qmiconnect_ready (MMBaseModem *modem,
}
static void
-connect_3gpp (MMBroadbandBearer *self,
+connect_3gpp (MMBroadbandBearer *bearer,
MMBroadbandModem *modem,
MMAtSerialPort *primary,
MMAtSerialPort *secondary,
@@ -213,9 +231,11 @@ connect_3gpp (MMBroadbandBearer *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
+ MMBroadbandBearerNovatel *self = MM_BROADBAND_BEARER_NOVATEL (bearer);
DetailedConnectContext *ctx;
+ gchar *command, *apn, *user, *password;
- ctx = detailed_connect_context_new (self,
+ ctx = detailed_connect_context_new (bearer,
modem,
primary,
data,
@@ -223,13 +243,22 @@ connect_3gpp (MMBroadbandBearer *self,
callback,
user_data);
+ apn = mm_at_serial_port_quote_string (mm_broadband_bearer_get_3gpp_apn (bearer));
+ user = mm_at_serial_port_quote_string (self->priv->user);
+ password = mm_at_serial_port_quote_string (self->priv->password);
+ command = g_strdup_printf ("$NWQMICONNECT=,,,,,,%s,,,%s,%s",
+ apn, user, password);
+ g_free (apn);
+ g_free (user);
+ g_free (password);
mm_base_modem_at_command (
ctx->modem,
- "$NWQMICONNECT=,,,,,,,,,,",
+ command,
10, /* timeout */
FALSE, /* allow_cached */
(GAsyncReadyCallback)connect_3gpp_qmiconnect_ready,
ctx); /* user_data */
+ g_free (command);
}
@@ -365,20 +394,143 @@ disconnect_3gpp (MMBroadbandBearer *self,
static void
-mm_broadband_bearer_novatel_init (MMBroadbandBearerNovatel *self)
+finalize (GObject *object)
{
+ MMBroadbandBearerNovatel *self = MM_BROADBAND_BEARER_NOVATEL (object);
+
+ g_free (self->priv->user);
+ g_free (self->priv->password);
+
+ G_OBJECT_CLASS (mm_broadband_bearer_novatel_parent_class)->finalize (object);
}
static void
-mm_broadband_bearer_novatel_class_init (MMBroadbandBearerNovatelClass *klass)
+set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- MMBroadbandBearerClass *bearer_class = MM_BROADBAND_BEARER_CLASS (klass);
+ MMBroadbandBearerNovatel *self = MM_BROADBAND_BEARER_NOVATEL (object);
+
+ switch (prop_id) {
+ case PROP_USER:
+ g_free (self->priv->user);
+ self->priv->user = g_value_dup_string (value);
+ break;
+ case PROP_PASSWORD:
+ g_free (self->priv->password);
+ self->priv->password = g_value_dup_string (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
- bearer_class->connect_3gpp = connect_3gpp;
- bearer_class->connect_3gpp_finish = connect_3gpp_finish;
+static void
+get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ MMBroadbandBearerNovatel *self = MM_BROADBAND_BEARER_NOVATEL (object);
+
+ switch (prop_id) {
+ case PROP_USER:
+ g_value_set_string (value, self->priv->user);
+ break;
+ case PROP_PASSWORD:
+ g_value_set_string (value, self->priv->password);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
- bearer_class->disconnect_3gpp = disconnect_3gpp;
- bearer_class->disconnect_3gpp_finish = disconnect_3gpp_finish;
+static gboolean
+cmp_properties (MMBearer *bearer,
+ MMBearerProperties *properties)
+{
+ MMBroadbandBearerNovatel *self = MM_BROADBAND_BEARER_NOVATEL (bearer);
+
+ return ((mm_broadband_bearer_get_allow_roaming (MM_BROADBAND_BEARER (self)) ==
+ mm_bearer_properties_get_allow_roaming (properties)) &&
+ (!g_strcmp0 (mm_broadband_bearer_get_ip_type (MM_BROADBAND_BEARER (self)),
+ mm_bearer_properties_get_ip_type (properties))) &&
+ (!g_strcmp0 (mm_broadband_bearer_get_3gpp_apn (MM_BROADBAND_BEARER (self)),
+ mm_bearer_properties_get_apn (properties))) &&
+ (!g_strcmp0 (self->priv->user,
+ mm_bearer_properties_get_user (properties))) &&
+ (!g_strcmp0 (self->priv->password,
+ mm_bearer_properties_get_password (properties))));
+}
+
+static MMBearerProperties *
+expose_properties (MMBearer *bearer)
+{
+ MMBroadbandBearerNovatel *self = MM_BROADBAND_BEARER_NOVATEL (bearer);
+ MMBearerProperties *properties;
+
+ properties = mm_bearer_properties_new ();
+ mm_bearer_properties_set_apn (properties,
+ mm_broadband_bearer_get_3gpp_apn (MM_BROADBAND_BEARER (self)));
+ mm_bearer_properties_set_ip_type (properties,
+ mm_broadband_bearer_get_ip_type (MM_BROADBAND_BEARER (self)));
+ mm_bearer_properties_set_allow_roaming (properties,
+ mm_broadband_bearer_get_allow_roaming (MM_BROADBAND_BEARER (self)));
+ mm_bearer_properties_set_user (properties, self->priv->user);
+ mm_bearer_properties_set_password (properties, self->priv->user);
+ return properties;
+}
+
+static void
+mm_broadband_bearer_novatel_init (MMBroadbandBearerNovatel *self)
+{
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self),
+ MM_TYPE_BROADBAND_BEARER_NOVATEL,
+ MMBroadbandBearerNovatelPrivate);
+
+ self->priv->user = NULL;
+ self->priv->password = NULL;
+}
+
+static void
+mm_broadband_bearer_novatel_class_init (MMBroadbandBearerNovatelClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ MMBearerClass *bearer_class = MM_BEARER_CLASS (klass);
+ MMBroadbandBearerClass *broadband_bearer_class = MM_BROADBAND_BEARER_CLASS (klass);
+
+ g_type_class_add_private (object_class, sizeof (MMBroadbandBearerNovatelPrivate));
+
+ object_class->get_property = get_property;
+ object_class->set_property = set_property;
+ object_class->finalize = finalize;
+
+ bearer_class->cmp_properties = cmp_properties;
+ bearer_class->expose_properties = expose_properties;
+
+ broadband_bearer_class->connect_3gpp = connect_3gpp;
+ broadband_bearer_class->connect_3gpp_finish = connect_3gpp_finish;
+ broadband_bearer_class->disconnect_3gpp = disconnect_3gpp;
+ broadband_bearer_class->disconnect_3gpp_finish = disconnect_3gpp_finish;
+
+ properties[PROP_USER] =
+ g_param_spec_string (MM_BROADBAND_BEARER_NOVATEL_USER,
+ "User",
+ "Username to authenticate to APN",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (object_class, PROP_USER, properties[PROP_USER]);
+
+ properties[PROP_PASSWORD] =
+ g_param_spec_string (MM_BROADBAND_BEARER_NOVATEL_PASSWORD,
+ "Password",
+ "Password to authenticate to APN",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (object_class, PROP_PASSWORD, properties[PROP_PASSWORD]);
}
MMBearer *
@@ -414,5 +566,10 @@ void mm_broadband_bearer_novatel_new (MMBroadbandModemNovatel *modem,
callback,
user_data,
MM_BEARER_MODEM, modem,
+ MM_BROADBAND_BEARER_3GPP_APN, mm_bearer_properties_get_apn (properties),
+ MM_BROADBAND_BEARER_IP_TYPE, mm_bearer_properties_get_ip_type (properties),
+ MM_BROADBAND_BEARER_ALLOW_ROAMING, mm_bearer_properties_get_allow_roaming (properties),
+ MM_BROADBAND_BEARER_NOVATEL_USER, mm_bearer_properties_get_user (properties),
+ MM_BROADBAND_BEARER_NOVATEL_PASSWORD, mm_bearer_properties_get_password (properties),
NULL);
}
diff --git a/plugins/novatel/mm-broadband-bearer-novatel.h b/plugins/novatel/mm-broadband-bearer-novatel.h
index bae9497a..9373e67b 100644
--- a/plugins/novatel/mm-broadband-bearer-novatel.h
+++ b/plugins/novatel/mm-broadband-bearer-novatel.h
@@ -33,12 +33,16 @@
#define MM_IS_BROADBAND_BEARER_NOVATEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MM_TYPE_BROADBAND_BEARER_NOVATEL))
#define MM_BROADBAND_BEARER_NOVATEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_BROADBAND_BEARER_NOVATEL, MMBroadbandBearerNovatelClass))
+#define MM_BROADBAND_BEARER_NOVATEL_USER "broadband-bearer-novatel-user"
+#define MM_BROADBAND_BEARER_NOVATEL_PASSWORD "broadband-bearer-novatel-password"
+
typedef struct _MMBroadbandBearerNovatel MMBroadbandBearerNovatel;
typedef struct _MMBroadbandBearerNovatelClass MMBroadbandBearerNovatelClass;
typedef struct _MMBroadbandBearerNovatelPrivate MMBroadbandBearerNovatelPrivate;
struct _MMBroadbandBearerNovatel {
MMBroadbandBearer parent;
+ MMBroadbandBearerNovatelPrivate *priv;
};
struct _MMBroadbandBearerNovatelClass {