session time out for http client/server
[oweals/gnunet.git] / src / set / ibf.c
index 45b852f781c91ca6f07db66958e73164a3bd380b..4d40f1f353647fc3537714f7e6985f8a460994d3 100644 (file)
@@ -4,7 +4,7 @@
 
       GNUnet is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published
-      by the Free Software Foundation; either version 2, or (at your
+      by the Free Software Foundation; either version 3, or (at your
       option) any later version.
 
       GNUnet is distributed in the hope that it will be useful, but
@@ -97,8 +97,9 @@ ibf_get_indices (const struct InvertibleBloomFilter *ibf,
 {
   uint32_t filled;
   uint32_t i;
-  uint32_t bucket = key.key_val & 0xFFFFFFFF;
+  uint32_t bucket;
 
+  bucket = GNUNET_CRYPTO_crc32_n (&key, sizeof key);
   for (i = 0, filled=0; filled < ibf->hash_num; i++)
   {
     unsigned int j;
@@ -133,7 +134,7 @@ ibf_insert_into  (struct InvertibleBloomFilter *ibf,
 
 
 /**
- * Insert an element into an IBF.
+ * Insert a key into an IBF.
  *
  * @param ibf the IBF
  * @param key the element's hash code
@@ -147,6 +148,23 @@ ibf_insert (struct InvertibleBloomFilter *ibf, struct IBF_Key key)
   ibf_insert_into (ibf, key, buckets, 1);
 }
 
+
+/**
+ * Remove a key from an IBF.
+ *
+ * @param ibf the IBF
+ * @param key the element's hash code
+ */
+void
+ibf_remove (struct InvertibleBloomFilter *ibf, struct IBF_Key key)
+{
+  int buckets[ibf->hash_num];
+  GNUNET_assert (ibf->hash_num <= ibf->size);
+  ibf_get_indices (ibf, key, buckets);
+  ibf_insert_into (ibf, key, buckets, -1);
+}
+
+
 /**
  * Test is the IBF is empty, i.e. all counts, keys and key hashes are zero.
  */
@@ -235,7 +253,7 @@ ibf_decode (struct InvertibleBloomFilter *ibf,
 /**
  * Write buckets from an ibf to a buffer.
  * Exactly (IBF_BUCKET_SIZE*ibf->size) bytes are written to buf.
- * 
+ *
  * @param ibf the ibf to write
  * @param start with which bucket to start
  * @param count how many buckets to write
@@ -261,7 +279,6 @@ ibf_write_slice (const struct InvertibleBloomFilter *ibf, uint32_t start, uint32
   /* copy counts */
   count_dst = (struct IBF_Count *) key_hash_dst;
   memcpy (count_dst, ibf->count + start, count * sizeof *count_dst);
-  count_dst += count;
 }
 
 
@@ -294,7 +311,6 @@ ibf_read_slice (const void *buf, uint32_t start, uint32_t count, struct Invertib
   /* copy counts */
   count_src = (struct IBF_Count *) key_hash_src;
   memcpy (ibf->count + start, count_src, count * sizeof *count_src);
-  count_src += count;
 }