static void zone_proc (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd) { int failed = GNUNET_NO; if ((zone == NULL) && (label == NULL)) { GNUNET_break (2 == returned_records); if (2 == returned_records) { res = 0; /* Last iteraterator callback, we are done */ zi = NULL; } else res = 1; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received last result, iteration done after receing %u results\n", returned_records ); GNUNET_SCHEDULER_add_now (&end, NULL); return; } GNUNET_assert (NULL != zone); if (0 == memcmp (zone, privkey, sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) { if (0 == strcmp (label, s_name_1)) { if (rd_count == 1) { if (GNUNET_YES != GNUNET_GNSRECORD_records_cmp (rd, s_rd_1)) { failed = GNUNET_YES; GNUNET_break (0); } } else { failed = GNUNET_YES; GNUNET_break (0); } } else if (0 == strcmp (label, s_name_2)) { if (rd_count == 1) { if (GNUNET_YES != GNUNET_GNSRECORD_records_cmp(rd, s_rd_2)) { failed = GNUNET_YES; GNUNET_break (0); } } else { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Received invalid record count\n"); failed = GNUNET_YES; GNUNET_break (0); } } else { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Comparing result failed: got name `%s' for first zone\n", label); failed = GNUNET_YES; GNUNET_break (0); } } else if (0 == memcmp (zone, privkey2, sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Received data for not requested zone\n"); failed = GNUNET_YES; GNUNET_break (0); } else { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Received invalid zone\n"); failed = GNUNET_YES; GNUNET_break (0); } if (failed == GNUNET_NO) { returned_records ++; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Telling namestore to send the next result\n"); GNUNET_NAMESTORE_zone_iterator_next (zi); } else { GNUNET_break (0); GNUNET_SCHEDULER_add_now (&end, NULL); } }
static void zone_proc (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone_key, const char *name, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd) { static int returned_records; static int fail = GNUNET_NO; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Comparing results name %s\n", name); if (0 != memcmp (zone_key, privkey, sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Monitoring returned wrong zone key\n"); GNUNET_break (0); GNUNET_SCHEDULER_cancel (endbadly_task); endbadly_task = GNUNET_SCHEDULER_add_now (&endbadly, NULL); return; } if (0 == strcmp (name, s_name_1)) { if (GNUNET_YES != GNUNET_GNSRECORD_records_cmp(rd, s_rd_1)) { GNUNET_break (0); fail = GNUNET_YES; } } else if (0 == strcmp (name, s_name_2)) { if (GNUNET_YES != GNUNET_GNSRECORD_records_cmp(rd, s_rd_2)) { GNUNET_break (0); fail = GNUNET_YES; } } else { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Invalid name %s\n", name); GNUNET_break (0); fail = GNUNET_YES; } if (2 == ++returned_records) { if (endbadly_task != NULL) { GNUNET_SCHEDULER_cancel (endbadly_task); endbadly_task = NULL; } if (GNUNET_YES == fail) GNUNET_SCHEDULER_add_now (&endbadly, NULL); else GNUNET_SCHEDULER_add_now (&end, NULL); } }