pi->value.search.sc = sc;
pi->value.search.cctx = (NULL != sc) ? sc->client_info : NULL;
pi->value.search.pctx =
- ((NULL == sc) || (NULL == sc->psearch_result))
- ? NULL
+ ((NULL == sc) || (NULL == sc->psearch_result))
+ ? NULL
: sc->psearch_result->client_info;
pi->value.search.query = (NULL != sc) ? sc->uri : NULL;
- pi->value.search.duration = (NULL != sc)
+ pi->value.search.duration = (NULL != sc)
? GNUNET_TIME_absolute_get_duration (sc->start_time)
: GNUNET_TIME_UNIT_ZERO;
pi->value.search.anonymity = (NULL != sc) ? sc->anonymity : 0;
/**
- * Check if the given result is identical
- * to the given URI.
+ * Check if the given result is identical to the given URI.
*
* @param cls points to the URI we check against
* @param key not used
- * @param value a "struct GNUNET_FS_SearchResult" who's URI we
+ * @param value a `struct GNUNET_FS_SearchResult` who's URI we
* should compare with
- * @return GNUNET_SYSERR if the result is present,
- * GNUNET_OK otherwise
+ * @return #GNUNET_SYSERR if the result is present,
+ * #GNUNET_OK otherwise
*/
static int
-test_result_present (void *cls, const struct GNUNET_HashCode * key, void *value)
+test_result_present (void *cls,
+ const struct GNUNET_HashCode * key,
+ void *value)
{
const struct GNUNET_FS_Uri *uri = cls;
struct GNUNET_FS_SearchResult *sr = value;
struct GNUNET_FS_SearchResult *sr)
{
struct GNUNET_FS_ProgressInfo pi;
-
+
pi.status = GNUNET_FS_STATUS_SEARCH_UPDATE;
pi.value.search.specifics.update.cctx = sr->client_info;
pi.value.search.specifics.update.meta = sr->meta;
pi.value.search.specifics.update.availability_certainty =
sr->availability_trials;
pi.value.search.specifics.update.applicability_rank = sr->optional_support;
- pi.value.search.specifics.update.current_probe_time
+ pi.value.search.specifics.update.current_probe_time
= GNUNET_TIME_absolute_get_duration (sr->probe_active_time);
sr->client_info = GNUNET_FS_search_make_status_ (&pi, sc->h, sc);
}
* Check if the given result is identical to the given URI and if so
* return it.
*
- * @param cls a "struct GetResultContext"
+ * @param cls a `struct GetResultContext`
* @param key not used
- * @param value a "struct GNUNET_FS_SearchResult" who's URI we
+ * @param value a `struct GNUNET_FS_SearchResult` who's URI we
* should compare with
- * @return GNUNET_OK
+ * @return #GNUNET_OK
*/
static int
get_result_present (void *cls, const struct GNUNET_HashCode * key, void *value)
/**
* Signal result of last probe to client and then schedule next
* probe.
+ *
+ * @param sr search result to signal for
*/
static void
signal_probe_result (struct GNUNET_FS_SearchResult *sr)
pi.value.search.specifics.update.cctx = sr->client_info;
pi.value.search.specifics.update.meta = sr->meta;
pi.value.search.specifics.update.uri = sr->uri;
- pi.value.search.specifics.update.availability_rank
+ pi.value.search.specifics.update.availability_rank
= 2 * sr->availability_success - sr->availability_trials;
- pi.value.search.specifics.update.availability_certainty
+ pi.value.search.specifics.update.availability_certainty
= sr->availability_trials;
pi.value.search.specifics.update.applicability_rank = sr->optional_support;
- pi.value.search.specifics.update.current_probe_time
+ pi.value.search.specifics.update.current_probe_time
= GNUNET_TIME_absolute_get_duration (sr->probe_active_time);
sr->client_info = GNUNET_FS_search_make_status_ (&pi, sr->h, sr->sc);
GNUNET_FS_search_start_probe_ (sr);
/**
* Handle the case where we have failed to receive a response for our probe.
*
- * @param cls our 'struct GNUNET_FS_SearchResult*'
+ * @param cls our `struct GNUNET_FS_SearchResult *`
* @param tc scheduler context
*/
static void
/**
* Handle the case where we have gotten a response for our probe.
*
- * @param cls our 'struct GNUNET_FS_SearchResult*'
+ * @param cls our `struct GNUNET_FS_SearchResult *`
* @param tc scheduler context
*/
static void
/**
* Notification of FS that a search probe has made progress.
* This function is used INSTEAD of the client's event handler
- * for downloads where the GNUNET_FS_DOWNLOAD_IS_PROBE flag is set.
+ * for downloads where the #GNUNET_FS_DOWNLOAD_IS_PROBE flag is set.
*
* @param cls closure, always NULL (!), actual closure
* is in the client-context of the info struct
* for this operation; should be set to NULL for
* SUSPEND and STOPPED events). The value returned
* will be passed to future callbacks in the respective
- * field in the GNUNET_FS_ProgressInfo struct.
+ * field in the `struct GNUNET_FS_ProgressInfo`.
*/
void *
GNUNET_FS_search_probe_progress_ (void *cls,
GNUNET_SCHEDULER_add_delayed (sr->remaining_probe_time,
&probe_failure_handler, sr);
}
- else
- {
- /* should only happen if the cancel task was already
- created on 'DOWNLOAD_INACTIVE' as we were out of time */
- GNUNET_break (0 == sr->remaining_probe_time.rel_value);
- }
break;
case GNUNET_FS_STATUS_DOWNLOAD_INACTIVE:
if (GNUNET_SCHEDULER_NO_TASK != sr->probe_cancel_task)
dur = GNUNET_TIME_absolute_get_duration (sr->probe_active_time);
sr->remaining_probe_time =
GNUNET_TIME_relative_subtract (sr->remaining_probe_time, dur);
- if (0 == sr->remaining_probe_time.rel_value)
+ if (0 == sr->remaining_probe_time.rel_value_us)
sr->probe_cancel_task =
GNUNET_SCHEDULER_add_now (&probe_failure_handler, sr);
GNUNET_FS_search_result_sync_ (sr);
struct GNUNET_FS_SearchResult *sr = cls;
signal_probe_result (sr);
- sr->probe_ping_task
+ sr->probe_ping_task
= GNUNET_SCHEDULER_add_delayed (GNUNET_FS_PROBE_UPDATE_FREQUENCY,
&probe_ping_task,
sr);
len, sr->anonymity,
GNUNET_FS_DOWNLOAD_NO_TEMPORARIES |
GNUNET_FS_DOWNLOAD_IS_PROBE, sr, NULL);
- sr->probe_ping_task
+ sr->probe_ping_task
= GNUNET_SCHEDULER_add_now (&probe_ping_task,
sr);
}
sr->uri = GNUNET_FS_uri_dup (uri);
sr->meta = GNUNET_CONTAINER_meta_data_duplicate (meta);
sr->client_info = client_info;
- sr->anonymity = anonymity;
+ sr->anonymity = anonymity;
GNUNET_FS_search_start_probe_ (sr);
return sr;
}
/**
* Stop probing activity associated with a search result.
- *
- * @param sr search result
+ *
+ * @param sr search result
*/
static void
GNUNET_FS_search_stop_probe_ (struct GNUNET_FS_SearchResult *sr)
/**
* Stop probe activity. Must ONLY be used on values
- * returned from 'GNUNET_FS_probe'.
+ * returned from #GNUNET_FS_probe.
*
* @param sr search result to stop probing for (freed)
* @return the value of the 'client_info' pointer
* @param ent entry for the specific keyword
* @param uri the URI that was found
* @param meta metadata associated with the URI
- * under the "ent" keyword
+ * under the @a ent keyword
*/
static void
process_ksk_result (struct GNUNET_FS_SearchContext *sc,
is_new = (NULL == sr) || (sr->mandatory_missing > 0);
if (NULL == sr)
{
- sr = GNUNET_malloc (sizeof (struct GNUNET_FS_SearchResult));
+ sr = GNUNET_new (struct GNUNET_FS_SearchResult);
sr->h = sc->h;
sr->sc = sc;
sr->anonymity = sc->anonymity;
* @param meta metadata associated with the URI
*/
static void
-process_sks_result (struct GNUNET_FS_SearchContext *sc, const char *id_update,
+process_sks_result (struct GNUNET_FS_SearchContext *sc,
+ const char *id_update,
const struct GNUNET_FS_Uri *uri,
const struct GNUNET_CONTAINER_MetaData *meta)
{
&test_result_present,
(void *) uri))
return; /* duplicate result */
- sr = GNUNET_malloc (sizeof (struct GNUNET_FS_SearchResult));
+ sr = GNUNET_new (struct GNUNET_FS_SearchResult);
sr->h = sc->h;
sr->sc = sc;
sr->anonymity = sc->anonymity;
* @param sc search context with the keywords
* @param dpub derived public key used for the search
* @param edata encrypted data
- * @param edata_size number of bytes in 'edata' (and 'data')
+ * @param edata_size number of bytes in @a edata (and @a data)
* @param data where to store the plaintext
- * @return keyword index on success, GNUNET_SYSERR on error (no such
+ * @return keyword index on success, #GNUNET_SYSERR on error (no such
* keyword, internal error)
*/
static int
decrypt_block_with_keyword (const struct GNUNET_FS_SearchContext *sc,
- const struct GNUNET_CRYPTO_EccPublicKey *dpub,
+ const struct GNUNET_CRYPTO_EcdsaPublicKey *dpub,
const void *edata,
size_t edata_size,
char *data)
-{
- const struct GNUNET_CRYPTO_EccPrivateKey *anon;
- struct GNUNET_CRYPTO_EccPublicKey anon_pub;
+{
+ const struct GNUNET_CRYPTO_EcdsaPrivateKey *anon;
+ struct GNUNET_CRYPTO_EcdsaPublicKey anon_pub;
unsigned int i;
/* find key */
for (i = 0; i < sc->uri->data.ksk.keywordCount; i++)
if (0 == memcmp (dpub,
&sc->requests[i].dpub,
- sizeof (struct GNUNET_CRYPTO_EccPublicKey)))
+ sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey)))
break;
if (i == sc->uri->data.ksk.keywordCount)
{
return GNUNET_SYSERR;
}
/* decrypt */
- anon = GNUNET_CRYPTO_ecc_key_get_anonymous ();
- GNUNET_CRYPTO_ecc_key_get_public (anon, &anon_pub);
+ anon = GNUNET_CRYPTO_ecdsa_key_get_anonymous ();
+ GNUNET_CRYPTO_ecdsa_key_get_public (anon, &anon_pub);
GNUNET_FS_ublock_decrypt_ (edata, edata_size,
&anon_pub,
sc->requests[i].keyword,
*
* @param sc our search context
* @param ub the ublock with the keyword search result
- * @param size size of nb
+ * @param size size of @a ub
*/
static void
-process_kblock (struct GNUNET_FS_SearchContext *sc, const struct UBlock *ub,
+process_kblock (struct GNUNET_FS_SearchContext *sc,
+ const struct UBlock *ub,
size_t size)
{
size_t j;
if (NULL == (uri = GNUNET_FS_uri_parse (&pt[1], &emsg)))
{
GNUNET_break_op (0); /* ublock malformed */
- GNUNET_free_non_null (emsg);
+ GNUNET_free_non_null (emsg);
return;
}
j = eos - pt + 1;
*
* @param sc our search context
* @param ub the ublock with a namespace result
- * @param size size of sb
+ * @param size size of @a ub
*/
static void
-process_sblock (struct GNUNET_FS_SearchContext *sc,
+process_sblock (struct GNUNET_FS_SearchContext *sc,
const struct UBlock *ub,
size_t size)
{
size_t off;
char *emsg;
- /* decrypt */
GNUNET_FS_ublock_decrypt_ (&ub[1], len,
&sc->uri->data.sks.ns,
sc->uri->data.sks.identifier,
}
if (NULL == (uri = GNUNET_FS_uri_parse (uris, &emsg)))
{
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- _("Failed to parse URI `%s': %s\n"),
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ _("Failed to parse URI `%s': %s\n"),
uris, emsg);
GNUNET_break_op (0); /* ublock malformed */
GNUNET_free_non_null (emsg);
* @param type type of the result
* @param expiration when it will expire
* @param data the (encrypted) response
- * @param size size of data
+ * @param size size of @a data
*/
static void
-process_result (struct GNUNET_FS_SearchContext *sc, enum GNUNET_BLOCK_Type type,
- struct GNUNET_TIME_Absolute expiration,
+process_result (struct GNUNET_FS_SearchContext *sc,
+ enum GNUNET_BLOCK_Type type,
+ struct GNUNET_TIME_Absolute expiration,
const void *data,
size_t size)
{
- if (GNUNET_TIME_absolute_get_duration (expiration).rel_value > 0)
+ if (GNUNET_TIME_absolute_get_duration (expiration).rel_value_us > 0)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Result received has already expired.\n");
* Iterating over the known results, pick those matching the given
* result range and store their keys at 'xoff'.
*
- * @param cls the 'struct MessageBuilderContext'
+ * @param cls the `struct MessageBuilderContext`
* @param key key for a result
* @param value the search result
- * @return GNUNET_OK to continue iterating
+ * @return #GNUNET_OK to continue iterating
*/
static int
build_result_set (void *cls, const struct GNUNET_HashCode * key, void *value)
* matching the given result range and increment
* put count for each.
*
- * @param cls the 'struct MessageBuilderContext'
+ * @param cls the `struct MessageBuilderContext`
* @param key key for a result
* @param value the search result
- * @return GNUNET_OK to continue iterating
+ * @return #GNUNET_OK to continue iterating
*/
static int
find_result_set (void *cls, const struct GNUNET_HashCode * key, void *value)
* file-sharing service. Do it.
*
* @param cls closure
- * @param size number of bytes available in buf
+ * @param size number of bytes available in @a buf
* @param buf where the callee should write the message
- * @return number of bytes written to buf
+ * @return number of bytes written to @a buf
*/
static size_t
transmit_search_request (void *cls, size_t size, void *buf)
struct MessageBuilderContext mbc;
size_t msize;
struct SearchMessage *sm;
- struct GNUNET_CRYPTO_EccPublicKey dpub;
+ struct GNUNET_CRYPTO_EcdsaPublicKey dpub;
unsigned int sqms;
uint32_t options;
sm->header.size = htons (msize);
sm->type = htonl (GNUNET_BLOCK_TYPE_FS_UBLOCK);
sm->anonymity_level = htonl (sc->anonymity);
- memset (&sm->target, 0, sizeof (struct GNUNET_HashCode));
+ memset (&sm->target, 0, sizeof (struct GNUNET_PeerIdentity));
sm->query = sc->requests[sc->keyword_offset].uquery;
GNUNET_CONTAINER_multihashmap_iterate (sc->master_result_map,
&build_result_set, &mbc);
GNUNET_assert (size >= msize);
sm->type = htonl (GNUNET_BLOCK_TYPE_FS_UBLOCK);
sm->anonymity_level = htonl (sc->anonymity);
- memset (&sm->target, 0, sizeof (struct GNUNET_HashCode));
- GNUNET_CRYPTO_ecc_public_key_derive (&sc->uri->data.sks.ns,
+ memset (&sm->target, 0, sizeof (struct GNUNET_PeerIdentity));
+ GNUNET_CRYPTO_ecdsa_public_key_derive (&sc->uri->data.sks.ns,
sc->uri->data.sks.identifier,
+ "fs-ublock",
&dpub);
GNUNET_CRYPTO_hash (&dpub,
sizeof (dpub),
}
sc->reconnect_backoff = GNUNET_TIME_STD_BACKOFF (sc->reconnect_backoff);
sc->task =
- GNUNET_SCHEDULER_add_delayed (sc->reconnect_backoff,
+ GNUNET_SCHEDULER_add_delayed (sc->reconnect_backoff,
&do_reconnect,
sc);
}
* @return context that can be used to control the search
*/
static struct GNUNET_FS_SearchContext *
-search_start (struct GNUNET_FS_Handle *h, const struct GNUNET_FS_Uri *uri,
- uint32_t anonymity, enum GNUNET_FS_SearchOptions options,
- void *cctx, struct GNUNET_FS_SearchResult *psearch)
+search_start (struct GNUNET_FS_Handle *h,
+ const struct GNUNET_FS_Uri *uri,
+ uint32_t anonymity,
+ enum GNUNET_FS_SearchOptions options,
+ void *cctx,
+ struct GNUNET_FS_SearchResult *psearch)
{
struct GNUNET_FS_SearchContext *sc;
struct GNUNET_FS_ProgressInfo pi;
- sc = GNUNET_malloc (sizeof (struct GNUNET_FS_SearchContext));
+ sc = GNUNET_new (struct GNUNET_FS_SearchContext);
sc->h = h;
sc->options = options;
sc->uri = GNUNET_FS_uri_dup (uri);
* GNUnet FS service.
*
* @param sc search context
- * @return GNUNET_OK on success, GNUNET_SYSERR on error
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
*/
int
GNUNET_FS_search_start_searching_ (struct GNUNET_FS_SearchContext *sc)
{
unsigned int i;
const char *keyword;
- const struct GNUNET_CRYPTO_EccPrivateKey *anon;
- struct GNUNET_CRYPTO_EccPublicKey anon_pub;
+ const struct GNUNET_CRYPTO_EcdsaPrivateKey *anon;
+ struct GNUNET_CRYPTO_EcdsaPublicKey anon_pub;
struct SearchRequestEntry *sre;
GNUNET_assert (NULL == sc->client);
if (GNUNET_FS_uri_test_ksk (sc->uri))
{
GNUNET_assert (0 != sc->uri->data.ksk.keywordCount);
- anon = GNUNET_CRYPTO_ecc_key_get_anonymous ();
- GNUNET_CRYPTO_ecc_key_get_public (anon, &anon_pub);
+ anon = GNUNET_CRYPTO_ecdsa_key_get_anonymous ();
+ GNUNET_CRYPTO_ecdsa_key_get_public (anon, &anon_pub);
sc->requests =
GNUNET_malloc (sizeof (struct SearchRequestEntry) *
sc->uri->data.ksk.keywordCount);
keyword = &sc->uri->data.ksk.keywords[i][1];
sre = &sc->requests[i];
sre->keyword = GNUNET_strdup (keyword);
- GNUNET_CRYPTO_ecc_public_key_derive (&anon_pub,
+ GNUNET_CRYPTO_ecdsa_public_key_derive (&anon_pub,
keyword,
+ "fs-ublock",
&sre->dpub);
- GNUNET_CRYPTO_hash (&sre->dpub,
- sizeof (struct GNUNET_CRYPTO_EccPublicKey),
+ GNUNET_CRYPTO_hash (&sre->dpub,
+ sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey),
&sre->uquery);
sre->mandatory = (sc->uri->data.ksk.keywords[i][0] == '+');
if (sre->mandatory)
* @param cls the global FS handle
* @param key the key for the search result (unused)
* @param value the search result to free
- * @return GNUNET_OK
+ * @return #GNUNET_OK
*/
static int
-search_result_freeze_probes (void *cls, const struct GNUNET_HashCode * key,
+search_result_freeze_probes (void *cls,
+ const struct GNUNET_HashCode *key,
void *value)
{
struct GNUNET_FS_SearchResult *sr = value;
* @param cls the global FS handle
* @param key the key for the search result (unused)
* @param value the search result to free
- * @return GNUNET_OK
+ * @return #GNUNET_OK
*/
static int
-search_result_resume_probes (void *cls, const struct GNUNET_HashCode * key,
+search_result_resume_probes (void *cls,
+ const struct GNUNET_HashCode * key,
void *value)
{
struct GNUNET_FS_SearchResult *sr = value;
* @param cls the global FS handle
* @param key the key for the search result (unused)
* @param value the search result to free
- * @return GNUNET_OK
+ * @return #GNUNET_OK
*/
static int
-search_result_suspend (void *cls, const struct GNUNET_HashCode * key, void *value)
+search_result_suspend (void *cls,
+ const struct GNUNET_HashCode * key,
+ void *value)
{
struct GNUNET_FS_SearchContext *sc = cls;
struct GNUNET_FS_SearchResult *sr = value;
GNUNET_FS_download_signal_suspend_ (sr->download);
sr->download = NULL;
}
- if (NULL != sr->probe_ctx)
- {
- GNUNET_FS_download_stop (sr->probe_ctx, GNUNET_YES);
- sr->probe_ctx = NULL;
- }
- if (GNUNET_SCHEDULER_NO_TASK != sr->probe_ping_task)
- {
- GNUNET_SCHEDULER_cancel (sr->probe_ping_task);
- sr->probe_ping_task = GNUNET_SCHEDULER_NO_TASK;
- }
if (NULL != sr->update_search)
{
GNUNET_FS_search_signal_suspend_ (sr->update_search);
sr->update_search = NULL;
}
+ GNUNET_FS_search_stop_probe_ (sr);
pi.status = GNUNET_FS_STATUS_SEARCH_RESULT_SUSPEND;
pi.value.search.specifics.result_suspend.cctx = sr->client_info;
pi.value.search.specifics.result_suspend.meta = sr->meta;
GNUNET_free_non_null (sr->serialization);
GNUNET_FS_uri_destroy (sr->uri);
GNUNET_CONTAINER_meta_data_destroy (sr->meta);
- if (GNUNET_SCHEDULER_NO_TASK != sr->probe_cancel_task)
- {
- GNUNET_SCHEDULER_cancel (sr->probe_cancel_task);
- sr->probe_cancel_task = GNUNET_SCHEDULER_NO_TASK;
- }
GNUNET_free_non_null (sr->keyword_bitmap);
GNUNET_free (sr);
return GNUNET_OK;
* Create SUSPEND event for the given search operation
* and then clean up our state (without stop signal).
*
- * @param cls the 'struct GNUNET_FS_SearchContext' to signal for
+ * @param cls the `struct GNUNET_FS_SearchContext` to signal for
*/
void
GNUNET_FS_search_signal_suspend_ (void *cls)
sc->client_info = GNUNET_FS_search_make_status_ (&pi, sc->h, sc);
GNUNET_break (NULL == sc->client_info);
if (sc->task != GNUNET_SCHEDULER_NO_TASK)
+ {
GNUNET_SCHEDULER_cancel (sc->task);
+ sc->task = GNUNET_SCHEDULER_NO_TASK;
+ }
if (NULL != sc->client)
+ {
GNUNET_CLIENT_disconnect (sc->client);
+ sc->client = NULL;
+ }
GNUNET_CONTAINER_multihashmap_destroy (sc->master_result_map);
if (NULL != sc->requests)
{
struct GNUNET_FS_ProgressInfo pi;
if (GNUNET_SCHEDULER_NO_TASK != sc->task)
+ {
GNUNET_SCHEDULER_cancel (sc->task);
- sc->task = GNUNET_SCHEDULER_NO_TASK;
+ sc->task = GNUNET_SCHEDULER_NO_TASK;
+ }
if (NULL != sc->client)
GNUNET_CLIENT_disconnect (sc->client);
sc->client = NULL;
* @param cls the global FS handle
* @param key the key for the search result (unused)
* @param value the search result to free
- * @return GNUNET_OK
+ * @return #GNUNET_OK
*/
static int
-search_result_stop (void *cls, const struct GNUNET_HashCode * key, void *value)
+search_result_stop (void *cls,
+ const struct GNUNET_HashCode *key,
+ void *value)
{
struct GNUNET_FS_SearchContext *sc = cls;
struct GNUNET_FS_SearchResult *sr = value;
struct GNUNET_FS_ProgressInfo pi;
GNUNET_FS_search_stop_probe_ (sr);
-
if (NULL != sr->download)
{
sr->download->search = NULL;
* @param cls the global FS handle
* @param key the key for the search result (unused)
* @param value the search result to free
- * @return GNUNET_OK
+ * @return #GNUNET_OK
*/
static int
-search_result_free (void *cls, const struct GNUNET_HashCode * key, void *value)
+search_result_free (void *cls,
+ const struct GNUNET_HashCode *key,
+ void *value)
{
struct GNUNET_FS_SearchResult *sr = value;