| /////////////////////////////////////////////////////////////////////////////// |
| // |
| // Copyright (c) 2000-2018 Ericsson Telecom AB |
| // |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // which accompanies this distribution, and is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| /////////////////////////////////////////////////////////////////////////////// |
| // |
| // File: MBT_SUT_SIP_Phone.ttcn |
| // Rev: <RnXnn> |
| // Prodnr: CNL 113 659 |
| // Updated: 2009-10-01 |
| // Contact: http://ttcn.ericsson.se |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| module MBT_SUT_SIP_Phone |
| { |
| import from MBT_Qtronic_Types all; |
| |
| import from EPTF_CLL_Common_Definitions all; |
| import from EPTF_CLL_Base_Functions all; |
| import from EPTF_CLL_RBTScheduler_Functions all; |
| import from EPTF_CLL_LGenBase_Definitions all; |
| import from EPTF_CLL_LGenBase_ConfigFunctions all; |
| import from EPTF_CLL_LGenBase_EventHandlingFunctions all; |
| |
| import from EPTF_MBT_LGen_Definitions all; |
| import from EPTF_MBT_LGen_Functions all; |
| |
| import from EPTF_SIP_LGen_Definitions all; |
| import from EPTF_SIP_LGen_Functions all; |
| import from EPTF_SIP_Common_Functions all; |
| import from EPTF_SIP_UserDatabase_Functions all; |
| import from EPTF_SIP_Transport_Definitions all; |
| import from EPTF_SIP_Transport_Functions all; |
| import from EPTF_SIP_MessageHandler_Functions all; |
| |
| import from EPTF_SIP_TestSteps all; |
| import from EPTF_SIP_Templates all; |
| import from EPTF_SIP_Events all; |
| |
| modulepar |
| { |
| charstring tsp_MBT_SUT_LocalIP := "159.107.193.33"; |
| integer tsp_MBT_SUT_LocalPort := 20000; |
| charstring tsp_MBT_SUT_RemoteIP := "159.107.193.33"; |
| integer tsp_MBT_SUT_RemotePort := 15000; |
| |
| charstring tsp_MBT_SUT_SIP_Transport := "udp"; |
| } |
| |
| type component MBT_Qtronic_Demo_SUT_CT |
| extends |
| EPTF_MBT_LGen_CT, |
| EPTF_SIP_LGen_CT, EPTF_SIP_LocalTransport_CT |
| { |
| port userInPort userIn; |
| port userOutPort userOut; |
| |
| var integer v_SUT_myBIdx := -1; |
| } |
| |
| function f_MBT_Qtronic_Demo_SUT_behavior() runs on MBT_Qtronic_Demo_SUT_CT |
| { |
| // map(self:IPL4_PCO, system:IPL4_PCO); |
| |
| activate(as_MBT_Qtronic_Demo_SUT_userMessageHandler()); |
| |
| f_EPTF_MBT_init("MBT_Demo_SUT",0, "MBT_") |
| |
| f_SIP_applibInit("MBT_Demo_SUT"); |
| |
| f_EPTF_SIP_LocalTransport_init(tsp_MBT_SUT_SIP_Transport); |
| vf_EPTF_SIP_LocalTransport_receive := refers(f_EPTF_SIP_Message_MsgHandler); //receive callback function on LocalTransport |
| vf_EPTF_SIP_LGen_msgSender := refers(f_EPTF_SIP_LocalTransport_sendSIPMessage); //send callback function on LGen |
| v_removeUAS := refers(fcb_EPTF_SIP_LocalTransport_removeUAS); |
| |
| v_SUT_myBIdx := f_EPTF_LGenBase_declareBehaviorType("SUT_Behavior", -1, null, null, null); |
| |
| var integer vl_temp := -1; |
| vl_temp := f_EPTF_LGenBase_declareFsmEvent("SUT_Behavior", "SUT_INVITE"); |
| f_EPTF_Base_assert(%definitionId&": Error during registration of SUT_INVITE", vl_temp == c_MBT_Qtronic_Demo_SUT_Event_invite); |
| vl_temp := f_EPTF_LGenBase_declareFsmEvent("SUT_Behavior", "SUT_CANCEL"); |
| f_EPTF_Base_assert(%definitionId&": Error during registration of SUT_CANCEL", vl_temp == c_MBT_Qtronic_Demo_SUT_Event_cancel); |
| vl_temp := f_EPTF_LGenBase_declareFsmEvent("SUT_Behavior", "SUT_BYE"); |
| f_EPTF_Base_assert(%definitionId&": Error during registration of SUT_BYE", vl_temp == c_MBT_Qtronic_Demo_SUT_Event_bye); |
| |
| |
| f_EPTF_LGenBase_declareCompactFsmTable(f_IMBT_Qtronic_Demo_SUT_getFSM()); |
| |
| f_EPTF_MBT_initLGenFsm |
| ( |
| refers(f_MBT_Qtronic_Demo_SUT_createUserMessage), |
| refers(f_MBT_Qtronic_Demo_SUT_fillInDB) |
| ); |
| |
| EPTF_MBT_PCO.send(EPTF_MBT_CommandResponse:{ ready := {}}) to mtc; |
| |
| f_EPTF_Base_wait4Shutdown(); |
| } |
| |
| altstep as_MBT_Qtronic_Demo_SUT_userMessageHandler() |
| runs on MBT_Qtronic_Demo_SUT_CT |
| { |
| var UserInput vl_UserInput; |
| |
| [] userIn.receive(UserInput:?) -> value vl_UserInput |
| { |
| f_EPTF_SchedulerComp_refreshSnapshotTime(); |
| action(%definitionId, " incoming: ", vl_UserInput); |
| |
| if (vl_UserInput.input1 == "invite") |
| { |
| f_EPTF_LGenBase_dispatchEvent({{v_SUT_myBIdx, c_MBT_Qtronic_Demo_SUT_Event_invite,{ 0, 0}, omit},{}}); |
| } |
| else if (vl_UserInput.input1 == "cancel") |
| { |
| f_EPTF_LGenBase_dispatchEvent({{v_SUT_myBIdx, c_MBT_Qtronic_Demo_SUT_Event_cancel,{ 0, 0}, omit},{}}); |
| } |
| else if (vl_UserInput.input1 == "bye") |
| { |
| f_EPTF_LGenBase_dispatchEvent({{v_SUT_myBIdx, c_MBT_Qtronic_Demo_SUT_Event_bye,{ 0, 0}, omit},{}}); |
| } |
| else |
| { |
| action(%definitionId & "(): UserInput not recognized: ", vl_UserInput); |
| } |
| |
| repeat; |
| } |
| } |
| |
| function f_MBT_Qtronic_Demo_SUT_createUserMessage(in EPTF_LGenBase_TestStepArgs pl_ptr) |
| runs on MBT_Qtronic_Demo_SUT_CT |
| return boolean |
| { |
| action(%definitionId & "(): creating message for: ", pl_ptr, "\n", pl_ptr.reportedEvent); |
| return true; |
| } |
| |
| function f_MBT_Qtronic_Demo_SUT_stepSendTimeoutIndication(in EPTF_LGenBase_TestStepArgs pl_ptr) |
| runs on MBT_Qtronic_Demo_SUT_CT |
| { |
| userOut.send(TimeOutIndication:{}); |
| } |
| |
| function f_MBT_Qtronic_Demo_SUT_fillInDB(in EPTF_MBT_ConfigRequest p_req) runs on MBT_Qtronic_Demo_SUT_CT |
| { |
| var integer vl_grpIdx := f_EPTF_LGenBase_entityGrpNameIndex(p_req.entityGroupName); |
| var integer vl_entityIdx := f_EPTF_LGenBase_getEGrpBaseOffset(vl_grpIdx); |
| |
| for (var integer i:=0; i<p_req.noEntities; i:=i+1) |
| { |
| var EPTF_IntegerList vl_bCtx := f_EPTF_LGenBase_getBehaviorCtx(i + vl_entityIdx, v_SIP_myBIdx); |
| f_EPTF_SIP_IPL4asp_SetUserData |
| ( |
| vl_bCtx[0], |
| tsp_MBT_SUT_LocalIP, // local IP |
| {tsp_MBT_SUT_LocalPort, tsp_MBT_SUT_LocalPort+1}, |
| tsp_MBT_SUT_SIP_Transport, |
| tsp_MBT_SUT_RemoteIP, // proxy ip |
| tsp_MBT_SUT_RemotePort // proxy port |
| ); |
| |
| f_EPTF_SIP_User_SetUserData( |
| vl_bCtx[0], |
| { |
| { |
| addr := { |
| nameAddr := { |
| displayName := "titansim_user_7465001", |
| addrSpec := { |
| scheme := "sip", |
| userInfo := { |
| userOrTelephoneSubscriber := "titansim_user_7465001", |
| password := omit |
| }, |
| hostPort := { |
| host := "tcj.ics.se", |
| portField := tsp_MBT_SUT_LocalPort |
| }, |
| urlParameters := omit, |
| headers := omit |
| } |
| } |
| }, |
| password := "pass2ICS" |
| } |
| }, |
| tsp_MBT_SUT_LocalIP, |
| {tsp_MBT_SUT_LocalPort, tsp_MBT_SUT_LocalPort+1}, |
| i + vl_entityIdx //entity index |
| ); |
| |
| f_EPTF_SIP_Session_AddData(vl_bCtx[0], f_EPTF_SIP_getTransport(tsp_MBT_SUT_SIP_Transport),345600); |
| |
| f_EPTF_SIP_Session_addCalledUser( |
| i, |
| { |
| nameAddr := { |
| displayName := "titansim_user_7465000", |
| addrSpec := { |
| scheme := "sip", |
| userInfo := { |
| userOrTelephoneSubscriber := "titansim_user_7465000", |
| password := omit |
| }, |
| hostPort := { |
| host := "tcj.ics.se", |
| portField := tsp_MBT_SUT_RemotePort |
| }, |
| urlParameters := omit, |
| headers := omit |
| } |
| } |
| } |
| ); |
| |
| f_EPTF_SIP_IPL4asp_startListening(vl_bCtx[0], true); // Both UDP and TCP |
| } |
| } |
| |
| const integer c_MBT_Qtronic_Demo_SUT_Event_invite := 0; |
| const integer c_MBT_Qtronic_Demo_SUT_Event_cancel := 1; |
| const integer c_MBT_Qtronic_Demo_SUT_Event_bye := 2; |
| |
| const integer c_MBT_Qtronic_Demo_SUT_State_idle := 0; |
| const integer c_MBT_Qtronic_Demo_SUT_State_initiated := 1; |
| const integer c_MBT_Qtronic_Demo_SUT_State_canceling := 2; |
| const integer c_MBT_Qtronic_Demo_SUT_State_established := 3; |
| const integer c_MBT_Qtronic_Demo_SUT_State_closing := 4; |
| |
| function f_IMBT_Qtronic_Demo_SUT_getFSM() |
| runs on MBT_Qtronic_Demo_SUT_CT |
| return EPTF_LGenBase_CompactFsmTable |
| { |
| return |
| { |
| //DOT: digraph c_MBT_Qtronic_Demo_SUT_FSM { |
| name := "MBT_Qtronic_Demo_SUT_FSM", |
| stateList := {"idle", "initiated", "canceling", "established", "closing"}, |
| timerList := {}, |
| table := |
| { |
| {eventToListen := {v_SUT_myBIdx, c_MBT_Qtronic_Demo_SUT_Event_invite, entity}, |
| cellRow := { |
| //state=idle |
| { { |
| //DOT: idle -> initiated [label="i:invite\n o:INVITE"] |
| {refers(f_SIP_step_init), {}}, |
| {refers(f_SIP_step_createINVITE),{0,0}} |
| },omit, c_MBT_Qtronic_Demo_SUT_State_initiated}, |
| //state=initiated |
| { omit, omit, omit }, |
| //state=canceling |
| { omit, omit, omit }, |
| //state=established |
| { omit, omit, omit }, |
| //state=closing |
| { omit, omit, omit } |
| } |
| }, |
| {eventToListen := {v_SUT_myBIdx, c_MBT_Qtronic_Demo_SUT_Event_cancel, entity}, |
| cellRow := { |
| //state=idle |
| { omit, omit, omit }, |
| //state=initiated |
| { { |
| //DOT: initiated -> canceling [label="i:cancel\n o:CANCEL"] |
| {refers(f_SIP_step_createCANCEL),{}} |
| },omit, c_MBT_Qtronic_Demo_SUT_State_canceling}, |
| //state=canceling |
| { omit, omit, omit }, |
| //state=established |
| { omit, omit, omit }, |
| //state=closing |
| { omit, omit, omit } |
| } |
| }, |
| {eventToListen := {v_SUT_myBIdx, c_MBT_Qtronic_Demo_SUT_Event_bye, entity}, |
| cellRow := { |
| //state=idle |
| { omit, omit, omit }, |
| //state=initiated |
| { omit, omit, omit }, |
| //state=canceling |
| { omit, omit, omit }, |
| //state=established |
| { { |
| //DOT: established -> closing [label="i:bye\n o:BYE"] |
| {refers(f_SIP_step_createBYE),{}} |
| },omit, c_MBT_Qtronic_Demo_SUT_State_closing}, |
| //state=closing |
| { omit, omit, omit } |
| } |
| }, |
| {eventToListen := {v_SIP_myBIdx, 200, fsm}, |
| cellRow := { |
| //state=idle |
| { omit, omit, omit }, |
| //state=initiated |
| { { |
| //DOT: initiated -> established [label="i:200\n o:ACK"] |
| {refers(f_SIP_step_createACK),{}} |
| },omit, c_MBT_Qtronic_Demo_SUT_State_established}, |
| //state=canceling |
| { omit, omit, omit }, |
| //state=established |
| { omit, omit, omit }, |
| //state=closing |
| { { |
| //DOT: closing -> idle [label="i:200"] |
| },omit, c_MBT_Qtronic_Demo_SUT_State_idle } |
| } |
| }, |
| {eventToListen := {v_SIP_myBIdx, 486, fsm}, |
| cellRow := { |
| //state=idle |
| { omit, omit, omit }, |
| //state=initiated |
| { { |
| //DOT: initiated -> idle [label="i:486\n o:ACK"] |
| {refers(f_SIP_step_createACK),{}} |
| },omit, c_MBT_Qtronic_Demo_SUT_State_idle}, |
| //state=canceling |
| { omit, omit, omit }, |
| //state=established |
| { omit, omit, omit }, |
| //state=closing |
| { omit, omit, omit } |
| } |
| }, |
| {eventToListen := {v_SIP_myBIdx, 487, fsm}, |
| cellRow := { |
| //state=idle |
| { omit, omit, omit }, |
| //state=initiated |
| { omit, omit, omit }, |
| //state=canceling |
| { { |
| //DOT: canceling -> idle [label="i:487\n o:ACK"] |
| {refers(f_SIP_step_createACK),{}} |
| },omit, c_MBT_Qtronic_Demo_SUT_State_idle}, |
| //state=established |
| { omit, omit, omit }, |
| //state=closing |
| { omit, omit, omit } |
| } |
| }, |
| {eventToListen := {v_SIP_myBIdx, c_SIP_eventIdx_BYE, fsm}, |
| cellRow := { |
| //state=idle |
| { omit, omit, omit }, |
| //state=initiated |
| { omit, omit, omit }, |
| //state=canceling |
| { omit, omit, omit }, |
| //state=established |
| { { |
| //DOT: canceling -> idle [label="i:487\n o:ACK"] |
| {refers(f_SIP_step_handleBYE), {}}, |
| {refers(f_SIP_step_createResponse),{c_status_200OK_idx}} |
| },omit, c_MBT_Qtronic_Demo_SUT_State_idle}, |
| //state=closing |
| { omit, omit, omit } |
| } |
| }, |
| {eventToListen := {v_SIP_myBIdx, c_SIP_eventIdx_UACTransactionTimeout, fsm}, |
| cellRow := { |
| //state=idle |
| { { {refers(f_MBT_Qtronic_Demo_SUT_stepSendTimeoutIndication), {}} }, omit, omit }, |
| //state=initiated |
| { { {refers(f_MBT_Qtronic_Demo_SUT_stepSendTimeoutIndication), {}} }, omit, omit }, |
| //state=canceling |
| { { {refers(f_MBT_Qtronic_Demo_SUT_stepSendTimeoutIndication), {}} }, omit, omit }, |
| //state=established |
| { { {refers(f_MBT_Qtronic_Demo_SUT_stepSendTimeoutIndication), {}} }, omit, omit }, |
| //state=closing |
| { { {refers(f_MBT_Qtronic_Demo_SUT_stepSendTimeoutIndication), {}} }, omit, omit } |
| } |
| }, |
| {eventToListen := {v_SIP_myBIdx, c_SIP_eventIdx_UASTransactionTimeout, fsm}, |
| cellRow := { |
| //state=idle |
| { { {refers(f_MBT_Qtronic_Demo_SUT_stepSendTimeoutIndication), {}} }, omit, omit }, |
| //state=initiated |
| { { {refers(f_MBT_Qtronic_Demo_SUT_stepSendTimeoutIndication), {}} }, omit, omit }, |
| //state=canceling |
| { { {refers(f_MBT_Qtronic_Demo_SUT_stepSendTimeoutIndication), {}} }, omit, omit }, |
| //state=established |
| { { {refers(f_MBT_Qtronic_Demo_SUT_stepSendTimeoutIndication), {}} }, omit, omit }, |
| //state=closing |
| { { {refers(f_MBT_Qtronic_Demo_SUT_stepSendTimeoutIndication), {}} }, omit, omit } |
| } |
| }//row |
| }//table |
| }//fsm |
| //DOT: } |
| } |
| |
| } |