[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)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r33308 - in gnunet/src: include peerstore,
gnunet <=