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);
  }
}