/**
- * 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 ();
/**
*/
static const struct GNUNET_CONFIGURATION_Handle *cfg;
+/**
+ * Path to sensor definitions directory
+ */
+static char *sensor_dir;
+
/**
* Hashmap of loaded sensor definitions
*/
GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_YES);
peerstore = NULL;
}
+ if (NULL != sensor_dir)
+ {
+ GNUNET_free (sensor_dir);
+ sensor_dir = NULL;
+ }
GNUNET_SCHEDULER_shutdown ();
}
{
struct GNUNET_SENSOR_SensorInfo *sensorinfo = cls;
int check_result;
- char *sensors_dir;
char *process_path;
sensorinfo->execution_task =
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);
}
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);
};
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);
*/
static const struct GNUNET_CONFIGURATION_Handle *cfg;
+/**
+ * Path to sensor definition directory
+ */
+static char *sensor_dir;
+
/**
* Hashmap of known sensors
*/
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");
}
* 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 ()
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++)
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;
}
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;
"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 |
GNUNET_DISK_PERM_GROUP_EXEC);
GNUNET_free (script_path);
}
- GNUNET_free (sensors_dir);
GNUNET_free (sensor_path);
return GNUNET_OK;
}
{&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);
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;
}
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
sensor->execution_task = GNUNET_SCHEDULER_NO_TASK;
//running
sensor->running = GNUNET_NO;
-
return sensor;
}
}
-/*
- * 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;
/**
- * 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;
}
};
+/**
+ * Path to sensor definition directory
+ */
+static char *sensor_dir;
+
/**
* Global hashmap of defined sensors
*/
peerstore = NULL;
}
GNUNET_SENSOR_destroy_sensors (sensors);
+ if (NULL != sensor_dir)
+ {
+ GNUNET_free (sensor_dir);
+ sensor_dir = NULL;
+ }
GNUNET_SCHEDULER_shutdown ();
}
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;
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,
GNUNET_DISK_fn_read (sensorscript_path, dummy, sensorscript_size);
GNUNET_free (sensorscript_path);
}
- GNUNET_free (sensor_dir);
GNUNET_free (sensor_path);
return msg;
}
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,