gnunet-svn
[Top][All Lists]
Advanced

[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)
  */




reply via email to

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