diff options
author | Shoji Keita <awaittrot@shjk.jp> | 2022-11-01 22:39:17 +0900 |
---|---|---|
committer | Shoji Keita <awaittrot@shjk.jp> | 2022-11-06 11:10:22 +0900 |
commit | 3f71a67b248c32b9c3db4003901ec52a67f987af (patch) | |
tree | b5ccf4f6d5139aa427b55d6558d8510742bee839 | |
parent | c8a316fd85a0a7f9b91f5953627ba7c5b9a53d04 (diff) | |
download | geoclue-3f71a67b248c32b9c3db4003901ec52a67f987af.tar.gz |
mozilla: Adapt to new /v2/geosubmit API
While old /v1/submit API is still active right now, it has been
deprecated since 2015. It's better to migrate to new /v2/geosubmit API.
-rw-r--r-- | data/geoclue.5.in | 2 | ||||
-rw-r--r-- | data/geoclue.conf.in | 2 | ||||
-rw-r--r-- | src/gclue-config.c | 2 | ||||
-rw-r--r-- | src/gclue-mozilla.c | 65 |
4 files changed, 29 insertions, 42 deletions
diff --git a/data/geoclue.5.in b/data/geoclue.5.in index b6a5795..c9210f9 100644 --- a/data/geoclue.5.in +++ b/data/geoclue.5.in @@ -76,7 +76,7 @@ Submit data to Mozilla Location Service If set to true, geoclue will automatically submit network data to Mozilla each time it gets a GPS lock. .IP -.B submission-url=\fIhttps://location.services.mozilla.com/v1/submit?key=geoclue +.B submission-url=\fIhttps://location.services.mozilla.com/v2/geosubmit?key=YOUR_KEY .br URL to submission API of Mozilla Location Service .IP diff --git a/data/geoclue.conf.in b/data/geoclue.conf.in index eac32b8..8006cda 100644 --- a/data/geoclue.conf.in +++ b/data/geoclue.conf.in @@ -75,7 +75,7 @@ submit-data=false # URL to submission API of Mozilla Location Service. If not set, defaults to # Mozilla's API with a hardcoded key. To use a custom key, uncomment this URL # while changing YOUR_KEY to your MLS API key. -#submission-url=https://location.services.mozilla.com/v1/submit?key=YOUR_KEY +#submission-url=https://location.services.mozilla.com/v2/geosubmit?key=YOUR_KEY # A nickname to submit network data with. A nickname must be 2-32 characters long. submission-nick=geoclue diff --git a/src/gclue-config.c b/src/gclue-config.c index ff10d58..0819bd0 100644 --- a/src/gclue-config.c +++ b/src/gclue-config.c @@ -220,7 +220,7 @@ load_enable_source_config (GClueConfig *config, } #define DEFAULT_WIFI_URL "https://location.services.mozilla.com/v1/geolocate?key=" MOZILLA_API_KEY -#define DEFAULT_WIFI_SUBMIT_URL "https://location.services.mozilla.com/v1/submit?key=" MOZILLA_API_KEY +#define DEFAULT_WIFI_SUBMIT_URL "https://location.services.mozilla.com/v2/geosubmit?key=" MOZILLA_API_KEY #define DEFAULT_WIFI_SUBMIT_NICK "geoclue" static void diff --git a/src/gclue-mozilla.c b/src/gclue-mozilla.c index d5f7edc..1a51bc2 100644 --- a/src/gclue-mozilla.c +++ b/src/gclue-mozilla.c @@ -394,13 +394,13 @@ gclue_mozilla_create_submit_query (GClueMozilla *mozilla, JsonBuilder *builder; JsonGenerator *generator; JsonNode *root_node; - char *data, *timestr; + char *data; g_autoptr(GList) bss_list = NULL; - const char *url, *nick; + const char *url, *nick, *radiotype; gsize data_len; GList *iter; gdouble lat, lon, accuracy, altitude; - GDateTime *datetime; + guint64 time_ms; gint64 mcc, mnc; GClueConfig *config; @@ -430,12 +430,19 @@ gclue_mozilla_create_submit_query (GClueMozilla *mozilla, json_builder_begin_object (builder); + json_builder_set_member_name (builder, "timestamp"); + time_ms = 1000 * gclue_location_get_timestamp (location); + json_builder_add_int_value (builder, time_ms); + + json_builder_set_member_name (builder, "position"); + json_builder_begin_object (builder); + lat = gclue_location_get_latitude (location); - json_builder_set_member_name (builder, "lat"); + json_builder_set_member_name (builder, "latitude"); json_builder_add_double_value (builder, lat); lon = gclue_location_get_longitude (location); - json_builder_set_member_name (builder, "lon"); + json_builder_set_member_name (builder, "longitude"); json_builder_add_double_value (builder, lon); accuracy = gclue_location_get_accuracy (location); @@ -450,25 +457,13 @@ gclue_mozilla_create_submit_query (GClueMozilla *mozilla, json_builder_add_double_value (builder, altitude); } - datetime = g_date_time_new_from_unix_local - (gclue_location_get_timestamp (location)); - /* We need to be compatible with GLib 2.56 so we cannot use this: - * timestr = g_date_time_format_iso8601 (datetime); - * Construct the format manually instead: */ - timestr = g_date_time_format (datetime, "%Y-%m-%dT%H:%M:%S%:::z"); - json_builder_set_member_name (builder, "time"); - json_builder_add_string_value (builder, timestr); - g_free (timestr); - g_date_time_unref (datetime); - - json_builder_set_member_name (builder, "radioType"); - json_builder_add_string_value (builder, "gsm"); + json_builder_end_object (builder); /* position */ if (mozilla->priv->wifi) { bss_list = gclue_wifi_get_bss_list (mozilla->priv->wifi); } if (bss_list != NULL) { - json_builder_set_member_name (builder, "wifi"); + json_builder_set_member_name (builder, "wifiAccessPoints"); json_builder_begin_array (builder); for (iter = bss_list; iter != NULL; iter = iter->next) { @@ -481,11 +476,11 @@ gclue_mozilla_create_submit_query (GClueMozilla *mozilla, continue; json_builder_begin_object (builder); - json_builder_set_member_name (builder, "key"); + json_builder_set_member_name (builder, "macAddress"); get_bssid_from_bss (bss, mac); json_builder_add_string_value (builder, mac); - json_builder_set_member_name (builder, "signal"); + json_builder_set_member_name (builder, "signalStrength"); strength_dbm = wpa_bss_get_signal (bss); json_builder_add_int_value (builder, strength_dbm); @@ -495,39 +490,31 @@ gclue_mozilla_create_submit_query (GClueMozilla *mozilla, json_builder_end_object (builder); } - json_builder_end_array (builder); /* wifi */ + json_builder_end_array (builder); /* wifiAccessPoints */ } if (mozilla->priv->tower_valid && + towertec_to_radiotype (mozilla->priv->tower.tec, &radiotype) && operator_code_to_mcc_mnc (mozilla->priv->tower.opc, &mcc, &mnc)) { - json_builder_set_member_name (builder, "cell"); + json_builder_set_member_name (builder, "cellTowers"); json_builder_begin_array (builder); json_builder_begin_object (builder); - if (mozilla->priv->tower.tec == GCLUE_TOWER_TEC_4G) { - json_builder_set_member_name (builder, "radio"); - json_builder_add_string_value (builder, "lte"); - } else if (mozilla->priv->tower.tec == GCLUE_TOWER_TEC_3G) { - json_builder_set_member_name (builder, "radio"); - json_builder_add_string_value (builder, "umts"); - } else if (mozilla->priv->tower.tec == GCLUE_TOWER_TEC_2G) { - json_builder_set_member_name (builder, "radio"); - json_builder_add_string_value (builder, "gsm"); - } - - json_builder_set_member_name (builder, "cid"); + json_builder_set_member_name (builder, "radioType"); + json_builder_add_string_value (builder, radiotype); + json_builder_set_member_name (builder, "cellId"); json_builder_add_int_value (builder, mozilla->priv->tower.cell_id); - json_builder_set_member_name (builder, "mcc"); + json_builder_set_member_name (builder, "mobileCountryCode"); json_builder_add_int_value (builder, mcc); - json_builder_set_member_name (builder, "mnc"); + json_builder_set_member_name (builder, "mobileNetworkCode"); json_builder_add_int_value (builder, mnc); - json_builder_set_member_name (builder, "lac"); + json_builder_set_member_name (builder, "locationAreaCode"); json_builder_add_int_value (builder, mozilla->priv->tower.lac); json_builder_end_object (builder); - json_builder_end_array (builder); /* cell */ + json_builder_end_array (builder); /* cellTowers */ } json_builder_end_object (builder); |