Base clase for anything that is going to be using sockets.* for creating an app
This is how we decide if we need to process the message locally or not. Are we the single destination? Do we have an attribute the same as dest attribute? Is it a broadcast message? If you answered yes to any of these, process locally.
Create a new INFO messages and broadcast it to everyone
Check for required connections that are not connected and try to connect them
Optional outgoing filter for messages, default is no filtering
Extract neighbor and responsibility information for later decisions
Primary async loop for users of NetworkRouter
Check message headers for specific destination, route appropriatly
Try and send anything left in the transmit buffers and then switch the main loop flag
Data storage for entries in the route table
Provide recording of unique id values that can be timed out in groups for low overhead
Collectes INFO messages and create an internal routing table
Add a new neighbor to our list and the sock to use to talk to it
Standard breadth first walk of network, stopping when we hit a duplicate node
Delete the neighbor entry on this sock and recalculate the routes
Get the sockets to broadcast messages for a particular attribute
Get the names of all of our directly connected neighbors
Get the sock objects of all of our directly connected neighbors
Return the socket for the next hop
Process an incoming INFO message and update the routes
Get the name reported for a particular sock
Router that segments part of the network from each other while letting other nodes to talk to anyone
Any messages that are to be sent out a messaging socket go through here first. Filtering works as so: 1. INFO messages that are direct from us are modified when sent to constrained neighbors to not include any neighbor info for other constrained neighbors 2. Any messages comming from a constrained neighbor are never sent to another constrained neighbor
Socks that should not be filtered