When two nodes communicate via the capacity module they create unidirectional links. However, when a connection is established from node A to node B, node B cannot see the Link unless node A specifically sends the object through a ControlMessage. This effectively allows establishing a link only after an RTT.
This is, however, impractical since the user needs to implement a handshake mechanism for bidirectional connections. This issue is about creating and testing a BidirectionalPerfectLink in the capacity module. The new bi-directional link will eventually replace the PerfectLink.
Requirements:
when A calls Connect a new Link object should be created
when B calls Connect, instead of creating a new Link object, the Link object created by A should be used
when A calls Connect another Link object should be created
[...]
Implementation: the easiest way to implement this is probably as following:
when A calls Connect, a new Link L(A) is created
A sends a control message to B
when B calls Connect, a new Link L(B) is created
B sends a control message to A
when B receives the control message, B replaces L(B).download with L(A).download
when A receives the control message, A replaces L(A).download with L(B).download
this way, both A and B have different Link objects, but the objects are correctly linked
When two nodes communicate via the
capacity
module they create unidirectional links. However, when a connection is established from node A to node B, node B cannot see the Link unless node A specifically sends the object through a ControlMessage. This effectively allows establishing a link only after an RTT.This is, however, impractical since the user needs to implement a handshake mechanism for bidirectional connections. This issue is about creating and testing a BidirectionalPerfectLink in the
capacity
module. The new bi-directional link will eventually replace the PerfectLink.Requirements:
Implementation: the easiest way to implement this is probably as following:
An example handshake mechanism can be found here.