gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r20518 - gnunet/src/gns


From: gnunet
Subject: [GNUnet-SVN] r20518 - gnunet/src/gns
Date: Thu, 15 Mar 2012 13:18:21 +0100

Author: schanzen
Date: 2012-03-15 13:18:20 +0100 (Thu, 15 Mar 2012)
New Revision: 20518

Modified:
   gnunet/src/gns/gns.h
   gnunet/src/gns/gnunet-service-gns.c
Log:
-readd and fix zone iteration


Modified: gnunet/src/gns/gns.h
===================================================================
--- gnunet/src/gns/gns.h        2012-03-15 11:30:58 UTC (rev 20517)
+++ gnunet/src/gns/gns.h        2012-03-15 12:18:20 UTC (rev 20518)
@@ -29,6 +29,7 @@
 #define GNS_H
 
 #define GNUNET_GNS_TLD "gnunet"
+#define GNUNET_GNS_DHT_MAX_UPDATE_INTERVAL 3600
 
 GNUNET_NETWORK_STRUCT_BEGIN
 

Modified: gnunet/src/gns/gnunet-service-gns.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns.c 2012-03-15 11:30:58 UTC (rev 20517)
+++ gnunet/src/gns/gnunet-service-gns.c 2012-03-15 12:18:20 UTC (rev 20518)
@@ -233,15 +233,36 @@
   struct GNUNET_CRYPTO_HashAsciiEncoded xor_hash_string;
   uint32_t rd_payload_length;
   char* nrb_data = NULL;
+  size_t namelen;
 
   /* we're done */
   if (NULL == name)
   {
-    GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Zone iteration finished\n");
+    GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+               "Zone iteration finished. Rescheduling put in %ds\n",
+               GNUNET_GNS_DHT_MAX_UPDATE_INTERVAL);
     GNUNET_NAMESTORE_zone_iteration_stop (namestore_iter);
-    zone_update_taskid = GNUNET_SCHEDULER_add_now (&update_zone_dht_start,
+    zone_update_taskid = GNUNET_SCHEDULER_add_delayed (
+                                        GNUNET_TIME_relative_multiply(
+                                            GNUNET_TIME_UNIT_SECONDS,
+                                            GNUNET_GNS_DHT_MAX_UPDATE_INTERVAL
+                                            ),
+                                            &update_zone_dht_start,
+                                            NULL);
+    return;
+  }
+  
+  namelen = strlen(name) + 1;
+  
+  if (signature == NULL)
+  {
+    GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
+               "No signature for %s record data provided! Skipping...\n",
+               name);
+    zone_update_taskid = GNUNET_SCHEDULER_add_now (&update_zone_dht_next,
                                                    NULL);
     return;
+
   }
   
   GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
@@ -249,34 +270,33 @@
   
   rd_payload_length = GNUNET_NAMESTORE_records_get_size (rd_count, rd);
   
-  nrb = GNUNET_malloc(rd_payload_length + strlen(name) + 1 
+  nrb = GNUNET_malloc(rd_payload_length + namelen
                       + sizeof(struct GNSNameRecordBlock));
   
-  if (signature != NULL)
-    nrb->signature = *signature;
+  nrb->signature = *signature;
   
   nrb->public_key = *key;
 
   nrb->rd_count = htonl(rd_count);
   
-  memset(&nrb[1], 0, strlen(name) + 1);
-  memcpy(&nrb[1], name, strlen(name));
+  memcpy(&nrb[1], name, namelen);
 
   nrb_data = (char*)&nrb[1];
-  nrb_data += strlen(name) + 1;
+  nrb_data += namelen;
 
-  rd_payload_length += sizeof(struct GNSNameRecordBlock) +
-    strlen(name) + 1;
+  rd_payload_length += sizeof(struct GNSNameRecordBlock) + namelen;
 
   if (-1 == GNUNET_NAMESTORE_records_serialize (rd_count,
                                                 rd,
                                                 rd_payload_length,
                                                 nrb_data))
   {
-    GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Record serialization failed!\n");
+    GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
+               "Record serialization failed! Skipping...\n");
     GNUNET_free(nrb);
+    zone_update_taskid = GNUNET_SCHEDULER_add_now (&update_zone_dht_next,
+                                                   NULL);
     return;
-    //FIXME what to do
   }
 
 
@@ -286,6 +306,7 @@
   GNUNET_CRYPTO_hash(name, strlen(name), &name_hash);
   GNUNET_CRYPTO_hash_xor(&zone_hash, &name_hash, &xor_hash);
   GNUNET_CRYPTO_hash_to_enc (&xor_hash, &xor_hash_string);
+
   GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
              "putting records for %s under key: %s with size %d\n",
              name, (char*)&xor_hash_string, rd_payload_length);
@@ -323,26 +344,35 @@
 static void
 update_zone_dht_start(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Starting DHT zone update!\n");
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Scheduling DHT zone update!\n");
   if (0 == num_public_records)
   {
     dht_update_interval = GNUNET_TIME_relative_multiply(
-                                                      GNUNET_TIME_UNIT_SECONDS,
-                                                      1);
+                                            GNUNET_TIME_UNIT_SECONDS,
+                                            
GNUNET_GNS_DHT_MAX_UPDATE_INTERVAL);
+    GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+               "No records in db. Adjusted DHT update interval to %ds\n",
+               GNUNET_GNS_DHT_MAX_UPDATE_INTERVAL);
   }
   else
   {
+    
     dht_update_interval = GNUNET_TIME_relative_multiply(
                                                       GNUNET_TIME_UNIT_SECONDS,
                                                      
(3600/num_public_records));
+    GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+               "Adjusted DHT update interval to %ds!\n",
+               (3600/num_public_records));
   }
-  num_public_records = 0; //start counting again
+
+  /* start counting again */
+  num_public_records = 0;
   namestore_iter = GNUNET_NAMESTORE_zone_iteration_start (namestore_handle,
-                                                          &zone_hash,
-                                                          
GNUNET_NAMESTORE_RF_AUTHORITY,
-                                                          
GNUNET_NAMESTORE_RF_PRIVATE,
-                                                          &put_gns_record,
-                                                          NULL);
+                                                 &zone_hash,
+                                                 GNUNET_NAMESTORE_RF_AUTHORITY,
+                                                 GNUNET_NAMESTORE_RF_PRIVATE,
+                                                 &put_gns_record,
+                                                 NULL);
 }
 
 
@@ -731,7 +761,7 @@
    */
   dht_update_interval = GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
                                                       1);
-  //zone_update_taskid = GNUNET_SCHEDULER_add_now (&update_zone_dht_start, 
NULL);
+  zone_update_taskid = GNUNET_SCHEDULER_add_now (&update_zone_dht_start, NULL);
 
   GNUNET_SERVER_add_handlers (server, handlers);
   




reply via email to

[Prev in Thread] Current Thread [Next in Thread]