diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2013-05-28 09:35:18 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2013-05-28 09:35:18 +0000 |
commit | a15d65e1933ba6def1c2519c32d14edf9d70b4cc (patch) | |
tree | 93e2d0bb2d45dee2e9d17d037f3ff579403e8214 | |
parent | eaea0bc446148dd6e211d13a15457c77b879f3a1 (diff) |
changes
-rw-r--r-- | src/experimentation/gnunet-daemon-experimentation_experiments.c | 79 |
1 files changed, 75 insertions, 4 deletions
diff --git a/src/experimentation/gnunet-daemon-experimentation_experiments.c b/src/experimentation/gnunet-daemon-experimentation_experiments.c index 26157666a3..d6ee32c566 100644 --- a/src/experimentation/gnunet-daemon-experimentation_experiments.c +++ b/src/experimentation/gnunet-daemon-experimentation_experiments.c @@ -54,6 +54,11 @@ static struct GNUNET_CONTAINER_MultiHashMap *valid_issuers; static struct GNUNET_CONTAINER_MultiHashMap *experiments; +uint32_t GSE_my_issuer_count; + +struct Experimentation_Request_Issuer *GSE_my_issuer; + + /** * Verify experiment signature * @@ -102,6 +107,20 @@ int free_issuer (void *cls, return GNUNET_OK; } +int create_issuer (void *cls, + const struct GNUNET_HashCode * key, + void *value) +{ + static int i = 0; + GNUNET_assert (i < GSE_my_issuer_count); + GSE_my_issuer[i].issuer_id.hashPubKey = *key; + + i++; + return GNUNET_OK; + +} + + /** * Is peer a valid issuer @@ -117,6 +136,51 @@ GNUNET_EXPERIMENTATION_experiments_issuer_accepted (struct GNUNET_PeerIdentity * return GNUNET_NO; } +struct GetCtx +{ + struct Node *n; + GNUNET_EXPERIMENTATION_experiments_get_cb get_cb; +}; + +static int +get_it (void *cls, + const struct GNUNET_HashCode * key, + void *value) +{ + struct GetCtx *get_ctx = cls; + struct Experiment *e = value; + + /* Check compability */ + if (get_ctx->n->version.abs_value != e->version.abs_value) + return GNUNET_OK; + + get_ctx->get_cb (get_ctx->n, e); + + return GNUNET_OK; +} + + + + +void +GNUNET_EXPERIMENTATION_experiments_get (struct Node *n, + struct GNUNET_PeerIdentity *issuer, + GNUNET_EXPERIMENTATION_experiments_get_cb get_cb) +{ + struct GetCtx get_ctx; + + GNUNET_assert (NULL != n); + GNUNET_assert (NULL != experiments); + GNUNET_assert (NULL != get_cb); + + get_ctx.n = n; + get_ctx.get_cb = get_cb; + + GNUNET_CONTAINER_multihashmap_get_multiple (experiments, + &issuer->hashPubKey, &get_it, &get_ctx); + + get_cb (n, NULL); +} /** * Add a new experiment @@ -146,8 +210,6 @@ int GNUNET_EXPERIMENTATION_experiments_add (struct Issuer *i, e->duration = duration; e->stop = stop; - - /* verify experiment */ if (GNUNET_SYSERR == experiment_verify (i, e)) { @@ -167,8 +229,6 @@ int GNUNET_EXPERIMENTATION_experiments_add (struct Issuer *i, GNUNET_CONTAINER_multihashmap_put (experiments, &e->issuer.hashPubKey, e, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); GNUNET_STATISTICS_set (GSE_stats, "# experiments", GNUNET_CONTAINER_multihashmap_size (experiments), GNUNET_NO); - GNUNET_EXPERIMENTATION_scheduler_add (e); - return GNUNET_OK; } @@ -357,6 +417,11 @@ GNUNET_EXPERIMENTATION_experiments_start () GNUNET_free (pubkey); } + GSE_my_issuer_count = GNUNET_CONTAINER_multihashmap_size (valid_issuers); + GSE_my_issuer = GNUNET_malloc (GSE_my_issuer_count * sizeof (struct Experimentation_Request_Issuer)); + GNUNET_CONTAINER_multihashmap_iterate (valid_issuers, &create_issuer, GSE_my_issuer); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Daemon has %u issuers\n"), GSE_my_issuer_count); + experiments = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO); /* Load experiments from file */ if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (GSE_cfg, "EXPERIMENTATION", "EXPERIMENTS", &file)) @@ -380,6 +445,12 @@ GNUNET_EXPERIMENTATION_experiments_start () void GNUNET_EXPERIMENTATION_experiments_stop () { + if (NULL != GSE_my_issuer) + { + GNUNET_free (GSE_my_issuer); + GSE_my_issuer = NULL; + GSE_my_issuer_count = 0; + } if (NULL != valid_issuers) { GNUNET_CONTAINER_multihashmap_iterate (valid_issuers, &free_issuer, NULL); |