[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r33216 - gnunet/src/peerstore
From: |
gnunet |
Subject: |
[GNUnet-SVN] r33216 - gnunet/src/peerstore |
Date: |
Wed, 7 May 2014 20:11:18 +0200 |
Author: otarabai
Date: 2014-05-07 20:11:18 +0200 (Wed, 07 May 2014)
New Revision: 33216
Modified:
gnunet/src/peerstore/gnunet-peerstore.c
gnunet/src/peerstore/gnunet-service-peerstore.c
gnunet/src/peerstore/peerstore.h
gnunet/src/peerstore/peerstore_api.c
Log:
PEERSTORE api update
Modified: gnunet/src/peerstore/gnunet-peerstore.c
===================================================================
--- gnunet/src/peerstore/gnunet-peerstore.c 2014-05-07 17:13:47 UTC (rev
33215)
+++ gnunet/src/peerstore/gnunet-peerstore.c 2014-05-07 18:11:18 UTC (rev
33216)
@@ -30,6 +30,16 @@
static int ret;
/**
+ * option '-t'
+ */
+static int test;
+
+/*
+ * Handle to PEERSTORE service
+ */
+struct GNUNET_PEERSTORE_Handle *peerstore_handle;
+
+/**
* Run on shutdown
*
* @param cls unused
@@ -39,8 +49,22 @@
shutdown_task (void *cls,
const struct GNUNET_SCHEDULER_TaskContext *tc)
{
+ if(NULL != peerstore_handle)
+ {
+ GNUNET_PEERSTORE_disconnect(peerstore_handle);
+ peerstore_handle = NULL;
+ }
}
+void test_cont(void *cls, const char *emsg)
+{
+ printf("Received a response\n");
+ if(NULL != emsg)
+ {
+ printf("Response: %s\n", emsg);
+ }
+}
+
/**
* Main function that will be run by the scheduler.
*
@@ -56,9 +80,25 @@
const struct GNUNET_CONFIGURATION_Handle *cfg)
{
+ peerstore_handle = NULL;
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
&shutdown_task,
NULL);
+ peerstore_handle = GNUNET_PEERSTORE_connect(cfg);
+ GNUNET_assert(NULL != peerstore_handle);
+ if(GNUNET_YES == test)
+ {
+ struct GNUNET_PeerIdentity pid;
+ memset (&pid, 32, sizeof (pid));
+ GNUNET_PEERSTORE_store(peerstore_handle,
+ &pid,
+ "subsub",
+ "value",
+ 5,
+ GNUNET_TIME_UNIT_FOREVER_REL,
+ &test_cont,
+ NULL);
+ }
ret = 0;
}
@@ -74,6 +114,9 @@
main (int argc, char *const *argv)
{
static const struct GNUNET_GETOPT_CommandLineOption options[] = {
+ {'t', "test", NULL,
+ gettext_noop("TESTING"),
+ 0, &GNUNET_GETOPT_set_one, &test},
GNUNET_GETOPT_OPTION_END
};
return (GNUNET_OK ==
Modified: gnunet/src/peerstore/gnunet-service-peerstore.c
===================================================================
--- gnunet/src/peerstore/gnunet-service-peerstore.c 2014-05-07 17:13:47 UTC
(rev 33215)
+++ gnunet/src/peerstore/gnunet-service-peerstore.c 2014-05-07 18:11:18 UTC
(rev 33216)
@@ -75,6 +75,45 @@
}
/**
+ * Handle a store request from client
+ *
+ * @param cls unused
+ * @param client identification of the client
+ * @param message the actual message
+ */
+void handle_store (void *cls,
+ struct GNUNET_SERVER_Client *client,
+ const struct GNUNET_MessageHeader *message)
+{
+ struct StoreRequestMessage *sreqm;
+ struct GNUNET_SERVER_TransmitContext *tc;
+ struct StoreResponseMessage *sresm;
+ uint16_t msg_size;
+ char *sub_system;
+
+ 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];
+ 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
+ //create a fake response for testing
+ char *response = "This is a response";
+ tc = GNUNET_SERVER_transmit_context_create (client);
+ sresm = malloc(sizeof(struct StoreResponseMessage) + strlen(response));
+ sresm->header.type = htons(GNUNET_MESSAGE_TYPE_PEERSTORE_STORE_RESULT);
+ sresm->header.size = htons(sizeof(struct StoreResponseMessage) +
strlen(response));
+ sresm->success = htons(GNUNET_NO);
+ sresm->emsg_size = htons(strlen(response));
+ memcpy(&sresm[1], response, strlen(response));
+ GNUNET_SERVER_transmit_context_append_message(tc, (struct
GNUNET_MessageHeader *)sresm);
+ GNUNET_SERVER_transmit_context_run (tc, GNUNET_TIME_UNIT_FOREVER_REL);
+}
+
+/**
* Peerstore service runner.
*
* @param cls closure
@@ -87,7 +126,8 @@
const struct GNUNET_CONFIGURATION_Handle *c)
{
static const struct GNUNET_SERVER_MessageHandler handlers[] = {
- {NULL, NULL, 0, 0}
+ {&handle_store, NULL, GNUNET_MESSAGE_TYPE_PEERSTORE_STORE, 0},
+ {NULL, NULL, 0, 0}
};
char *database;
Modified: gnunet/src/peerstore/peerstore.h
===================================================================
--- gnunet/src/peerstore/peerstore.h 2014-05-07 17:13:47 UTC (rev 33215)
+++ gnunet/src/peerstore/peerstore.h 2014-05-07 18:11:18 UTC (rev 33216)
@@ -35,7 +35,7 @@
{
/**
- * Type will be GNUNET_MESSAGE_TYPE_PEERINFO_GET
+ * GNUnet message header
*/
struct GNUNET_MessageHeader header;
@@ -69,9 +69,14 @@
struct StoreResponseMessage
{
/**
+ * GNUnet message header
+ */
+ struct GNUNET_MessageHeader header;
+
+ /**
* Was the store operation successful (#GNUNET_YES / #GNUNET_NO)
*/
- int success;
+ uint16_t success;
/**
* Size of the error message (0 if no error)
Modified: gnunet/src/peerstore/peerstore_api.c
===================================================================
--- gnunet/src/peerstore/peerstore_api.c 2014-05-07 17:13:47 UTC (rev
33215)
+++ gnunet/src/peerstore/peerstore_api.c 2014-05-07 18:11:18 UTC (rev
33216)
@@ -375,6 +375,8 @@
uint16_t response_type;
uint16_t response_size;
char *emsg;
+ GNUNET_PEERSTORE_Continuation cont;
+ void *cont_cls;
h->in_receive = GNUNET_NO;
if(NULL == msg)
@@ -384,6 +386,7 @@
}
response_type = ntohs(msg->type);
response_size = ntohs(msg->size);
+ LOG(GNUNET_ERROR_TYPE_DEBUG, "Received a response of type %lu from
server\n", response_type);
switch(response_type)
{
case GNUNET_MESSAGE_TYPE_PEERSTORE_STORE_RESULT:
@@ -394,6 +397,8 @@
LOG(GNUNET_ERROR_TYPE_ERROR, "Received a response to a non-existent
store request\n");
return;
}
+ cont = sc->cont;
+ cont_cls = sc->cont_cls;
GNUNET_PEERSTORE_store_cancel(sc);
trigger_transmit (h);
if (NULL != h->sc_head)
@@ -404,16 +409,18 @@
h,
GNUNET_TIME_UNIT_FOREVER_REL);
}
- if(NULL != sc->cont)
+ if(NULL != cont)
{
srm = (struct StoreResponseMessage *)&msg[1];
emsg = NULL;
if(GNUNET_NO == ntohs(srm->success))
{
+ LOG(GNUNET_ERROR_TYPE_DEBUG, "Calling user callback with message:
%s\n", emsg);
emsg = GNUNET_malloc(ntohs(srm->emsg_size));
memcpy(emsg, &srm[1], ntohs(srm->emsg_size));
}
- sc->cont(sc->cont_cls, emsg);
+ LOG(GNUNET_ERROR_TYPE_DEBUG, "Calling user callback without a
message\n");
+ cont(cont_cls, emsg);
}
break;
}
@@ -514,7 +521,7 @@
size_t request_size;
LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Storing value (size: %lu) for subsytem `%s' and peer `%s'",
+ "Storing value (size: %lu) for subsytem `%s' and peer `%s'\n",
size, sub_system, GNUNET_i2s (peer));
sub_system_size = strlen(sub_system);
request_size = sizeof(struct StoreRequestMessage) + sub_system_size + size;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r33216 - gnunet/src/peerstore,
gnunet <=