blob: 976f3005ab72ba439a0682f245f05a1596c3d8cd [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="fwIn:EPTF_MBT_TestStepRequest&#xA;[msg==incomingResponse(180)]/&#xA;require true;" from="//@statemachine.0/@states.1" to="//@statemachine.0/@states.12"/>
<transitions body="fwIn:EPTF_MBT_TestStepRequest&#xA;[msg == incomingResponse(200)]&#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="fwIn:EPTF_MBT_TestStepRequest&#xA;[msg==incomingResponse(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="fwIn:EPTF_MBT_TestStepRequest&#xA;[msg==incomingRequest(c_SIP_stepFunction_createBYE)]&#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="fwIn:EPTF_MBT_TestStepRequest&#xA;[msg==incomingResponse(486)]&#xA;/Ack();" from="//@statemachine.0/@states.12" to="//@statemachine.0/@states.11"/>
<transitions body="fwIn:EPTF_MBT_TestStepRequest&#xA;[msg==incomingResponse(487, c_SIP_Method_INVITE)]&#xA;/&#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="fwIn:EPTF_MBT_TestStepRequest&#xA;[msg==incomingResponse(200, c_SIP_Method_CANCEL)]&#xA;/" 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;RetransmittedRequest();&#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;//RetransmittedRequest();&#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="-603" y="-102"/>
</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="-176"/>
<route x="-550" y="-250"/>
<route x="-550" y="-102"/>
</items>
<items autolayout="false" transition="//@statemachine.0/@transitions.1" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" valign="1" x="-314.5" y="-78"/>
<route x="-503" y="-77"/>
<route x="-100" y="-77"/>
</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="112.953"/>
<route x="-550" y="-52"/>
<route x="-550" y="277.906"/>
</items>
<items autolayout="false" transition="//@statemachine.0/@transitions.4" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" valign="0" x="-15.5" y="216"/>
<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="false" transition="//@statemachine.0/@transitions.7" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" valign="1" x="-228" y="21"/>
<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="-77"/>
<route x="-603" y="-77"/>
</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="-536" y="-44"/>
</items>
<items autolayout="false" item="//@diagrams.0/@items.25" note="//@diagrams.0/@items.36" xsi:type="n1:DiagramNoteConnector">
<route x="-377" y="22"/>
<route x="-363.883" y="35.6031"/>
</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 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="-599" y="-64"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.3/@transitions.1" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintBottom="-94" constraintLeft="-880" valign="0" x="-749.5" y="-190"/>
<route x="-900" y="-200"/>
<route x="-599" y="-200"/>
<route x="-599" y="-74"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.3/@transitions.2" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintRight="-629" constraintTop="-130" valign="1" x="-779.5" y="-74"/>
<route x="-609" y="-64"/>
<route x="-950" y="-64"/>
<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="-608.756" y="-61.8033"/>
</items>
</diagrams>
<diagrams selected="//@diagrams.2/@items.2" 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="-613" y="-163"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.1/@transitions.0" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintBottom="-193" constraintLeft="-880" valign="0" x="-756.5" y="-290"/>
<route x="-900" y="-300"/>
<route x="-613" y="-300"/>
<route x="-613" y="-173"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.1/@transitions.1" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintRight="-643" constraintTop="-230" valign="1" x="-786.5" y="-173"/>
<route x="-623" y="-163"/>
<route x="-950" y="-163"/>
<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="-622.722" y="-160.658"/>
</items>
</diagrams>
<diagrams selected="//@diagrams.3/@items.3" 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="-698" y="-179"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.6/@transitions.1" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintBottom="-209" constraintLeft="-980" valign="0" x="-849" y="-290"/>
<route x="-1000" y="-300"/>
<route x="-698" y="-300"/>
<route x="-698" y="-189"/>
</items>
<items autolayout="true" transition="//@statemachine.0/@states.6/@transitions.2" xsi:type="n1:DiagramTransition">
<bodylocation align="0.5" constraintRight="-728" constraintTop="-230" valign="1" x="-879" y="-189"/>
<route x="-708" y="-179"/>
<route x="-1050" y="-179"/>
<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="-707.518" y="-175.932"/>
</items>
</diagrams>
</n1:Project>