aboutsummaryrefslogtreecommitdiff
path: root/src/dht/gnunet-service-dht.c
diff options
context:
space:
mode:
authorNathan S. Evans <evans@in.tum.de>2010-03-17 17:19:30 +0000
committerNathan S. Evans <evans@in.tum.de>2010-03-17 17:19:30 +0000
commita48e8f508403c9d8641a0c9eb47d88f98cb47f28 (patch)
tree4f4f5f09a6aa89c60ba1798d507e1cb0cab0a6b9 /src/dht/gnunet-service-dht.c
parentb571e5a4ed7fb2ef6f203c540e82675cf38bfcf8 (diff)
downloadgnunet-a48e8f508403c9d8641a0c9eb47d88f98cb47f28.tar.gz
gnunet-a48e8f508403c9d8641a0c9eb47d88f98cb47f28.zip
beginning of changes
Diffstat (limited to 'src/dht/gnunet-service-dht.c')
-rw-r--r--src/dht/gnunet-service-dht.c100
1 files changed, 78 insertions, 22 deletions
diff --git a/src/dht/gnunet-service-dht.c b/src/dht/gnunet-service-dht.c
index 3dcb75353..5bbb2e739 100644
--- a/src/dht/gnunet-service-dht.c
+++ b/src/dht/gnunet-service-dht.c
@@ -167,13 +167,23 @@ static struct GNUNET_CORE_MessageHandler core_handlers[] = {
167 * Server handler for initiating local dht get requests 167 * Server handler for initiating local dht get requests
168 */ 168 */
169static void handle_dht_get (void *cls, struct GNUNET_SERVER_Client * client, 169static void handle_dht_get (void *cls, struct GNUNET_SERVER_Client * client,
170 const struct GNUNET_MessageHeader *message) 170 const struct GNUNET_MessageHeader *message)
171{ 171{
172 struct GNUNET_DHT_GetMessage *get_msg = (struct GNUNET_DHT_GetMessage *)message;
173 GNUNET_HashCode get_key;
174 size_t get_type;
175
176 GNUNET_assert(ntohs(get_msg->header.size) >= sizeof(struct GNUNET_DHT_GetMessage));
177 memcpy(&get_key, &get_msg->key, sizeof(GNUNET_HashCode));
178 get_type = ntohs(get_msg->type);
179
172#if DEBUG_DHT 180#if DEBUG_DHT
173 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 181 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
174 "`%s': Received `%s' request from client\n", "DHT", "GET"); 182 "`%s': Received `%s' request from client, message type %d, key %s\n", "DHT", "GET", get_type, GNUNET_h2s(&get_key));
175#endif 183#endif
176 184
185 /* FIXME: Implement get stop functionality here */
186
177} 187}
178 188
179/** 189/**
@@ -182,25 +192,43 @@ static void handle_dht_get (void *cls, struct GNUNET_SERVER_Client * client,
182static void handle_dht_get_stop (void *cls, struct GNUNET_SERVER_Client * client, 192static void handle_dht_get_stop (void *cls, struct GNUNET_SERVER_Client * client,
183 const struct GNUNET_MessageHeader *message) 193 const struct GNUNET_MessageHeader *message)
184{ 194{
195 struct GNUNET_DHT_GetMessage *get_msg = (struct GNUNET_DHT_GetMessage *)message; /* Get message and get stop message are the same except for type */
196 GNUNET_HashCode get_key;
197 size_t get_type;
198
199 GNUNET_assert(ntohs(get_msg->header.size) >= sizeof(struct GNUNET_DHT_GetMessage));
200
201 memcpy(&get_key, &get_msg->key, sizeof(GNUNET_HashCode));
202 get_type = ntohs(get_msg->type);
203
185#if DEBUG_DHT 204#if DEBUG_DHT
186 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 205 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
187 "`%s': Received `%s' request from client\n", "DHT", "GET STOP"); 206 "`%s': Received `%s' request from client, message type %d, key %s\n", "DHT", "GET STOP", get_type, GNUNET_h2s(&get_key));
188#endif 207#endif
189 208
209 /* FIXME: Implement get stop functionality here */
210
190} 211}
191 212
192/** 213/**
193 * Server handler for initiating local dht find peer requests 214 * Server handler for initiating local dht find peer requests
194 */ 215 */
195static void handle_dht_find_peer (void *cls, struct GNUNET_SERVER_Client * 216static void handle_dht_find_peer (void *cls, struct GNUNET_SERVER_Client *
196 client, const struct GNUNET_MessageHeader * 217 client, const struct GNUNET_MessageHeader *
197 message) 218 message)
198{ 219{
220 struct GNUNET_DHT_FindPeerMessage *find_msg = (struct GNUNET_DHT_FindPeerMessage *)message;
221 struct GNUNET_PeerIdentity peer;
222
223 GNUNET_assert(ntohs(find_msg->header.size) == sizeof(struct GNUNET_DHT_FindPeerMessage));
224 memcpy(&peer, &find_msg->peer, sizeof(struct GNUNET_PeerIdentity));
225
199#if DEBUG_DHT 226#if DEBUG_DHT
200 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 227 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
201 "`%s': Received `%s' request from client\n", "DHT", "FIND PEER"); 228 "`%s': Received `%s' request from client, peer id %s\n", "DHT", "FIND PEER", GNUNET_i2s(&peer));
202#endif 229#endif
203 230
231 /* FIXME: Implement find peer functionality here */
204} 232}
205 233
206/** 234/**
@@ -210,11 +238,19 @@ static void handle_dht_find_peer_stop (void *cls, struct GNUNET_SERVER_Client *
210 client, const struct GNUNET_MessageHeader * 238 client, const struct GNUNET_MessageHeader *
211 message) 239 message)
212{ 240{
241 struct GNUNET_DHT_FindPeerMessage *find_msg = (struct GNUNET_DHT_FindPeerMessage *)message; /* Find peer stop message is identical to find peer message */
242 struct GNUNET_PeerIdentity peer;
243
244 GNUNET_assert(ntohs(find_msg->header.size) == sizeof(struct GNUNET_DHT_FindPeerMessage));
245 memcpy(&peer, &find_msg->peer, sizeof(struct GNUNET_PeerIdentity));
246
213#if DEBUG_DHT 247#if DEBUG_DHT
214 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 248 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
215 "`%s': Received `%s' request from client\n", "DHT", "FIND PEER STOP"); 249 "`%s': Received `%s' request from client, for peer id %s\n", "DHT", "FIND PEER STOP", GNUNET_i2s(&peer));
216#endif 250#endif
217 251
252 /* FIXME: Implement find peer stop functionality here */
253
218} 254}
219 255
220/** 256/**
@@ -223,21 +259,42 @@ static void handle_dht_find_peer_stop (void *cls, struct GNUNET_SERVER_Client *
223static void handle_dht_put (void *cls, struct GNUNET_SERVER_Client * client, 259static void handle_dht_put (void *cls, struct GNUNET_SERVER_Client * client,
224 const struct GNUNET_MessageHeader *message) 260 const struct GNUNET_MessageHeader *message)
225{ 261{
262 struct GNUNET_DHT_PutMessage *put_msg = (struct GNUNET_DHT_PutMessage *)message;
263 GNUNET_HashCode put_key;
264 size_t put_type;
265 size_t data_size;
266 char *data;
267
268 GNUNET_assert(ntohs(put_msg->header.size) >= sizeof(struct GNUNET_DHT_PutMessage));
269
270 memcpy(&put_key, &put_msg->key, sizeof(GNUNET_HashCode));
271 put_type = ntohs(put_msg->type);
272 data_size = ntohs(put_msg->data_size);
273 GNUNET_assert(ntohs(put_msg->header.size) == sizeof(struct GNUNET_DHT_PutMessage) + data_size);
274 data = GNUNET_malloc(data_size);
275 memcpy(data, &put_msg[1], data_size);
276
226#if DEBUG_DHT 277#if DEBUG_DHT
227 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 278 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
228 "`%s': Received `%s' request from client\n", "DHT", "PUT"); 279 "`%s': Received `%s' request from client, message type %d, key %s\n", "DHT", "PUT", put_type, GNUNET_h2s(&put_key));
229#endif 280#endif
230 281
282 /**
283 * FIXME: Implement dht put request functionality here!
284 */
285
286 GNUNET_free(data);
287
231} 288}
232 289
233/** 290/**
234 * Core handler for p2p dht get requests. 291 * Core handler for p2p dht get requests.
235 */ 292 */
236static int handle_dht_p2p_get (void *cls, 293static int handle_dht_p2p_get (void *cls,
237 const struct GNUNET_PeerIdentity * peer, 294 const struct GNUNET_PeerIdentity * peer,
238 const struct GNUNET_MessageHeader * message, 295 const struct GNUNET_MessageHeader * message,
239 struct GNUNET_TIME_Relative latency, 296 struct GNUNET_TIME_Relative latency,
240 uint32_t distance) 297 uint32_t distance)
241{ 298{
242#if DEBUG_DHT 299#if DEBUG_DHT
243 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 300 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -340,23 +397,22 @@ run (void *cls,
340 GNUNET_SERVER_add_handlers (server, plugin_handlers); 397 GNUNET_SERVER_add_handlers (server, plugin_handlers);
341 398
342 coreAPI = 399 coreAPI =
343 GNUNET_CORE_connect (sched, 400 GNUNET_CORE_connect (sched, /* Main scheduler */
344 cfg, 401 cfg, /* Main configuration */
345 client_transmit_timeout, 402 client_transmit_timeout, /* Delay for connecting */
346 NULL, /* FIXME: anything we want to pass around? */ 403 NULL, /* FIXME: anything we want to pass around? */
347 &core_init, 404 &core_init, /* Call core_init once connected */
348 NULL, /* Don't care about pre-connects */ 405 NULL, /* Don't care about pre-connects */
349 NULL, /* Don't care about connects */ 406 NULL, /* Don't care about connects */
350 NULL, /* Don't care about disconnects */ 407 NULL, /* Don't care about disconnects */
351 NULL, 408 NULL, /* Don't want notified about all incoming messages */
352 GNUNET_NO, 409 GNUNET_NO, /* For header only inbound notification */
353 NULL, 410 NULL, /* Don't want notified about all outbound messages */
354 GNUNET_NO, 411 GNUNET_NO, /* For header only outbound notification */
355 core_handlers); 412 core_handlers); /* Register these handlers */
356 413
357 if (coreAPI == NULL) 414 if (coreAPI == NULL)
358 return; 415 return;
359 /* load (server); Huh? */
360 416
361 /* Scheduled the task to clean up when shutdown is called */ 417 /* Scheduled the task to clean up when shutdown is called */
362 cleanup_task = GNUNET_SCHEDULER_add_delayed (sched, 418 cleanup_task = GNUNET_SCHEDULER_add_delayed (sched,