X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftestbed%2Fgnunet-service-testbed_cache.c;h=6a141a2525727dc75adebd2c92ce99b84c674dff;hb=2ca4b8a208f6f910c819bbaa6785a25ae2955501;hp=0f34519265544ad71b75c9e83b2bf640b9ad9ad6;hpb=6bbba0a49fd9be9d98620592ff88f977d26dc47b;p=oweals%2Fgnunet.git diff --git a/src/testbed/gnunet-service-testbed_cache.c b/src/testbed/gnunet-service-testbed_cache.c index 0f3451926..6a141a252 100644 --- a/src/testbed/gnunet-service-testbed_cache.c +++ b/src/testbed/gnunet-service-testbed_cache.c @@ -1,10 +1,10 @@ /* This file is part of GNUnet. - (C) 2012 Christian Grothoff (and other contributing authors) + (C) 2008--2013 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 2, or (at your + by the Free Software Foundation; either version 3, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but @@ -19,7 +19,7 @@ */ /** - * @file testbed/gnunet-service-testbed_cache.h + * @file testbed/gnunet-service-testbed_cache.c * @brief testbed cache implementation * @author Sree Harsha Totakura */ @@ -299,7 +299,8 @@ static unsigned int cache_size; /** * Looks up in the cache and returns the entry * - * @param id the peer identity of the peer whose corresponding entry has to be looked up + * @param key the peer identity of the peer whose corresponding entry has to be + * looked up * @return the HELLO message; NULL if not found */ static struct CacheEntry * @@ -480,7 +481,6 @@ call_cgh_cb (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) cgh->nctxt); } LOG_DEBUG ("Calling notify for handle type %u\n", cgh->type); - GNUNET_break ((NULL == entry->core_handle) || (NULL != entry->peer_identity)); cgh->cb (cgh->cb_cls, entry->core_handle, entry->transport_handle, entry->peer_identity); } @@ -540,14 +540,10 @@ peer_connect_notify_cb (void *cls, const struct GNUNET_PeerIdentity *peer, * * @param cls closure * @param peer the peer that connected - * @param ats performance data - * @param ats_count number of entries in ats (excluding 0-termination) */ static void transport_peer_connect_notify_cb (void *cls, - const struct GNUNET_PeerIdentity *peer, - const struct GNUNET_ATS_Information *ats, - uint32_t ats_count) + const struct GNUNET_PeerIdentity *peer) { peer_connect_notify_cb (cls, peer, CGT_TRANSPORT_HANDLE); } @@ -611,11 +607,10 @@ oprelease_get_handle_transport (void *cls) * do this later). * * @param cls closure - * @param server handle to the server, NULL if we failed * @param my_identity ID of this peer, NULL if we failed */ static void -core_startup_cb (void *cls, struct GNUNET_CORE_Handle *server, +core_startup_cb (void *cls, const struct GNUNET_PeerIdentity *my_identity) { struct CacheEntry *entry = cls; @@ -626,9 +621,8 @@ core_startup_cb (void *cls, struct GNUNET_CORE_Handle *server, return; } GNUNET_assert (NULL == entry->peer_identity); - GNUNET_break (NULL != server); - entry->core_handle = server; - entry->peer_identity = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity)); + // FIXME: why is this dynamically allocated? + entry->peer_identity = GNUNET_new (struct GNUNET_PeerIdentity); memcpy (entry->peer_identity, my_identity, sizeof (struct GNUNET_PeerIdentity)); if (0 == entry->demand) @@ -645,13 +639,9 @@ core_startup_cb (void *cls, struct GNUNET_CORE_Handle *server, * * @param cls closure * @param peer peer identity this notification is about - * @param atsi performance data for the connection - * @param atsi_count number of records in 'atsi' */ static void -core_peer_connect_cb (void *cls, const struct GNUNET_PeerIdentity *peer, - const struct GNUNET_ATS_Information *atsi, - unsigned int atsi_count) +core_peer_connect_cb (void *cls, const struct GNUNET_PeerIdentity *peer) { peer_connect_notify_cb (cls, peer, CGT_CORE_HANDLE); } @@ -714,7 +704,19 @@ oprelease_get_handle_core (void *cls) * lookup in the cache; if not, a new operation is started to open the transport * handle and will be given in the callback when it is available. * - * @param cls the cache entry + * @param peer_id the index of the peer + * @param cgh the CacheGetHandle + * @param cfg the configuration with which the transport handle has to be + * created if it was not present in the cache + * @param target the peer identify of the peer whose connection to + * TRANSPORT/CORE (depending on the type of 'cgh') subsystem will be + * notified through the connect_notify_cb. Can be NULL + * @param connect_notify_cb the callback to call when the given target peer is + * connected. This callback will only be called once or never again (in + * case the target peer cannot be connected). Can be NULL + * @param connect_notify_cb_cls the closure for the above callback + * @return the handle which can be used to cancel or mark that the handle is no + * longer being used */ static struct GSTCacheGetHandle * cache_get_handle (unsigned int peer_id, struct GSTCacheGetHandle *cgh, @@ -789,6 +791,7 @@ cache_get_handle (unsigned int peer_id, struct GSTCacheGetHandle *cgh, } return cgh; } + op = NULL; switch (cgh->type) { case CGT_TRANSPORT_HANDLE: @@ -805,6 +808,8 @@ cache_get_handle (unsigned int peer_id, struct GSTCacheGetHandle *cgh, &oprelease_get_handle_core); entry->core_op = op; break; + default: + GNUNET_assert (0); } GNUNET_TESTBED_operation_queue_insert_ (GST_opq_openfds, op); GNUNET_TESTBED_operation_begin_wait_ (op); @@ -831,7 +836,8 @@ cache_clear_iterator (void *cls, const struct GNUNET_HashCode *key, void *value) GNUNET_assert (NULL != entry); GNUNET_break (0 == entry->demand); LOG_DEBUG ("Clearing entry %u of %u\n", ++ncleared, cache_size); - GNUNET_CONTAINER_multihashmap_remove (cache, key, value); + GNUNET_assert (GNUNET_YES == + GNUNET_CONTAINER_multihashmap_remove (cache, key, value)); close_handles (entry); GNUNET_free_non_null (entry->hello); GNUNET_break (GNUNET_SCHEDULER_NO_TASK == entry->expire_task); @@ -926,9 +932,7 @@ GST_cache_get_handle_done (struct GSTCacheGetHandle *cgh) } else { - struct GSTCacheGetHandle *cgh2; - - if (NULL != (cgh2 = search_suitable_cgh (entry, entry->cgh_qhead))) + if (NULL != search_suitable_cgh (entry, entry->cgh_qhead)) entry->notify_task = GNUNET_SCHEDULER_add_now (&call_cgh_cb, entry); } } @@ -951,7 +955,7 @@ GST_cache_get_handle_done (struct GSTCacheGetHandle *cgh) * connected. This callback will only be called once or never again (in * case the target peer cannot be connected). Can be NULL * @param connect_notify_cb_cls the closure for the above callback - * @return the handle which can be used cancel or mark that the handle is no + * @return the handle which can be used to cancel or mark that the handle is no * longer being used */ struct GSTCacheGetHandle * @@ -991,7 +995,7 @@ GST_cache_get_handle_transport (unsigned int peer_id, * connected. This callback will only be called once or never again (in * case the target peer cannot be connected). Can be NULL * @param connect_notify_cb_cls the closure for the above callback - * @return the handle which can be used cancel or mark that the handle is no + * @return the handle which can be used to cancel or mark that the handle is no * longer being used */ struct GSTCacheGetHandle * @@ -1040,7 +1044,7 @@ GST_cache_lookup_hello (const unsigned int peer_id) * Caches the HELLO of the given peer. Updates the HELLO if it was already * cached before * - * @param id the peer identity of the peer whose HELLO has to be cached + * @param peer_id the peer identity of the peer whose HELLO has to be cached * @param hello the HELLO message */ void