/*
This file is part of GNUnet
- (C)
+ Copyright (C)
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
/**
- * @file include/gnunet_sensor_service.h
- * @brief API to the sensor service
* @author Omar Tarabai
+ *
+ * @file
+ * API to the sensor service
+ *
+ * @defgroup sensor Sensor service
+ *
+ * @{
*/
+
#ifndef GNUNET_SENSOR_SERVICE_H
#define GNUNET_SENSOR_SERVICE_H
-#include "platform.h"
+#include "gnunet_common.h"
#include "gnunet_util_lib.h"
#ifdef __cplusplus
*/
struct GNUNET_SENSOR_Handle;
+/**
+ * Context for an iteration request.
+ */
+struct GNUNET_SENSOR_IterateContext;
+
+/**
+ * Context of a force anomaly request
+ */
+struct GNUNET_SENSOR_ForceAnomalyContext;
+
/**
* Structure containing brief info about sensor
*/
};
-GNUNET_NETWORK_STRUCT_BEGIN
-
-/**
- * Used to communicate sensor readings to
- * collection points (SENSORDASHBAORD service)
- */
-struct GNUNET_SENSOR_Reading
-{
-
- /**
- * GNUNET general message header
- */
- struct GNUNET_MessageHeader *header;
-
- /**
- * Size of the sensor name value, allocated
- * at position 0 after this struct
- */
- size_t sensorname_size;
-
- /**
- * First part of sensor version number
- */
- uint16_t sensorversion_major;
-
- /**
- * Second part of sensor version number
- */
- uint16_t sensorversion_minor;
-
- /**
- * Timestamp of recorded reading
- */
- uint64_t timestamp;
-
- /**
- * Size of reading value, allocation
- * at poistion 1 after this struct
- */
- size_t value_size;
-
-};
-GNUNET_NETWORK_STRUCT_END
-
/**
- * Type of an iterator over sensor definitions.
+ * Sensor iterate request callback.
*
* @param cls closure
- * @param hello hello message for the peer (can be NULL)
+ * @param sensor Brief sensor information
* @param error message
*/
-typedef void (*GNUNET_SENSOR_SensorIteratorCB) (void *cls,
- const struct SensorInfoShort *sensor,
- const char *err_msg);
+typedef void (*GNUNET_SENSOR_SensorIterateCB) (void *cls,
+ const struct SensorInfoShort *
+ sensor, const char *err_msg);
+
/**
* Continuation called with a status result.
* @param cls closure
* @param emsg error message, NULL on success
*/
-typedef void (*GNUNET_SENSOR_Continuation)(void *cls,
- const char *emsg);
+typedef void (*GNUNET_SENSOR_Continuation) (void *cls, const char *emsg);
+
+
+/**
+ * Disconnect from the sensor service
+ *
+ * @param h handle to disconnect
+ */
+void
+GNUNET_SENSOR_disconnect (struct GNUNET_SENSOR_Handle *h);
+
/**
* Connect to the sensor service.
struct GNUNET_SENSOR_Handle *
GNUNET_SENSOR_connect (const struct GNUNET_CONFIGURATION_Handle *cfg);
+
/**
- * Disconnect from the sensor service
+ * Cancel an iteration request.
+ * This should be called before the iterate callback is called with a NULL value.
*
- * @param h handle to disconnect
+ * @param ic context of the iterator to cancel
*/
void
-GNUNET_SENSOR_disconnect(struct GNUNET_SENSOR_Handle *h);
+GNUNET_SENSOR_iterate_cancel (struct GNUNET_SENSOR_IterateContext
+ *ic);
+
/**
- * Client asking to iterate all available sensors
+ * Get one or all sensors loaded by the sensor service.
+ * The callback will be called with each sensor received and once with a NULL
+ * value to signal end of iteration.
*
* @param h Handle to SENSOR service
* @param timeout how long to wait until timing out
- * @param sensorname information on one sensor only, can be NULL to get all
- * @param sensorname_len length of the sensorname parameter
- * @param callback the method to call for each sensor
+ * @param sensorname Name of the required sensor, NULL to get all
+ * @param callback the function to call for each sensor
* @param callback_cls closure for callback
* @return iterator context
*/
-struct GNUNET_SENSOR_SensorIteratorContext *
-GNUNET_SENSOR_iterate_sensors (struct GNUNET_SENSOR_Handle *h,
- struct GNUNET_TIME_Relative timeout,
- const char* sensorname, size_t sensorname_len,
- GNUNET_SENSOR_SensorIteratorCB callback, void *callback_cls);
+struct GNUNET_SENSOR_IterateContext *
+GNUNET_SENSOR_iterate (struct GNUNET_SENSOR_Handle *h,
+ struct GNUNET_TIME_Relative timeout,
+ const char *sensor_name,
+ GNUNET_SENSOR_SensorIterateCB callback,
+ void *callback_cls);
+
+
+/**
+ * Cancel a force anomaly request.
+ *
+ * @param fa Force anomaly context returned by GNUNET_SENSOR_force_anomaly()
+ */
+void
+GNUNET_SENSOR_force_anomaly_cancel (struct GNUNET_SENSOR_ForceAnomalyContext
+ *fa);
+
+
+/**
+ * Force an anomaly status change on a given sensor. If the sensor reporting
+ * module is running, this will trigger the usual reporting logic, therefore,
+ * please only use this in a test environment.
+ *
+ * Also, if the sensor analysis module is running, it might conflict and cause
+ * undefined behaviour if it detects a real anomaly.
+ *
+ * @param h Service handle
+ * @param sensor_name Sensor name to set the anomaly status
+ * @param anomalous The desired status: #GNUNET_YES / #GNUNET_NO
+ * @param cont Continuation function to be called after the request is sent
+ * @param cont_cls Closure for cont
+ */
+struct GNUNET_SENSOR_ForceAnomalyContext *
+GNUNET_SENSOR_force_anomaly (struct GNUNET_SENSOR_Handle *h, char *sensor_name,
+ int anomalous, GNUNET_SENSOR_Continuation cont,
+ void *cont_cls);
+
#if 0 /* keep Emacsens' auto-indent happy */
{
#endif
#endif
+
+/** @} */ /* end of group */