It is proposed that the <success/> element, indicating that a component completed successfully, be replaced by a set of more descriptively named elements, such as <initial-timeout/>, <end-of-file/>, etc. These allow the client to correlate the actual completion reason with what are potentially a large set of possible triggers from the original command. For example, setting both max-time and interrupt-on on an Output results in an ambiguous <success/> reason. In the case of Input, <success/> will be renamed <match/>.
Further, it is concerning that node ordering is still being relied upon for disambiguating children of <complete/>. Currently, the Record component may submit a complete event like this:
<presence to='[email protected]/1' from='[email protected]/fgh4590'>
<complete xmlns='urn:xmpp:rayo:ext:1'>
<success xmlns='urn:xmpp:rayo:record:complete:1'/>
<recording xmlns='urn:xmpp:rayo:record:complete:1'
uri="file:/tmp/rayo7451601434771683422.mp3"
duration="34000"
size="23450"/>
</complete>
</presence>If a Rayo server were to instead spit out this event:
<presence to='[email protected]/1' from='[email protected]/fgh4590'>
<complete xmlns='urn:xmpp:rayo:ext:1'>
<recording xmlns='urn:xmpp:rayo:record:complete:1'
uri="file:/tmp/rayo7451601434771683422.mp3"
duration="34000"
size="23450"/>
<success xmlns='urn:xmpp:rayo:record:complete:1'/>
</complete>
</presence>merry hell would break loose in clients. I strongly believe it is unacceptable to rely on the order of sibling nodes to provide any semantic value. Unfortunately, we currently have no other way of disambiguating a completion reason from any other child element. There are a few possible solutions to this:
- Make the reason an attribute of
<complete/>, and force any further meta-data to be included as children. [PREFERRED] - Mandate that the ONLY allowed child of
<complete/>be the reason for completion, and any meta-data (such as recordings) be nested within the reason element. - Introduce a generic
<reason/>element with a child such as<timeout/>.
As far as grouping reason names into success/failure goes, the options are either to enumerate them in the spec, or have generic
<success type="terminator"/>,<failure type="hangup"/>, etc. That also solves the problem of knowing which is the reason element.Comments about the second part noted, and I'm on the fence.