#include "gnunet_dns_service.h"
#include "gnunet_dht_service.h"
#include "gnunet_namestore_service.h"
-#include "gnunet_vpn_service.h"
#include "gnunet_dns_service.h"
#include "gnunet_resolver_service.h"
#include "gnunet_dnsparser_lib.h"
#include "block_gns.h"
#include "gns.h"
#include "gnunet-service-gns_resolver.h"
+#ifndef WINDOWS
+#include "gnunet_vpn_service.h"
+#endif
+
/**
* Default DHT timeout
*/
static struct GNUNET_NAMESTORE_Handle *namestore_handle;
+#ifndef WINDOWS
/**
* Our handle to the vpn service
*/
static struct GNUNET_VPN_Handle *vpn_handle;
+#endif
/**
* Resolver handle to the dht
{
for (i=0; i < num_records; i++)
{
- if ((strcmp (name, "+") == 0) &&
+ if ((strcmp (name, GNUNET_GNS_MASTERZONE_STR) == 0) &&
(rd[i].record_type == GNUNET_GNS_RECORD_PSEU))
{
/* found pseu */
{
gph->namestore_task = GNUNET_NAMESTORE_lookup_record (namestore_handle,
&gph->auth->zone,
- "+",
+ GNUNET_GNS_MASTERZONE_STR,
GNUNET_GNS_RECORD_PSEU,
&process_auth_discovery_ns_result,
gph);
return GNUNET_OK;
}
-
-/**
- * Cleanup ns tasks
- *
- * @param cls closure to iterator
- * @param node heap nodes
- * @param element the namestorebgtask
- * @param cost heap cost
- * @return always GNUNET_YES
- */
-static int
-cleanup_pending_ns_tasks (void* cls,
- struct GNUNET_CONTAINER_HeapNode *node,
- void *element,
- GNUNET_CONTAINER_HeapCostType cost)
-{
- struct NamestoreBGTask *nbg = element;
-
- GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
- "GNS_CLEANUP: Terminating ns task\n");
- GNUNET_NAMESTORE_cancel (nbg->qe);
-
- GNUNET_CONTAINER_heap_remove_node (node);
- return GNUNET_YES;
-}
-
-
/**
* finish lookup
*
const struct GNUNET_NAMESTORE_RecordData *rd);
-/**
- * Cleanup background lookups FIXME get rid of this?? YES this doesn't do
- * anything! => find in code and remove all references to the heap
- *
- * @param cls closure to iterator
- * @param node heap nodes
- * @param element the resolver handle
- * @param cost heap cost
- * @return always GNUNET_YES
- */
-static int
-cleanup_pending_background_queries (void* cls,
- struct GNUNET_CONTAINER_HeapNode *node,
- void *element,
- GNUNET_CONTAINER_HeapCostType cost)
-{
- struct ResolverHandle *rh = element;
-
- GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
- "GNS_CLEANUP-%llu: Terminating background lookup\n",
- rh->id);
- GNUNET_CONTAINER_heap_remove_node (node);
- if (0 == GNUNET_CONTAINER_heap_get_size (dht_lookup_heap))
- {
- GNUNET_CONTAINER_heap_iterate (ns_task_heap,
- &cleanup_pending_ns_tasks,
- NULL);
- }
- return GNUNET_YES;
-}
-
-
/**
* Helper function to free resolver handle
*
GNUNET_RESOLVER_request_cancel (rh->dns_resolver_handle);
if (NULL != rh->rd.data)
GNUNET_free ((void*)(rh->rd.data));
+ if (NULL != rh->dht_heap_node)
+ GNUNET_CONTAINER_heap_remove_node (rh->dht_heap_node);
GNUNET_free (rh);
}
void
gns_resolver_cleanup ()
{
- unsigned int s;
struct GetPseuAuthorityHandle *tmp;
+ struct ResolverHandle *rh;
+ struct NamestoreBGTask *nbg;
while (NULL != (tmp = gph_head))
{
finish_get_auth (nah_head, nah_head->proc_cls);
}
- s = GNUNET_CONTAINER_heap_get_size (dht_lookup_heap);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "GNS_CLEANUP: %u pending background queries to terminate\n",
- s);
- if (0 != s)
- GNUNET_CONTAINER_heap_iterate (dht_lookup_heap,
- &cleanup_pending_background_queries,
- NULL);
- else if (0 != GNUNET_CONTAINER_heap_get_size (ns_task_heap))
+ while (NULL != (rh = GNUNET_CONTAINER_heap_remove_root(dht_lookup_heap)))
+ {
+ GNUNET_free (rh);
+ }
+ GNUNET_CONTAINER_heap_destroy (dht_lookup_heap);
+ dht_lookup_heap = NULL;
+
+ while (NULL != (nbg = GNUNET_CONTAINER_heap_remove_root(ns_task_heap)))
{
- GNUNET_CONTAINER_heap_iterate (ns_task_heap,
- &cleanup_pending_ns_tasks,
- NULL);
+ GNUNET_NAMESTORE_cancel (nbg->qe);
+ GNUNET_free (nbg);
}
- // FIXME: what about freeing the heaps themselves?
+ GNUNET_CONTAINER_heap_destroy (ns_task_heap);
+ ns_task_heap = NULL;
+
}
}
+#ifndef WINDOWS
/**
* VPN redirect result callback
*
rh->id);
rh->proc (rh->proc_cls, rh, 0, NULL);
}
+#endif
/**
/* results found yay */
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
- "GNS_PHASE_REC_VPN-%llu: Record resolved from VPN!", rh->id);
+ "GNS_PHASE_REC_VPN-%llu: Record resolved from VPN!\n",
+ rh->id);
finish_lookup(rh, rlh, rd_count, rd);
}
af = AF_INET;
else
af = AF_INET6;
+#ifndef WINDOWS
if (NULL == vpn_handle)
{
vpn_handle = GNUNET_VPN_connect (cfg);
GNUNET_TIME_UNIT_FOREVER_ABS, //FIXME
&process_record_result_vpn,
rh);
+#else
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Error connecting to VPN (not available on W32 yet)\n");
+ finish_lookup (rh, rh->proc_cls, 0, NULL);
+#endif
}
/* Check for key revocation and delegate */
rh->namestore_task = GNUNET_NAMESTORE_lookup_record (namestore_handle,
&rh->authority,
- "+",
+ GNUNET_GNS_MASTERZONE_STR,
GNUNET_GNS_RECORD_REV,
&process_pkey_revocation_result_ns,
rh);
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"GNS_POSTPROCESS: Postprocessing\n");
- if (0 == strcmp(rh->name, "+"))
+ if (0 == strcmp(rh->name, GNUNET_GNS_MASTERZONE_STR))
repl_string = rlh->name;
else
repl_string = rlh->name+strlen(rh->name)+1;
check_dht = GNUNET_NO;
}
- if ((0 != strcmp (rh->name, "+")) && (GNUNET_YES == is_srv (rh->name)))
+ if ((0 != strcmp (rh->name, GNUNET_GNS_MASTERZONE_STR)) && (GNUNET_YES == is_srv (rh->name)))
check_dht = GNUNET_NO;
if (GNUNET_YES == rh->only_cached)
/* Check for key revocation and delegate */
rh->namestore_task = GNUNET_NAMESTORE_lookup_record (namestore_handle,
&rh->authority,
- "+",
+ GNUNET_GNS_MASTERZONE_STR,
GNUNET_GNS_RECORD_REV,
&process_pkey_revocation_result_ns,
rh);
else
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Cannot handle this TLD %s\n", string_hash);
-
+ _("Not a GADS TLD: `%s'\n"),
+ name);
if (GNUNET_SCHEDULER_NO_TASK != rh->timeout_task)
GNUNET_SCHEDULER_cancel (rh->timeout_task);
GNUNET_CONTAINER_DLL_remove (rlh_head, rlh_tail, rh);