aboutsummaryrefslogtreecommitdiff
path: root/src/peerstore/gnunet-service-peerstore.c
diff options
context:
space:
mode:
authorOmar Tarabai <tarabai@devegypt.com>2014-05-14 16:40:45 +0000
committerOmar Tarabai <tarabai@devegypt.com>2014-05-14 16:40:45 +0000
commita760c1b877f3a9ac17f2577cdc298f793c574407 (patch)
tree7411c99a1865aa1b1a6e1141172aa9a1378d4db7 /src/peerstore/gnunet-service-peerstore.c
parentcb67c0bb1e6f2a5bae0295a75bc1f4b1b9f9f765 (diff)
downloadgnunet-a760c1b877f3a9ac17f2577cdc298f793c574407.tar.gz
gnunet-a760c1b877f3a9ac17f2577cdc298f793c574407.zip
peerstore helper file
Diffstat (limited to 'src/peerstore/gnunet-service-peerstore.c')
-rw-r--r--src/peerstore/gnunet-service-peerstore.c73
1 files changed, 43 insertions, 30 deletions
diff --git a/src/peerstore/gnunet-service-peerstore.c b/src/peerstore/gnunet-service-peerstore.c
index 303f25027..990fa2c88 100644
--- a/src/peerstore/gnunet-service-peerstore.c
+++ b/src/peerstore/gnunet-service-peerstore.c
@@ -27,6 +27,7 @@
27#include "gnunet_util_lib.h" 27#include "gnunet_util_lib.h"
28#include "peerstore.h" 28#include "peerstore.h"
29#include "gnunet_peerstore_plugin.h" 29#include "gnunet_peerstore_plugin.h"
30#include "peerstore_common.h"
30 31
31//TODO: GNUNET_SERVER_receive_done() ? 32//TODO: GNUNET_SERVER_receive_done() ?
32//TODO: implement value lifetime 33//TODO: implement value lifetime
@@ -79,6 +80,20 @@ handle_client_disconnect (void *cls,
79} 80}
80 81
81/** 82/**
83 * Handle an iterate request from client
84 *
85 * @param cls unused
86 * @param client identification of the client
87 * @param message the actual message
88 */
89void handle_iterate (void *cls,
90 struct GNUNET_SERVER_Client *client,
91 const struct GNUNET_MessageHeader *message)
92{
93
94}
95
96/**
82 * Handle a store request from client 97 * Handle a store request from client
83 * 98 *
84 * @param cls unused 99 * @param cls unused
@@ -89,49 +104,46 @@ void handle_store (void *cls,
89 struct GNUNET_SERVER_Client *client, 104 struct GNUNET_SERVER_Client *client,
90 const struct GNUNET_MessageHeader *message) 105 const struct GNUNET_MessageHeader *message)
91{ 106{
92 struct StoreRequestMessage *req; 107 struct GNUNET_PEERSTORE_Record *record;
93 uint16_t req_size;
94 uint16_t ss_size;
95 uint16_t key_size;
96 uint16_t value_size;
97 char *sub_system;
98 char *key;
99 void *value;
100 uint16_t response_type; 108 uint16_t response_type;
101 struct GNUNET_SERVER_TransmitContext *tc; 109 struct GNUNET_SERVER_TransmitContext *tc;
102 110
103 req_size = ntohs(message->size); 111 record = PEERSTORE_parse_record_message(message);
104 if(req_size < sizeof(struct StoreRequestMessage)) 112 if(NULL == record)
113 {
114 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Malformed store request from client\n");
115 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
116 return;
117 }
118 if(NULL == record->sub_system)
119 {
120 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Sub system not supplied in client store request\n");
121 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
122 return;
123 }
124 if(NULL == record->peer)
105 { 125 {
106 GNUNET_break(0); 126 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Peer id not supplied in client store request\n");
107 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR); 127 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
108 return; 128 return;
109 } 129 }
110 req = (struct StoreRequestMessage *)message; 130 if(NULL == record->key)
111 ss_size = ntohs(req->sub_system_size);
112 key_size = ntohs(req->key_size);
113 value_size = ntohs(req->value_size);
114 if(ss_size + key_size + value_size + sizeof(struct StoreRequestMessage)
115 != req_size)
116 { 131 {
117 GNUNET_break(0); 132 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Key not supplied in client store request\n");
118 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR); 133 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
119 return; 134 return;
120 } 135 }
121 sub_system = (char *)&req[1];
122 key = sub_system + ss_size;
123 value = key + key_size;
124 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Received a store request (size: %lu) for sub system `%s', peer `%s', key `%s'\n", 136 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Received a store request (size: %lu) for sub system `%s', peer `%s', key `%s'\n",
125 value_size, 137 record->value_size,
126 sub_system, 138 record->sub_system,
127 GNUNET_i2s (&req->peer), 139 GNUNET_i2s (record->peer),
128 key); 140 record->key);
129 if(GNUNET_OK == db->store_record(db->cls, 141 if(GNUNET_OK == db->store_record(db->cls,
130 sub_system, 142 record->sub_system,
131 &req->peer, 143 record->peer,
132 key, 144 record->key,
133 value, 145 record->value,
134 value_size)) 146 record->value_size))
135 { 147 {
136 response_type = GNUNET_MESSAGE_TYPE_PEERSTORE_STORE_RESULT_OK; 148 response_type = GNUNET_MESSAGE_TYPE_PEERSTORE_STORE_RESULT_OK;
137 } 149 }
@@ -161,6 +173,7 @@ run (void *cls,
161{ 173{
162 static const struct GNUNET_SERVER_MessageHandler handlers[] = { 174 static const struct GNUNET_SERVER_MessageHandler handlers[] = {
163 {&handle_store, NULL, GNUNET_MESSAGE_TYPE_PEERSTORE_STORE, 0}, 175 {&handle_store, NULL, GNUNET_MESSAGE_TYPE_PEERSTORE_STORE, 0},
176 {&handle_iterate, NULL, GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE, 0},
164 {NULL, NULL, 0, 0} 177 {NULL, NULL, 0, 0}
165 }; 178 };
166 char *database; 179 char *database;