[Top][All Lists]
[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r20657 - gnunet/src/namestore,
gnunet <=