Compare commits
No commits in common. "0cab4dc449894e0db22d6a301ef681a46035c092" and "bc1d06ee17657f1d59a9d5ba98f9a8a8ac04509a" have entirely different histories.
0cab4dc449
...
bc1d06ee17
17
Makefile
17
Makefile
@ -1,17 +0,0 @@
|
|||||||
CC = clang
|
|
||||||
CFLAGS_GEOCLUE = -I/usr/include/libgeoclue-2.0 -I/usr/include/gio-unix-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/sysprof-6 -pthread
|
|
||||||
CFLAGS = -Wall -Wextra -g $(CFLAGS_GEOCLUE) -ljson-c -lcurl -lgeoclue-2 -lglib-2.0 -lgobject-2.0
|
|
||||||
SRCS = src/main.c
|
|
||||||
|
|
||||||
phonetrackd := phonetrackd
|
|
||||||
|
|
||||||
$(phonetrackd): $(SRCS)
|
|
||||||
$(CC) $(CFLAGS) $(SRCS) -o $(phonetrackd)
|
|
||||||
|
|
||||||
all: $(phonetrackd)
|
|
||||||
|
|
||||||
install: $(phonetrackd)
|
|
||||||
cp $(phonetrackd) /usr/local/bin/
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm $(phonetrackd)
|
|
@ -1,4 +1,2 @@
|
|||||||
# phonetrack-linux
|
# phonetrack-linux
|
||||||
|
|
||||||
Basically a position logger/reporter but for Linux devices.
|
|
||||||
This is still a work in progress aiming to have feature parity with the PhoneTrack Android app.
|
|
||||||
|
104
src/main.c
104
src/main.c
@ -1,104 +0,0 @@
|
|||||||
#include <json-c/json.h>
|
|
||||||
#include <curl/curl.h>
|
|
||||||
#include <geoclue.h>
|
|
||||||
|
|
||||||
GClueSimple *geoclue_simple = NULL;
|
|
||||||
GClueClient *geoclue_client = NULL;
|
|
||||||
GMainLoop *main_loop;
|
|
||||||
|
|
||||||
gboolean on_location_timeout(gpointer user_data) {
|
|
||||||
(void) user_data;
|
|
||||||
|
|
||||||
g_clear_object(&geoclue_client);
|
|
||||||
g_clear_object(&geoclue_simple);
|
|
||||||
g_main_loop_quit(main_loop);
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void get_location(GClueSimple *simple) {
|
|
||||||
(void) simple;
|
|
||||||
|
|
||||||
GClueLocation *location;
|
|
||||||
gdouble latitude, longitude, altitude, accuracy;
|
|
||||||
GVariant *timestamp;
|
|
||||||
// const char *description;
|
|
||||||
|
|
||||||
location = gclue_simple_get_location(simple);
|
|
||||||
json_object *location_json = json_object_new_object();
|
|
||||||
|
|
||||||
latitude = gclue_location_get_latitude(location);
|
|
||||||
longitude = gclue_location_get_longitude(location);
|
|
||||||
altitude = gclue_location_get_altitude(location);
|
|
||||||
accuracy = gclue_location_get_accuracy(location);
|
|
||||||
|
|
||||||
json_object *latitude_json = json_object_new_double(latitude);
|
|
||||||
json_object_object_add(location_json, "lat", latitude_json);
|
|
||||||
json_object *longitude_json = json_object_new_double(longitude);
|
|
||||||
json_object_object_add(location_json, "lon", longitude_json);
|
|
||||||
json_object *altitude_json = json_object_new_double(altitude);
|
|
||||||
json_object_object_add(location_json, "alt", altitude_json);
|
|
||||||
json_object *accuracy_json = json_object_new_double(accuracy);
|
|
||||||
json_object_object_add(location_json, "acc", accuracy_json);
|
|
||||||
timestamp = gclue_location_get_timestamp(location);
|
|
||||||
if (timestamp) {
|
|
||||||
unsigned long timestamp_sec, timestamp_usec;
|
|
||||||
g_variant_get(timestamp, "(tt)", ×tamp_sec, ×tamp_usec);
|
|
||||||
|
|
||||||
json_object *timestamp_json = json_object_new_int(timestamp_sec);
|
|
||||||
json_object_object_add(location_json, "tst", timestamp_json);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *location_payload = json_object_to_json_string(location_json);
|
|
||||||
printf("%s\n", location_payload);
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_geoclue_client_active(GClueClient *geoclue_client, GParamSpec *parameter_spec, gpointer user_data) {
|
|
||||||
(void) parameter_spec;
|
|
||||||
(void) user_data;
|
|
||||||
|
|
||||||
if (gclue_client_get_active(geoclue_client))
|
|
||||||
return;
|
|
||||||
|
|
||||||
printf("Geolocation disabled, can't continue... \n");
|
|
||||||
on_location_timeout(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_geoclue_ready(GObject *source_object, GAsyncResult *result, gpointer user_data) {
|
|
||||||
(void) source_object;
|
|
||||||
(void) user_data;
|
|
||||||
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
geoclue_simple = gclue_simple_new_with_thresholds_finish(result, &error);
|
|
||||||
if (error != NULL) {
|
|
||||||
printf("Couldn't connect to the GeoClue service : %s\n", error->message);
|
|
||||||
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
geoclue_client = gclue_simple_get_client(geoclue_simple);
|
|
||||||
if (geoclue_client) {
|
|
||||||
g_object_ref(geoclue_client);
|
|
||||||
printf("GeoClue client ready ! \n");
|
|
||||||
|
|
||||||
g_signal_connect(geoclue_client, "notify::active", G_CALLBACK(on_geoclue_client_active), NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
get_location(geoclue_simple);
|
|
||||||
|
|
||||||
g_signal_connect(geoclue_client, "notify::location", G_CALLBACK(get_location), NULL);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, const char *argv[]) {
|
|
||||||
(void) argc;
|
|
||||||
(void) argv;
|
|
||||||
|
|
||||||
gclue_simple_new("phonetrackd", GCLUE_ACCURACY_LEVEL_EXACT, NULL, on_geoclue_ready, NULL);
|
|
||||||
|
|
||||||
main_loop = g_main_loop_new(NULL, FALSE);
|
|
||||||
g_main_loop_run(main_loop);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user