[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r33246 - in gnunet/src: include peerstore sensor
From: |
gnunet |
Subject: |
[GNUnet-SVN] r33246 - in gnunet/src: include peerstore sensor |
Date: |
Mon, 12 May 2014 17:55:41 +0200 |
Author: otarabai
Date: 2014-05-12 17:55:41 +0200 (Mon, 12 May 2014)
New Revision: 33246
Modified:
gnunet/src/include/gnunet_peerstore_plugin.h
gnunet/src/peerstore/
gnunet/src/peerstore/gnunet-service-peerstore.c
gnunet/src/peerstore/peerstore_api.c
gnunet/src/peerstore/plugin_peerstore_sqlite.c
gnunet/src/peerstore/test_peerstore_api.c
gnunet/src/sensor/gnunet-service-sensor.c
Log:
PEERSTORE store function
Modified: gnunet/src/include/gnunet_peerstore_plugin.h
===================================================================
--- gnunet/src/include/gnunet_peerstore_plugin.h 2014-05-12 15:44:04 UTC
(rev 33245)
+++ gnunet/src/include/gnunet_peerstore_plugin.h 2014-05-12 15:55:41 UTC
(rev 33246)
@@ -63,10 +63,10 @@
*/
int
(*store_record) (void *cls,
- const char *sub_system,
- const struct GNUNET_PeerIdentity *peer,
- const void *value,
- size_t size);
+ const struct GNUNET_PeerIdentity *peer,
+ const char *sub_system,
+ const void *value,
+ size_t size);
};
Index: gnunet/src/peerstore
===================================================================
--- gnunet/src/peerstore 2014-05-12 15:44:04 UTC (rev 33245)
+++ gnunet/src/peerstore 2014-05-12 15:55:41 UTC (rev 33246)
Property changes on: gnunet/src/peerstore
___________________________________________________________________
Modified: svn:ignore
## -4,3 +4,4 ##
gnunet-service-peerstore
.deps
peerstore.conf
+test_peerstore_api
Modified: gnunet/src/peerstore/gnunet-service-peerstore.c
===================================================================
--- gnunet/src/peerstore/gnunet-service-peerstore.c 2014-05-12 15:44:04 UTC
(rev 33245)
+++ gnunet/src/peerstore/gnunet-service-peerstore.c 2014-05-12 15:55:41 UTC
(rev 33246)
@@ -26,7 +26,11 @@
#include "platform.h"
#include "gnunet_util_lib.h"
#include "peerstore.h"
+#include "gnunet_peerstore_plugin.h"
+//TODO: GNUNET_SERVER_receive_done() ?
+//TODO: implement value lifetime
+
/**
* Our configuration.
*/
@@ -85,21 +89,68 @@
struct GNUNET_SERVER_Client *client,
const struct GNUNET_MessageHeader *message)
{
- struct StoreRequestMessage *sreqm;
- struct GNUNET_SERVER_TransmitContext *tc;
- struct StoreResponseMessage *sresm;
+ struct StoreRequestMessage *req;
uint16_t msg_size;
+ uint16_t sub_system_size;
+ uint16_t value_size;
char *sub_system;
+ void *value;
+ struct GNUNET_SERVER_TransmitContext *tc;
+ struct StoreResponseMessage *res;
+ char *emsg;
+ size_t emsg_size = 0;
+ char *emsg_dest;
msg_size = ntohs(message->size);
- GNUNET_break_op(msg_size > sizeof(struct GNUNET_MessageHeader) +
sizeof(struct StoreRequestMessage));
- sreqm = (struct StoreRequestMessage *)&message[1];
- sub_system = (char *)&sreqm[1];
+ if(msg_size < sizeof(struct StoreRequestMessage))
+ {
+ GNUNET_break(0);
+ GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
+ return;
+ }
+ req = (struct StoreRequestMessage *)message;
+ sub_system_size = ntohs(req->sub_system_size);
+ value_size = ntohs(req->value_size);
+ if(sub_system_size + value_size + sizeof(struct StoreRequestMessage)
+ != msg_size)
+ {
+ GNUNET_break(0);
+ GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
+ return;
+ }
+ sub_system = (char *)&req[1];
+ value = sub_system + sub_system_size;
GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Received a store request (size: %lu) for
sub system `%s' and peer `%s'\n",
msg_size,
sub_system,
- GNUNET_i2s (&sreqm->peer));
- //TODO: do the actual storage
+ GNUNET_i2s (&req->peer));
+ if(GNUNET_OK != db->store_record(db->cls,
+ &req->peer,
+ sub_system,
+ value,
+ value_size))
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Failed to store requested value,
sqlite database error.");
+ emsg = _("Failed to store requested value, sqlite database error.");
+ emsg_size = strlen(emsg) + 1;
+ }
+ res = GNUNET_malloc(sizeof(struct StoreResponseMessage) + emsg_size);
+ res->emsg_size = htons(emsg_size);
+ res->header.size = htons(sizeof(struct StoreResponseMessage) + emsg_size);
+ res->header.type = htons(GNUNET_MESSAGE_TYPE_PEERSTORE_STORE_RESULT);
+ if(emsg_size > 0)
+ {
+ res->success = htons(GNUNET_NO);
+ emsg_dest = (char *)&res[1];
+ memcpy(emsg_dest, emsg, emsg_size);
+ }
+ else
+ res->success = htons(GNUNET_YES);
+ tc = GNUNET_SERVER_transmit_context_create (client);
+ GNUNET_SERVER_transmit_context_append_message(tc, (struct
GNUNET_MessageHeader *)res);
+ GNUNET_free(res);
+ GNUNET_SERVER_transmit_context_run (tc, GNUNET_TIME_UNIT_FOREVER_REL);
+
}
/**
Modified: gnunet/src/peerstore/peerstore_api.c
===================================================================
--- gnunet/src/peerstore/peerstore_api.c 2014-05-12 15:44:04 UTC (rev
33245)
+++ gnunet/src/peerstore/peerstore_api.c 2014-05-12 15:55:41 UTC (rev
33246)
@@ -232,6 +232,7 @@
/**
* Disconnect from the PEERSTORE service
+ * Do not call in case of pending requests
*
* @param h handle to disconnect
*/
@@ -583,7 +584,7 @@
LOG (GNUNET_ERROR_TYPE_DEBUG,
"Storing value (size: %lu) for subsytem `%s' and peer `%s'\n",
size, sub_system, GNUNET_i2s (peer));
- sub_system_size = strlen(sub_system);
+ sub_system_size = strlen(sub_system) + 1;
request_size = sizeof(struct StoreRequestMessage) + sub_system_size + size;
rc = GNUNET_malloc(sizeof(struct GNUNET_PEERSTORE_RequestContext) +
request_size);
rc->h = h;
Modified: gnunet/src/peerstore/plugin_peerstore_sqlite.c
===================================================================
--- gnunet/src/peerstore/plugin_peerstore_sqlite.c 2014-05-12 15:44:04 UTC
(rev 33245)
+++ gnunet/src/peerstore/plugin_peerstore_sqlite.c 2014-05-12 15:55:41 UTC
(rev 33246)
@@ -104,7 +104,7 @@
//FIXME: check if value exists with the same key first
if(SQLITE_OK != sqlite3_bind_blob(stmt, 2, peer, sizeof(struct
GNUNET_PeerIdentity), SQLITE_STATIC)
- || SQLITE_OK != sqlite3_bind_text(stmt, 1, sub_system,
sizeof(sub_system), SQLITE_STATIC)
+ || SQLITE_OK != sqlite3_bind_text(stmt, 1, sub_system,
strlen(sub_system) + 1, SQLITE_STATIC)
|| SQLITE_OK != sqlite3_bind_blob(stmt, 3, value, size, SQLITE_STATIC))
LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
"sqlite3_bind");
Modified: gnunet/src/peerstore/test_peerstore_api.c
===================================================================
--- gnunet/src/peerstore/test_peerstore_api.c 2014-05-12 15:44:04 UTC (rev
33245)
+++ gnunet/src/peerstore/test_peerstore_api.c 2014-05-12 15:55:41 UTC (rev
33246)
@@ -30,6 +30,11 @@
struct GNUNET_PEERSTORE_Handle *h;
+void store_cont(void *cls, const char *emsg)
+{
+ GNUNET_PEERSTORE_disconnect(h);
+}
+
static void
run (void *cls,
const struct GNUNET_CONFIGURATION_Handle *cfg,
@@ -49,9 +54,8 @@
val,
val_size,
GNUNET_TIME_UNIT_FOREVER_REL,
- NULL,
+ &store_cont,
NULL);
- GNUNET_PEERSTORE_disconnect(h);
}
Modified: gnunet/src/sensor/gnunet-service-sensor.c
===================================================================
--- gnunet/src/sensor/gnunet-service-sensor.c 2014-05-12 15:44:04 UTC (rev
33245)
+++ gnunet/src/sensor/gnunet-service-sensor.c 2014-05-12 15:55:41 UTC (rev
33246)
@@ -28,6 +28,8 @@
#include "gnunet_util_lib.h"
#include "sensor.h"
+//TODO: GNUNET_SERVER_receive_done() ?
+
/**
* Minimum sensor execution interval (in seconds)
*/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r33246 - in gnunet/src: include peerstore sensor,
gnunet <=