<?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
[msg.input1=="invite" && msg.input2==dst]
/
Invite();" from="//@statemachine.0/@states.0" to="//@statemachine.0/@states.1"/> | |
<transitions body="fwIn:EPTF_MBT_TestStepRequest
[msg==incomingResponse(180)]/
require true;" from="//@statemachine.0/@states.1" to="//@statemachine.0/@states.12"/> | |
<transitions body="fwIn:EPTF_MBT_TestStepRequest
[msg == incomingResponse(200)]
/Ack();
requirement "Acknowledge established call with ACK";" from="//@statemachine.0/@states.12" to="//@statemachine.0/@states.2"/> | |
<transitions body="after(timeoutB)/
requirement "17.1.1.2 INVITE timers/Terminates INVITE cycle after B timeout";
TimeOut();" from="//@statemachine.0/@states.1" to="//@statemachine.0/@states.5"/> | |
<transitions body="userIn:UserInput
[msg.input1=="bye"]/" from="//@statemachine.0/@states.2" to="//@statemachine.0/@states.3"/> | |
<transitions body="fwIn:EPTF_MBT_TestStepRequest
[msg==incomingResponse(200)]/
requirement "Terminating/Wait for OK in response to BYE";" from="//@statemachine.0/@states.3" to="//@statemachine.0/@states.10"/> | |
<transitions body="fwIn:EPTF_MBT_TestStepRequest
[msg==incomingRequest(c_SIP_stepFunction_createBYE)]
/SendOK("BYE");
requirement "Terminating/Send OK in response to BYE";" from="//@statemachine.0/@states.2" to="//@statemachine.0/@states.8"/> | |
<transitions body="fwIn:EPTF_MBT_TestStepRequest
[msg==incomingResponse(486)]
/Ack();" from="//@statemachine.0/@states.12" to="//@statemachine.0/@states.11"/> | |
<transitions body="fwIn:EPTF_MBT_TestStepRequest
[msg==incomingResponse(487, c_SIP_Method_INVITE)]
/
Ack();" from="//@statemachine.0/@states.13" to="//@statemachine.0/@states.9"/> | |
<transitions body="/ setThreadName("SIP UAC");" from="//@statemachine.0/@states.4" to="//@statemachine.0/@states.0"/> | |
<transitions body="fwIn:EPTF_MBT_TestStepRequest
[msg==incomingResponse(200, c_SIP_Method_CANCEL)]
/" from="//@statemachine.0/@states.6" to="//@statemachine.0/@states.13"/> | |
<transitions body="after(timeoutF)/
requirement "17.1.2.2 Non-INVITE timers/Terminates BYE cycle after F timeout";
TimeOut();" from="//@statemachine.0/@states.3" to="//@statemachine.0/@states.5"/> | |
<transitions body="userIn:UserInput
[msg.input1=="cancel"]/" from="//@statemachine.0/@states.12" to="//@statemachine.0/@states.6"/> | |
<transitions body="after(timeoutF)/
requirement "17.1.2.2 Non-INVITE timers/Terminates CANCEL cycle after F timeout";
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)/
//Invite();
RetransmittedRequest();
timeoutA = timeoutA * 2.0;
requirement "17.1.1.2 INVITE timers/Resends INVITE after A timeout";" 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();
timeoutE = T1;" from="//@statemachine.0/@states.3/@states.0" to="//@statemachine.0/@states.3/@states.1"/> | |
<transitions body="after(timeoutE)/
Bye();
//RetransmittedRequest();
timeoutE = timeoutE * 2.0;
requirement "17.1.2.2 Non-INVITE timers/Resends BYE after E timeout";" 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();
timeoutE = T1;" from="//@statemachine.0/@states.6/@states.0" to="//@statemachine.0/@states.6/@states.1"/> | |
<transitions body="after(timeoutE)/
Cancel();
timeoutE = timeoutE * 2.0;
requirement "17.1.2.2 Non-INVITE timers/Resends CANCEL after E timeout";" 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
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
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
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> |