summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngus Ainslie <angus@akkea.ca>2020-12-27 00:12:18 +0000
committerAngus Ainslie <angus@akkea.ca>2021-01-09 08:56:24 -0800
commit6ebfc32f636b6e48ffab32c6286348166a351cd2 (patch)
tree5a8a68482b0fdf77473d4ec6be650600dce6c789
parent943f4af2870a1b87ec47f4a07eca057308d4198c (diff)
downloadgeoclue-6ebfc32f636b6e48ffab32c6286348166a351cd2.tar.gz
src/gclue-nmea-source.c: add a unix socket file option
Make the unix socket option and an option to specify the path. Signed-off-by: Angus Ainslie <angus@akkea.ca>
-rw-r--r--data/geoclue.conf.in3
-rw-r--r--src/gclue-config.c14
-rw-r--r--src/gclue-config.h4
-rw-r--r--src/gclue-main.c10
-rw-r--r--src/gclue-nmea-source.c7
5 files changed, 38 insertions, 0 deletions
diff --git a/data/geoclue.conf.in b/data/geoclue.conf.in
index bebe471..5478bc2 100644
--- a/data/geoclue.conf.in
+++ b/data/geoclue.conf.in
@@ -18,6 +18,9 @@ whitelist=@demo_agent@gnome-shell;io.elementary.desktop.agent-geoclue2
# Fetch location from NMEA sources on local network?
enable=true
+# use aa nmea unix socket as the data source
+# nmea-socket=/var/run/gps-share.sock
+
# 3G source configuration options
[3g]
diff --git a/src/gclue-config.c b/src/gclue-config.c
index 95f78df..8e07910 100644
--- a/src/gclue-config.c
+++ b/src/gclue-config.c
@@ -45,6 +45,7 @@ struct _GClueConfigPrivate
gboolean enable_wifi_source;
char *wifi_submit_url;
char *wifi_submit_nick;
+ char *nmea_socket;
GList *app_configs;
};
@@ -433,6 +434,12 @@ gclue_config_is_system_component (GClueConfig *config,
}
const char *
+gclue_config_get_nmea_socket (GClueConfig *config)
+{
+ return config->priv->nmea_socket;
+}
+
+const char *
gclue_config_get_wifi_url (GClueConfig *config)
{
return config->priv->wifi_url;
@@ -495,6 +502,13 @@ gclue_config_get_enable_nmea_source (GClueConfig *config)
}
void
+gclue_config_set_nmea_socket (GClueConfig *config,
+ const char *nmea_socket)
+{
+ config->priv->nmea_socket = g_strdup(nmea_socket);
+}
+
+void
gclue_config_set_wifi_submit_data (GClueConfig *config,
gboolean submit)
{
diff --git a/src/gclue-config.h b/src/gclue-config.h
index 6dc10c9..bcf0bef 100644
--- a/src/gclue-config.h
+++ b/src/gclue-config.h
@@ -73,6 +73,10 @@ GClueAppPerm gclue_config_get_app_perm (GClueConfig *config
GClueClientInfo *app_info);
gboolean gclue_config_is_system_component (GClueConfig *config,
const char *desktop_id);
+const char * gclue_config_get_nmea_socket (GClueConfig *config);
+void gclue_config_set_nmea_socket (GClueConfig *config,
+ const char *nmea_socket);
+
const char * gclue_config_get_wifi_url (GClueConfig *config);
const char * gclue_config_get_wifi_submit_url (GClueConfig *config);
const char * gclue_config_get_wifi_submit_nick (GClueConfig *config);
diff --git a/src/gclue-main.c b/src/gclue-main.c
index 811666f..d14cadc 100644
--- a/src/gclue-main.c
+++ b/src/gclue-main.c
@@ -36,6 +36,7 @@ static gboolean version = FALSE;
static gint inactivity_timeout = 60;
static gboolean submit_data = FALSE;
static char *submit_nick = NULL;
+static char *nmea_socket = NULL;
static GOptionEntry entries[] =
{
@@ -67,6 +68,13 @@ static GOptionEntry entries[] =
&submit_nick,
N_("Nickname to submit network data under (2-32 characters)"),
"NICK" },
+ { "nmea-socket",
+ 'u',
+ 0,
+ G_OPTION_ARG_STRING,
+ &nmea_socket,
+ N_("Path to nmea UNIX socket"),
+ NULL },
{ NULL }
};
@@ -180,6 +188,8 @@ main (int argc, char **argv)
gclue_config_set_wifi_submit_data (config, submit_data);
if (submit_nick != NULL)
gclue_config_set_wifi_submit_nick (config, submit_nick);
+ if (nmea_socket != NULL)
+ gclue_config_set_nmea_socket (config, nmea_socket);
owner_id = g_bus_own_name (G_BUS_TYPE_SYSTEM,
BUS_NAME,
diff --git a/src/gclue-nmea-source.c b/src/gclue-nmea-source.c
index 9f7e6cf..bf0bea8 100644
--- a/src/gclue-nmea-source.c
+++ b/src/gclue-nmea-source.c
@@ -23,6 +23,7 @@
#include <stdlib.h>
#include <glib.h>
+#include "gclue-config.h"
#include "gclue-nmea-source.h"
#include "gclue-location.h"
#include "config.h"
@@ -675,6 +676,8 @@ gclue_nmea_source_init (GClueNMEASource *source)
AvahiServiceBrowser *service_browser;
const AvahiPoll *poll_api;
AvahiGLibPoll *glib_poll;
+ const char *nmea_socket;
+ GClueConfig *config;
int error;
source->priv = G_TYPE_INSTANCE_GET_PRIVATE ((source),
@@ -687,6 +690,10 @@ gclue_nmea_source_init (GClueNMEASource *source)
priv->cancellable = g_cancellable_new ();
+ config = gclue_config_get_singleton ();
+
+ nmea_socket = gclue_config_get_nmea_socket (config);
+
avahi_client_new (poll_api,
0,
client_callback,