hash and validate a dns-block
authorPhilipp Tölke <toelke@in.tum.de>
Fri, 8 Oct 2010 07:36:36 +0000 (07:36 +0000)
committerPhilipp Tölke <toelke@in.tum.de>
Fri, 8 Oct 2010 07:36:36 +0000 (07:36 +0000)
src/block/plugin_block_dns.c
src/include/gnunet_block_dns.h [new file with mode: 0644]
src/vpn/gnunet-block-dns.h [deleted file]

index 743747c8566d7e29c365bd66e3ea0230fae19c4e..8435c1be0c3856bec67b0a2c3d110281f897a277 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "platform.h"
 #include "plugin_block.h"
+#include "gnunet_block_dns.h"
 
 #define DEBUG_DHT GNUNET_NO
 
@@ -60,9 +61,19 @@ block_plugin_dht_evaluate (void *cls,
   case GNUNET_BLOCK_TYPE_DNS:
     if (xquery_size != 0)
       return GNUNET_BLOCK_EVALUATION_REQUEST_INVALID;
+
     if (reply_block_size == 0)
       return GNUNET_BLOCK_EVALUATION_REQUEST_VALID;
-    return GNUNET_BLOCK_EVALUATION_OK_LAST;
+
+    if (reply_block_size < sizeof(struct GNUNET_DNS_Record))
+      return GNUNET_BLOCK_EVALUATION_RESULT_INVALID;
+
+    const struct GNUNET_DNS_Record* rec = reply_block;
+    if(reply_block_size != (sizeof(struct GNUNET_DNS_Record) + rec->namelen - 1))
+      return GNUNET_BLOCK_EVALUATION_RESULT_INVALID;
+
+    /* How to decide whether there are no more? */
+    return GNUNET_BLOCK_EVALUATION_OK_MORE;
   default:
     return GNUNET_BLOCK_EVALUATION_TYPE_NOT_SUPPORTED;
   }
@@ -89,7 +100,8 @@ block_plugin_dht_get_key (void *cls,
 {
   if (type != GNUNET_BLOCK_TYPE_DNS)
     return GNUNET_SYSERR;
-  return GNUNET_SYSERR;
+  GNUNET_CRYPTO_hash(block, block_size, key);
+  return GNUNET_OK;
 }
 
 /**
diff --git a/src/include/gnunet_block_dns.h b/src/include/gnunet_block_dns.h
new file mode 100644 (file)
index 0000000..d8f3fa5
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef _GNVPN_BLOCKDNS_H_
+#define _GNVPN_BLOCKDNS_H_
+
+#include "gnunet_common.h"
+
+/**
+ * Bitmask describing what ip-services are supported by services
+ * It is 2 bytes long
+ */
+struct GNUNET_ipservices {
+  unsigned UDP:1 GNUNET_PACKED;
+  unsigned TCP:1 GNUNET_PACKED;
+  unsigned RESERVED:14 GNUNET_PACKED;
+};
+
+/**
+ * This is the structure describing an dns-record such as www.gnunet.
+ */
+struct GNUNET_DNS_Record
+{
+  /**
+   * The peer providing this service
+   */
+  struct GNUNET_PeerIdentity peer;
+
+  /**
+   * The descriptor for the service
+   * (a peer may provide more than one service)
+   */
+  GNUNET_HashCode service_descriptor;
+
+  /**
+   * What connection-types (UDP, TCP, ...) are supported by the service
+   */
+  struct GNUNET_ipservices connectiontypes;
+
+  /**
+   * The length of the name of the service
+   */
+  unsigned char namelen;
+
+  /**
+   * The name of the service
+   * This is namelen bytes
+   */
+  char name[1];
+};
+
+#endif
diff --git a/src/vpn/gnunet-block-dns.h b/src/vpn/gnunet-block-dns.h
deleted file mode 100644 (file)
index d8f3fa5..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef _GNVPN_BLOCKDNS_H_
-#define _GNVPN_BLOCKDNS_H_
-
-#include "gnunet_common.h"
-
-/**
- * Bitmask describing what ip-services are supported by services
- * It is 2 bytes long
- */
-struct GNUNET_ipservices {
-  unsigned UDP:1 GNUNET_PACKED;
-  unsigned TCP:1 GNUNET_PACKED;
-  unsigned RESERVED:14 GNUNET_PACKED;
-};
-
-/**
- * This is the structure describing an dns-record such as www.gnunet.
- */
-struct GNUNET_DNS_Record
-{
-  /**
-   * The peer providing this service
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /**
-   * The descriptor for the service
-   * (a peer may provide more than one service)
-   */
-  GNUNET_HashCode service_descriptor;
-
-  /**
-   * What connection-types (UDP, TCP, ...) are supported by the service
-   */
-  struct GNUNET_ipservices connectiontypes;
-
-  /**
-   * The length of the name of the service
-   */
-  unsigned char namelen;
-
-  /**
-   * The name of the service
-   * This is namelen bytes
-   */
-  char name[1];
-};
-
-#endif