gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r33308 - in gnunet/src: include peerstore


From: gnunet
Subject: [GNUnet-SVN] r33308 - in gnunet/src: include peerstore
Date: Fri, 16 May 2014 14:54:18 +0200

Author: otarabai
Date: 2014-05-16 14:54:18 +0200 (Fri, 16 May 2014)
New Revision: 33308

Modified:
   gnunet/src/include/gnunet_peerstore_plugin.h
   gnunet/src/include/gnunet_peerstore_service.h
   gnunet/src/peerstore/gnunet-service-peerstore.c
   gnunet/src/peerstore/peerstore.h
   gnunet/src/peerstore/peerstore_api.c
   gnunet/src/peerstore/peerstore_common.c
   gnunet/src/peerstore/peerstore_common.h
   gnunet/src/peerstore/plugin_peerstore_sqlite.c
Log:
towards peerstore iterate


Modified: gnunet/src/include/gnunet_peerstore_plugin.h
===================================================================
--- gnunet/src/include/gnunet_peerstore_plugin.h        2014-05-16 12:32:44 UTC 
(rev 33307)
+++ gnunet/src/include/gnunet_peerstore_plugin.h        2014-05-16 12:54:18 UTC 
(rev 33308)
@@ -39,22 +39,6 @@
 
 
 /**
- * Function called by for each matching record.
- *
- * @param cls closure
- * @param peer peer identity
- * @param sub_system name of the GNUnet sub system responsible
- * @param value stored value
- * @param size size of stored value
- */
-typedef void (*GNUNET_PEERSTORE_RecordIterator) (void *cls,
-    const char *sub_system,
-    const struct GNUNET_PeerIdentity *peer,
-    const char *key,
-    const void *value,
-    size_t size);
-
-/**
  * @brief struct returned by the initialization function of the plugin
  */
 struct GNUNET_PEERSTORE_PluginFunctions
@@ -103,7 +87,7 @@
       const char *sub_system,
       const struct GNUNET_PeerIdentity *peer,
       const char *key,
-      GNUNET_PEERSTORE_RecordIterator iter, void *iter_cls);
+      GNUNET_PEERSTORE_Processor iter, void *iter_cls);
 
 };
 

Modified: gnunet/src/include/gnunet_peerstore_service.h
===================================================================
--- gnunet/src/include/gnunet_peerstore_service.h       2014-05-16 12:32:44 UTC 
(rev 33307)
+++ gnunet/src/include/gnunet_peerstore_service.h       2014-05-16 12:54:18 UTC 
(rev 33308)
@@ -56,6 +56,24 @@
 typedef void (*GNUNET_PEERSTORE_Continuation)(void *cls, int success);
 
 /**
+ * Function called by for each matching record.
+ *
+ * @param cls closure
+ * @param peer peer identity
+ * @param sub_system name of the GNUnet sub system responsible
+ * @param value stored value
+ * @param size size of stored value
+ * @return #GNUNET_YES to continue iterating, #GNUNET_NO to stop
+ */
+typedef int (*GNUNET_PEERSTORE_Processor) (void *cls,
+    const char *sub_system,
+    const struct GNUNET_PeerIdentity *peer,
+    const char *key,
+    const void *value,
+    size_t size,
+    struct GNUNET_TIME_Absolute expiry);
+
+/**
  * Connect to the PEERSTORE service.
  *
  * @return NULL on error
@@ -91,7 +109,7 @@
     const char *key,
     const void *value,
     size_t size,
-    struct GNUNET_TIME_Relative lifetime,
+    struct GNUNET_TIME_Absolute expiry,
     GNUNET_PEERSTORE_Continuation cont,
     void *cont_cls);
 

Modified: gnunet/src/peerstore/gnunet-service-peerstore.c
===================================================================
--- gnunet/src/peerstore/gnunet-service-peerstore.c     2014-05-16 12:32:44 UTC 
(rev 33307)
+++ gnunet/src/peerstore/gnunet-service-peerstore.c     2014-05-16 12:54:18 UTC 
(rev 33308)
@@ -80,6 +80,37 @@
 }
 
 /**
+ * Function called by for each matching record.
+ *
+ * @param cls closure
+ * @param peer peer identity
+ * @param sub_system name of the GNUnet sub system responsible
+ * @param value stored value
+ * @param size size of stored value
+ */
+int record_iterator(void *cls,
+    const char *sub_system,
+    const struct GNUNET_PeerIdentity *peer,
+    const char *key,
+    const void *value,
+    size_t size,
+    struct GNUNET_TIME_Absolute expiry)
+{
+  struct GNUNET_SERVER_TransmitContext *tc = cls;
+  struct StoreRecordMessage *srm;
+
+  srm = PEERSTORE_create_record_message(sub_system,
+      peer,
+      key,
+      value,
+      size,
+      expiry,
+      GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE);
+  GNUNET_SERVER_transmit_context_append_message(tc, (const struct 
GNUNET_MessageHeader *)srm);
+  return GNUNET_YES;
+}
+
+/**
  * Handle an iterate request from client
  *
  * @param cls unused
@@ -90,7 +121,32 @@
     struct GNUNET_SERVER_Client *client,
     const struct GNUNET_MessageHeader *message)
 {
+  struct GNUNET_PEERSTORE_Record *record;
+  struct GNUNET_SERVER_TransmitContext *tc;
 
+  record = PEERSTORE_parse_record_message(message);
+  if(NULL == record)
+  {
+    GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Malformed iterate request from 
client\n");
+    GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
+    return;
+  }
+  if(NULL == record->sub_system)
+  {
+    GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Sub system not supplied in client 
iterate request\n");
+    GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
+    return;
+  }
+  tc = GNUNET_SERVER_transmit_context_create (client);
+  if(GNUNET_OK == db->iterate_records(db->cls,
+      record->sub_system,
+      record->peer,
+      record->key,
+      &record_iterator,
+      tc))
+  {
+
+  }
 }
 
 /**
@@ -134,7 +190,7 @@
       record->key,
       record->value,
       record->value_size,
-      GNUNET_TIME_relative_to_absolute(record->lifetime)))
+      record->expiry))
   {
     response_type = GNUNET_MESSAGE_TYPE_PEERSTORE_STORE_RESULT_OK;
   }

Modified: gnunet/src/peerstore/peerstore.h
===================================================================
--- gnunet/src/peerstore/peerstore.h    2014-05-16 12:32:44 UTC (rev 33307)
+++ gnunet/src/peerstore/peerstore.h    2014-05-16 12:54:18 UTC (rev 33308)
@@ -71,9 +71,9 @@
   size_t value_size;
 
   /**
-   * Lifetime of entry
+   * Expiry time of entry
    */
-  struct GNUNET_TIME_Relative lifetime;
+  struct GNUNET_TIME_Absolute expiry;
 
 };
 

Modified: gnunet/src/peerstore/peerstore_api.c
===================================================================
--- gnunet/src/peerstore/peerstore_api.c        2014-05-16 12:32:44 UTC (rev 
33307)
+++ gnunet/src/peerstore/peerstore_api.c        2014-05-16 12:54:18 UTC (rev 
33308)
@@ -194,7 +194,7 @@
  * @param key entry key
  * @param value entry value BLOB
  * @param size size of 'value'
- * @param lifetime relative time after which the entry is (possibly) deleted
+ * @param expiry absolute time after which the entry is (possibly) deleted
  * @param cont Continuation function after the store request is processed
  * @param cont_cls Closure for 'cont'
  */
@@ -205,7 +205,7 @@
     const char *key,
     const void *value,
     size_t size,
-    struct GNUNET_TIME_Relative lifetime,
+    struct GNUNET_TIME_Absolute expiry,
     GNUNET_PEERSTORE_Continuation cont,
     void *cont_cls)
 {
@@ -224,7 +224,8 @@
       key,
       value,
       size,
-      lifetime);
+      expiry,
+      GNUNET_MESSAGE_TYPE_PEERSTORE_STORE);
   GNUNET_CLIENT_transmit_and_get_response(h->client,
       (const struct GNUNET_MessageHeader *)srm,
       GNUNET_TIME_UNIT_FOREVER_REL,
@@ -235,5 +236,4 @@
 
 }
 
-
 /* end of peerstore_api.c */

Modified: gnunet/src/peerstore/peerstore_common.c
===================================================================
--- gnunet/src/peerstore/peerstore_common.c     2014-05-16 12:32:44 UTC (rev 
33307)
+++ gnunet/src/peerstore/peerstore_common.c     2014-05-16 12:54:18 UTC (rev 
33308)
@@ -33,7 +33,8 @@
  * @param key record key string (can be NULL)
  * @param value record value BLOB (can be NULL)
  * @param value_size record value size in bytes (set to 0 if value is NULL)
- * @param lifetime relative time after which the record expires
+ * @param expiry absolute time after which the record expires
+ * @param msg_type message type to be set in header
  * @return pointer to record message struct
  */
 struct StoreRecordMessage *
@@ -42,7 +43,8 @@
     const char *key,
     const void *value,
     size_t value_size,
-    struct GNUNET_TIME_Relative lifetime)
+    struct GNUNET_TIME_Absolute expiry,
+    uint16_t msg_type)
 {
   struct StoreRecordMessage *srm;
   size_t ss_size;
@@ -61,9 +63,9 @@
       value_size;
   srm = GNUNET_malloc(request_size);
   srm->header.size = htons(request_size);
-  srm->header.type = htons(GNUNET_MESSAGE_TYPE_PEERSTORE_STORE);
+  srm->header.type = htons(msg_type);
   srm->key_size = htons(key_size);
-  srm->lifetime = lifetime;
+  srm->expiry = expiry;
   if(NULL == peer)
     srm->peer_set = htons(GNUNET_NO);
   else
@@ -116,7 +118,7 @@
     record->peer = GNUNET_new(struct GNUNET_PeerIdentity);
     memcpy(record->peer, &srm->peer, sizeof(struct GNUNET_PeerIdentity));
   }
-  record->lifetime = srm->lifetime;
+  record->expiry = srm->expiry;
   dummy = (char *)&srm[1];
   if(ss_size > 0)
   {

Modified: gnunet/src/peerstore/peerstore_common.h
===================================================================
--- gnunet/src/peerstore/peerstore_common.h     2014-05-16 12:32:44 UTC (rev 
33307)
+++ gnunet/src/peerstore/peerstore_common.h     2014-05-16 12:54:18 UTC (rev 
33308)
@@ -58,9 +58,9 @@
   size_t value_size;
 
   /**
-   * Lifetime of record
+   * Expiry time of record
    */
-  struct GNUNET_TIME_Relative lifetime;
+  struct GNUNET_TIME_Absolute expiry;
 
 };
 
@@ -72,7 +72,8 @@
  * @param key record key string (can be NULL)
  * @param value record value BLOB (can be NULL)
  * @param value_size record value size in bytes (set to 0 if value is NULL)
- * @param lifetime relative time after which the record expires
+ * @param expiry time after which the record expires
+ * @param msg_type message type to be set in header
  * @return pointer to record message struct
  */
 struct StoreRecordMessage *
@@ -81,7 +82,8 @@
     const char *key,
     const void *value,
     size_t value_size,
-    struct GNUNET_TIME_Relative lifetime);
+    struct GNUNET_TIME_Absolute expiry,
+    uint16_t msg_type);
 
 /**
  * Parses a message carrying a record

Modified: gnunet/src/peerstore/plugin_peerstore_sqlite.c
===================================================================
--- gnunet/src/peerstore/plugin_peerstore_sqlite.c      2014-05-16 12:32:44 UTC 
(rev 33307)
+++ gnunet/src/peerstore/plugin_peerstore_sqlite.c      2014-05-16 12:54:18 UTC 
(rev 33308)
@@ -116,7 +116,7 @@
     const char *sub_system,
     const struct GNUNET_PeerIdentity *peer,
     const char *key,
-    GNUNET_PEERSTORE_RecordIterator iter, void *iter_cls)
+    GNUNET_PEERSTORE_Processor iter, void *iter_cls)
 {
   struct Plugin *plugin = cls;
   sqlite3_stmt *stmt;
@@ -127,6 +127,7 @@
   const char *ret_key;
   const void *ret_value;
   size_t ret_value_size;
+  struct GNUNET_TIME_Absolute ret_expiry;
 
   if(NULL == peer && NULL == key)
   {
@@ -170,8 +171,15 @@
     ret_key = (const char *)sqlite3_column_text(stmt, 2);
     ret_value = sqlite3_column_blob(stmt, 3);
     ret_value_size = sqlite3_column_bytes(stmt, 3);
+    ret_expiry.abs_value_us = (uint64_t)sqlite3_column_int64(stmt, 4);
     if (NULL != iter)
-      iter (iter_cls, ret_sub_system, ret_peer, ret_key, ret_value, 
ret_value_size);
+      iter (iter_cls,
+          ret_sub_system,
+          ret_peer,
+          ret_key,
+          ret_value,
+          ret_value_size,
+          ret_expiry);
   }
   if (SQLITE_DONE != sret)
   {




reply via email to

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