blob: c72c78f7e32095770b6dd785161894d3378193c8 [file] [log] [blame]
<html>
<body>
<p>
Connections are the primary unit of resource management.
Sessions and Links are components of connections. When the
Connection is freed/discarded, any resources associated with
the Sessions and Links are automatically destroyed or discarded
as well.
</p>
<p>
Each of the Connection, Session, and Link endpoints share a
common state model. Note that although this follows the same
pattern as the protocol state model for open/close, begin/end,
and attach/detach, this does not necessarily correspond one to
one to the protocol state model for endpoints. For example the
engine implementation may detach/reattach a link endpoint
without visibly changing the external state.
</p>
<p>
The state of each endpoint is divided into two parts, one
reflecting the state of the local endpoint, and the other
reflecting the state of the remote endpoint as last
communicated.
</p>
<pre>
LOCAL:
UNINIT
ACTIVE
CLOSED
REMOTE:
UNINIT
ACTIVE
CLOSED
</pre>
<p>In total there are 9 possible states:</p>
<pre>
LOCAL REMOTE Example
-------------------------------------------------------------------------
UNINIT UNINIT A newly created connection.
UNINIT ACTIVE A remotely initiated connection
prior to full establishment.
UNINIT CLOSED A remotely initiated connection that
has been closed prior to full
establishment.
ACTIVE UNINIT A locally initiated connection prior
to full establishment.
ACTIVE ACTIVE A fully established connection.
ACTIVE CLOSED A remotely terminated connection.
CLOSED UNINIT A locally initiated connection that
has been closed prior to full
establishment.
CLOSED ACTIVE A locally terminated connection.
CLOSED CLOSED A fully terminated connection.
</pre>
<p>
Additionally each endpoint has an error slot which may be filled
with additional information regarding error conditions, e.g. why
the remote endpoint was transitioned to CLOSED.
</p>
<h3>Questions:</h3>
<ul>
<li>The transfer buffer class may not necessarily be explicitly part
of the external interface, e.g. it could be absorbed into the
session interface.</li>
<li>how do we confirm acheiving active/active without iterating
over all active/active endpoints?
<ul>
<li>add an ignore/interest flag as part of generic endpoint state?</li>
<li>add pending state to local state?</li>
</ul>
</li>
<li>what are credits exactly?
<ul>
<li>how does synchronous get work?
<ul><li>implies credit unit needs to be messages?</li></ul>
<li>credits may not correspond exactly with on-the-wire credits due
to local buffering</li>
</ul>
</li>
<li>how would 0-x impls work given that we're passing bytes directly to send?
<ul>
<li>have a generic property get/set API?
<ul><li>this could address per transfer flags as well</li></ul>
</li>
</ul>
</li>
<li>how do large messages work?
<ul><li>does send need a done flag for multiple transfers?</li></ul>
</li>
<li>how does resume work?</li>
<li>how does abort work?</li>
<li>how do we send settled?
<ul>
<li>just call settle on the returned transfer, the engine MUST optimize</li>
</ul>
</li>
<li>
how do we deal with send and receive modes on individual transfers?
<ul><li>could just twiddle the link ones and set them on the
transfer frame if they differ from what they were when the
attach was made</li></ul>
</li>
</ul>
</body>
</html>