aboutsummaryrefslogtreecommitdiff
path: root/src/experimentation/gnunet-daemon-experimentation_experiments.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/experimentation/gnunet-daemon-experimentation_experiments.c')
-rw-r--r--src/experimentation/gnunet-daemon-experimentation_experiments.c96
1 files changed, 48 insertions, 48 deletions
diff --git a/src/experimentation/gnunet-daemon-experimentation_experiments.c b/src/experimentation/gnunet-daemon-experimentation_experiments.c
index b4db5188b..928502cf5 100644
--- a/src/experimentation/gnunet-daemon-experimentation_experiments.c
+++ b/src/experimentation/gnunet-daemon-experimentation_experiments.c
@@ -54,14 +54,14 @@ experiment_verify (struct Issuer *i, struct Experiment *e)
54{ 54{
55 GNUNET_assert (NULL != i); 55 GNUNET_assert (NULL != i);
56 GNUNET_assert (NULL != e); 56 GNUNET_assert (NULL != e);
57 57
58 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 58 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
59 "Verification: to be implemented\n"); 59 "Verification: to be implemented\n");
60 return GNUNET_OK; 60 return GNUNET_OK;
61} 61}
62 62
63 63
64static int 64static int
65free_experiment (void *cls, 65free_experiment (void *cls,
66 const struct GNUNET_HashCode * key, 66 const struct GNUNET_HashCode * key,
67 void *value) 67 void *value)
@@ -84,15 +84,15 @@ free_experiment (void *cls,
84 * @param value the issuer element to free 84 * @param value the issuer element to free
85 * @return GNUNET_OK to continue 85 * @return GNUNET_OK to continue
86 */ 86 */
87static int 87static int
88free_issuer (void *cls, 88free_issuer (void *cls,
89 const struct GNUNET_HashCode * key, 89 const struct GNUNET_HashCode * key,
90 void *value) 90 void *value)
91{ 91{
92 struct Issuer *i = value; 92 struct Issuer *i = value;
93 93
94 GNUNET_break (0 == GNUNET_CONTAINER_multihashmap_remove (valid_issuers, 94 GNUNET_break (0 == GNUNET_CONTAINER_multihashmap_remove (valid_issuers,
95 key, 95 key,
96 i)); 96 i));
97 GNUNET_free (i); 97 GNUNET_free (i);
98 return GNUNET_OK; 98 return GNUNET_OK;
@@ -149,8 +149,8 @@ GED_experiments_find (const struct GNUNET_CRYPTO_EccPublicSignKey *issuer,
149 const struct GNUNET_TIME_Absolute version) 149 const struct GNUNET_TIME_Absolute version)
150{ 150{
151 struct GNUNET_HashCode hc; 151 struct GNUNET_HashCode hc;
152 152
153 get_experiment_key (issuer, 153 get_experiment_key (issuer,
154 name, 154 name,
155 version, 155 version,
156 &hc); 156 &hc);
@@ -180,7 +180,7 @@ get_it (void *cls,
180 if (0 == memcmp (&e->issuer, 180 if (0 == memcmp (&e->issuer,
181 get_ctx->issuer, 181 get_ctx->issuer,
182 sizeof (struct GNUNET_CRYPTO_EccPublicSignKey))) 182 sizeof (struct GNUNET_CRYPTO_EccPublicSignKey)))
183 get_ctx->get_cb (get_ctx->n, e); 183 get_ctx->get_cb (get_ctx->n, e);
184 return GNUNET_OK; 184 return GNUNET_OK;
185} 185}
186 186
@@ -222,7 +222,7 @@ GNUNET_EXPERIMENTATION_experiments_add (struct Issuer *i,
222 struct Experiment *e; 222 struct Experiment *e;
223 struct GNUNET_HashCode hc; 223 struct GNUNET_HashCode hc;
224 224
225 e = GNUNET_new (struct Experiment); 225 e = GNUNET_new (struct Experiment);
226 e->name = GNUNET_strdup (name); 226 e->name = GNUNET_strdup (name);
227 e->issuer = *issuer_id; 227 e->issuer = *issuer_id;
228 e->version = version; 228 e->version = version;
@@ -233,20 +233,20 @@ GNUNET_EXPERIMENTATION_experiments_add (struct Issuer *i,
233 e->frequency = frequency; 233 e->frequency = frequency;
234 e->duration = duration; 234 e->duration = duration;
235 e->stop = stop; 235 e->stop = stop;
236 236
237 /* verify experiment */ 237 /* verify experiment */
238 if (GNUNET_SYSERR == experiment_verify (i, e)) 238 if (GNUNET_SYSERR == experiment_verify (i, e))
239 { 239 {
240 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 240 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
241 _("Experiment `%s': Experiment signature is invalid\n"), 241 _("Experiment `%s': Experiment signature is invalid\n"),
242 name); 242 name);
243 GNUNET_free (e); 243 GNUNET_free (e);
244 GNUNET_free_non_null (e->name); 244 GNUNET_free_non_null (e->name);
245 GNUNET_free_non_null (e->description); 245 GNUNET_free_non_null (e->description);
246 return GNUNET_SYSERR; 246 return GNUNET_SYSERR;
247 } 247 }
248 248
249 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 249 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
250 _("Adding experiment `%s' running from `%s' to `%s' every %llu sec. for %llu sec. \n"), 250 _("Adding experiment `%s' running from `%s' to `%s' every %llu sec. for %llu sec. \n"),
251 e->name, 251 e->name,
252 GNUNET_STRINGS_absolute_time_to_string (start), 252 GNUNET_STRINGS_absolute_time_to_string (start),
@@ -259,12 +259,12 @@ GNUNET_EXPERIMENTATION_experiments_add (struct Issuer *i,
259 &hc); 259 &hc);
260 GNUNET_CONTAINER_multihashmap_put (experiments, 260 GNUNET_CONTAINER_multihashmap_put (experiments,
261 &hc, 261 &hc,
262 e, 262 e,
263 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 263 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
264 GNUNET_STATISTICS_set (GED_stats, 264 GNUNET_STATISTICS_set (GED_stats,
265 "# experiments", 265 "# experiments",
266 GNUNET_CONTAINER_multihashmap_size (experiments), GNUNET_NO); 266 GNUNET_CONTAINER_multihashmap_size (experiments), GNUNET_NO);
267 267
268 return GNUNET_OK; 268 return GNUNET_OK;
269} 269}
270 270
@@ -293,9 +293,9 @@ exp_file_iterator (void *cls,
293 struct GNUNET_TIME_Relative frequency; 293 struct GNUNET_TIME_Relative frequency;
294 struct GNUNET_TIME_Relative duration; 294 struct GNUNET_TIME_Relative duration;
295 struct GNUNET_HashCode phash; 295 struct GNUNET_HashCode phash;
296 296
297 /* Mandatory fields */ 297 /* Mandatory fields */
298 298
299 /* Issuer */ 299 /* Issuer */
300 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (exp, name, "ISSUER", &val)) 300 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (exp, name, "ISSUER", &val))
301 { 301 {
@@ -303,8 +303,8 @@ exp_file_iterator (void *cls,
303 _("Experiment `%s': Issuer missing\n"), name); 303 _("Experiment `%s': Issuer missing\n"), name);
304 return; 304 return;
305 } 305 }
306 if (GNUNET_SYSERR == 306 if (GNUNET_SYSERR ==
307 GNUNET_CRYPTO_ecc_public_sign_key_from_string (val, 307 GNUNET_CRYPTO_ecc_public_sign_key_from_string (val,
308 strlen (val), 308 strlen (val),
309 &issuer)) 309 &issuer))
310 { 310 {
@@ -322,20 +322,20 @@ exp_file_iterator (void *cls,
322 return; 322 return;
323 } 323 }
324 GNUNET_free (val); 324 GNUNET_free (val);
325 325
326 /* Version */ 326 /* Version */
327 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (exp, name, "VERSION", &number)) 327 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (exp, name, "VERSION", &number))
328 { 328 {
329 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 329 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
330 _("Experiment `%s': Version missing or invalid \n"), name); 330 _("Experiment `%s': Version missing or invalid \n"), name);
331 return; 331 return;
332 } 332 }
333 version.abs_value_us = number; // FIXME: what is this supposed to be? Version != TIME!??? 333 version.abs_value_us = number; // FIXME: what is this supposed to be? Version != TIME!???
334 334
335 /* Required capabilities */ 335 /* Required capabilities */
336 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (exp, name, "CAPABILITIES", &number)) 336 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (exp, name, "CAPABILITIES", &number))
337 { 337 {
338 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 338 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
339 _("Experiment `%s': Required capabilities missing \n"), name); 339 _("Experiment `%s': Required capabilities missing \n"), name);
340 return; 340 return;
341 } 341 }
@@ -346,23 +346,23 @@ exp_file_iterator (void *cls,
346 return; 346 return;
347 } 347 }
348 required_capabilities = number; 348 required_capabilities = number;
349 349
350 /* Optional fields */ 350 /* Optional fields */
351 351
352 /* Description */ 352 /* Description */
353 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (exp, name, "DESCRIPTION", &description)) 353 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (exp, name, "DESCRIPTION", &description))
354 description = NULL; 354 description = NULL;
355 355
356 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (exp, name, "START", (long long unsigned int *) &start.abs_value_us)) 356 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (exp, name, "START", (long long unsigned int *) &start.abs_value_us))
357 start = GNUNET_TIME_UNIT_ZERO_ABS; 357 start = GNUNET_TIME_UNIT_ZERO_ABS;
358 358
359 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (exp, name, "FREQUENCY", &frequency)) 359 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (exp, name, "FREQUENCY", &frequency))
360 frequency = EXP_DEFAULT_EXP_FREQ; 360 frequency = EXP_DEFAULT_EXP_FREQ;
361 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (exp, name, "DURATION", &duration)) 361 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (exp, name, "DURATION", &duration))
362 duration = EXP_DEFAULT_EXP_DUR; 362 duration = EXP_DEFAULT_EXP_DUR;
363 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (exp, name, "STOP", (long long unsigned int *)&stop.abs_value_us)) 363 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (exp, name, "STOP", (long long unsigned int *)&stop.abs_value_us))
364 stop = GNUNET_TIME_UNIT_FOREVER_ABS; 364 stop = GNUNET_TIME_UNIT_FOREVER_ABS;
365 365
366 GNUNET_EXPERIMENTATION_experiments_add (i, name, &issuer, version, 366 GNUNET_EXPERIMENTATION_experiments_add (i, name, &issuer, version,
367 description, required_capabilities, 367 description, required_capabilities,
368 start, frequency, duration, stop); 368 start, frequency, duration, stop);
@@ -382,12 +382,12 @@ load_file (const char * file)
382 382
383 if (NULL == exp) 383 if (NULL == exp)
384 return; 384 return;
385 385
386 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_parse (exp, file)) 386 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_parse (exp, file))
387 { 387 {
388 GNUNET_CONFIGURATION_destroy (exp); 388 GNUNET_CONFIGURATION_destroy (exp);
389 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 389 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
390 _("Failed to parse file `%s'\n"), 390 _("Failed to parse file `%s'\n"),
391 file); 391 file);
392 return; 392 return;
393 } 393 }
@@ -408,28 +408,28 @@ GED_experiments_start ()
408 char *pos; 408 char *pos;
409 struct GNUNET_CRYPTO_EccPublicSignKey issuer_ID; 409 struct GNUNET_CRYPTO_EccPublicSignKey issuer_ID;
410 struct GNUNET_HashCode hash; 410 struct GNUNET_HashCode hash;
411 411
412 /* Load valid issuer */ 412 /* Load valid issuer */
413 if (GNUNET_SYSERR == 413 if (GNUNET_SYSERR ==
414 GNUNET_CONFIGURATION_get_value_string (GED_cfg, 414 GNUNET_CONFIGURATION_get_value_string (GED_cfg,
415 "EXPERIMENTATION", 415 "EXPERIMENTATION",
416 "ISSUERS", 416 "ISSUERS",
417 &issuers)) 417 &issuers))
418 { 418 {
419 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 419 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
420 _("No valid experiment issuers configured! Set value to public keys of issuers! Exiting.\n")); 420 _("No valid experiment issuers configured! Set value to public keys of issuers! Exiting.\n"));
421 GED_experiments_stop (); 421 GED_experiments_stop ();
422 return GNUNET_SYSERR; 422 return GNUNET_SYSERR;
423 } 423 }
424 424
425 valid_issuers = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO); 425 valid_issuers = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
426 for (pos = strtok (issuers, " "); pos != NULL; pos = strtok (NULL, " ")) 426 for (pos = strtok (issuers, " "); pos != NULL; pos = strtok (NULL, " "))
427 { 427 {
428 if (GNUNET_SYSERR == GNUNET_CRYPTO_ecc_public_sign_key_from_string (pos, 428 if (GNUNET_SYSERR == GNUNET_CRYPTO_ecc_public_sign_key_from_string (pos,
429 strlen (pos), 429 strlen (pos),
430 &issuer_ID)) 430 &issuer_ID))
431 { 431 {
432 GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR, 432 GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
433 "EXPERIMENTATION", 433 "EXPERIMENTATION",
434 "ISSUERS", 434 "ISSUERS",
435 _("Invalid value for public key\n")); 435 _("Invalid value for public key\n"));
@@ -439,33 +439,33 @@ GED_experiments_start ()
439 i = GNUNET_new (struct Issuer); 439 i = GNUNET_new (struct Issuer);
440 i->pubkey = issuer_ID; 440 i->pubkey = issuer_ID;
441 GNUNET_CRYPTO_hash( &issuer_ID, sizeof (issuer_ID), &hash); 441 GNUNET_CRYPTO_hash( &issuer_ID, sizeof (issuer_ID), &hash);
442 GNUNET_CONTAINER_multihashmap_put (valid_issuers, 442 GNUNET_CONTAINER_multihashmap_put (valid_issuers,
443 &hash, 443 &hash,
444 i, 444 i,
445 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); 445 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
446 } 446 }
447 GNUNET_free (issuers); 447 GNUNET_free (issuers);
448 if (0 == GNUNET_CONTAINER_multihashmap_size (valid_issuers)) 448 if (0 == GNUNET_CONTAINER_multihashmap_size (valid_issuers))
449 { 449 {
450 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 450 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
451 _("No valid experiment issuers configured! Set value to public keys of issuers! Exiting.\n")); 451 _("No valid experiment issuers configured! Set value to public keys of issuers! Exiting.\n"));
452 GED_experiments_stop (); 452 GED_experiments_stop ();
453 return GNUNET_SYSERR; 453 return GNUNET_SYSERR;
454 } 454 }
455 GNUNET_STATISTICS_set (GED_stats, 455 GNUNET_STATISTICS_set (GED_stats,
456 "# issuer", 456 "# issuer",
457 GNUNET_CONTAINER_multihashmap_size (valid_issuers), 457 GNUNET_CONTAINER_multihashmap_size (valid_issuers),
458 GNUNET_NO); 458 GNUNET_NO);
459 459
460 experiments = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO); 460 experiments = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
461 /* Load experiments from file */ 461 /* Load experiments from file */
462 if (GNUNET_SYSERR == 462 if (GNUNET_SYSERR ==
463 GNUNET_CONFIGURATION_get_value_string (GED_cfg, 463 GNUNET_CONFIGURATION_get_value_string (GED_cfg,
464 "EXPERIMENTATION", 464 "EXPERIMENTATION",
465 "EXPERIMENTS", 465 "EXPERIMENTS",
466 &file)) 466 &file))
467 return GNUNET_OK; 467 return GNUNET_OK;
468 468
469 if (GNUNET_YES != GNUNET_DISK_file_test (file)) 469 if (GNUNET_YES != GNUNET_DISK_file_test (file))
470 { 470 {
471 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 471 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,