From 8fb2088b5105c48353a4b92fb54d6abdf75de45c Mon Sep 17 00:00:00 2001 From: Omar Tarabai Date: Fri, 2 May 2014 15:28:43 +0000 Subject: getting single sensor information --- src/sensor/gnunet-sensor.c | 25 +++++++++++++++++++++---- src/sensor/gnunet-service-sensor.c | 27 +++++++++++++++++---------- 2 files changed, 38 insertions(+), 14 deletions(-) (limited to 'src/sensor') diff --git a/src/sensor/gnunet-sensor.c b/src/sensor/gnunet-sensor.c index ead7c5e0d..0b4dd6da1 100644 --- a/src/sensor/gnunet-sensor.c +++ b/src/sensor/gnunet-sensor.c @@ -29,11 +29,16 @@ static int ret; -/* +/** * option '-a' */ static int get_all; +/** + * option '-g' + */ +static char *get_sensor; + /* * Handle to sensor service */ @@ -106,10 +111,10 @@ run (void *cls, GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task, NULL); + sensor_handle = GNUNET_SENSOR_connect(cfg); + GNUNET_assert(NULL != sensor_handle); if(GNUNET_YES == get_all) { - sensor_handle = GNUNET_SENSOR_connect(cfg); - GNUNET_assert(NULL != sensor_handle); GNUNET_SENSOR_iterate_sensors(sensor_handle, GNUNET_TIME_UNIT_FOREVER_REL, NULL, @@ -117,6 +122,15 @@ run (void *cls, &print_sensor_info, NULL); } + else if(NULL != get_sensor) + { + GNUNET_SENSOR_iterate_sensors(sensor_handle, + GNUNET_TIME_UNIT_FOREVER_REL, + get_sensor, + strlen(get_sensor), + &print_sensor_info, + NULL); + } ret = 0; } @@ -133,8 +147,11 @@ main (int argc, char *const *argv) { static const struct GNUNET_GETOPT_CommandLineOption options[] = { {'a', "all", NULL, - gettext_noop("Retrieve names of all defined sensors"), + gettext_noop("Retrieve information about all defined sensors"), 0, &GNUNET_GETOPT_set_one, &get_all}, + {'g', "get-sensor", NULL, + gettext_noop("Retrieve information about a single sensor"), + 1, &GNUNET_GETOPT_set_string, &get_sensor}, GNUNET_GETOPT_OPTION_END }; return (GNUNET_OK == diff --git a/src/sensor/gnunet-service-sensor.c b/src/sensor/gnunet-service-sensor.c index 5a574f77d..38099b172 100644 --- a/src/sensor/gnunet-service-sensor.c +++ b/src/sensor/gnunet-service-sensor.c @@ -320,7 +320,7 @@ add_sensor_to_hashmap(struct SensorInfo *sensor, struct GNUNET_CONTAINER_MultiHa struct GNUNET_HashCode key; struct SensorInfo *existing; - GNUNET_CRYPTO_hash(sensor->name, sizeof(sensor->name), &key); + GNUNET_CRYPTO_hash(sensor->name, strlen(sensor->name), &key); existing = GNUNET_CONTAINER_multihashmap_get(map, &key); if(NULL != existing) //sensor with same name already exists { @@ -472,17 +472,24 @@ handle_get_sensor (void *cls, struct GNUNET_SERVER_Client *client, struct SensorInfoMessage *msg; sensorname = (char *)&message[1]; - sensorname_len = message->size - sizeof(struct GNUNET_MessageHeader); - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "`%s' message received for sensor `%.*s\n", - "GET SENSOR", sensorname_len, sensorname); + sensorname_len = ntohs(message->size) - sizeof(struct GNUNET_MessageHeader); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "`%s' message received for sensor (%d) `%.*s'\n", + "GET SENSOR", sensorname_len, sensorname_len, sensorname); tc = GNUNET_SERVER_transmit_context_create (client); GNUNET_CRYPTO_hash(sensorname, sensorname_len, &key); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Created key hash for requested sensor\n"); sensorinfo = (struct SensorInfo *)GNUNET_CONTAINER_multihashmap_get(sensors, &key); - msg = create_sensor_info_msg(sensorinfo); - GNUNET_SERVER_transmit_context_append_message(tc, (struct GNUNET_MessageHeader *)msg); + if(NULL != sensorinfo) + { + msg = create_sensor_info_msg(sensorinfo); + GNUNET_SERVER_transmit_context_append_message(tc, (struct GNUNET_MessageHeader *)msg); + GNUNET_free(msg); + } + else + GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Requested sensor `%.*s' was not found\n", + sensorname_len, sensorname); + GNUNET_SERVER_transmit_context_append_data(tc, NULL, 0, GNUNET_MESSAGE_TYPE_SENSOR_END); GNUNET_SERVER_transmit_context_run (tc, GNUNET_TIME_UNIT_FOREVER_REL); - - GNUNET_free(msg); } /** @@ -542,9 +549,9 @@ run (void *cls, { static const struct GNUNET_SERVER_MessageHandler handlers[] = { {&handle_get_sensor, NULL, GNUNET_MESSAGE_TYPE_SENSOR_GET, - sizeof (struct GNUNET_MessageHeader)}, - {&handle_get_all_sensors, NULL, GNUNET_MESSAGE_TYPE_SENSOR_GETALL, 0}, + {&handle_get_all_sensors, NULL, GNUNET_MESSAGE_TYPE_SENSOR_GETALL, + sizeof (struct GNUNET_MessageHeader)}, {NULL, NULL, 0, 0} }; -- cgit v1.2.3