public virtual void ConnectionHandler(object ct, EventArgs args)
{
ConnectionEventArgs ce_args = (ConnectionEventArgs) args;
var con = ce_args.Connection;
var edge = ce_args.ConnectionState.Edge;
con.StateChangeEvent +=
delegate(Connection c,
Pair<Brunet.Connections.ConnectionState,
Brunet.Connections.ConnectionState> oldnew) {
//Need to check if we we have to change state:
this.CheckForStateChange(null, null);
};
edge.Subscribe(this, edge);
//Our peer's remote is us
var cs = ce_args.Connection.State;
TransportAddress reported_ta = cs.PeerLinkMessage.Remote.FirstTA;
//Our peer's local is them
TransportAddress remote_ta = cs.PeerLinkMessage.Local.FirstTA;
/*
* Make a copy so that _remote_ta never changes while
* someone is using it
*/
var new_remote_ta = new List<TransportAddress>();
foreach(EdgeListener el in _edgelistener_list) {
//Update our local list:
el.UpdateLocalTAs(edge, reported_ta);
el.UpdateRemoteTAs( new_remote_ta, edge, remote_ta);
}
UpdateRemoteTAs(new_remote_ta);
}