com.aelitis.azureus.core.dht.router.impl
Class DHTRouterImpl

java.lang.Object
  extended by com.aelitis.azureus.core.dht.router.impl.DHTRouterImpl
All Implemented Interfaces:
DHTRouter

public class DHTRouterImpl
extends Object
implements DHTRouter

Author:
parg

Constructor Summary
DHTRouterImpl(int _K, int _B, int _max_rep_per_node, byte[] _router_node_id, DHTRouterContactAttachment _attachment, DHTLogger _logger)
           
 
Method Summary
 void addContact(byte[] node_id, DHTRouterContactAttachment attachment, boolean known_to_be_alive)
           
 boolean addObserver(DHTRouterObserver rto)
          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"
 DHTRouterContact contactDead(byte[] node_id, boolean force)
          Informs the router that an attempt to interact with the contact failed
 void contactKnown(byte[] node_id, DHTRouterContactAttachment attachment, boolean force)
          Adds a contact to the router.
 void contactRemoved(byte[] node_id)
           
 boolean containsObserver(DHTRouterObserver rto)
          Returns whether the given observer is already observing.
 void destroy()
           
protected  void dispatchNodeAdds()
           
protected  void dispatchPings()
           
protected  void findAllContacts(List list, DHTRouterNodeImpl node)
           
protected  void findAllContacts(Set set, DHTRouterNodeImpl node)
           
 List findBestContacts(int max)
          returns a list of best contacts in terms of uptime, best first
 List findClosestContacts(byte[] node_id, int num_to_return, boolean live_only)
          Returns num_to_return or a few more closest contacts, unordered
protected  void findClosestContacts(byte[] node_id, int num_to_return, int depth, DHTRouterNodeImpl current_node, boolean live_only, List res)
           
 DHTRouterContact findContact(byte[] node_id)
           
protected  Object[] findContactSupport(byte[] node_id)
           
protected  DHTRouterNodeImpl findNode(byte[] node_id)
           
 List getAllContacts()
          Returns a list of DHTRouterContact objects
protected  long getContactCount()
           
protected  long getContactCount(DHTRouterNodeImpl node)
           
 byte[] getID()
           
 int getK()
           
 DHTRouterContact getLocalContact()
           
protected  long getNodeCount()
           
protected  long getNodeCount(DHTRouterNodeImpl node)
           
protected  DHTRouterNodeImpl getSmallestSubtree()
           
 DHTRouterStats getStats()
           
protected  long[] getStatsSupport()
           
protected  void getStatsSupport(long[] stats_array, DHTRouterNodeImpl node)
           
 boolean isID(byte[] id)
           
protected  void log(String str)
           
protected  void notifyAdded(DHTRouterContact contact)
           
protected  void notifyDead()
           
protected  void notifyLocationChanged(DHTRouterContact contact)
           
protected  void notifyNowAlive(DHTRouterContact contact)
           
protected  void notifyNowFailing(DHTRouterContact contact)
           
protected  void notifyRemoved(DHTRouterContact contact)
           
protected  void pingeroonies()
           
 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[] refreshRandom()
           
 boolean removeObserver(DHTRouterObserver rto)
          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 seedSupport()
           
 void setAdapter(DHTRouterAdapter _adapter)
           
 void setSleeping(boolean _sleeping)
           
 void setSuspended(boolean _suspended)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DHTRouterImpl

public DHTRouterImpl(int _K,
                     int _B,
                     int _max_rep_per_node,
                     byte[] _router_node_id,
                     DHTRouterContactAttachment _attachment,
                     DHTLogger _logger)
Method Detail

notifyAdded

protected void notifyAdded(DHTRouterContact contact)

notifyRemoved

protected void notifyRemoved(DHTRouterContact contact)

notifyLocationChanged

protected void notifyLocationChanged(DHTRouterContact contact)

notifyNowAlive

protected void notifyNowAlive(DHTRouterContact contact)

notifyNowFailing

protected void notifyNowFailing(DHTRouterContact contact)

notifyDead

protected void notifyDead()

addObserver

public boolean addObserver(DHTRouterObserver rto)
Description copied from interface: DHTRouter
Adds a routing table observer if it is not already observing.

Specified by:
addObserver in interface DHTRouter
Parameters:
rto - the observer to add
Returns:
true if now observing, false otherwise

containsObserver

public boolean containsObserver(DHTRouterObserver rto)
Description copied from interface: DHTRouter
Returns whether the given observer is already observing.

Specified by:
containsObserver in interface DHTRouter
Parameters:
rto - the observer to query as observing
Returns:
true if observing, false otherwise

removeObserver

public boolean removeObserver(DHTRouterObserver rto)
Description copied from interface: DHTRouter
Removes the observer if it is already observing.

Specified by:
removeObserver in interface DHTRouter
Parameters:
rto - the observer to remove
Returns:
true if no longer observing, false otherwise

getStats

public DHTRouterStats getStats()
Specified by:
getStats in interface DHTRouter

getK

public int getK()
Specified by:
getK in interface DHTRouter

getID

public byte[] getID()
Specified by:
getID in interface DHTRouter

isID

public boolean isID(byte[] id)
Specified by:
isID in interface DHTRouter

getLocalContact

public DHTRouterContact getLocalContact()
Specified by:
getLocalContact in interface DHTRouter

setAdapter

public void setAdapter(DHTRouterAdapter _adapter)
Specified by:
setAdapter in interface DHTRouter

setSleeping

public void setSleeping(boolean _sleeping)
Specified by:
setSleeping in interface DHTRouter

setSuspended

public void setSuspended(boolean _suspended)
Specified by:
setSuspended in interface DHTRouter

contactKnown

public void contactKnown(byte[] node_id,
                         DHTRouterContactAttachment attachment,
                         boolean force)
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 interface DHTRouter

contactAlive

public void contactAlive(byte[] node_id,
                         DHTRouterContactAttachment attachment)
Description copied from interface: DHTRouter
Adds a contact to the router and marks it as "known to be alive"

Specified by:
contactAlive in interface DHTRouter

contactDead

public DHTRouterContact contactDead(byte[] node_id,
                                    boolean force)
Description copied from interface: DHTRouter
Informs the router that an attempt to interact with the contact failed

Specified by:
contactDead in interface DHTRouter
Returns:

contactRemoved

public void contactRemoved(byte[] node_id)

addContact

public void addContact(byte[] node_id,
                       DHTRouterContactAttachment attachment,
                       boolean known_to_be_alive)

findClosestContacts

public List findClosestContacts(byte[] node_id,
                                int num_to_return,
                                boolean live_only)
Description copied from interface: DHTRouter
Returns num_to_return or a few more closest contacts, unordered

Specified by:
findClosestContacts in interface DHTRouter

findClosestContacts

protected void findClosestContacts(byte[] node_id,
                                   int num_to_return,
                                   int depth,
                                   DHTRouterNodeImpl current_node,
                                   boolean live_only,
                                   List res)

findContact

public DHTRouterContact findContact(byte[] node_id)
Specified by:
findContact in interface DHTRouter

findNode

protected DHTRouterNodeImpl findNode(byte[] node_id)

findContactSupport

protected Object[] findContactSupport(byte[] node_id)

getNodeCount

protected long getNodeCount()

getNodeCount

protected long getNodeCount(DHTRouterNodeImpl node)

getContactCount

protected long getContactCount()

getContactCount

protected long getContactCount(DHTRouterNodeImpl node)

findBestContacts

public List findBestContacts(int max)
Description copied from interface: DHTRouter
returns a list of best contacts in terms of uptime, best first

Specified by:
findBestContacts in interface DHTRouter
Returns:

getAllContacts

public List getAllContacts()
Description copied from interface: DHTRouter
Returns a list of DHTRouterContact objects

Specified by:
getAllContacts in interface DHTRouter
Returns:

findAllContacts

protected void findAllContacts(Set set,
                               DHTRouterNodeImpl node)

findAllContacts

protected void findAllContacts(List list,
                               DHTRouterNodeImpl node)

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)

Specified by:
seed in interface DHTRouter

seedSupport

protected void seedSupport()

refreshNodes

protected void refreshNodes(List nodes_to_refresh,
                            DHTRouterNodeImpl node,
                            byte[] path,
                            boolean seeding,
                            long max_permitted_idle)

refreshNode

protected void refreshNode(List nodes_to_refresh,
                           DHTRouterNodeImpl node,
                           byte[] path)

getSmallestSubtree

protected DHTRouterNodeImpl getSmallestSubtree()

recordLookup

public void recordLookup(byte[] node_id)
Specified by:
recordLookup in interface DHTRouter

refreshIdleLeaves

public void refreshIdleLeaves(long idle_max)
Specified by:
refreshIdleLeaves in interface DHTRouter

requestPing

public boolean requestPing(byte[] node_id)
Specified by:
requestPing in interface DHTRouter

requestPing

protected void requestPing(DHTRouterContactImpl contact)

dispatchPings

protected void dispatchPings()

pingeroonies

protected void pingeroonies()

requestNodeAdd

protected void requestNodeAdd(DHTRouterContactImpl contact)

dispatchNodeAdds

protected void dispatchNodeAdds()

refreshRandom

public byte[] refreshRandom()
Specified by:
refreshRandom in interface DHTRouter

requestLookup

protected void requestLookup(byte[] id,
                             String description)

getStatsSupport

protected void getStatsSupport(long[] stats_array,
                               DHTRouterNodeImpl node)

getStatsSupport

protected long[] getStatsSupport()

log

protected void log(String str)

print

public void print()
Specified by:
print in interface DHTRouter

destroy

public void destroy()
Specified by:
destroy in interface DHTRouter