From 9ea2094c766b8a62bcfb8eebbda7746009750387 Mon Sep 17 00:00:00 2001 From: Omar Tarabai Date: Thu, 7 Aug 2014 12:03:36 +0000 Subject: [PATCH] minor fix --- src/include/gnunet_sensor_util_lib.h | 14 ++++---- src/sensor/gnunet-service-sensor.c | 22 +++++++++--- src/sensor/gnunet-service-sensor_update.c | 35 +++++++++++++------ src/sensor/sensor.conf.in | 6 +++- src/sensor/sensor_util_lib.c | 28 +++++++-------- .../gnunet-service-sensordashboard.c | 20 ++++++++--- 6 files changed, 83 insertions(+), 42 deletions(-) diff --git a/src/include/gnunet_sensor_util_lib.h b/src/include/gnunet_sensor_util_lib.h index 3ff6097c7..0d205877c 100644 --- a/src/include/gnunet_sensor_util_lib.h +++ b/src/include/gnunet_sensor_util_lib.h @@ -351,21 +351,23 @@ GNUNET_SENSOR_version_compare (uint16_t v1_major, uint16_t v1_minor, /** - * Reads sensor definitions from local data files + * Reads sensor definitions from given sensor directory. * + * @param sensordir Path to sensor directory. * @return a multihashmap of loaded sensors */ struct GNUNET_CONTAINER_MultiHashMap * -GNUNET_SENSOR_load_all_sensors (); +GNUNET_SENSOR_load_all_sensors (char *sensor_dir); -/* - * Get path to the directory containing the sensor definition files +/** + * Get path to the default directory containing the sensor definition files with + * a trailing directory separator. * - * @return sensor files directory string + * @return Default sensor files directory full path */ char * -GNUNET_SENSOR_get_sensor_dir (); +GNUNET_SENSOR_get_default_sensor_dir (); /** diff --git a/src/sensor/gnunet-service-sensor.c b/src/sensor/gnunet-service-sensor.c index 1df300410..4dc366cc1 100644 --- a/src/sensor/gnunet-service-sensor.c +++ b/src/sensor/gnunet-service-sensor.c @@ -35,6 +35,11 @@ */ static const struct GNUNET_CONFIGURATION_Handle *cfg; +/** + * Path to sensor definitions directory + */ +static char *sensor_dir; + /** * Hashmap of loaded sensor definitions */ @@ -123,6 +128,11 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_YES); peerstore = NULL; } + if (NULL != sensor_dir) + { + GNUNET_free (sensor_dir); + sensor_dir = NULL; + } GNUNET_SCHEDULER_shutdown (); } @@ -479,7 +489,6 @@ sensor_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { struct GNUNET_SENSOR_SensorInfo *sensorinfo = cls; int check_result; - char *sensors_dir; char *process_path; sensorinfo->execution_task = @@ -522,12 +531,11 @@ sensor_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) if (GNUNET_SYSERR == check_result) { //search in sensor directory - sensors_dir = GNUNET_SENSOR_get_sensor_dir (); GNUNET_free (process_path); - GNUNET_asprintf (&process_path, "%s%s-files%s%s", sensors_dir, + GNUNET_asprintf (&process_path, "%s%s-files%s%s", sensor_dir, sensorinfo->name, DIR_SEPARATOR_STR, sensorinfo->ext_process); - GNUNET_free (sensors_dir); + GNUNET_free (sensor_dir); check_result = GNUNET_OS_check_helper_binary (process_path, GNUNET_NO, NULL); } @@ -611,7 +619,7 @@ schedule_all_sensors () static void start () { - sensors = GNUNET_SENSOR_load_all_sensors (); + sensors = GNUNET_SENSOR_load_all_sensors (sensor_dir); schedule_all_sensors (); SENSOR_reporting_value_start (cfg, sensors); SENSOR_reporting_anomaly_start (cfg, sensors); @@ -640,6 +648,10 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, }; cfg = c; + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_filename (cfg, "SENSOR", "SENSOR_DIR", + &sensor_dir)) + sensor_dir = GNUNET_SENSOR_get_default_sensor_dir (); statistics = GNUNET_STATISTICS_create ("sensor", cfg); GNUNET_CRYPTO_get_peer_identity (cfg, &peerid); peerstore = GNUNET_PEERSTORE_connect (cfg); diff --git a/src/sensor/gnunet-service-sensor_update.c b/src/sensor/gnunet-service-sensor_update.c index 1d8b32832..cbc63308d 100644 --- a/src/sensor/gnunet-service-sensor_update.c +++ b/src/sensor/gnunet-service-sensor_update.c @@ -130,6 +130,11 @@ struct UpdatePoint */ static const struct GNUNET_CONFIGURATION_Handle *cfg; +/** + * Path to sensor definition directory + */ +static char *sensor_dir; + /** * Hashmap of known sensors */ @@ -249,6 +254,11 @@ SENSOR_update_stop () GNUNET_CADET_disconnect (cadet); cadet = NULL; } + if (NULL != sensor_dir) + { + GNUNET_free (sensor_dir); + sensor_dir = NULL; + } LOG (GNUNET_ERROR_TYPE_DEBUG, "Sensor update module stopped.\n"); } @@ -427,7 +437,7 @@ check_for_updates (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) * Function that reads and validates (correctness not connectivity) of available * sensor update points. * - * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure + * @return number of update points loaded successfully */ static int load_update_points () @@ -439,14 +449,13 @@ load_update_points () int len; struct GNUNET_CRYPTO_EddsaPublicKey public_key; struct UpdatePoint *up; + int count = 0; if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg, "sensor", "UPDATE_POINTS", &points_list)) { - GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, "sensor", - "UPDATE_POINTS"); - return GNUNET_SYSERR; + return 0; } points_list_len = strlen (points_list) + 1; for (i = 0; i < points_list_len; i++) @@ -478,11 +487,12 @@ load_update_points () up->expected_sensor_updates = 0; up->failed = GNUNET_NO; GNUNET_CONTAINER_DLL_insert (up_head, up_tail, up); + count++; LOG (GNUNET_ERROR_TYPE_DEBUG, "Loaded update point `%s'.\n", GNUNET_i2s_full (&up->peer_id)); } GNUNET_free (points_list); - return (NULL == up_head) ? GNUNET_SYSERR : GNUNET_OK; + return count; } @@ -598,7 +608,6 @@ static int update_sensor (char *sensorname, void *sensorfile, uint16_t sensorfile_size, char *scriptname, void *scriptfile, uint16_t scriptfile_size) { - char *sensors_dir; char *sensor_path; char *script_path; @@ -607,8 +616,7 @@ update_sensor (char *sensorname, void *sensorfile, uint16_t sensorfile_size, "Sensor file size: %d\n" "Script name: %s\n" "Script file size: %d.\n", sensorname, sensorfile_size, (NULL == scriptname) ? "None" : scriptname, scriptfile_size); - sensors_dir = GNUNET_SENSOR_get_sensor_dir (); - GNUNET_asprintf (&sensor_path, "%s%s", sensors_dir, sensorname); + GNUNET_asprintf (&sensor_path, "%s%s", sensor_dir, sensorname); GNUNET_DISK_fn_write (sensor_path, sensorfile, sensorfile_size, GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_GROUP_READ | GNUNET_DISK_PERM_OTHER_READ | @@ -627,7 +635,6 @@ update_sensor (char *sensorname, void *sensorfile, uint16_t sensorfile_size, GNUNET_DISK_PERM_GROUP_EXEC); GNUNET_free (script_path); } - GNUNET_free (sensors_dir); GNUNET_free (sensor_path); return GNUNET_OK; } @@ -756,11 +763,16 @@ SENSOR_update_start (const struct GNUNET_CONFIGURATION_Handle *c, {&handle_sensor_full, GNUNET_MESSAGE_TYPE_SENSOR_FULL, 0}, {NULL, 0, 0} }; + int up_count; GNUNET_assert (NULL != s); cfg = c; sensors = s; reset_cb = cb; + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_filename (cfg, "SENSOR", "SENSOR_DIR", + &sensor_dir)) + sensor_dir = GNUNET_SENSOR_get_default_sensor_dir (); cadet = GNUNET_CADET_connect (cfg, NULL, NULL, &cadet_channel_destroyed, cadet_handlers, NULL); @@ -770,9 +782,10 @@ SENSOR_update_start (const struct GNUNET_CONFIGURATION_Handle *c, SENSOR_update_stop (); return GNUNET_SYSERR; } - if (GNUNET_OK != load_update_points ()) + up_count = load_update_points (); + LOG (GNUNET_ERROR_TYPE_DEBUG, "Loaded %d update points.\n", up_count); + if (0 == up_count) { - LOG (GNUNET_ERROR_TYPE_ERROR, "Failed to load update points.\n"); SENSOR_update_stop (); return GNUNET_SYSERR; } diff --git a/src/sensor/sensor.conf.in b/src/sensor/sensor.conf.in index fcb914afe..60a62b650 100644 --- a/src/sensor/sensor.conf.in +++ b/src/sensor/sensor.conf.in @@ -5,8 +5,12 @@ UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-sensor.sock UNIX_MATCH_UID = NO UNIX_MATCH_GID = YES +# Path to directory containing sensor definitions. +# If not set, will load from default location. +#SENSOR_DIR = + # Space separated list of trusted peers running update points -#UPDATE_POINTS = NCEKA096482PC84GFTG61EHAVXY3BQDTPB5FANATQD5CDADJ2HP0 +UPDATE_POINTS = [sensor-analysis] MODEL = gaussian diff --git a/src/sensor/sensor_util_lib.c b/src/sensor/sensor_util_lib.c index d12698c3a..136bb288a 100644 --- a/src/sensor/sensor_util_lib.c +++ b/src/sensor/sensor_util_lib.c @@ -290,7 +290,6 @@ load_sensor_from_cfg (struct GNUNET_CONFIGURATION_Handle *cfg, sensor->execution_task = GNUNET_SCHEDULER_NO_TASK; //running sensor->running = GNUNET_NO; - return sensor; } @@ -434,14 +433,14 @@ reload_sensors_dir_cb (void *cls, const char *filename) } -/* - * Get path to the directory containing the sensor definition files with a - * trailing directory separator. +/** + * Get path to the default directory containing the sensor definition files with + * a trailing directory separator. * - * @return sensor files directory full path + * @return Default sensor files directory full path */ char * -GNUNET_SENSOR_get_sensor_dir () +GNUNET_SENSOR_get_default_sensor_dir () { char *datadir; char *sensordir; @@ -454,27 +453,26 @@ GNUNET_SENSOR_get_sensor_dir () /** - * Reads sensor definitions from local data files + * Reads sensor definitions from given sensor directory. * + * @param sensordir Path to sensor directory. * @return a multihashmap of loaded sensors */ struct GNUNET_CONTAINER_MultiHashMap * -GNUNET_SENSOR_load_all_sensors () +GNUNET_SENSOR_load_all_sensors (char *sensor_dir) { - char *sensordir; struct GNUNET_CONTAINER_MultiHashMap *sensors; + GNUNET_assert (NULL != sensor_dir); sensors = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO); - sensordir = GNUNET_SENSOR_get_sensor_dir (); LOG (GNUNET_ERROR_TYPE_INFO, - "Loading sensor definitions from directory `%s'\n", sensordir); + "Loading sensor definitions from directory `%s'\n", sensor_dir); GNUNET_assert (GNUNET_YES == - GNUNET_DISK_directory_test (sensordir, GNUNET_YES)); + GNUNET_DISK_directory_test (sensor_dir, GNUNET_YES)); /* read all files in sensors directory */ - GNUNET_DISK_directory_scan (sensordir, &reload_sensors_dir_cb, sensors); + GNUNET_DISK_directory_scan (sensor_dir, &reload_sensors_dir_cb, sensors); LOG (GNUNET_ERROR_TYPE_INFO, "Loaded %d sensors from directory `%s'\n", - GNUNET_CONTAINER_multihashmap_size (sensors), sensordir); - GNUNET_free (sensordir); + GNUNET_CONTAINER_multihashmap_size (sensors), sensor_dir); return sensors; } diff --git a/src/sensordashboard/gnunet-service-sensordashboard.c b/src/sensordashboard/gnunet-service-sensordashboard.c index 52302603b..6c63ad828 100644 --- a/src/sensordashboard/gnunet-service-sensordashboard.c +++ b/src/sensordashboard/gnunet-service-sensordashboard.c @@ -133,6 +133,11 @@ struct ClientSensorReading }; +/** + * Path to sensor definition directory + */ +static char *sensor_dir; + /** * Global hashmap of defined sensors */ @@ -235,6 +240,11 @@ cleanup_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) peerstore = NULL; } GNUNET_SENSOR_destroy_sensors (sensors); + if (NULL != sensor_dir) + { + GNUNET_free (sensor_dir); + sensor_dir = NULL; + } GNUNET_SCHEDULER_shutdown (); } @@ -584,7 +594,6 @@ create_full_sensor_msg (char *sensorname) struct GNUNET_HashCode key; struct GNUNET_SENSOR_SensorInfo *sensor; struct GNUNET_SENSOR_SensorFullMessage *msg; - char *sensor_dir; char *sensor_path; char *sensorscript_path; uint64_t sensorname_size; @@ -598,7 +607,6 @@ create_full_sensor_msg (char *sensorname) sensor = GNUNET_CONTAINER_multihashmap_get (sensors, &key); if (NULL == sensor) return NULL; - sensor_dir = GNUNET_SENSOR_get_sensor_dir (); GNUNET_asprintf (&sensor_path, "%s%s", sensor_dir, sensorname); if (GNUNET_OK != GNUNET_DISK_file_size (sensor_path, &sensorfile_size, GNUNET_NO, @@ -646,7 +654,6 @@ create_full_sensor_msg (char *sensorname) GNUNET_DISK_fn_read (sensorscript_path, dummy, sensorscript_size); GNUNET_free (sensorscript_path); } - GNUNET_free (sensor_dir); GNUNET_free (sensor_path); return msg; } @@ -739,7 +746,12 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, GNUNET_APPLICATION_TYPE_SENSORUPDATE, GNUNET_APPLICATION_TYPE_END }; - sensors = GNUNET_SENSOR_load_all_sensors (); + + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_filename (cfg, "SENSOR", "SENSOR_DIR", + &sensor_dir)) + sensor_dir = GNUNET_SENSOR_get_default_sensor_dir (); + sensors = GNUNET_SENSOR_load_all_sensors (sensor_dir); GNUNET_assert (NULL != sensors); cadet = GNUNET_CADET_connect (cfg, NULL, &cadet_channel_created, -- 2.25.1