/*
This file is part of GNUnet.
- (C) 2009-2014 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2009-2014 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
/**
#include "gnunet-service-xdht_datacache.h"
#include "gnunet-service-xdht_neighbours.h"
#include "gnunet-service-xdht_routing.h"
-#include <fenv.h>
#include "dht.h"
/**
/**
* When does the content expire?
*/
- struct GNUNET_TIME_Absolute expiration_time;
+ struct GNUNET_TIME_AbsoluteNBO expiration_time;
/**
* The key of the corresponding GET request.
*/
unsigned int track_topology;
-/**
- * Should I be a malicious peer and drop the PUT/GET packets?
- * if 0 then NOT malicious.
- */
-unsigned int act_malicious;
-
/**
* Count of fingers found. Ideally we should have O(logn) fingers for a
* stable network.
}
-#if ENABLE_MALICIOUS
-/**
- * Set the ENABLE_MALICIOUS value to malicious.
- * @param malicious
- */
-int
-GDS_NEIGHBOURS_act_malicious (unsigned int malicious)
-{
- act_malicious = malicious;
- return GNUNET_OK;
-}
-#endif
-
/**
* Construct a trail setup message and forward it to target_friend
* @param source_peer Peer which wants to setup the trail
void
GDS_NEIGHBOURS_send_put (const struct GNUNET_HashCode *key,
enum GNUNET_BLOCK_Type block_type,
- enum GNUNET_DHT_RouteOption options,
- uint32_t desired_replication_level,
- struct GNUNET_PeerIdentity best_known_dest,
- struct GNUNET_HashCode intermediate_trail_id,
- struct GNUNET_PeerIdentity *target_peer,
+ enum GNUNET_DHT_RouteOption options,
+ uint32_t desired_replication_level,
+ struct GNUNET_PeerIdentity best_known_dest,
+ struct GNUNET_HashCode intermediate_trail_id,
+ struct GNUNET_PeerIdentity *target_peer,
uint32_t hop_count,
uint32_t put_path_length,
struct GNUNET_PeerIdentity *put_path,
}
/* In case we are sending the request to a finger, then send across all of its
trail.*/
-#if ENABLE_MALICIOUS
- if (0 != GNUNET_CRYPTO_cmp_peer_identity (&successor.best_known_destination,
- &successor.next_hop))
- {
- struct FingerInfo *next_hop_finger;
- unsigned int i;
-
- next_hop_finger = &finger_table[successor.finger_table_index];
- for (i = 0; i < next_hop_finger->trails_count; i++)
- {
- if (GNUNET_YES == next_hop_finger->trail_list[i].is_present)
- {
- if(0 == next_hop_finger->trail_list[i].trail_length)
- {
- GDS_NEIGHBOURS_send_put (key, block_type, options, desired_replication_level,
- best_known_dest, intermediate_trail_id, &next_hop,
- 0, 1, &my_identity, expiration_time,
- data, data_size);
- return;
- }
- next_hop = next_hop_finger->trail_list[i].trail_head->peer;
- GDS_NEIGHBOURS_send_put (key, block_type, options, desired_replication_level,
- best_known_dest,
- next_hop_finger->trail_list[i].trail_id,
- &next_hop, 0, 1, &my_identity,
- expiration_time,
- data, data_size);
- }
- }
- return;
- }
-#endif
GDS_NEIGHBOURS_send_put (key, block_type, options, desired_replication_level,
best_known_dest, intermediate_trail_id, &next_hop,
0, 1, &my_identity, expiration_time,
return;
}
-#if ENABLE_MALICIOUS
- struct GNUNET_PeerIdentity next_hop;
- if (0 != GNUNET_CRYPTO_cmp_peer_identity (&successor.best_known_destination,
- &successor.next_hop))
- {
- struct FingerInfo *next_hop_finger;
- unsigned int i;
-
- next_hop_finger = &finger_table[successor.finger_table_index];
- for (i = 0; i < next_hop_finger->trails_count; i++)
- {
- if (GNUNET_YES == next_hop_finger->trail_list[i].is_present)
- {
- if(0 == next_hop_finger->trail_list[i].trail_length)
- {
- GDS_NEIGHBOURS_send_get (key, block_type, options,
- desired_replication_level,
- best_known_dest,intermediate_trail_id,
- &successor.next_hop,
- 0, 1, &my_identity);
- return;
- }
- next_hop = next_hop_finger->trail_list[i].trail_head->peer;
- GDS_NEIGHBOURS_send_get (key, block_type, options, desired_replication_level,
- best_known_dest,
- next_hop_finger->trail_list[i].trail_id,
- &next_hop, 0, 1, &my_identity);
- }
- }
- return;
- }
-#endif
GDS_NEIGHBOURS_send_get (key, block_type, options, desired_replication_level,
best_known_dest,intermediate_trail_id, &successor.next_hop,
0, 1, &my_identity);
get_result->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_GET_RESULT);
get_result->key = *key;
get_result->querying_peer = *source_peer;
- get_result->expiration_time = expiration;
+ get_result->expiration_time = GNUNET_TIME_absolute_hton (expiration);
get_result->get_path_length = htonl (get_path_length);
get_result->put_path_length = htonl (put_path_length);
paths = (struct GNUNET_PeerIdentity *)&get_result[1];
* finger identity through this random friend.
*
* @param cls closure for this task
- * @param tc the context under which the task is running
*/
static void
-send_find_finger_trail_message (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+send_find_finger_trail_message (void *cls)
{
struct FriendInfo *target_friend;
struct GNUNET_HashCode trail_id;
* Periodic task to verify current successor. There can be multiple trails to reach
* to successor, choose the shortest one and send verify successor message
* across that trail.
+ *
* @param cls closure for this task
- * @param tc the context under which the task is running
*/
static void
-send_verify_successor_message (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+send_verify_successor_message (void *cls)
{
struct FriendInfo *target_friend;
struct GNUNET_HashCode trail_id;
trail_id = trail->trail_id;
if (NULL == GDS_ROUTING_get_next_hop(trail_id,GDS_ROUTING_SRC_TO_DEST))
{
- DEBUG(" NO ENTRY FOUND IN %s ROUTING TABLE for trail id %s, line",
- GNUNET_i2s(&my_identity), GNUNET_h2s(&trail->trail_id), __LINE__);
+ DEBUG(" NO ENTRY FOUND IN %s ROUTING TABLE for trail id %s, line %u",
+ GNUNET_i2s (&my_identity),
+ GNUNET_h2s (&trail->trail_id),
+ __LINE__);
GNUNET_break(0);
return;
}
GNUNET_break_op (0);
return GNUNET_OK;
}
-#if ENABLE_MALICIOUS
- if(1 == act_malicious)
- {
- DEBUG("\n I AM MALICIOUS PUT_REQUEST_DROPPED for key = %ss",GNUNET_h2s(&put->key));
- return GNUNET_OK;
- }
-#endif
GNUNET_STATISTICS_update (GDS_stats,
gettext_noop
("# Bytes received from other peers"), (int64_t) msize,
{
switch (GNUNET_BLOCK_evaluate (GDS_block_context,
ntohl (put->block_type),
+ GNUNET_BLOCK_EO_NONE,
NULL, /* query */
NULL, 0, /* bloom filer */
NULL, 0, /* xquery */
&(put->key),putlen, pp, ntohl (put->block_type),
payload_size, payload);
}
- else
- {
-#if ENABLE_MALICIOUS
- if (0 != GNUNET_CRYPTO_cmp_peer_identity (&successor.best_known_destination,
- &successor.next_hop))
- {
- struct FingerInfo *next_hop_finger;
- unsigned int i;
-
- next_hop_finger = &finger_table[successor.finger_table_index];
- for (i = 0; i < next_hop_finger->trails_count; i++)
- {
- if (GNUNET_YES == next_hop_finger->trail_list[i].is_present)
- {
- if(0 == next_hop_finger->trail_list[i].trail_length)
- {
- GDS_NEIGHBOURS_send_put (&put->key,
- ntohl (put->block_type),ntohl (put->options),
- ntohl (put->desired_replication_level),
- best_known_dest, intermediate_trail_id, &next_hop,
- hop_count, putlen, pp,
- GNUNET_TIME_absolute_ntoh (put->expiration_time),
- payload, payload_size);
- return GNUNET_OK;
- }
- next_hop = next_hop_finger->trail_list[i].trail_head->peer;
- GDS_NEIGHBOURS_send_put (&put->key,
- ntohl (put->block_type),ntohl (put->options),
- ntohl (put->desired_replication_level),
- best_known_dest,
- next_hop_finger->trail_list[i].trail_id,
- &next_hop, hop_count, putlen, pp,
- GNUNET_TIME_absolute_ntoh (put->expiration_time),
- payload, payload_size);
- }
- }
- return GNUNET_OK;
- }
-#endif
GDS_NEIGHBOURS_send_put (&put->key,
ntohl (put->block_type),ntohl (put->options),
ntohl (put->desired_replication_level),
hop_count, putlen, pp,
GNUNET_TIME_absolute_ntoh (put->expiration_time),
payload, payload_size);
- }
return GNUNET_OK;
}
return GNUNET_YES;
}
-#if ENABLE_MALICIOUS
- if(1 == act_malicious)
- {
- DEBUG("I am malicious,GET_REQUEST_DROPPED for key = %s. \n",GNUNET_h2s(&get->key));
- return GNUNET_OK;
- }
-#endif
current_best_known_dest = get->best_known_destination;
received_intermediate_trail_id = get->intermediate_trail_id;
get_path = (const struct GNUNET_PeerIdentity *)&get[1];
else
{
-#if ENABLE_MALICIOUS
- if (0 != GNUNET_CRYPTO_cmp_peer_identity (&successor.best_known_destination,
- &successor.next_hop))
- {
- struct FingerInfo *next_hop_finger;
- unsigned int i;
-
- next_hop_finger = &finger_table[successor.finger_table_index];
- for (i = 0; i < next_hop_finger->trails_count; i++)
- {
- if(0 == next_hop_finger->trail_list[i].trail_length)
- {
- GDS_NEIGHBOURS_send_get (&(get->key), get->block_type, get->options,
- get->desired_replication_level, best_known_dest,
- intermediate_trail_id, &next_hop, hop_count,
- get_length, gp);
- return GNUNET_OK;
- }
- if (GNUNET_YES == next_hop_finger->trail_list[i].is_present)
- {
- next_hop = next_hop_finger->trail_list[i].trail_head->peer;
- GDS_NEIGHBOURS_send_get (&(get->key), get->block_type, get->options,
- get->desired_replication_level, best_known_dest,
- next_hop_finger->trail_list[i].trail_id,
- &next_hop, hop_count,
- get_length, gp);
- }
- }
- return GNUNET_OK;
- }
-#endif
GDS_NEIGHBOURS_send_get (&(get->key), get->block_type, get->options,
get->desired_replication_level, best_known_dest,
intermediate_trail_id, &next_hop, hop_count,
if (0 == (GNUNET_CRYPTO_cmp_peer_identity (&my_identity, &(get_path[0]))))
{
- GDS_CLIENTS_handle_reply (get_result->expiration_time, &(get_result->key),
+ GDS_CLIENTS_handle_reply (GNUNET_TIME_absolute_ntoh (get_result->expiration_time),
+ &(get_result->key),
getlen, get_path, putlen,
put_path, get_result->type, payload_size, payload);
return GNUNET_YES;
GDS_NEIGHBOURS_send_get_result (&(get_result->key), get_result->type,
&get_path[current_path_index - 1],
&(get_result->querying_peer), putlen, put_path,
- getlen, get_path, get_result->expiration_time,
+ getlen, get_path,
+ GNUNET_TIME_absolute_ntoh (get_result->expiration_time),
payload, payload_size);
return GNUNET_YES;
}
unsigned int num_retries_scheduled;
};
+
void
-send_notify_new_successor (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext
- * tc);
+send_notify_new_successor (void *cls);
+
/**
* Check if the peer which sent us verify successor result message is still ours
void
-send_notify_new_successor (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext
- * tc)
+send_notify_new_successor (void *cls)
{
- struct SendNotifyContext *ctx = (struct SendNotifyContext *) cls;
+ struct SendNotifyContext *ctx = cls;
GDS_NEIGHBOURS_send_notify_new_successor (ctx->source_peer,
ctx->successor,
{
/* Here it may happen that source peer has found a new successor, and removed
the trail, Hence no entry found in the routing table. Fail silently.*/
- DEBUG(" NO ENTRY FOUND IN %s ROUTING TABLE for trail id %s, line",
- GNUNET_i2s(&my_identity), GNUNET_h2s(&trail_id), __LINE__);
+ DEBUG (" NO ENTRY FOUND IN %s ROUTING TABLE for trail id %s, line %u",
+ GNUNET_i2s (&my_identity),
+ GNUNET_h2s (&trail_id),
+ __LINE__);
GNUNET_break_op(0);
return GNUNET_OK;
}
next_hop = GDS_ROUTING_get_next_hop (trail_id, trail_direction);
if (NULL == next_hop)
{
- DEBUG(" NO ENTRY FOUND IN %s ROUTING TABLE for trail id %s, line",
- GNUNET_i2s(&my_identity), GNUNET_h2s(&trail_id), __LINE__);
+ DEBUG(" NO ENTRY FOUND IN %s ROUTING TABLE for trail id %s, line %u",
+ GNUNET_i2s (&my_identity),
+ GNUNET_h2s(&trail_id),
+ __LINE__);
GNUNET_break (0);
return GNUNET_SYSERR;
}
{NULL, 0, 0}
};
-#if ENABLE_MALICIOUS
- act_malicious = 0;
-#endif
-
core_api =
GNUNET_CORE_connect (GDS_cfg, NULL, &core_init, &handle_core_connect,
&handle_core_disconnect, NULL, GNUNET_NO, NULL,