Package com.biglybt.core.dht.router.impl
Class DHTRouterImpl
java.lang.Object
com.biglybt.core.dht.router.impl.DHTRouterImpl
- All Implemented Interfaces:
DHTRouter
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate DHTRouterAdapter
private int
private static final AEMonitor
private int
private boolean
private int
private DHTRouterContactImpl
private DHTLogger
private int
private final CopyOnWriteList<DHTRouterObserver>
private List<DHTRouterContactImpl>
private List<DHTRouterContactImpl>
private Random
private static long
private final BloomFilter
private DHTRouterNodeImpl
private byte[]
private static final int
private static final int
(package private) int
private boolean
private DHTRouterNodeImpl
private int
private static final int
private final DHTRouterStatsImpl
(package private) boolean
private final AEMonitor
private static final int
private TimerEventPeriodic
-
Constructor Summary
ConstructorsConstructorDescriptionDHTRouterImpl
(int _K, int _B, int _max_rep_per_node, byte[] _router_node_id, DHTRouterContactAttachment _attachment, DHTLogger _logger) -
Method Summary
Modifier and TypeMethodDescriptionvoid
addContact
(byte[] node_id, DHTRouterContactAttachment attachment, boolean known_to_be_alive) private DHTRouterContact
addContactSupport
(byte[] node_id, DHTRouterContactAttachment attachment, boolean known_to_be_alive) boolean
Adds a routing table observer if it is not already observing.void
contactAlive
(byte[] node_id, DHTRouterContactAttachment attachment) Adds a contact to the router and marks it as "known to be alive"contactDead
(byte[] node_id, boolean force) Informs the router that an attempt to interact with the contact failedprivate void
contactDeadSupport
(DHTRouterNodeImpl node, DHTRouterContactImpl contact, boolean force) void
contactKnown
(byte[] node_id, DHTRouterContactAttachment attachment, boolean force) Adds a contact to the router.void
contactRemoved
(byte[] node_id) boolean
Returns whether the given observer is already observing.void
destroy()
protected void
protected void
protected void
findAllContacts
(List list, DHTRouterNodeImpl node) protected void
findAllContacts
(Set set, DHTRouterNodeImpl node) findBestContacts
(int max) returns a list of best contacts in terms of uptime, best firstfindClosestContacts
(byte[] node_id, int num_to_return, boolean live_only) Returns num_to_return or a few more closest contacts, unorderedprotected void
findClosestContacts
(byte[] node_id, int num_to_return, int depth, DHTRouterNodeImpl current_node, boolean live_only, List res) findContact
(byte[] node_id) protected Object[]
findContactSupport
(byte[] node_id) protected DHTRouterNodeImpl
findNode
(byte[] node_id) Returns a list of DHTRouterContact objectsprotected long
protected long
byte[]
getID()
int
getK()
protected long
protected long
protected DHTRouterNodeImpl
getStats()
protected long[]
protected void
getStatsSupport
(long[] stats_array, DHTRouterNodeImpl node) boolean
isID
(byte[] id) protected void
protected void
notifyAdded
(DHTRouterContact contact) protected void
protected void
notifyLocationChanged
(DHTRouterContact contact) protected void
notifyNowAlive
(DHTRouterContact contact) protected void
notifyNowFailing
(DHTRouterContact contact) protected void
notifyRemoved
(DHTRouterContact contact) protected void
void
print()
void
recordLookup
(byte[] node_id) void
refreshIdleLeaves
(long idle_max) protected void
refreshNode
(List nodes_to_refresh, DHTRouterNodeImpl node, byte[] path) protected void
refreshNodes
(List nodes_to_refresh, DHTRouterNodeImpl node, byte[] path, boolean seeding, long max_permitted_idle) byte[]
boolean
Removes the observer if it is already observing.protected void
requestLookup
(byte[] id, String description) protected void
requestNodeAdd
(DHTRouterContactImpl contact) boolean
requestPing
(byte[] node_id) protected void
requestPing
(DHTRouterContactImpl contact) void
seed()
Tells the router to perform its "start of day" functions required to integrate it into the DHT (search for itself, refresh buckets)protected void
void
setAdapter
(DHTRouterAdapter _adapter) void
setSleeping
(boolean _sleeping) void
setSuspended
(boolean _suspended)
-
Field Details
-
SMALLEST_SUBTREE_MAX_EXCESS
private static final int SMALLEST_SUBTREE_MAX_EXCESS- See Also:
-
is_bootstrap_proxy
private boolean is_bootstrap_proxy -
K
private int K -
B
private int B -
max_rep_per_node
private int max_rep_per_node -
logger
-
smallest_subtree_max
private int smallest_subtree_max -
adapter
-
local_contact
-
router_node_id
private byte[] router_node_id -
root
-
smallest_subtree
-
consecutive_dead
private int consecutive_dead -
random_seed
private static long random_seed -
random
-
outstanding_pings
-
outstanding_adds
-
stats
-
this_mon
-
class_mon
-
observers
-
sleeping
private boolean sleeping -
suspended
boolean suspended -
recent_contact_bloom
-
timer_event
-
seed_in_ticks
volatile int seed_in_ticks -
TICK_PERIOD
private static final int TICK_PERIOD- See Also:
-
SEED_DELAY_PERIOD
private static final int SEED_DELAY_PERIOD- See Also:
-
SEED_DELAY_TICKS
private static final int SEED_DELAY_TICKS- See Also:
-
-
Constructor Details
-
DHTRouterImpl
public DHTRouterImpl(int _K, int _B, int _max_rep_per_node, byte[] _router_node_id, DHTRouterContactAttachment _attachment, DHTLogger _logger)
-
-
Method Details
-
notifyAdded
-
notifyRemoved
-
notifyLocationChanged
-
notifyNowAlive
-
notifyNowFailing
-
notifyDead
protected void notifyDead() -
addObserver
Description copied from interface:DHTRouter
Adds a routing table observer if it is not already observing.- Specified by:
addObserver
in interfaceDHTRouter
- Parameters:
rto
- the observer to add- Returns:
true
if now observing,false
otherwise
-
containsObserver
Description copied from interface:DHTRouter
Returns whether the given observer is already observing.- Specified by:
containsObserver
in interfaceDHTRouter
- Parameters:
rto
- the observer to query as observing- Returns:
true
if observing,false
otherwise
-
removeObserver
Description copied from interface:DHTRouter
Removes the observer if it is already observing.- Specified by:
removeObserver
in interfaceDHTRouter
- Parameters:
rto
- the observer to remove- Returns:
true
if no longer observing,false
otherwise
-
getStats
-
getK
public int getK() -
getID
public byte[] getID() -
isID
public boolean isID(byte[] id) -
getLocalContact
- Specified by:
getLocalContact
in interfaceDHTRouter
-
setAdapter
- Specified by:
setAdapter
in interfaceDHTRouter
-
setSleeping
public void setSleeping(boolean _sleeping) - Specified by:
setSleeping
in interfaceDHTRouter
-
setSuspended
public void setSuspended(boolean _suspended) - Specified by:
setSuspended
in interfaceDHTRouter
-
contactKnown
Description copied from interface:DHTRouter
Adds a contact to the router. The contact is not known to be alive (e.g. we've been returned the contact by someone but we've not either got a reply from it, nor has it invoked us.- Specified by:
contactKnown
in interfaceDHTRouter
-
contactAlive
Description copied from interface:DHTRouter
Adds a contact to the router and marks it as "known to be alive"- Specified by:
contactAlive
in interfaceDHTRouter
-
contactDead
Description copied from interface:DHTRouter
Informs the router that an attempt to interact with the contact failed- Specified by:
contactDead
in interfaceDHTRouter
- Returns:
-
contactDeadSupport
private void contactDeadSupport(DHTRouterNodeImpl node, DHTRouterContactImpl contact, boolean force) -
contactRemoved
public void contactRemoved(byte[] node_id) -
addContact
public void addContact(byte[] node_id, DHTRouterContactAttachment attachment, boolean known_to_be_alive) -
addContactSupport
private DHTRouterContact addContactSupport(byte[] node_id, DHTRouterContactAttachment attachment, boolean known_to_be_alive) -
findClosestContacts
Description copied from interface:DHTRouter
Returns num_to_return or a few more closest contacts, unordered- Specified by:
findClosestContacts
in interfaceDHTRouter
-
findClosestContacts
protected void findClosestContacts(byte[] node_id, int num_to_return, int depth, DHTRouterNodeImpl current_node, boolean live_only, List res) -
findContact
- Specified by:
findContact
in interfaceDHTRouter
-
findNode
-
findContactSupport
-
getNodeCount
protected long getNodeCount() -
getNodeCount
-
getContactCount
protected long getContactCount() -
getContactCount
-
findBestContacts
Description copied from interface:DHTRouter
returns a list of best contacts in terms of uptime, best first- Specified by:
findBestContacts
in interfaceDHTRouter
- Returns:
-
getAllContacts
Description copied from interface:DHTRouter
Returns a list of DHTRouterContact objects- Specified by:
getAllContacts
in interfaceDHTRouter
- Returns:
-
findAllContacts
-
findAllContacts
-
seed
public void seed()Description copied from interface:DHTRouter
Tells the router to perform its "start of day" functions required to integrate it into the DHT (search for itself, refresh buckets) -
seedSupport
protected void seedSupport() -
refreshNodes
protected void refreshNodes(List nodes_to_refresh, DHTRouterNodeImpl node, byte[] path, boolean seeding, long max_permitted_idle) -
refreshNode
-
getSmallestSubtree
-
recordLookup
public void recordLookup(byte[] node_id) - Specified by:
recordLookup
in interfaceDHTRouter
-
refreshIdleLeaves
public void refreshIdleLeaves(long idle_max) - Specified by:
refreshIdleLeaves
in interfaceDHTRouter
-
requestPing
public boolean requestPing(byte[] node_id) - Specified by:
requestPing
in interfaceDHTRouter
-
requestPing
-
dispatchPings
protected void dispatchPings() -
pingeroonies
protected void pingeroonies() -
requestNodeAdd
-
dispatchNodeAdds
protected void dispatchNodeAdds() -
refreshRandom
public byte[] refreshRandom()- Specified by:
refreshRandom
in interfaceDHTRouter
-
requestLookup
-
getStatsSupport
-
getStatsSupport
protected long[] getStatsSupport() -
log
-
print
public void print() -
destroy
public void destroy()
-