gnunet

Main GNUnet Logic
Log | Files | Refs | Submodules | README | LICENSE

commit 9f2753334e665b88b33e91ae32a1ecee2175dd85
parent 0f74ff197e6d5108c19545a1b407ab965d582137
Author: Supriti Singh <supritisingh08@gmail.com>
Date:   Sun, 17 Aug 2014 12:07:41 +0000

Removed trail compression message. Checking for friend to source in trail setup.


Diffstat:
Msrc/dht/gnunet-service-xdht_neighbours.c | 329++++++++++---------------------------------------------------------------------
Msrc/include/gnunet_protocols.h | 5-----
2 files changed, 39 insertions(+), 295 deletions(-)

diff --git a/src/dht/gnunet-service-xdht_neighbours.c b/src/dht/gnunet-service-xdht_neighbours.c @@ -491,34 +491,6 @@ struct PeerNotifyNewSuccessorMessage */ }; -/** - * P2P Trail Compression Message. - */ -struct PeerTrailCompressionMessage -{ - /** - * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_COMPRESSION - */ - struct GNUNET_MessageHeader header; - - /** - * Source peer of this trail. - */ - struct GNUNET_PeerIdentity source_peer; - - /** - * Trail from source_peer to destination_peer compressed such that - * new_first_friend is the first hop in the trail from source to - * destination. - */ - struct GNUNET_PeerIdentity new_first_friend; - - /** - * Unique identifier of trail. - */ - struct GNUNET_HashCode trail_id; -}; - /** * P2P Trail Tear Down message. @@ -1533,56 +1505,6 @@ GDS_NEIGHBOURS_send_add_trail (struct GNUNET_PeerIdentity source_peer, /** - * Construct a trail compression message and send it to target_friend. - * @param source_peer Source of the trail. - * @param trail_id Unique identifier of trail. - * @param first_friend First hop in compressed trail to reach from source to finger - * @param target_friend Next friend to get this message. - */ -void -GDS_NEIGHBOURS_send_trail_compression (struct GNUNET_PeerIdentity source_peer, - struct GNUNET_HashCode trail_id, - struct GNUNET_PeerIdentity first_friend, - struct FriendInfo *target_friend) -{ - struct P2PPendingMessage *pending; - struct PeerTrailCompressionMessage *tcm; - size_t msize; - - msize = sizeof (struct PeerTrailCompressionMessage); - - if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) - { - GNUNET_break (0); - return; - } - - if (target_friend->pending_count >= MAXIMUM_PENDING_PER_FRIEND) - { - GNUNET_STATISTICS_update (GDS_stats, - gettext_noop ("# P2P messages dropped due to full queue"), - 1, GNUNET_NO); - } - - pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); - pending->importance = 0; /* FIXME */ - pending->timeout = GNUNET_TIME_relative_to_absolute (GET_TIMEOUT); - tcm = (struct PeerTrailCompressionMessage *) &pending[1]; - pending->msg = &tcm->header; - tcm->header.size = htons (msize); - tcm->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_COMPRESSION); - tcm->source_peer = source_peer; - tcm->new_first_friend = first_friend; - tcm->trail_id = trail_id; - - GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); - target_friend->pending_count++; - process_friend_queue (target_friend); - -} - - -/** * Search my location in trail. In case I am present more than once in the * trail (can happen during trail setup), then return my lowest index. * @param trail List of peers @@ -3107,106 +3029,6 @@ add_new_finger (struct GNUNET_PeerIdentity finger_identity, /** - * Scan the trail to check if there is any other friend in the trail other than - * first hop. If yes then shortcut the trail, send trail compression message to - * peers which are no longer part of trail and send back the updated trail - * and trail_length to calling function. - * @param finger_identity Finger whose trail we will scan. - * @param finger_trail [in, out] Trail to reach from source to finger, - * @param finger_trail_length Total number of peers in original finger_trail. - * @param finger_trail_id Unique identifier of the finger trail. - * @return updated trail length in case we shortcut the trail, else original - * trail length. - */ -static struct GNUNET_PeerIdentity * -scan_and_compress_trail (struct GNUNET_PeerIdentity finger_identity, - const struct GNUNET_PeerIdentity *trail, - unsigned int trail_length, - struct GNUNET_HashCode trail_id, - int *new_trail_length) -{ - struct FriendInfo *target_friend; - struct GNUNET_PeerIdentity *new_trail; - unsigned int i; - - /* I am my own finger. */ - if (0 == GNUNET_CRYPTO_cmp_peer_identity (&my_identity, &finger_identity)) - { - *new_trail_length = 0; - return NULL; - } - - if (0 == trail_length) - { - *new_trail_length = 0; - return NULL; - } - - /* If finger identity is a friend. */ - if (NULL != GNUNET_CONTAINER_multipeermap_get (friend_peermap, &finger_identity)) - { - *new_trail_length = 0; - - /* If there is trail to reach this finger/friend */ - if (trail_length > 0) - { - /* Finger is your first friend. */ - GDS_ROUTING_update_trail_next_hop (trail_id, finger_identity); - GNUNET_assert (NULL != - (target_friend = - GNUNET_CONTAINER_multipeermap_get (friend_peermap, - &trail[0]))); - - - GDS_NEIGHBOURS_send_trail_compression (my_identity, - trail_id, finger_identity, - target_friend); - } - return NULL; - } - - /* For other cases, when its neither a friend nor my own identity.*/ - for (i = trail_length - 1; i > 0; i--) - { - /* If the element at this index in trail is a friend. */ - if (NULL != GNUNET_CONTAINER_multipeermap_get (friend_peermap, &trail[i])) - { - struct FriendInfo *target_friend; - int j = 0; - - GNUNET_assert (NULL != - (target_friend = - GNUNET_CONTAINER_multipeermap_get (friend_peermap, - &trail[0]))); - GDS_ROUTING_update_trail_next_hop (trail_id, trail[i]); - GDS_NEIGHBOURS_send_trail_compression (my_identity, - trail_id, trail[i], - target_friend); - - - /* Copy the trail from index i to index (trail_length -1) into a new trail - * and update new trail length */ - *new_trail_length = trail_length - i; - new_trail = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity) * (*new_trail_length)); - while (i < trail_length) - { - memcpy (&new_trail[j], &trail[i], sizeof(struct GNUNET_PeerIdentity)); - j++; - i++; - } - return new_trail; - } - } - - /* If we did not compress the trail, return the original trail back.*/ - *new_trail_length = trail_length; - new_trail = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity) * trail_length); - memcpy (new_trail, trail, trail_length * sizeof (struct GNUNET_PeerIdentity)); - return new_trail; -} - - -/** * 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. @@ -3473,7 +3295,7 @@ finger_table_add (struct GNUNET_PeerIdentity finger_identity, struct FingerInfo *existing_finger; const struct GNUNET_PeerIdentity *closest_peer; struct FingerInfo *successor; - int updated_finger_trail_length; + //int updated_finger_trail_length; unsigned int finger_table_index; /* Get the finger_table_index corresponding to finger_value we got from network.*/ @@ -3521,18 +3343,18 @@ finger_table_add (struct GNUNET_PeerIdentity finger_identity, /* No entry present in finger_table for given finger map index. */ if (GNUNET_NO == existing_finger->is_present) { - struct GNUNET_PeerIdentity *updated_trail; + //struct GNUNET_PeerIdentity *updated_trail; - /* Shorten the trail if possible. */ + /* Shorten the trail if possible. updated_finger_trail_length = finger_trail_length; updated_trail = scan_and_compress_trail (finger_identity, finger_trail, finger_trail_length, finger_trail_id, - &updated_finger_trail_length); - add_new_finger (finger_identity, updated_trail, - updated_finger_trail_length, + &updated_finger_trail_length);*/ + add_new_finger (finger_identity, finger_trail, + finger_trail_length, finger_trail_id, finger_table_index); - GNUNET_free_non_null(updated_trail); + //GNUNET_free_non_null(updated_trail); update_current_search_finger_index (finger_identity, finger_table_index); return; @@ -3551,17 +3373,17 @@ finger_table_add (struct GNUNET_PeerIdentity finger_identity, /* If the new finger is the closest peer. */ if (0 == GNUNET_CRYPTO_cmp_peer_identity (&finger_identity, closest_peer)) { - struct GNUNET_PeerIdentity *updated_trail; - /* Shorten the trail if possible. */ + //struct GNUNET_PeerIdentity *updated_trail; + /* Shorten the trail if possible. updated_finger_trail_length = finger_trail_length; updated_trail = scan_and_compress_trail (finger_identity, finger_trail, finger_trail_length, finger_trail_id, - &updated_finger_trail_length); + &updated_finger_trail_length);*/ remove_existing_finger (existing_finger, finger_table_index); - add_new_finger (finger_identity, updated_trail, updated_finger_trail_length, + add_new_finger (finger_identity, finger_trail, finger_trail_length, finger_trail_id, finger_table_index); - GNUNET_free_non_null((struct GNUNET_PeerIdentity *)updated_trail); + //GNUNET_free_non_null((struct GNUNET_PeerIdentity *)updated_trail); } else { @@ -3593,21 +3415,21 @@ finger_table_add (struct GNUNET_PeerIdentity finger_identity, GNUNET_CONTAINER_multipeermap_get (friend_peermap, &existing_finger->finger_identity)) { - struct GNUNET_PeerIdentity *updated_trail; + //struct GNUNET_PeerIdentity *updated_trail; - /* Shorten the trail if possible. */ + /* Shorten the trail if possible. updated_finger_trail_length = finger_trail_length; updated_trail = scan_and_compress_trail (finger_identity, finger_trail, finger_trail_length, finger_trail_id, - &updated_finger_trail_length); + &updated_finger_trail_length);*/ /* If there is space to store more trails. */ if (existing_finger->trails_count < MAXIMUM_TRAILS_PER_FINGER) - add_new_trail (existing_finger, updated_trail, - updated_finger_trail_length, finger_trail_id); + add_new_trail (existing_finger, finger_trail, + finger_trail_length, finger_trail_id); else - select_and_replace_trail (existing_finger, updated_trail, - updated_finger_trail_length, finger_trail_id); + select_and_replace_trail (existing_finger, finger_trail, + finger_trail_length, finger_trail_id); } } @@ -4159,17 +3981,30 @@ handle_dht_p2p_trail_setup (void *cls, const struct GNUNET_PeerIdentity *peer, { trail_length = 0; } - - /* Check if you are present in the trail seen so far? */ - for (i = 0; i < trail_length ; i++) + + /* Check if you are friend of source. */ + if (trail_length > 1) { - if(0 == GNUNET_CRYPTO_cmp_peer_identity(&trail_peer_list[i],&my_identity)) + if(NULL != GNUNET_CONTAINER_multipeermap_get (friend_peermap, &source)) { - trail_length = i; /* Check that you add yourself again */ - break; + /* If I am a friend, then I can be the first contact, so make + trail length 0. We are going to add ourself later in the code.*/ + trail_length = 0; } } - + else + { + /* Check if you are present in the trail seen so far? */ + for (i = 0; i < trail_length ; i++) + { + if(0 == GNUNET_CRYPTO_cmp_peer_identity(&trail_peer_list[i],&my_identity)) + { + trail_length = i; /* Check that you add yourself again */ + break; + } + } + } + /* Is my routing table full? */ if (GNUNET_YES == GDS_ROUTING_threshold_reached()) { @@ -4225,7 +4060,6 @@ handle_dht_p2p_trail_setup (void *cls, const struct GNUNET_PeerIdentity *peer, trail_peer_list, is_predecessor, final_dest_finger_val,trail_id); - } else /* I'm not the final destination. */ { @@ -4249,7 +4083,6 @@ handle_dht_p2p_trail_setup (void *cls, const struct GNUNET_PeerIdentity *peer, target_friend, trail_length + 1, peer_list, is_predecessor, trail_id, next_peer.trail_id); - GNUNET_free_non_null (peer_list); } else GDS_NEIGHBOURS_send_trail_setup (source, @@ -5428,88 +5261,6 @@ handle_dht_p2p_trail_setup_rejection (void *cls, } -/* - * Core handle for p2p trail tear compression messages. - * @param cls closure - * @param message message - * @param peer peer identity this notification is about - * @return #GNUNET_OK on success, #GNUNET_SYSERR on error - */ -static int -handle_dht_p2p_trail_compression (void *cls, const struct GNUNET_PeerIdentity *peer, - const struct GNUNET_MessageHeader *message) -{ - const struct PeerTrailCompressionMessage *trail_compression; - struct GNUNET_PeerIdentity *next_hop; - struct FriendInfo *target_friend; - struct GNUNET_HashCode trail_id; - size_t msize; - - msize = ntohs (message->size); - - if (msize != sizeof (struct PeerTrailCompressionMessage)) - { - GNUNET_break_op (0); - return GNUNET_OK; - } - - GNUNET_STATISTICS_update (GDS_stats, - gettext_noop - ("# Bytes received from other peers"), msize, - GNUNET_NO); - - trail_compression = (const struct PeerTrailCompressionMessage *) message; - trail_id = trail_compression->trail_id; - - /* Am I the new first friend to reach to finger of this trail. */ - if (0 == (GNUNET_CRYPTO_cmp_peer_identity (&trail_compression->new_first_friend, - &my_identity))) - { - if (NULL == - (GNUNET_CONTAINER_multipeermap_get (friend_peermap, - &trail_compression->source_peer))) - { - GNUNET_break_op(0); - return GNUNET_OK; - } - - /* Update your prev hop to source of this message. */ - if(GNUNET_SYSERR == - (GDS_ROUTING_update_trail_prev_hop (trail_id, - trail_compression->source_peer))) - { - GNUNET_break(0); - return GNUNET_OK; - } - return GNUNET_OK; - } - - /* Pass the message to next hop to finally reach to new_first_friend. */ - next_hop = GDS_ROUTING_get_next_hop (trail_id, GDS_ROUTING_SRC_TO_DEST); - - if (NULL == next_hop) - { - GNUNET_break (0); - return GNUNET_OK; - } - - if( NULL == (target_friend = - GNUNET_CONTAINER_multipeermap_get (friend_peermap, next_hop))) - { - GNUNET_break_op(0); - return GNUNET_OK; - } - - GDS_ROUTING_remove_trail (trail_id); - - GDS_NEIGHBOURS_send_trail_compression (trail_compression->source_peer, - trail_id, - trail_compression->new_first_friend, - target_friend); - return GNUNET_OK; -} - - /** * Core handler for trail teardown message. * @param cls closure @@ -6002,8 +5753,6 @@ GDS_NEIGHBOURS_init (void) {&handle_dht_p2p_verify_successor_result, GNUNET_MESSAGE_TYPE_XDHT_P2P_VERIFY_SUCCESSOR_RESULT, 0}, {&handle_dht_p2p_notify_new_successor, GNUNET_MESSAGE_TYPE_XDHT_P2P_NOTIFY_NEW_SUCCESSOR, 0}, {&handle_dht_p2p_trail_setup_rejection, GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_SETUP_REJECTION, 0}, - {&handle_dht_p2p_trail_compression, GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_COMPRESSION, - sizeof (struct PeerTrailCompressionMessage)}, {&handle_dht_p2p_trail_teardown, GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_TEARDOWN, sizeof (struct PeerTrailTearDownMessage)}, {&handle_dht_p2p_add_trail, GNUNET_MESSAGE_TYPE_XDHT_P2P_ADD_TRAIL, 0}, diff --git a/src/include/gnunet_protocols.h b/src/include/gnunet_protocols.h @@ -2584,11 +2584,6 @@ extern "C" #define GNUNET_MESSAGE_TYPE_XDHT_P2P_ADD_TRAIL 888 /** - * Trail compression message. - */ -#define GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_COMPRESSION 889 - -/** * Peer is storing the data in DHT. */ #define GNUNET_MESSAGE_TYPE_XDHT_P2P_PUT 890