/*
This file is part of GNUnet.
- (C) 2011 Christian Grothoff (and other contributing authors)
+ (C) 2011 - 2014 Christian Grothoff (and other contributing authors)
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
#include "gnunet_block_lib.h"
#include "gnunet_dht_service.h"
+/**
+ * To understand the direction in which trial should be read.
+ */
+enum GDS_ROUTING_trail_direction
+{
+ GDS_ROUTING_SRC_TO_DEST,
+ GDS_ROUTING_DEST_TO_SRC
+};
+
/**
- * Add a new entry to our routing table.
- *
- * @param sender peer that originated the request
- * @param type type of the block
- * @param options options for processing
- * @param key key for the content
- * @param xquery extended query
- * @param xquery_size number of bytes in @a xquery
- * @param reply_bf bloomfilter to filter duplicates
- * @param reply_bf_mutator mutator for @a reply_bf
-*/
+ * Update the prev. hop of the trail. Call made by trail teardown where
+ * if you are the first friend now in the trail then you need to update
+ * your prev. hop.
+ * @param trail_id
+ * @return #GNUNET_OK success
+ * #GNUNET_SYSERR in case no matching entry found in routing table.
+ */
+int
+GDS_ROUTING_update_trail_prev_hop (struct GNUNET_HashCode trail_id,
+ struct GNUNET_PeerIdentity prev_hop);
+
+/**
+ * Get the next hop for trail corresponding to trail_id
+ * @param trail_id Trail id to be searched.
+ * @return Next_hop if found
+ * NULL If next hop not found.
+ */
+struct GNUNET_PeerIdentity *
+GDS_ROUTING_get_next_hop (struct GNUNET_HashCode trail_id,
+ enum GDS_ROUTING_trail_direction trail_direction);
+
+
+/**
+ * Remove every trail where peer is either next_hop or prev_hop
+ * @param peer Peer to be searched.
+ */
void
-GDS_ROUTING_add (const struct GNUNET_PeerIdentity *sender,
- enum GNUNET_BLOCK_Type type,
- enum GNUNET_DHT_RouteOption options,
- const struct GNUNET_HashCode * key, const void *xquery,
- size_t xquery_size,
- const struct GNUNET_CONTAINER_BloomFilter *reply_bf,
- uint32_t reply_bf_mutator);
+GDS_ROUTING_remove_trail_by_peer (const struct GNUNET_PeerIdentity *peer);
+/**
+ * Remove trail with trail_id
+ * @param trail_id Trail id to be removed
+ * @return #GNUNET_YES success
+ * #GNUNET_NO if entry not found.
+ */
+int
+GDS_ROUTING_remove_trail (struct GNUNET_HashCode remove_trail_id);
+
+/**
+ * Add a new entry in routing table
+ * @param new_trail_id
+ * @param prev_hop
+ * @param next_hop
+ * @return #GNUNET_OK success
+ * #GNUNET_SYSERR in case new_trail_id already exists in the network
+ * but with different prev_hop/next_hop
+ */
+int
+GDS_ROUTING_add (struct GNUNET_HashCode new_trail_id,
+ struct GNUNET_PeerIdentity prev_hop,
+ struct GNUNET_PeerIdentity next_hop);
+
+
+/**
+ * Check if the size of routing table has crossed threshold.
+ * @return #GNUNET_YES, if threshold crossed
+ * #GNUNET_NO, if size is within threshold
+ */
+int
+GDS_ROUTING_threshold_reached (void);
/**
void
GDS_ROUTING_init (void);
-
/**
* Shutdown routing subsystem.
*/
void
GDS_ROUTING_done (void);
-
-#endif
+#endif
\ No newline at end of file