blob: 86e3ceba919ab5eeb9b206f71b86f8d23c282014 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<n1:Project xmlns:n1="http://www.conformiq.com/EMF/SimpleStatechart" xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<statemachine name="SIPClient">
<transitions body="userIn:UserInput&#xA;[msg.input1==&quot;invite&quot; &amp;&amp; msg.input2==dst]&#xA;/&#xA;Invite();" from="//@statemachine.0/@states.0" to="//@statemachine.0/@states.1"/>
<transitions body="netIn:SIPResp[msg.status==180]/&#xA;require true;" from="//@statemachine.0/@states.1" to="//@statemachine.0/@states.12"/>
<transitions body="netIn:SIPResp&#xA;[msg.status==200 &amp;&amp;&#xA; msg.cseq == &quot;INVITE&quot;]&#xA;/Ack();&#xA;requirement &quot;Acknowledge established call with ACK&quot;;" from="//@statemachine.0/@states.12" to="//@statemachine.0/@states.2"/>
<transitions body="after(timeoutB)/&#xA;requirement &quot;17.1.1.2 INVITE timers/Terminates INVITE cycle after B timeout&quot;;&#xA;TimeOut();" from="//@statemachine.0/@states.1" to="//@statemachine.0/@states.5"/>
<transitions body="userIn:UserInput&#xA;[msg.input1==&quot;bye&quot;]/" from="//@statemachine.0/@states.2" to="//@statemachine.0/@states.3"/>
<transitions body="netIn:SIPResp&#xA;[msg.status==200]/&#xA;requirement &quot;Terminating/Wait for OK in response to BYE&quot;;" from="//@statemachine.0/@states.3" to="//@statemachine.0/@states.10"/>
<transitions body="netIn:SIPReq&#xA;[msg.op==&quot;BYE&quot; &amp;&amp;&#xA; msg.param==src]&#xA;/SendOK(&quot;BYE&quot;);&#xA;requirement &quot;Terminating/Send OK in response to BYE&quot;;" from="//@statemachine.0/@states.2" to="//@statemachine.0/@states.8"/>
<transitions body="netIn:SIPResp&#xA;[msg.status==486 &amp;&amp;&#xA; msg.cseq == &quot;INVITE&quot;]&#xA;/Ack();" from="//@statemachine.0/@states.12" to="//@statemachine.0/@states.11"/>
<transitions body="netIn:SIPResp&#xA;[msg.status==487 &amp;&amp;&#xA;msg.cseq==&quot;INVITE&quot;]/&#xA;Ack();" from="//@statemachine.0/@states.13" to="//@statemachine.0/@states.9"/>
<transitions body="/ setThreadName(&quot;SIP UAC&quot;);" from="//@statemachine.0/@states.4" to="//@statemachine.0/@states.0"/>
<transitions body="netIn:SIPResp&#xA;[msg.status==200 &amp;&amp;&#xA;msg.cseq==&quot;CANCEL&quot;]/" from="//@statemachine.0/@states.6" to="//@statemachine.0/@states.13"/>
<transitions body="after(timeoutF)/&#xA;requirement &quot;17.1.2.2 Non-INVITE timers/Terminates BYE cycle after F timeout&quot;;&#xA;TimeOut();" from="//@statemachine.0/@states.3" to="//@statemachine.0/@states.5"/>
<transitions body="userIn:UserInput&#xA;[msg.input1==&quot;cancel&quot;]/" from="//@statemachine.0/@states.12" to="//@statemachine.0/@states.6"/>
<transitions body="after(timeoutF)/&#xA;requirement &quot;17.1.2.2 Non-INVITE timers/Terminates CANCEL cycle after F timeout&quot;;&#xA;TimeOut();" from="//@statemachine.0/@states.6" to="//@statemachine.0/@states.7"/>
<states internal="" name="Init" xsi:type="n1:BasicState"/>
<states internal="" name="Calling" xsi:type="n1:BasicState">
<transitions body="after(timeoutA)/&#xA;Invite();&#xA;timeoutA = timeoutA * 2.0;&#xA;requirement &quot;17.1.1.2 INVITE timers/Resends INVITE after A timeout&quot;;" from="//@statemachine.0/@states.1/@states.1" to="//@statemachine.0/@states.1/@states.2"/>
<transitions body="" from="//@statemachine.0/@states.1/@states.2" to="//@statemachine.0/@states.1/@states.1"/>
<transitions body="/timeoutA = T1;" from="//@statemachine.0/@states.1/@states.0" to="//@statemachine.0/@states.1/@states.1"/>
<states xsi:type="n1:InitialState"/>
<states internal="" name="Wait" xsi:type="n1:BasicState"/>
<states xsi:type="n1:Junction"/>
</states>
<states internal="" name="Ready" xsi:type="n1:BasicState"/>
<states internal="" name="Terminating" xsi:type="n1:BasicState">
<transitions body="/Bye();&#xA;timeoutE = T1;" from="//@statemachine.0/@states.3/@states.0" to="//@statemachine.0/@states.3/@states.1"/>
<transitions body="after(timeoutE)/&#xA;Bye();&#xA;timeoutE = timeoutE * 2.0;&#xA;requirement &quot;17.1.2.2 Non-INVITE timers/Resends BYE after E timeout&quot;;" from="//@statemachine.0/@states.3/@states.1" to="//@statemachine.0/@states.3/@states.2"/>
<transitions body="" from="//@statemachine.0/@states.3/@states.2" to="//@statemachine.0/@states.3/@states.1"/>
<states xsi:type="n1:InitialState"/>
<states internal="" name="Wait" xsi:type="n1:BasicState"/>
<states xsi:type="n1:Junction"/>
</states>
<states xsi:type="n1:InitialState"/>
<states xsi:type="n1:FinalState"/>
<states internal="" name="Canceling" xsi:type="n1:BasicState">
<transitions body="/Cancel();&#xA;timeoutE = T1;" from="//@statemachine.0/@states.6/@states.0" to="//@statemachine.0/@states.6/@states.1"/>
<transitions body="after(timeoutE)/&#xA;Cancel();&#xA;timeoutE = timeoutE * 2.0;&#xA;requirement &quot;17.1.2.2 Non-INVITE timers/Resends CANCEL after E timeout&quot;;" from="//@statemachine.0/@states.6/@states.1" to="//@statemachine.0/@states.6/@states.2"/>
<transitions body="" from="//@statemachine.0/@states.6/@states.2" to="//@statemachine.0/@states.6/@states.1"/>
<states xsi:type="n1:InitialState"/>
<states internal="" name="Wait" xsi:type="n1:BasicState"/>
<states xsi:type="n1:Junction"/>
</states>
<states xsi:type="n1:FinalState"/>
<states xsi:type="n1:FinalState"/>
<states xsi:type="n1:FinalState"/>
<states xsi:type="n1:FinalState"/>
<states xsi:type="n1:FinalState"/>
<states internal="" name="Ringing" xsi:type="n1:BasicState"/>
<states internal="" name="Waiting Response" xsi:type="n1:BasicState"/>
</statemachine>
<diagrams statemachine="//@statemachine.0">
<items height="50" state="//@statemachine.0/@states.0" width="100" xsi:type="n1:DiagramBasicState">
<location x="-600" y="-300"/>
</items>
<items height="50" state="//@statemachine.0/@states.1" width="100" xsi:type="n1:DiagramBasicState">
<location x="-600" y="-100"/>
</items>
<items height="100" state="//@statemachine.0/@states.2" width="200" xsi:type="n1:DiagramBasicState">
<location x="100" y="150"/>
</items>
<items height="100" state="//@statemachine.0/@states.3" width="150" xsi:type="n1:DiagramBasicState">
<location x="-250" y="250"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@transitions.0" xsi:type="n1:DiagramTransition">
<bodylocation align="0" valign="0.5" x="-540" y="-175"/>
<route x="-550" y="-250"/>
<route x="-550" y="-100"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@transitions.1" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" valign="1" x="-300" y="-85"/>
<route x="-500" y="-75"/>
<route x="-100" y="-75"/>
</items>
<items autolayout="false" transition="//@statemachine.0/@transitions.2" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" valign="0" x="417.917" y="3.888"/>
<route x="0" y="0"/>
<route x="200" y="0"/>
<route x="200" y="150"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@transitions.3" xsi:type="n1:DiagramTransition">
<bodylocation align="0" valign="0.5" x="-540" y="113.953"/>
<route x="-550" y="-50"/>
<route x="-550" y="277.906"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@transitions.4" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintBottom="230" constraintRight="80" valign="0" x="-37.5" y="210"/>
<route x="100" y="200"/>
<route x="-175" y="200"/>
<route x="-175" y="250"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@transitions.5" xsi:type="n1:DiagramTransition">
<bodylocation align="0" valign="0.5" x="-172" y="416"/>
<route x="-182" y="350"/>
<route x="-182" y="482"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@transitions.6" xsi:type="n1:DiagramTransition">
<bodylocation align="0" valign="0.5" x="210" y="315"/>
<route x="200" y="250"/>
<route x="200" y="380"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@transitions.7" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" valign="1" x="-215" y="40"/>
<route x="-100" y="50"/>
<route x="-330" y="50"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@transitions.8" xsi:type="n1:DiagramTransition">
<bodylocation align="0" valign="0.5" x="685" y="202.5"/>
<route x="675" y="150"/>
<route x="675" y="255"/>
</items>
<items state="//@statemachine.0/@states.4" xsi:type="n1:DiagramInitialState">
<location x="-550" y="-350"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@transitions.9" xsi:type="n1:DiagramTransition">
<bodylocation align="0" valign="0.5" x="-540" y="-315"/>
<route x="-550" y="-330"/>
<route x="-550" y="-300"/>
</items>
<items state="//@statemachine.0/@states.5" xsi:type="n1:DiagramFinalState">
<location x="-550" y="297.906"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@transitions.10" xsi:type="n1:DiagramTransition">
<bodylocation align="0" valign="0.5" x="685" y="25"/>
<route x="675" y="-50"/>
<route x="675" y="100"/>
</items>
<items autolayout="false" transition="//@statemachine.0/@transitions.11" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" valign="1" x="-425.57" y="400.906"/>
<route x="-250" y="298.763"/>
<route x="-530" y="297.963"/>
</items>
<items height="100" state="//@statemachine.0/@states.6" width="150" xsi:type="n1:DiagramBasicState">
<location x="600" y="-150"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@transitions.12" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" valign="1" x="300" y="-87.5"/>
<route x="0" y="-77.5"/>
<route x="600" y="-77.5"/>
</items>
<items state="//@statemachine.0/@states.7" xsi:type="n1:DiagramFinalState">
<location x="675" y="-275.13"/>
</items>
<items autolayout="false" transition="//@statemachine.0/@transitions.13" xsi:type="n1:DiagramTransition">
<bodylocation align="0" valign="0.5" x="536.844" y="-195.261"/>
<route x="675" y="-150"/>
<route x="675" y="-255.13"/>
</items>
<items state="//@statemachine.0/@states.8" xsi:type="n1:DiagramFinalState">
<location x="200" y="400"/>
</items>
<items state="//@statemachine.0/@states.9" xsi:type="n1:DiagramFinalState">
<location x="675" y="275"/>
</items>
<items state="//@statemachine.0/@states.10" xsi:type="n1:DiagramFinalState">
<location x="-182" y="502"/>
</items>
<items state="//@statemachine.0/@states.11" xsi:type="n1:DiagramFinalState">
<location x="-350" y="50"/>
</items>
<items height="250" state="//@statemachine.0/@states.12" width="100" xsi:type="n1:DiagramBasicState">
<location x="-100" y="-150"/>
</items>
<items height="50" state="//@statemachine.0/@states.13" width="150" xsi:type="n1:DiagramBasicState">
<location x="600" y="100"/>
</items>
<items height="120" note="Triggered by user action, send INVITE request. (We are initiating a new call.)" width="161" xsi:type="n1:DiagramNote">
<location x="-838" y="-142"/>
</items>
<items autolayout="false" item="//@diagrams.0/@items.1" note="//@diagrams.0/@items.28" xsi:type="n1:DiagramNoteConnector">
<route x="-677" y="-75"/>
<route x="-600" y="-75"/>
</items>
<items height="76" note="21.1.2 180 Ringing&#xA;waiting for other end to answer" width="174" xsi:type="n1:DiagramNote">
<location x="-100" y="-300"/>
</items>
<items autolayout="false" item="//@diagrams.0/@items.26" note="//@diagrams.0/@items.30" xsi:type="n1:DiagramNoteConnector">
<route x="-50" y="-224"/>
<route x="-50" y="-150"/>
</items>
<items height="131" note="It is ringing, but we want to cancel (hang-up) before other end answers" width="169" xsi:type="n1:DiagramNote">
<location x="250" y="-321"/>
</items>
<items autolayout="false" note="//@diagrams.0/@items.32" xsi:type="n1:DiagramNoteConnector">
<route x="327" y="-190"/>
<route x="327" y="-80"/>
</items>
<items height="84" note="Now we can speak with other end" width="143" xsi:type="n1:DiagramNote">
<location x="-35" y="275"/>
</items>
<items autolayout="false" item="//@diagrams.0/@items.2" note="//@diagrams.0/@items.34" xsi:type="n1:DiagramNoteConnector">
<route x="88" y="275"/>
<route x="120" y="250"/>
</items>
<items height="66" note="21.4.24 486 Busy Here&#xA;Callee rejects call" width="179" xsi:type="n1:DiagramNote">
<location x="-494" y="-57"/>
</items>
<items autolayout="false" item="//@diagrams.0/@items.25" note="//@diagrams.0/@items.36" xsi:type="n1:DiagramNoteConnector">
<route x="-350" y="9"/>
<route x="-350" y="30"/>
</items>
<items height="52" note="2.1.4.25 487 Request Terminated&#xA;call is now terminated" width="257" xsi:type="n1:DiagramNote">
<location x="370" y="168"/>
</items>
<items autolayout="false" note="//@diagrams.0/@items.38" xsi:type="n1:DiagramNoteConnector">
<route x="627" y="200"/>
<route x="675" y="202"/>
</items>
<items height="69" note="Paragraph numbers in comments and requiremnts refer to RFC 3261 SIP: Session Initiation Protocol" width="307" xsi:type="n1:DiagramNote">
<location x="-238" y="-433"/>
</items>
</diagrams>
<diagrams cursorItem="after(timeoutE)/&#xA;Bye();&#xA;timeoutE = timeoutE * 2.0;&#xA;requirement &quot;17.1.2.2 Non-INVITE timers/Resends BYE after E timeout&quot;;" cursorOffset="14" selected="//@diagrams.1/@items.4" substate="//@statemachine.0/@states.3">
<items state="//@statemachine.0/@states.3/@states.0" xsi:type="n1:DiagramInitialState">
<location x="-1200" y="-200"/>
</items>
<items height="100" state="//@statemachine.0/@states.3/@states.1" width="100" xsi:type="n1:DiagramBasicState">
<location x="-1000" y="-250"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.3/@transitions.0" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" valign="1" x="-1090" y="-210"/>
<route x="-1180" y="-200"/>
<route x="-1000" y="-200"/>
</items>
<items state="//@statemachine.0/@states.3/@states.2" xsi:type="n1:DiagramJunction">
<location x="-600" y="-100"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.3/@transitions.1" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintBottom="-130" constraintLeft="-880" valign="0" x="-750" y="-190"/>
<route x="-900" y="-200"/>
<route x="-600" y="-200"/>
<route x="-600" y="-110"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.3/@transitions.2" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintRight="-630" constraintTop="-130" valign="1" x="-780" y="-110"/>
<route x="-610" y="-100"/>
<route x="-950" y="-100"/>
<route x="-950" y="-150"/>
</items>
<items height="150" note="Re-send BYE message after time-out and increase value of timer E according to RFC 3261 17.1.2 Non-INVITE Client Transaction." width="350" xsi:type="n1:DiagramNote">
<location x="-1100" y="-50"/>
</items>
<items autolayout="false" item="//@diagrams.1/@items.3" note="//@diagrams.1/@items.6" xsi:type="n1:DiagramNoteConnector">
<route x="-750" y="-30"/>
<route x="-609.062" y="-95.7711"/>
</items>
</diagrams>
<diagrams cursorItem="after(timeoutA)/&#xA;Invite();&#xA;timeoutA = timeoutA * 2.0;&#xA;requirement &quot;17.1.1.2 INVITE timers/Resends INVITE after A timeout&quot;;" cursorOffset="46" selected="//@diagrams.2/@items.3" substate="//@statemachine.0/@states.1">
<items state="//@statemachine.0/@states.1/@states.0" xsi:type="n1:DiagramInitialState">
<location x="-1200" y="-300"/>
</items>
<items height="100" state="//@statemachine.0/@states.1/@states.1" width="100" xsi:type="n1:DiagramBasicState">
<location x="-1000" y="-350"/>
</items>
<items state="//@statemachine.0/@states.1/@states.2" xsi:type="n1:DiagramJunction">
<location x="-600" y="-200"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.1/@transitions.0" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintBottom="-230" constraintLeft="-880" valign="0" x="-750" y="-290"/>
<route x="-900" y="-300"/>
<route x="-600" y="-300"/>
<route x="-600" y="-210"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.1/@transitions.1" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintRight="-630" constraintTop="-230" valign="1" x="-780" y="-210"/>
<route x="-610" y="-200"/>
<route x="-950" y="-200"/>
<route x="-950" y="-250"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.1/@transitions.2" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" valign="1" x="-1090" y="-310"/>
<route x="-1180" y="-300"/>
<route x="-1000" y="-300"/>
</items>
<items height="150" note="Re-send INVITE message after time-out and increase value of timer A according to RFC 3261 17.1.1 INVITE Client Transaction." width="350" xsi:type="n1:DiagramNote">
<location x="-1100" y="-150"/>
</items>
<items autolayout="false" item="//@diagrams.2/@items.2" note="//@diagrams.2/@items.6" xsi:type="n1:DiagramNoteConnector">
<route x="-750" y="-130"/>
<route x="-609.062" y="-195.771"/>
</items>
</diagrams>
<diagrams substate="//@statemachine.0/@states.6">
<items state="//@statemachine.0/@states.6/@states.0" xsi:type="n1:DiagramInitialState">
<location x="-1300" y="-300"/>
</items>
<items height="100" state="//@statemachine.0/@states.6/@states.1" width="100" xsi:type="n1:DiagramBasicState">
<location x="-1100" y="-350"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.6/@transitions.0" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" valign="1" x="-1190" y="-310"/>
<route x="-1280" y="-300"/>
<route x="-1100" y="-300"/>
</items>
<items state="//@statemachine.0/@states.6/@states.2" xsi:type="n1:DiagramJunction">
<location x="-700" y="-200"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.6/@transitions.1" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintBottom="-230" constraintLeft="-980" valign="0" x="-850" y="-290"/>
<route x="-1000" y="-300"/>
<route x="-700" y="-300"/>
<route x="-700" y="-210"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.6/@transitions.2" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintRight="-730" constraintTop="-230" valign="1" x="-880" y="-210"/>
<route x="-710" y="-200"/>
<route x="-1050" y="-200"/>
<route x="-1050" y="-250"/>
</items>
<items height="150" note="Re-send CANCEL message after time-out and increase value of timer E according to RFC 3261 17.1.2 Non-INVITE Client Transaction." width="350" xsi:type="n1:DiagramNote">
<location x="-1200" y="-150"/>
</items>
<items autolayout="false" item="//@diagrams.3/@items.3" note="//@diagrams.3/@items.6" xsi:type="n1:DiagramNoteConnector">
<route x="-850" y="-130"/>
<route x="-709.062" y="-195.771"/>
</items>
</diagrams>
</n1:Project>