summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gclue-3g-tower.h1
-rw-r--r--src/gclue-mozilla.c54
2 files changed, 32 insertions, 23 deletions
diff --git a/src/gclue-3g-tower.h b/src/gclue-3g-tower.h
index a40e1fe..f6b69ff 100644
--- a/src/gclue-3g-tower.h
+++ b/src/gclue-3g-tower.h
@@ -31,6 +31,7 @@ typedef enum {
GCLUE_TOWER_TEC_4G = 3,
GCLUE_TOWER_TEC_NO_FIX = 99,
} GClueTowerTec;
+# define GCLUE_TOWER_TEC_MAX_VALID GCLUE_TOWER_TEC_4G
typedef struct _GClue3GTower GClue3GTower;
diff --git a/src/gclue-mozilla.c b/src/gclue-mozilla.c
index 08f7e71..0472cb7 100644
--- a/src/gclue-mozilla.c
+++ b/src/gclue-mozilla.c
@@ -154,6 +154,28 @@ error:
return FALSE;
}
+static gboolean
+towertec_to_radiotype (GClueTowerTec tec,
+ const char **radiotype_p)
+{
+ switch (tec) {
+ case GCLUE_TOWER_TEC_2G:
+ *radiotype_p = "gsm";
+ break;
+ case GCLUE_TOWER_TEC_3G:
+ *radiotype_p = "wcdma";
+ break;
+ case GCLUE_TOWER_TEC_4G:
+ *radiotype_p = "lte";
+ break;
+ default:
+ *radiotype_p = NULL;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
SoupMessage *
gclue_mozilla_create_query (GClueMozilla *mozilla,
gboolean skip_tower,
@@ -169,7 +191,7 @@ gclue_mozilla_create_query (GClueMozilla *mozilla,
JsonNode *root_node;
char *data;
gsize data_len;
- const char *uri;
+ const char *uri, *radiotype;
guint n_non_ignored_bsss;
GList *iter;
gint64 mcc, mnc;
@@ -198,17 +220,10 @@ gclue_mozilla_create_query (GClueMozilla *mozilla,
}
if (mozilla->priv->tower_valid && !skip_tower &&
+ towertec_to_radiotype (mozilla->priv->tower.tec, &radiotype) &&
operator_code_to_mcc_mnc (mozilla->priv->tower.opc, &mcc, &mnc)) {
- if (mozilla->priv->tower.tec == GCLUE_TOWER_TEC_4G) {
- json_builder_set_member_name (builder, "radioType");
- json_builder_add_string_value (builder, "lte");
- } else if (mozilla->priv->tower.tec == GCLUE_TOWER_TEC_3G) {
- json_builder_set_member_name (builder, "radioType");
- json_builder_add_string_value (builder, "wcdma");
- } else if (mozilla->priv->tower.tec == GCLUE_TOWER_TEC_2G) {
- json_builder_set_member_name (builder, "radioType");
- json_builder_add_string_value (builder, "gsm");
- }
+ json_builder_set_member_name (builder, "radioType");
+ json_builder_add_string_value (builder, radiotype);
json_builder_set_member_name (builder, "cellTowers");
json_builder_begin_array (builder);
@@ -223,17 +238,8 @@ gclue_mozilla_create_query (GClueMozilla *mozilla,
json_builder_add_int_value (builder, mnc);
json_builder_set_member_name (builder, "locationAreaCode");
json_builder_add_int_value (builder, mozilla->priv->tower.lac);
- if (mozilla->priv->tower.tec == GCLUE_TOWER_TEC_4G) {
- json_builder_set_member_name (builder, "radioType");
- json_builder_add_string_value (builder, "lte");
- } else if (mozilla->priv->tower.tec == GCLUE_TOWER_TEC_3G) {
- json_builder_set_member_name (builder, "radioType");
- json_builder_add_string_value (builder, "wcdma");
- } else if (mozilla->priv->tower.tec == GCLUE_TOWER_TEC_2G) {
- json_builder_set_member_name (builder, "radioType");
- json_builder_add_string_value (builder, "gsm");
- }
-
+ json_builder_set_member_name (builder, "radioType");
+ json_builder_add_string_value (builder, radiotype);
json_builder_end_object (builder);
@@ -673,7 +679,9 @@ gclue_mozilla_set_tower (GClueMozilla *mozilla,
{
g_return_if_fail (GCLUE_IS_MOZILLA (mozilla));
- if (!tower) {
+ if (!tower ||
+ !(tower->tec > GCLUE_TOWER_TEC_UNKNOWN
+ && tower->tec <= GCLUE_TOWER_TEC_MAX_VALID)) {
mozilla->priv->tower_valid = FALSE;
return;
}