gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r20657 - gnunet/src/namestore


From: gnunet
Subject: [GNUnet-SVN] r20657 - gnunet/src/namestore
Date: Wed, 21 Mar 2012 16:43:56 +0100

Author: wachs
Date: 2012-03-21 16:43:56 +0100 (Wed, 21 Mar 2012)
New Revision: 20657

Modified:
   gnunet/src/namestore/gnunet-service-namestore.c
   gnunet/src/namestore/namestore_api.c
Log:
- changes to record remove


Modified: gnunet/src/namestore/gnunet-service-namestore.c
===================================================================
--- gnunet/src/namestore/gnunet-service-namestore.c     2012-03-21 15:41:47 UTC 
(rev 20656)
+++ gnunet/src/namestore/gnunet-service-namestore.c     2012-03-21 15:43:56 UTC 
(rev 20657)
@@ -1016,16 +1016,30 @@
   found = GNUNET_SYSERR;
   for (c = 0; c < rd_count; c++)
   {
-    if ((rd[c].expiration.abs_value == rrc->rd->expiration.abs_value) &&
-        (rd[c].flags == rrc->rd->flags) &&
-        (rd[c].record_type == rrc->rd->record_type) &&
-        (rd[c].data_size == rrc->rd->data_size) &&
-        (0 == memcmp (rd[c].data, rrc->rd->data, rrc->rd->data_size)))
-        {
-          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Found record to remove!\n", 
rd_count);
-          found = c;
-          break;
-        }
+    if (rd[c].expiration.abs_value != rrc->rd->expiration.abs_value)
+      continue;
+    GNUNET_break(0);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "SENT FLAGES: %u \n",rd[c].flags);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "STORED FLAGES: %u 
\n",rrc->rd->flags);
+    /*
+    if (rd[c].flags != rrc->rd->flags)
+       continue;*/
+    GNUNET_break(0);
+    if (rd[c].record_type != rrc->rd->record_type)
+       continue;
+    GNUNET_break(0);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "SENT FLAGES: %u \n",rd[c].data_size);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "STORED FLAGES: %u 
\n",rrc->rd->data_size);
+    /*
+    if (rd[c].data_size != rrc->rd->data_size)
+       continue;
+    GNUNET_break(0);
+    if (0 != memcmp (rd[c].data, rrc->rd->data, rrc->rd->data_size))
+        continue;
+    GNUNET_break(0); */
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Found record to remove!\n", 
rd_count);
+    found = c;
+    break;
   }
   if (GNUNET_SYSERR == found)
   {
@@ -1127,7 +1141,7 @@
     return;
   }
 
-  if ((rd_count != 1) || (rd_ser_len < 1) || (name_len >=256) || (name_len == 
0))
+  if ((name_len >=256) || (name_len == 0))
   {
     GNUNET_break_op (0);
     GNUNET_SERVER_receive_done (client, GNUNET_OK);
@@ -1143,13 +1157,6 @@
     return;
   }
 
-  if ((rd_count != 1) || (rd_ser_len < 1) || (name_len >=256) || (name_len == 
0))
-  {
-    GNUNET_break_op (0);
-    GNUNET_SERVER_receive_done (client, GNUNET_OK);
-    return;
-  }
-
   pkey_tmp = (char *) &rr_msg[1];
   name_tmp = &pkey_tmp[key_len];
   rd_ser = &name_tmp[name_len];
@@ -1188,31 +1195,51 @@
     GNUNET_CONTAINER_multihashmap_put(zonekeys, &long_hash, cc, 
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
   }
 
+
   struct GNUNET_NAMESTORE_RecordData rd[rd_count];
   res = GNUNET_NAMESTORE_records_deserialize(rd_ser_len, rd_ser, rd_count, rd);
-  if ((res != GNUNET_OK) || (rd_count != 1))
+  if ((res != GNUNET_OK) || (rd_count > 1))
   {
     GNUNET_break_op (0);
     goto send;
   }
 
-  struct RemoveRecordContext rrc;
-  rrc.rd = rd;
-  rrc.pkey = pkey;
+  if (0 == rd_count)
+  {
+    /* remove the whole name and all records */
+    /* Database operation */
+    res = GSN_database->remove_records (GSN_database->cls,
+                                         &pubkey_hash,
+                                         name_tmp);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Removing name `%s': %s\n",
+        name_tmp, (GNUNET_OK == res) ? "OK" : "FAIL");
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Removing record for name `%s' in zone 
`%s'\n", name_tmp, GNUNET_short_h2s(&pubkey_hash));
+    if (GNUNET_OK != res)
+      /* Could not remove entry from database */
+      res = 4;
+    else
+      res = 0;
+  }
+  else
+  {
+    /* remove a single record */
+    struct RemoveRecordContext rrc;
+    rrc.rd = rd;
+    rrc.pkey = pkey;
 
-  /* Database operation */
-  res = GSN_database->iterate_records (GSN_database->cls,
-                                       &pubkey_hash,
-                                       name_tmp,
-                                       0,
-                                       handle_record_remove_it, &rrc);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Removing record for name `%s' in 
zone `%s'\n", name_tmp, GNUNET_short_h2s(&pubkey_hash));
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Removing record for name `%s': %s\n",
-      name_tmp, (rrc.op_res == 0) ? "OK" : "FAIL");
-  res = rrc.op_res;
+    /* Database operation */
+    res = GSN_database->iterate_records (GSN_database->cls,
+                                         &pubkey_hash,
+                                         name_tmp,
+                                         0,
+                                         handle_record_remove_it, &rrc);
 
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Removing record for name `%s': %s\n",
+        name_tmp, (rrc.op_res == 0) ? "OK" : "FAIL");
+    res = rrc.op_res;
+  }
   /* Send response */
 send:
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending `%s' message\n", 
"RECORD_REMOVE_RESPONSE");

Modified: gnunet/src/namestore/namestore_api.c
===================================================================
--- gnunet/src/namestore/namestore_api.c        2012-03-21 15:41:47 UTC (rev 
20656)
+++ gnunet/src/namestore/namestore_api.c        2012-03-21 15:43:56 UTC (rev 
20657)
@@ -1221,7 +1221,7 @@
  * @param h handle to the namestore
  * @param pkey private key of the zone
  * @param name name that is being mapped (at most 255 characters long)
- * @param rd record data
+ * @param rd record data, remove specific record,  NULL to remove the name and 
all records
  * @param cont continuation to call when done
  * @param cont_cls closure for cont
  * @return handle to abort the request
@@ -1244,6 +1244,7 @@
   size_t name_len = 0;
   size_t key_len = 0;
   uint32_t rid = 0;
+  uint16_t rd_count = 1;
 
   GNUNET_assert (NULL != h);
 
@@ -1260,9 +1261,13 @@
   GNUNET_assert (pkey_enc != NULL);
   key_len = ntohs (pkey_enc->len);
 
-  rd_ser_len = GNUNET_NAMESTORE_records_get_size(1, rd);
+  if (NULL == rd)
+    rd_count = 0;
+  else
+    rd_count = 1;
+  rd_ser_len = GNUNET_NAMESTORE_records_get_size (rd_count, rd);
   char rd_ser[rd_ser_len];
-  GNUNET_NAMESTORE_records_serialize(1, rd, rd_ser_len, rd_ser);
+  GNUNET_NAMESTORE_records_serialize (rd_count, rd, rd_ser_len, rd_ser);
 
   name_len = strlen (name) + 1;
 
@@ -1284,7 +1289,7 @@
   msg->gns_header.r_id = htonl (rid);
   msg->name_len = htons (name_len);
   msg->rd_len = htons (rd_ser_len);
-  msg->rd_count = htons (1);
+  msg->rd_count = htons (rd_count);
   msg->pkey_len = htons (key_len);
   memcpy (pkey_tmp, pkey_enc, key_len);
   memcpy (name_tmp, name, name_len);




reply via email to

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