/** * Check if the given result is identical to the given URI and if so * return it. * * @param cls a `struct GetResultContext` * @param key not used * @param value a `struct GNUNET_FS_SearchResult` who's URI we * should compare with * @return #GNUNET_OK */ static int get_result_present (void *cls, const struct GNUNET_HashCode * key, void *value) { struct GetResultContext *grc = cls; struct GNUNET_FS_SearchResult *sr = value; if (GNUNET_FS_uri_test_equal (grc->uri, sr->uri)) grc->sr = sr; return GNUNET_OK; }
/** * 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 * should compare with * @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) { const struct GNUNET_FS_Uri *uri = cls; struct GNUNET_FS_SearchResult *sr = value; if (GNUNET_FS_uri_test_equal (uri, sr->uri)) return GNUNET_SYSERR; return GNUNET_OK; }
static void processor (void *cls, const char *filename, const struct GNUNET_FS_Uri *uri, const struct GNUNET_CONTAINER_MetaData *md, size_t length, const void *data) { struct PCLS *p = cls; int i; if (NULL == uri) return; /* ignore directory's meta data */ for (i = 0; i < p->max; i++) { if (GNUNET_CONTAINER_meta_data_test_equal (p->md[i], md) && GNUNET_FS_uri_test_equal (p->uri[i], uri)) { p->pos++; return; } } FPRINTF (stderr, "Error at %s:%d\n", __FILE__, __LINE__); }
static int testLocation () { struct GNUNET_FS_Uri *uri; char *uric; struct GNUNET_FS_Uri *uri2; struct GNUNET_FS_Uri *baseURI; char *emsg; struct GNUNET_CRYPTO_EddsaPrivateKey *pk; baseURI = GNUNET_FS_uri_parse ("gnunet://fs/chk/4QZP479A9SKGFNMQ2ZBCYE71YV2QMTVGWTVPB6A10ASVCKXDHB05DKPSC7ZF6E9P9W1VE47394EQY7NXA47Q6R35M7P1MJPGP59D1Z8.D54QD1K5XCG5878T6YZ19AM60MQ6FC0YNVK7QY08KK0KM0FJJ3KQWYG112FN5T07KN7J0X35DF6WVBT9B8ZMZ3X2BXJ22X3KFQ6MV2G.15999", &emsg); GNUNET_assert (baseURI != NULL); GNUNET_assert (emsg == NULL); pk = GNUNET_CRYPTO_eddsa_key_create (); uri = GNUNET_FS_uri_loc_create (baseURI, pk, GNUNET_TIME_absolute_get ()); GNUNET_free (pk); if (NULL == uri) { GNUNET_break (0); GNUNET_FS_uri_destroy (baseURI); return 1; } if (! GNUNET_FS_uri_test_loc (uri)) { GNUNET_break (0); GNUNET_FS_uri_destroy (uri); GNUNET_FS_uri_destroy (baseURI); return 1; } uri2 = GNUNET_FS_uri_loc_get_uri (uri); if (! GNUNET_FS_uri_test_equal (baseURI, uri2)) { GNUNET_break (0); GNUNET_FS_uri_destroy (uri); GNUNET_FS_uri_destroy (uri2); GNUNET_FS_uri_destroy (baseURI); return 1; } GNUNET_FS_uri_destroy (uri2); GNUNET_FS_uri_destroy (baseURI); uric = GNUNET_FS_uri_to_string (uri); #if 0 /* not for the faint of heart: */ printf ("URI: `%s'\n", uric); #endif uri2 = GNUNET_FS_uri_parse (uric, &emsg); GNUNET_free (uric); if (uri2 == NULL) { fprintf (stderr, "URI parsing failed: %s\n", emsg); GNUNET_break (0); GNUNET_FS_uri_destroy (uri); GNUNET_free (emsg); return 1; } GNUNET_assert (NULL == emsg); if (GNUNET_YES != GNUNET_FS_uri_test_equal (uri, uri2)) { GNUNET_break (0); GNUNET_FS_uri_destroy (uri); GNUNET_FS_uri_destroy (uri2); return 1; } GNUNET_FS_uri_destroy (uri2); GNUNET_FS_uri_destroy (uri); return 0; }
static void * progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *event) { switch (event->status) { case GNUNET_FS_STATUS_SEARCH_RESULT: if (sks_search == event->value.search.sc) { if (!GNUNET_FS_uri_test_equal (sks_expect_uri, event->value.search.specifics.result.uri)) { FPRINTF (stderr, "%s", "Wrong result for sks search!\n"); err = 1; } /* give system 1ms to initiate update search! */ GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS, &abort_sks_search_task, NULL); } else if (ksk_search == event->value.search.sc) { if (!GNUNET_FS_uri_test_equal (ksk_expect_uri, event->value.search.specifics.result.uri)) { FPRINTF (stderr, "%s", "Wrong result for ksk search!\n"); err = 1; } GNUNET_SCHEDULER_add_now (&abort_ksk_search_task, NULL); } else { FPRINTF (stderr, "%s", "Unexpected search result received!\n"); GNUNET_break (0); } break; case GNUNET_FS_STATUS_SEARCH_ERROR: FPRINTF (stderr, "Error searching file: %s\n", event->value.search.specifics.error.message); if (sks_search == event->value.search.sc) GNUNET_SCHEDULER_add_now (&abort_sks_search_task, NULL); else if (ksk_search == event->value.search.sc) GNUNET_SCHEDULER_add_now (&abort_ksk_search_task, NULL); else GNUNET_break (0); break; case GNUNET_FS_STATUS_SEARCH_START: GNUNET_assert ((NULL == event->value.search.cctx) || (0 == strcmp ("sks_search", event->value.search.cctx)) || (0 == strcmp ("ksk_search", event->value.search.cctx))); if (NULL == event->value.search.cctx) { GNUNET_assert (0 == strcmp ("sks_search", event->value.search.pctx)); update_started = GNUNET_YES; } GNUNET_assert (1 == event->value.search.anonymity); break; case GNUNET_FS_STATUS_SEARCH_RESULT_STOPPED: return NULL; case GNUNET_FS_STATUS_SEARCH_STOPPED: return NULL; default: FPRINTF (stderr, "Unexpected event: %d\n", event->status); break; } return event->value.search.cctx; }