/trunk/XSDAUX.ttcn |
---|
File deleted |
/trunk/ttcn/LibSip_Interface.ttcn |
---|
1,188 → 1,208 |
/* |
* @author STF 346, STF366, STF368, STF369, STF450 |
/** |
* @author STF 346, STF366, STF368, STF369, STF450, STF471 |
* @version $Id$ |
* @desc This module provides the types used by the test component |
* @desc This module provides the types used by the test component |
* for SIP-IMS tests. Module become from STF306 and STF334-336 |
* This module is part of LibSipV2. |
* This module is part of LibSipV3. |
*/ |
module LibSip_Interface { |
// LibCommon |
import from LibCommon_Sync all; |
import from LibCommon_AbstractData all; |
import from LibCommon_BasicTypesAndValues all; |
import from LibCommon_DataStrings all; |
// LibSip |
import from LibSip_SIPTypesAndValues all; |
import from LibSip_SDPTypes all; |
import from LibSip_XMLTypes all; |
module LibSip_Interface |
{ |
//LibCommon |
import from LibCommon_Sync all; |
import from LibCommon_AbstractData all; |
import from LibCommon_BasicTypesAndValues all; |
import from LibCommon_DataStrings all; |
//LibSip |
import from LibSip_SIPTypesAndValues all; |
import from LibSip_SDPTypes all; |
import from LibSip_XMLTypes all; |
import from LibSip_PIXITS all; |
import from LibSip_PIXITS all; |
group AdressTypes |
{ |
type record address4SIP |
{ |
//HostPort |
charstring host optional, // hostname, IPv4 or IPv6 |
integer portField optional // represented as an integer |
} with { encode "SIPCodec" } |
group AdressTypes { |
type record Address4SIP { |
// HostPort |
charstring host optional, |
// hostname, IPv4 or IPv6 |
integer portField |
optional // represented as an integer |
} with { |
encode "LibSip V3"; |
} |
type address4SIP address; |
type Address4SIP address; |
}// end group AdressTypes |
type port SipPort message { |
inout Request, |
REGISTER_Request, |
INVITE_Request, |
OPTIONS_Request, |
BYE_Request, |
CANCEL_Request, |
ACK_Request, |
PRACK_Request, |
NOTIFY_Request, |
SUBSCRIBE_Request, |
PUBLISH_Request, |
UPDATE_Request, |
REFER_Request, |
MESSAGE_Request, |
INFO_Request, |
Response, |
Raw } with { extension "address" }; |
signature s_SIP_conversation (in charstring text, out boolean answer); |
signature s_SIP_ringing (in charstring text, out boolean answer); |
signature s_SIP_announcementA (in charstring text, out boolean answer); |
signature s_SIP_announcementB (in charstring text, out boolean answer); |
signature s_SIP_announcement (in charstring text, out boolean answer); |
signature s_SIP_voiceMessage (in charstring text, out boolean answer); |
signature s_SIP_mediastopped (in charstring text, out boolean answer); |
type port operatorPort procedure {inout s_SIP_conversation; inout s_SIP_ringing; inout s_SIP_announcementA; inout s_SIP_announcementB; inout s_SIP_announcement; inout s_SIP_voiceMessage; inout s_SIP_mediastopped}; |
// Solution for building error problem. (Important for validation) |
//type component ImsComponent extends SipComponent need to be located in LibIms_Interface and not in LibSip_Interface module |
//With this solution TAU compiler error. |
// type component ImsComponent extends SipComponent |
// { |
// // general variables |
// var ImsInterfaceProfile vc_interfaceprofile |
// } // end ImsComponent |
} // end group AdressTypes |
type component SipComponent |
{ |
//port |
port SipPort SIPP; |
// used for communication with the operator |
port operatorPort opPort; |
type port SipPort message { |
inout Request, REGISTER_Request, INVITE_Request, OPTIONS_Request, BYE_Request, CANCEL_Request, ACK_Request, PRACK_Request, NOTIFY_Request, SUBSCRIBE_Request, PUBLISH_Request, UPDATE_Request, REFER_Request, MESSAGE_Request, INFO_Request, Response, Raw; |
} |
with { |
extension "address"; |
} |
// current address to send TCP/UDP messages |
var SipUserProfile vc_userprofile; // PIXIT userinformation |
var address vc_sent_label;//removed because this value is predefined and used to open socket := {host := PX_SIP_SUT_IPADDR, portField := PX_SIP_SUT_PORT}; |
signature s_SIP_conversation( |
in charstring p_text, |
out boolean p_answer |
) ; |
signature s_SIP_ringing( |
in charstring p_text, |
out boolean p_answer |
) ; |
signature s_SIP_announcementA( |
in charstring p_text, |
out boolean p_answer |
) ; |
signature s_SIP_announcementB( |
in charstring p_text, |
out boolean p_answer |
) ; |
signature s_SIP_announcement( |
in charstring p_text, |
out boolean p_answer |
) ; |
signature s_SIP_voiceMessage( |
in charstring p_text, |
out boolean p_answer |
) ; |
signature s_SIP_mediastopped( |
in charstring p_text, |
out boolean p_answer |
) ; |
type port OperatorPort procedure { |
inout s_SIP_conversation; |
inout s_SIP_ringing; |
inout s_SIP_announcementA; |
inout s_SIP_announcementB; |
inout s_SIP_announcement; |
inout s_SIP_voiceMessage; |
inout s_SIP_mediastopped; |
} |
// last incoming message |
var Response vc_response; // last incoming response message |
var boolean vc_boo_response := false; // to check if response received or not |
var Request vc_request; // last incoming request message |
var boolean vc_boo_request := false; // to check if request received or not |
var Request vc_requestFor407; // last INVITE request to be authorized if 407/401 received from Proxy |
// Solution for building error problem. (Important for validation) |
// type component ImsComponent extends SipComponent need to be located in LibIms_Interface and not in LibSip_Interface module |
// With this solution TAU compiler error. |
// type component ImsComponent extends SipComponent |
// { |
// // general variables |
// var ImsInterfaceProfile vc_interfaceprofile |
// } // end ImsComponent |
type component SipComponent extends SelfSyncComp { |
// port |
port SipPort SIPP; |
// used for communication with the operator |
port OperatorPort opPort; |
var SipUrl vc_requestUri := c_empty_RequestUri; |
var SipUrl vc_requestUri2 := c_empty_RequestUri;//MRO |
var charstring vc_branch := ""; |
var charstring vc_branch_ICSCF := ""; |
var charstring vc_branch_SCSCF := ""; |
// current address to send TCP/UDP messages |
var SipUserProfile vc_userprofile; // PIXIT userinformation |
var address vc_sent_label; // removed because this value is predefined and used to open socket := {host := PX_SIP_SUT_IPADDR, portField := PX_SIP_SUT_PORT}; |
// last incoming message |
var Response vc_response; // last incoming response message |
var boolean vc_boo_response := false; // to check if response received or not |
var Request vc_request; // last incoming request message |
var boolean vc_boo_request := false; // to check if request received or not |
var Request vc_requestFor407; // last INVITE request to be authorized if 407/401 received from Proxy |
var SipUrl vc_requestUri := c_empty_RequestUri; |
var SipUrl vc_requestUri2 := c_empty_RequestUri; // MRO |
var charstring vc_branch := ""; |
var charstring vc_branch_ICSCF := ""; |
var charstring vc_branch_SCSCF := ""; |
// SIP message header fields (for building next message) |
var CallId vc_callId := c_empty_CallId; |
var CallId vc_callIdReg := c_empty_CallId; |
var From vc_from := c_empty_From; |
var To vc_to := c_empty_To; |
var To vc_cancel_To := c_empty_To; // used for next CANCEL |
var Via vc_via := c_empty_Via; |
var Via vc_via_REG := c_empty_Via; // via used in last REGISTER |
var ContentType vc_contentType:= c_empty_ContentType;//MRO |
var template RecordRoute vc_recordRoute; // value of RecordRoute header |
var boolean vc_boo_recordRoute := false; // boolean indicates valid recordRoute |
var template Route vc_route; // value of Route header |
var template Route vc_route_REG; // value of Route header from registration ServiceRoute header for initial Requests |
var boolean vc_boo_route := false; // boolean indicates valid Route |
// SIP message header fields (for building next message) |
var template(omit) CallId vc_callId := c_empty_CallId; |
var template(omit) CallId vc_callIdReg := c_empty_CallId; |
var template(omit) CallId vc_callIdSub := c_empty_CallId; |
var From vc_from := c_empty_From; |
var To vc_to := c_empty_To; |
var To vc_cancel_To := c_empty_To; // used for next CANCEL |
var Via vc_via := c_empty_Via; |
var Via vc_via_REG := c_empty_Via; // via used in last REGISTER |
var ContentType vc_contentType := c_empty_ContentType; // MRO |
var template(omit) RecordRoute vc_recordRoute; // value of RecordRoute header |
var boolean vc_boo_recordRoute := false; // boolean indicates valid recordRoute |
var template(omit) Route vc_route; // value of Route header |
var template(omit) Route vc_route_REG; // value of Route header from registration ServiceRoute header for initial Requests |
var |
UrnUriComponents |
vc_reqUrnUri := { |
namespaceId := "", |
namespaceSpecificString := "" |
}; |
var boolean vc_boo_route := false; // boolean indicates valid Route |
var template(omit) Contact vc_contact; // value of Contact header |
var CSeq vc_cSeq := c_empty_cSeq; // value of CSeq header |
var template(value) |
RAck |
vc_rAck := { |
fieldName := RACK_E, |
responseNum := 1, |
seqNumber := 1, |
method := "INVITE" |
}; // value of RAck header |
var Contact vc_contact; // value of Contact header |
var CSeq vc_cSeq := c_empty_cSeq; // value of CSeq header |
var RAck vc_rAck := { fieldName := RACK_E, responseNum := 1, seqNumber := 1, method := "INVITE"}; // value of RAck header |
var HostPort vc_reqHostPort := {host:=PX_SIP_SUT_IPADDR, portField:=PX_SIP_SUT_PORT}; // address to send request |
var UrnUriComponents vc_reqUrnUri := {namespaceId:="", namespaceSpecificString:=""}; |
var Privacy vc_privacy; |
var HistoryInfo_List vc_historyInfoList := {}; // value of history list according to RFC4244 |
var SipUrl vc_confURI; // conference URI according to TS124147 ch. 5.3.1.3.2 |
var SDP_Message vc_sdp_remote; // incoming SDP offers |
var SDP_Message vc_sdp_local; // SDP values to be sent |
var XmlBody vc_xml_remote; // incoming XML value |
var template XmlBody vc_xml_local; //SDP values to be sent |
var CSeq vc_iut_CSeq := c_empty_cSeq; // value of last CSeq header used by the IUT in request |
// To/From header-fields to be used if the callee will release the session |
var To vc_callee_To := c_empty_To; |
var From vc_callee_From := c_empty_From; |
// To/From header-fields to be used if the caller will release the session |
var To vc_caller_To := c_empty_To; |
var From vc_caller_From := c_empty_From; |
var Authorization vc_authorization; |
// variables for storing default references |
var default vc_default; |
var default vc_def_catchSyncStop; |
// general timers |
timer tc_T1 := PX_SIP_T1; |
timer tc_Tf := PX_SIP_TF; |
timer tc_wait := PX_SIP_TWAIT; |
timer tc_ack := PX_SIP_TACK; |
timer tc_resp := PX_SIP_TRESP; |
timer tc_noAct := PX_SIP_TNOACT; // time for SUT to get idle state |
// timer TRept; |
// timer TSync := PX_SIP_TSYNC; |
timer tc_guard := PX_SIP_TGUARD;//MRO |
timer tc_tDelay := 32.0; |
// address to send request |
var HostPort vc_reqHostPort := {//STF471 removed PIXIT assignment, should be performed in specific ATS |
host := "127.0.0.1", // former PX_SIP_SUT_IPADDR value |
portField := 5060 //former PX_SIP_SUT_PORT value |
}; |
var template(omit) Privacy vc_privacy; |
var HistoryInfo_List vc_historyInfoList := {}; // value of history list according to RFC4244 |
var SipUrl vc_confURI; // conference URI according to TS124147 ch. 5.3.1.3.2 |
var SDP_Message vc_sdp_remote; // incoming SDP offers |
var SDP_Message vc_sdp_local; // SDP values to be sent |
var XmlBody vc_xml_remote; // incoming XML value |
var template XmlBody vc_xml_local; // SDP values to be sent |
var template(omit) CSeq vc_iut_CSeq := c_empty_cSeq; // value of last CSeq header used by the IUT in request |
// To/From header-fields to be used if the callee will release the session |
var To vc_callee_To := c_empty_To; |
var From vc_callee_From := c_empty_From; |
// To/From header-fields to be used if the caller will release the session |
var To vc_caller_To := c_empty_To; |
var From vc_caller_From := c_empty_From; |
var Authorization vc_authorization; |
var float vc_tcRESP := PX_SIP_TRESP; // standard value for TRESP (may be modified in particular tests) |
// indicators set/used parameter status or state handling in default |
var boolean vc_sdp_remote_is_valid := false; // true if there is a value in v_SDP_remote |
var boolean vc_history_is_valid := false; // true if there is a HistoryList in response message |
var boolean vc_send_SDP := false; // send SDP in the next outgoing message |
var boolean vc_ignore_bye := false; // enable ignore of repeated bye in default |
var boolean vc_ignore_invite := false; // enable ignore invite in default |
var boolean vc_ignore_subscribe := false; // enable ignore subscribe in default |
var boolean vc_ignore181 := false; // enable ignore of 181 in default |
var boolean vc_ignore484 := false; // enable ignore of 484 in default |
var boolean vc_ignore4xx := false; // enable ignore of 4xx in default |
var boolean vc_ignore200OKinv := false; // enable ignore of 200OKinv in default |
var boolean vc_ignore_notify := false; // enable ignore of notify in default |
var boolean vc_supported_100rel := false; // true if the received invite contains 100rel |
var boolean vc_supported_precondition:= false; // true if the received invite contains precondition |
var boolean vc_MESSAGEreceived := false; // true if MESSAGE received during altstep |
var boolean vc_first_recv := false; // true after receipt of first incomming SIP message |
var boolean vc_firstREGISTER_sent := false; // true after sent of first REGISTER message |
var boolean vc_DeregDone := false; // true after first DeREGISTRATION trail (avoid loop) |
var boolean vc_interface_isc := false; // true if isc interface is in use |
var boolean v_white_space := false;//MRO |
// variables for storing default references |
var default vc_default; |
var default vc_def_catchSyncStop; |
// ETS address |
var address v_ets_label := { host := PX_SIP_TS1_IPADDR, portField := PX_SIP_TS1_PORT}; |
// general timers |
timer tc_T1 := 0.5;//STF471 default value, should be set in specific ATS, former PX_SIP_T1 |
timer tc_Tf := 32.0;//STF471 default value, should be set in specific ATS, former PX_SIP_TF |
timer tc_wait := PX_SIP_TWAIT; |
timer tc_ack := PX_SIP_TACK; |
timer tc_resp := PX_SIP_TRESP; |
timer tc_noAct := PX_SIP_TNOACT; // time for SUT to get idle state |
// timer TRept; |
// timer TSync := 10.0; //STF471 default value, should be set in specific ATS, former PX_SIP_TSYNC |
timer tc_guard := 120.0; //STF471 default value, should be set in specific ATS, former PX_SIP_TGUARD |
timer tc_tDelay := 32.0; |
// parts needed for Client/SelfSyncComp type compatibility |
var StringStack v_stateStack := c_initStringStack; |
port SyncPort syncSendPort; |
port SyncPort syncPort; |
timer tc_sync := PX_TSYNC_TIME_LIMIT; |
// // used for communication with the operator |
// port operatorPort_SIP opPort; |
var float vc_tcRESP := PX_SIP_TRESP; // standard value for TRESP (may be modified in particular tests) |
// indicators set/used parameter status or state handling in default |
var boolean vc_sdp_remote_is_valid := false; // true if there is a value in v_SDP_remote |
var boolean vc_history_is_valid := false; // true if there is a HistoryList in response message |
var boolean vc_send_SDP := false; // send SDP in the next outgoing message |
var boolean vc_ignore_bye := false; // enable ignore of repeated bye in default |
var boolean vc_ignore_invite := false; // enable ignore invite in default |
var boolean vc_ignore_subscribe := false; // enable ignore subscribe in default |
var boolean vc_ignore181 := false; // enable ignore of 181 in default |
var boolean vc_ignore484 := false; // enable ignore of 484 in default |
var boolean vc_ignore4xx := false; // enable ignore of 4xx in default |
var boolean vc_ignore200OKinv := false; // enable ignore of 200OKinv in default |
var boolean vc_ignore_notify := false; // enable ignore of notify in default |
var boolean vc_supported_100rel := false; // true if the received invite contains 100rel |
var boolean vc_supported_precondition := false; // true if the received invite contains precondition |
var boolean vc_MESSAGEreceived := false; // true if MESSAGE received during altstep |
var boolean vc_first_recv := false; // true after receipt of first incomming SIP message |
var boolean vc_firstREGISTER_sent := false; // true after sent of first REGISTER message |
var boolean vc_DeregDone := false; // true after first DeREGISTRATION trail (avoid loop) |
var boolean vc_interface_isc := false; // true if isc interface is in use |
var boolean vc_white_space := false; // MRO |
var boolean vc_subscribed := false; |
// ETS address |
var address vc_ets_label; //This value should be initialized in specific ATS |
} // end SipComponent |
// // used for communication with the operator |
// port OperatorPort_SIP opPort; |
} // end SipComponent |
} // end module LibSip_Interface |
/trunk/ttcn/LibSip_Library.ttcn |
---|
0,0 → 1,23 |
/** |
* @author STF471 |
* @version $Id: LibSip_Steps.ttcn 614 2014-07-07 10:01:14Z tepelmann $ |
* @desc This module provides all modules of the LibSip as public imports. |
* Importing this module will automatically import all here listed modules, |
* no other LibSip_xxx module import needed in this case. |
* This module is part of LibSipV3. |
*/ |
module LibSip_Library { |
public import from LibSip_Interface all; |
public import from LibSip_MessageBodyTypes all; |
public import from LibSip_PIXITS all; |
public import from LibSip_SDPTypes all; |
public import from LibSip_SimpleMsgSummaryTypes all; |
public import from LibSip_SMSFunctions all; |
public import from LibSip_SMSTemplates all; |
public import from LibSip_SMSTypesAndValues all; |
public import from LibSip_Steps all; |
public import from LibSip_Templates all; |
public import from LibSip_XMLTypes all; |
} |
/trunk/ttcn/LibSip_MessageBodyTypes.ttcn |
---|
1,52 → 1,60 |
/******************************************************************************/ |
// $Date: 2013-04-08 08:18:17 +0000 (Mo, 08 Apr 2013) $ |
// $Author: seka $ |
// $Rev: 8470 $ |
/******************************************************************************/ |
/* |
* This module is part of LibSipV2. |
*/ |
module LibSip_MessageBodyTypes |
{ |
import from LibSip_SDPTypes all; |
import from LibSip_SimpleMsgSummaryTypes all; |
import from LibSip_XMLTypes all; |
// type charstring XmlBody; |
group MIMETypes { |
type union MIME_Encapsulated_Parts { |
SDP_Message sdpMessageBody, |
XmlBody xmlBody // if there is XML body |
// XMLMessage xmlMessage // if there is XML message (with header and body) |
}; |
type record MIME_Encapsulated_Part { |
charstring content_type, |
charstring content_disposition optional, |
MIME_Encapsulated_Parts mime_encapsulated_part |
}; |
type record MIME_Message { |
charstring boundary, // len: |
MimeEncapsulatedList mimeEncapsulatedList |
}; |
type record of MIME_Encapsulated_Part MimeEncapsulatedList; |
} // group MIMETypes |
type union MessageBody { |
SDP_Message sdpMessageBody, // if there is only SDP part |
// XMLMessage xmlMessage, // if there is XML message (with header and body) |
XmlBody xmlBody, // if there is XML body |
MIME_Message mimeMessageBody, // if there is SDP and encapsulated ISUP part |
charstring sipfrag, // if content-Type is message/sipfrag (cp. NOTIFY, cp TS124147 A.4.3.1.2) |
charstring textplain, // if content type is text/plain (for testing long messages) |
SimpleMsgSummary simpleMsgSummary, // RFC 3842 |
octetstring smsMessage // encoded SMS message 3GPP 23.040, 24.011 |
}; |
} |
/****************************************************************************** |
* @author STF 346, STF366, STF368, STF369, STF450, STF471 |
* @version $Id: LibSip_MessageBodyTypes.ttcn 622 2014-07-10 14:50:54Z nikolajev $ |
* @desc This module provides the types used for alternative SIP message |
* body variants and combinations. |
* This module is part of LibSipV3. |
*/ |
module LibSip_MessageBodyTypes { |
import from LibSip_SDPTypes all; |
import from LibSip_SimpleMsgSummaryTypes all; |
import from LibSip_XMLTypes all; |
/* |
* Simple body types that can be used instead of the more detailed XML and SDP |
* without codec support |
* */ |
//type charstring XmlBody; |
//type charstring SDP_Message; |
group MIMETypes { |
type union MIME_Encapsulated_Parts { |
SDP_Message sdpMessageBody, |
XmlBody xmlBody // if there is XML body |
} |
type record MIME_Encapsulated_Part { |
charstring content_type, |
charstring content_disposition optional, |
MIME_Encapsulated_Parts mime_encapsulated_part |
} |
type record MIME_Message { |
charstring boundary, |
// len: |
MimeEncapsulatedList mimeEncapsulatedList |
} |
type record of MIME_Encapsulated_Part MimeEncapsulatedList; |
} // group MIMETypes |
type union MessageBody { |
SDP_Message sdpMessageBody, |
// if there is only SDP part |
// XMLMessage xmlMessage, // if there is XML message (with header and body) |
XmlBody xmlBody, |
// if there is XML body |
MIME_Message mimeMessageBody, |
// if there is SDP and encapsulated ISUP part |
charstring sipfrag, |
// if content-Type is message/sipfrag (cp. NOTIFY, cp TS124147 A.4.3.1.2) |
charstring textplain, |
// if content type is text/plain (for testing long messages) |
SimpleMsgSummary simpleMsgSummary, |
// RFC 3842 |
octetstring smsMessage // encoded SMS message 3GPP 23.040, 24.011 |
} |
} |
/trunk/ttcn/LibSip_PIXITS.ttcn |
---|
1,355 → 1,137 |
/* |
* @author STF 346, STF366, STF368, STF369, STF450 |
* @version $Id$ |
* @desc This module provides the types used by the test component |
* for SIP-IMS tests. Module become from STF306 and STF334-336 |
* This module is part of LibSipV2. |
* NOTE: PIXITS in folowing groups can be ignored if this information |
* is provided in other modules of the ATS that uses this SIP library |
* - Ports_and_addresses_of_the_SUT |
* - PortsAndAddressesOfTheTS1 |
* - PortsAndAddressesOfTheTS2 |
* - PortsAndAddressesOfTheTS3 |
* - ParametersForHTTP_Authentication |
/** |
* @author STF 346, STF366, STF368, STF369, STF450, STF471 |
* @version $Id$ |
* @desc This module provides module parameters used within the SIP |
* protocol for timers, SDP formats etc. |
* This module is part of LibSipV3. |
*/ |
module LibSip_PIXITS { |
// LibCommon |
import from LibCommon_BasicTypesAndValues all; |
import from LibCommon_DataStrings all; |
module LibSip_PIXITS //MRO |
{ |
//LibCommon |
import from LibCommon_BasicTypesAndValues all; |
import from LibCommon_DataStrings all; |
// ____________________________ PIXIT-S_______________________________ |
group SIP_PIXITparameters { |
group SDPParameter { |
// _____________________________ PIXIT-S_______________________________ |
group SIP_PIXITparameters{ |
group SDPParameter { |
/** |
* @desc charstring for SDP user name |
*/ |
modulepar charstring PX_SIP_SDP_USER_NAME := "voicesession"; |
/** @desc charstring for SDP dynamic port |
*/ |
modulepar charstring PX_SIP_SDP_dyn := "0"; |
/** |
* @desc charstring for SDP session identifier |
*/ |
modulepar charstring PX_SIP_SDP_SESSION_ID := "30000"; |
/** @desc charstring for SDP bandwidth modifier |
*/ |
modulepar charstring PX_SIP_SDP_b_modifier := "AS"; |
/** |
* @desc charstring for SDP dynamic port |
*/ |
modulepar charstring PX_SIP_SDP_DYN := "0"; |
/** @desc integer for SDP bandwidth value |
*/ |
modulepar integer PX_SIP_SDP_b_bandwidth := 64; |
/** |
* @desc charstring for SDP bandwidth modifier |
*/ |
modulepar charstring PX_SIP_SDP_B_MODIFIER := "AS"; |
/** @desc charstring for SDP media attribute encoding supported by the IUT |
*/ |
modulepar charstring PX_SIP_SDP_encoding := "PCMU/8000"; |
/** |
* @desc integer for SDP bandwidth value |
*/ |
modulepar integer PX_SIP_SDP_B_BANDWIDTH := 64; |
/** @desc charstring for SDP media attribute encoding unavailable by the IUT |
*/ |
modulepar charstring PX_SIP_SDP_encoding_unavail := "GSM/8000"; // f_Sip_TC2105_IS___xx__U18 |
/** |
* @desc charstring for SDP media attribute encoding supported by the IUT |
*/ |
modulepar charstring PX_SIP_SDP_ENCODING := "PCMU"; |
/** @desc charstring for SDP media attribute encoding unsupported by the IUT |
*/ |
modulepar charstring PX_SIP_SDP_encoding_unsup := "GSM/8000"; // f_Sip_TC2105_IS___xx__U18 |
/** |
* @desc charstring for SDP media attribute encoding clockrate supported by the IUT |
*/ |
modulepar charstring PX_SIP_SDP_CLOCKRATE := "8000"; |
/** @desc charstring for SDP media T.38 transport (used in TC2101_IS___AU__09) |
*/ |
modulepar charstring PX_SIP_SDP_transport := "udptl"; |
} //group SDP Parameter |
group ISUPinterworkingParameters{ |
/** @desc charstring for Used CPC language |
*/ |
modulepar charstring PX_SIP_ISUP_LANGUAGE := "English"; |
/** @desc charstring for Used CPC language |
*/ |
modulepar charstring PX_SIP_ISUP_CPC_VALUE := "prison"; |
} // goup PSTNParameters |
} // group SDP Parameter |
group XMLCOnfiguration{ |
/** |
* @desc boolean for MessageBody length calculation based on encvalue operation result |
*/ |
modulepar boolean PX_MB_LENGTH_FROM_ENCVAL := true; |
/** |
* @desc boolean for MessageBody length calculation to be performed by external function |
*/ |
modulepar boolean PX_USE_FX_FOR_XML_LENGTH := false; |
} |
group SupportedOptions{ |
/** @desc boolean for True if 100rel mechanism is supported in SIP |
*/ |
modulepar boolean PX_SIP_100rel := false; |
group SupportedOptions { |
/** @desc boolean for True if precondition mechanism is supported in SIP |
*/ |
modulepar boolean PX_SIP_precondition := false; |
/** |
* @desc charstring for Used Transport in upper case "UDP"/"TCP" |
*/ |
modulepar charstring PX_SIP_TRANSPORT := "UDP"; |
/** @desc boolean for True if UDP Transport is used by the IUT to run campaign |
*/ |
modulepar boolean PX_SIP_UDP := true; |
/** @desc charstring for Used Transport in upper case "UDP"/"TCP" |
*/ |
modulepar charstring PX_SIP_TRANSPORT := "UDP"; |
}// group SupportedOptions{ |
} // group SupportedOptions{ |
// PIXITS in group Ports_and_addresses_of_the_SUT can be ignored if this information is provided in other modules of the ATS that uses this SIP library |
group Ports_and_addresses_of_the_SUT{ |
group RegistrationParameters { |
/** @desc integer for SUT port number to exchange SIP messages |
*/ |
modulepar integer PX_SIP_SUT_PORT := 5060; |
/** |
* @desc boolean for the SIP user if it have to register itself before executing a test case |
*/ |
modulepar boolean PX_SIP_REGISTRATION := false; |
/** @desc charstring for SUT IP address to exchange SIP messages |
*/ |
modulepar charstring PX_SIP_SUT_IPADDR := "172.27.16.115"; |
/** |
* @desc charstring for PX_AUTH_ALGORITHM security algorithm Possible values: MD5 or AKAv1-MD5 |
*/ |
modulepar charstring PX_AUTH_ALGORITHM := "AKAv1-MD5"; |
/** @desc charstring for SUT domain |
*/ |
modulepar charstring PX_SIP_SUT_HOME_DOMAIN := "172.27.16.115"; |
/** @desc charstring for unknown SUT domain |
*/ |
modulepar charstring PX_SIP_SUT_HOME_DOMAIN_UNKNOWN := "172.88.88.88"; |
} // group Registration parameters |
group SwitchToEnableAuthentication { |
/** |
* @desc boolean for option controlling if authentication is enabled/disabled for REGISTER messages |
*/ |
modulepar boolean PX_SIP_REGISTER_AUTHENTICATION_ENABLED := true; |
} |
/** |
* @desc boolean for option controlling if authentication is enabled/disabled for INVITE messages |
*/ |
modulepar boolean PX_SIP_INVITE_AUTHENTICATION_ENABLED := false; |
// PIXITS in group PortsAndAddressesOfTheTS1 can be ignored if this information is provided in other modules of the ATS that uses this SIP library |
group PortsAndAddressesOfTheTS1 { |
// Ports and addresses of the TS1 (tester), first access |
/** @desc integer for port number used by the TS1 to exchange SIP messages |
*/ |
modulepar integer PX_SIP_TS1_PORT := 5060; |
/** @desc charstring for IP address used by the TS1 to exchange SIP messages |
*/ |
modulepar charstring PX_SIP_TS1_IPADDR := "172.27.1.218"; |
} // group SwitchToEnableAuthentication |
/** @desc charstring for identity of the tester local domain |
*/ |
modulepar charstring PX_SIP_TS1_LOCAL_DOMAIN := "172.27.1.218"; |
group SIP_Timers { |
/** |
* @desc float for TWait default value for waiting an operator action |
*/ |
modulepar float PX_SIP_TWAIT := 30.0; |
/** @desc charstring for identity of the tester local user |
*/ |
modulepar charstring PX_SIP_TS1_LOCAL_USER := "2910"; |
/** |
* @desc float for TAck default value for waiting an acknowledgement |
*/ |
modulepar float PX_SIP_TACK := 8.0; |
/** @desc charstring for identity of the user with active call diversion service |
*/ |
modulepar charstring PX_SIP_TS1_LOCAL_USER_DIV := "2907"; |
/** |
* @desc float for TResp default value for waiting for a response from the IUT |
*/ |
modulepar float PX_SIP_TRESP := 15.0; |
/** @desc charstring for identity of the tester local user (format "+"cc+ndc+sn) |
*/ |
modulepar charstring PX_SIP_TS1_LOCAL_USER_FULL := "+ 33492941111"; |
/** |
* @desc float for TNoAct default value for waiting no message from the IUT Value given for PX_TNOACT should be less than value of SHORT_REGISTRATION constant (which is currently "3" (seconds)) |
*/ |
modulepar float PX_SIP_TNOACT := 1.0; |
/** @desc integer for port number used by the TS to exchange media streams |
*/ |
modulepar integer PX_SIP_TS1_BEARER_PORT := 52000; |
} // group SIP_Timers |
/** @desc charstring for port number used by the TS to exchange media streams |
*/ |
modulepar integer PX_SIP_TS1_BEARER_PORT2 := 62000; |
group MimePart { |
/** |
* @desc charstring for delimiter value used in mime multipart message to separate message body parts |
*/ |
modulepar charstring PX_SIP_MIME_BOUNDARY := "boundary1"; |
/** @desc charstring for IP address used by the TS to exchange media streams |
*/ |
modulepar charstring PX_SIP_TS1_BEARER_IPADDR := "172.27.1.218"; |
}// group PortsAndAddressesOfTheTS |
} // group MimePart |
// PIXITS in group PortsAndAddressesOfTheTS2 can be ignored if this information is provided in other modules of the ATS that uses this SIP library |
group PortsAndAddressesOfTheTS2 { |
// Ports and addresses of the TS2 (tester), second access |
/** @desc integer for port number used by the TS2 to exchange SIP messages |
*/ |
modulepar integer PX_SIP_TS2_PORT := 5060; |
/** @desc charstring for IP address used by the TS2 to exchange SIP messages |
*/ |
modulepar charstring PX_SIP_TS2_IPADDR := "172.27.1.219"; |
/** @desc charstring for identity of the tester local domain |
*/ |
modulepar charstring PX_SIP_TS2_LOCAL_DOMAIN := "172.27.1.219"; |
/** @desc charstring for identity of the tester local user |
*/ |
modulepar charstring PX_SIP_TS2_LOCAL_USER := "2911"; |
/** @desc charstring for identity of the user with active call diversion service |
*/ |
modulepar charstring PX_SIP_TS2_LOCAL_USER_DIV := "2011"; |
/** @desc charstring for identity of the tester local user (format "+"cc+ndc+sn) |
*/ |
modulepar charstring PX_SIP_TS2_LOCAL_USER_FULL := "+ 33 4 92941111"; |
/** @desc integer for port number used by the TS to exchange media streams |
*/ |
modulepar integer PX_SIP_TS2_BEARER_PORT := 53000; |
/** @desc integer for port number used by the TS to exchange media streams |
*/ |
modulepar integer PX_SIP_TS2_BEARER_PORT2 := 63000; |
/** @desc charstring for IP address used by the TS to exchange media streams |
*/ |
modulepar charstring PX_SIP_TS2_BEARER_IPADDR := "172.27.1.218"; |
}//group PortsAndAddressesOfTheTS2 |
// PIXITS in group PortsAndAddressesOfTheTS3 can be ignored if this information is provided in other modules of the ATS that uses this SIP library |
group PortsAndAddressesOfTheTS3 { |
// Ports and addresses of the TS3 (tester), second access |
/** @desc integer for Port number used by the TS3 to exchange SIP messages |
*/ |
modulepar integer PX_SIP_TS3_PORT := 5060; |
/** @desc charstring for IP address used by the TS3 to exchange SIP messages |
*/ |
modulepar charstring PX_SIP_TS3_IPADDR := "172.27.1.220"; |
/** @desc charstring for identity of the tester local domain |
*/ |
modulepar charstring PX_SIP_TS3_LOCAL_DOMAIN := "172.27.1.220"; |
/** @desc charstring for identity of the tester local user |
*/ |
modulepar charstring PX_SIP_TS3_LOCAL_USER := "2012"; |
} //group PortsAndAddressesOfTheTS3 |
group RegistrationParameters { |
/** @desc boolean for the SIP user if it have to register itself before executing a test case |
*/ |
modulepar boolean PX_SIP_REGISTRATION := false; |
/** @desc integer for the minimun SIP user registration expires-value |
*/ |
modulepar integer PX_SIP_REGISTRATION_exp_min := 3600; |
/** @desc charstring for REGISTRAR domain |
*/ |
modulepar charstring PX_SIP_SUT_REGISTRAR_DOMAIN := "172.27.16.115"; |
/** @desc charstring for PX_AUTH_ALGORITHM security algorithm |
* Possible values: MD5 or AKAv1-MD5 |
*/ |
modulepar charstring PX_AUTH_ALGORITHM := "AKAv1-MD5"; |
}// group Registration parameters |
group ReleaseCause{ |
/** @desc integer for Release cause to be used in BYE and in Failure messages |
*/ |
modulepar integer PX_SIP_BYE_CAUSE := 16; |
}//group ReleaseCause |
group RTPStreamControlAndCheck{ |
/** @desc boolean for True, if conversation check is implemented. |
*/ |
modulepar boolean PX_SIP_CheckConversation := false; |
/** @desc boolean for True, if DTMF check is implemented. |
*/ |
modulepar boolean PX_SIP_CheckDTMF := false; |
/** @desc boolean for True, if Announcement sending is implemented. |
*/ |
modulepar boolean PX_SIP_SendAnnouncement := false; |
/** @desc boolean for True, if ringing check is implemented. |
*/ |
modulepar boolean PX_SIP_CheckRinging := false; |
}//group RTPStreamControlAndCheck |
group SwitchToEnableAuthentication { |
/** @desc boolean for option controlling if authentication is enabled/disabled for REGISTER messages |
*/ |
modulepar boolean PX_SIP_REGISTER_AUTHENTICATION_ENABLED := true; |
/** @desc boolean for option controlling if authentication is enabled/disabled for INVITE messages |
*/ |
modulepar boolean PX_SIP_INVITE_AUTHENTICATION_ENABLED := false; |
}//group SwitchToEnableAuthentication |
group NofifyAndSubscribe { |
modulepar{ |
/** @desc boolean for option controlling if notification is enabled/disabled after registration procedure |
*/ |
boolean PX_SIP_NOTIFICATION := true; |
/** @desc boolean for option controlling if subscription is enabled/disabled after registration procedure |
*/ |
boolean PX_SIP_SUBSCRIPTION := true; |
} |
} |
// PIXITS in group ParametersForHTTP_Authentication can be ignored if this information is provided in other modules of the ATS that uses this SIP library |
group ParametersForHTTP_Authentication { |
/** @desc charstring for RFC 2617 clause 3-2-1 qop options: |
* Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The |
* value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. |
*/ |
modulepar charstring PX_SIP_SUT_UE1_QOP := "auth"; |
/** @desc charstring for RFC 2617 clause 3-2-2 username: |
* The name of user in the specified realm |
*/ |
modulepar charstring PX_SIP_SUT_UE1_USERNAME := "abcd"; |
/** @desc charstring for RFC 2617 clause 3-2-2-2 passwd: A known shared secret, the password of user of the specified username |
*/ |
modulepar charstring PX_SIP_SUT_UE1_PASSWD := "1234"; |
/** @desc charstring for RFC 2617 3-2-1 qop options: |
* Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The |
* value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. |
*/ |
modulepar charstring PX_SIP_SUT_UE2_QOP := "auth"; |
/** @desc charstring for RFC 2617 clause 3-2-2 username: |
* The name of user in the specified realm |
*/ |
modulepar charstring PX_SIP_SUT_UE2_USERNAME := "abcd"; |
/** @desc charstring for RFC 2617 clause 3-2-2-2 passwd: A known shared secret, the password of user of the specified username |
*/ |
modulepar charstring PX_SIP_SUT_UE2_PASSWD := "1234"; |
}//group ParametersForHTTP_Authentication |
group SIP_Timers { |
/** @desc float for T1 RTT estimate (500 ms) |
*/ |
modulepar float PX_SIP_T1 := 0.5; |
/** @desc float for T2 Maximum retransmit interval for non-INVITE requests and INVITE response (4000 ms) |
*/ |
modulepar float PX_T2 := 4.0; |
/** @desc float for T4 Maximum duration a message will remain in the network |
*/ |
modulepar float PX_T4 := 1.0; |
/** @desc float for TDELAY default value for timeout on outgoing SIP request (ie 64*T1) |
*/ |
modulepar float PX_SIP_TF := 32.0; |
/** @desc float for TWait default value for waiting an operator action |
*/ |
modulepar float PX_SIP_TWAIT := 30.0; |
/** @desc float for TAck default value for waiting an acknowledgement |
*/ |
modulepar float PX_SIP_TACK := 8.0; |
/** @desc float for TResp default value for waiting for a response from the IUT |
*/ |
modulepar float PX_SIP_TRESP := 15.0; |
/** @desc float for TNoAct default value for waiting no message from the IUT |
* Value given for PX_TNOACT should be less than value of |
* SHORT_REGISTRATION constant (which is currently "3" (seconds)) |
*/ |
modulepar float PX_SIP_TNOACT := 1.0; |
/** @desc float for TSYNC default value to synchronise ptc |
*/ |
modulepar float PX_SIP_TSYNC := 10.0; |
/** @desc float for TGUARD default value for an extra long timer to limit test execution |
*/ |
modulepar float PX_SIP_TGUARD := 120.0; |
/** @desc float for TRespRetention minimum time that a Proxy will wait before sending a final response |
*/ |
modulepar float PX_TRespRetention := 1.0; |
}//group SIP_Timers |
} //group SIP_PIXITparameters |
} // group SIP_PIXITparameters |
} // end module LibSip_PIXITS |
/trunk/ttcn/LibSip_SDPTypes.ttcn |
---|
1,324 → 1,391 |
/** |
* @author STF 346, STF366, STF368, STF369, STF450 |
* @version $Id$ |
* @desc This module defines message, attribute, structured and simple |
* SDP types as well constants used by LipSip constructs. <br> |
* Note that any changes made to the definitions in this module |
* may be overwritten by future releases of this library |
* End users are encouraged to contact the distributers of this |
* module regarding their modifications or additions |
* This module is part of LibSipV2. |
* @remark Adding of new attributes types is ok; |
* Adding of new optional attributes in @see SDP_attribute type |
* is ok; |
* Existing attribute types shall not be changed or removed - |
* change requests shall be made to http://t-ort.etsi.org |
* @author STF 346, STF366, STF368, STF369, STF450, STF471 |
* @version $Id$ |
* @desc This module defines message, attribute, structured and simple |
* SDP types as well constants used by LipSip constructs. <br> |
* Note that any changes made to the definitions in this module |
* may be overwritten by future releases of this library |
* End users are encouraged to contact the distributers of this |
* module regarding their modifications or additions |
* This module is part of LibSipV3. |
* @remark Adding of new attributes types is ok; Adding of new optional attributes in @see SDP_attribute type is ok; Existing attribute types shall not be changed or removed - change requests shall be made to http://t-ort.etsi.org |
*/ |
module LibSip_SDPTypes { |
import from LibSip_SIPTypesAndValues all; |
group Constants { |
group SimpleConstants { |
// SDP net_type |
const charstring c_in := "IN"; |
module LibSip_SDPTypes |
{ |
group Constants |
{ |
group SimpleConstants |
{ |
// SDP net_type |
const charstring c_in := "IN"; |
// SDP addr_type |
const charstring c_ip4 := "IP4"; |
const charstring c_ip6 := "IP6"; |
// SDP addr_type |
const charstring c_ip4 := "IP4"; |
const charstring c_ip6 := "IP6"; |
// SDP_media_desc: media |
const charstring c_audio := "audio"; |
const charstring c_image := "image"; |
const charstring c_video := "video"; |
const charstring c_text := "text"; |
const charstring c_msrp := "msrp"; |
// SDP_media_desc: media |
const charstring c_audio := "audio"; |
const charstring c_image := "image"; |
const charstring c_video := "video"; |
const charstring c_text := "text"; |
const charstring c_msrp := "msrp"; |
// SDP_media_desc: transport |
const charstring c_rtpAvp := "RTP/AVP"; |
const charstring c_rtpAvpf := "RTP/AVPF"; |
const charstring c_msrpTcp := "TCP/MSRP"; |
const charstring c_udptl := "Udptl"; |
// SDP_media_desc: transport |
const charstring c_rtpAvp := "RTP/AVP"; |
const charstring c_rtpAvpf := "RTP/AVPF"; |
const charstring c_msrpTcp := "TCP/MSRP"; |
const charstring c_udptl := "Udptl"; |
// SDP_attribute_list constants: |
const charstring c_local := "local"; |
const charstring c_mandatory := "mandatory"; |
const charstring c_optional := "optional"; |
const charstring c_none := "none"; |
const charstring c_qos := "qos"; |
const charstring c_remote := "remote"; |
const charstring c_sendrecv := "sendrecv"; |
const charstring c_sendonly := "sendonly"; |
const charstring c_inactive := "inactive"; |
const charstring c_send := "send"; |
const charstring c_recv := "recv"; |
const charstring c_e2e := "e2e"; |
// SDP_attribute_list constants: |
const charstring c_local := "local"; |
const charstring c_mandatory := "mandatory"; |
const charstring c_optional := "optional"; |
const charstring c_none := "none"; |
const charstring c_qos := "qos"; |
const charstring c_remote := "remote"; |
const charstring c_sendrecv := "sendrecv"; |
const charstring c_sendonly := "sendonly"; |
const charstring c_inactive := "inactive"; |
const charstring c_send := "send"; |
const charstring c_recv := "recv"; |
const charstring c_e2e := "e2e"; |
} |
} |
} |
group Types |
{ |
group SubTypes |
{ |
group AttributeTypes |
{ |
type record SDP_attribute_cat { |
charstring attr_value |
} |
group Types { |
group SubTypes { |
group AttributeTypes { |
type record SDP_attribute_cat { |
charstring attr_value |
} |
type record SDP_attribute_keywds { |
charstring attr_value |
} |
type record SDP_attribute_keywds { |
charstring attr_value |
} |
type record SDP_attribute_tool { |
charstring attr_value |
} |
type record SDP_attribute_tool { |
charstring attr_value |
} |
type record SDP_attribute_ptime { |
charstring attr_value |
} |
type record SDP_attribute_ptime { |
charstring attr_value |
} |
type record SDP_attribute_recvonly { |
} |
type record SDP_attribute_recvonly { |
} |
type record SDP_attribute_sendrecv { |
} |
type record SDP_attribute_sendrecv { |
} |
type record SDP_attribute_sendonly { |
} |
type record SDP_attribute_sendonly { |
} |
type record SDP_attribute_inactive { |
} |
type record SDP_attribute_inactive { |
} |
type record SDP_attribute_orient { |
charstring attr_value |
} |
type record SDP_attribute_orient { |
charstring attr_value |
} |
type record SDP_attribute_type { |
charstring attr_value |
} |
type record SDP_attribute_type { |
charstring attr_value |
} |
type record SDP_attribute_charset { |
charstring attr_value |
} |
type record SDP_attribute_charset { |
charstring attr_value |
} |
type record SDP_attribute_sdplang { |
charstring attr_value |
} |
type record SDP_attribute_sdplang { |
charstring attr_value |
} |
type record SDP_attribute_lang { |
charstring attr_value |
} |
type record SDP_attribute_lang { |
charstring attr_value |
} |
type record SDP_attribute_framerate { |
charstring attr_value |
} |
type record SDP_attribute_framerate { |
charstring attr_value |
} |
type record SDP_attribute_quality { |
charstring attr_value |
} |
type record SDP_attribute_quality { |
charstring attr_value |
} |
type record SDP_attribute_fmtp { |
charstring attr_value |
} |
type union SDP_attribute_fmtp_format_specific_params { |
SemicolonParam_List paramList, |
charstring unstructured |
} |
type record SDP_attribute_curr { |
charstring preconditionType, |
charstring statusType, |
charstring direction |
} |
type record SDP_attribute_fmtp { |
charstring format, |
SDP_attribute_fmtp_format_specific_params params |
} |
type record SDP_attribute_des { |
charstring preconditionType, |
charstring strength, |
charstring statusType, |
charstring direction |
} |
type record SDP_attribute_curr { |
charstring preconditionType, |
charstring statusType, |
charstring direction |
} |
type record SDP_attribute_conf { |
charstring preconditionType, |
charstring statusType, |
charstring direction |
} |
type record SDP_attribute_des { |
charstring preconditionType, |
charstring strength, |
charstring statusType, |
charstring direction |
} |
type record SDP_attribute_rtpmap { |
charstring attr_value |
} |
type record SDP_attribute_conf { |
charstring preconditionType, |
charstring statusType, |
charstring direction |
} |
type record SDP_attribute_rtcp { |
charstring attr_value |
} |
type record SDP_attribute_msrp { |
charstring attr_value |
} |
type record SDP_attribute_rtpmap_codec { |
charstring encoding, |
charstring clockrate, |
charstring parameters optional |
} |
type record SDP_attribute_unknown { |
charstring name, |
charstring attr_value optional |
} |
type record SDP_attribute_rtpmap { |
charstring payload_type, |
SDP_attribute_rtpmap_codec codec |
} |
type record SDP_attribute_rtcp { |
integer portnumber, |
SDP_connection connection optional |
} |
type union SDP_attribute { |
SDP_attribute_cat cat, |
SDP_attribute_keywds keywds, |
SDP_attribute_tool tool, |
SDP_attribute_ptime ptime, |
SDP_attribute_recvonly recvonly, |
SDP_attribute_sendrecv sendrecv, |
SDP_attribute_sendonly sendonly, |
SDP_attribute_inactive inactive, |
SDP_attribute_orient orient, |
SDP_attribute_type sdp_type, |
SDP_attribute_charset charset, |
SDP_attribute_sdplang sdplang, |
SDP_attribute_lang lang, |
SDP_attribute_framerate framerate, |
SDP_attribute_quality quality, |
SDP_attribute_fmtp fmtp, |
SDP_attribute_curr curr, |
SDP_attribute_des des, |
SDP_attribute_conf conf, |
SDP_attribute_rtpmap rtpmap, |
SDP_attribute_rtcp rtcp, |
SDP_attribute_msrp msrp, |
type record SDP_attribute_msrp { |
charstring attr_value |
} |
//* unknown has to be the last else encoding/decoding won't work! |
SDP_attribute_unknown unknown |
type record SDP_attribute_unknown { |
charstring name, |
charstring attr_value optional |
} |
type record SDP_attribute_maxptime { |
charstring attr_value |
} |
type record SDP_attribute_tcap { |
integer trpr_cap_num, |
Charstring_List proto_list |
} |
type record SDP_attribute_pcfg { |
integer config_number, |
Charstring_List pot_cfg_list optional |
} |
type record SDP_attribute_acfg { |
integer config_number, |
Charstring_List sel_cfg_list optional |
} |
type record SDP_attribute_ecn_capable_rtp { |
Charstring_List init_list, |
Charstring_List parm_list optional |
} |
type record SDP_attribute_rtcp_fb { |
charstring rtcp_fb_pt, |
charstring rtcp_fb_val |
} |
type record SDP_attribute_rtcp_xr { |
Charstring_List xr_format_list optional |
} |
type record SDP_attribute_rtcp_rsize { |
} |
type record SDP_attribute_3ge2ae { |
charstring indicator |
} |
type record SDP_attribute_crypto { |
charstring tag, |
charstring crypto_suite, |
charstring key_params, |
Charstring_List session_params optional |
} |
type union SDP_attribute { |
SDP_attribute_cat cat, |
SDP_attribute_keywds keywds, |
SDP_attribute_tool tool, |
SDP_attribute_ptime ptime, |
SDP_attribute_recvonly recvonly, |
SDP_attribute_sendrecv sendrecv, |
SDP_attribute_sendonly sendonly, |
SDP_attribute_inactive inactive, |
SDP_attribute_orient orient, |
SDP_attribute_type sdp_type, |
SDP_attribute_charset charset, |
SDP_attribute_sdplang sdplang, |
SDP_attribute_lang lang, |
SDP_attribute_framerate framerate, |
SDP_attribute_quality quality, |
SDP_attribute_fmtp fmtp, |
SDP_attribute_curr curr, |
SDP_attribute_des des, |
SDP_attribute_conf conf, |
SDP_attribute_rtpmap rtpmap, |
SDP_attribute_rtcp rtcp, |
SDP_attribute_msrp msrp, |
SDP_attribute_maxptime maxptime, |
SDP_attribute_tcap tcap, |
SDP_attribute_pcfg pcfg, |
SDP_attribute_acfg acfg, |
SDP_attribute_ecn_capable_rtp ecn_capable_rtp, |
SDP_attribute_rtcp_fb rtcp_fb, |
SDP_attribute_rtcp_xr rtcp_xr, |
SDP_attribute_rtcp_rsize rtcp_rsize, |
SDP_attribute_3ge2ae e2ae, |
SDP_attribute_crypto crypto, |
//* unknown has to be the last else encoding/decoding won't work! |
SDP_attribute_unknown unknown |
} |
} //* group AttributeTypes |
type set of SDP_attribute SDP_attribute_list; |
type record SDP_bandwidth { |
charstring modifier, |
integer bandwidth |
} |
} //* group AttributeTypes |
type set of SDP_attribute SDP_attribute_list; |
type set of SDP_bandwidth SDP_bandwidth_list; |
type record SDP_bandwidth { |
charstring modifier, |
integer bandwidth |
} |
type record SDP_connection { |
charstring net_type, |
charstring addr_type, |
SDP_conn_addr conn_addr |
} |
type set of SDP_bandwidth SDP_bandwidth_list; |
type record SDP_conn_addr { |
charstring addr, |
integer ttl optional, |
integer num_of_addr optional |
} |
type record SDP_connection { |
charstring net_type, |
charstring addr_type, |
SDP_conn_addr conn_addr |
} |
type set of SDP_connection SDP_connection_list; |
type record SDP_conn_addr { |
charstring addr, |
integer ttl optional, |
integer num_of_addr optional |
} |
type record SDP_contact { |
charstring addr_or_phone, |
charstring disp_name optional |
} |
type set of SDP_connection SDP_connection_list; |
type SDP_contact SDP_contact_tel; |
type record SDP_contact { |
charstring addr_or_phone, |
charstring disp_name optional |
} |
type SDP_contact SDP_contact_email; |
type SDP_contact SDP_contact_tel; |
type set of SDP_contact_email SDP_email_list; |
type SDP_contact SDP_contact_email; |
type record of charstring SDP_fmt_list; |
type set of SDP_contact_email SDP_email_list; |
type record SDP_key { |
charstring method, |
charstring key optional |
} |
type record of charstring SDP_fmt_list ; |
type record SDP_media_desc { |
SDP_media_field media_field, |
charstring information optional, |
SDP_connection_list connections optional, |
SDP_bandwidth_list bandwidth optional, |
SDP_key key optional, |
SDP_attribute_list attributes optional |
} |
type record SDP_key { |
charstring method, |
charstring key optional |
} |
type set of SDP_media_desc SDP_media_desc_list; |
type record SDP_media_desc { |
SDP_media_field media_field, |
charstring information optional, |
SDP_connection_list connections optional, |
SDP_bandwidth_list bandwidth optional, |
SDP_key key optional, |
SDP_attribute_list attributes optional |
} |
type record SDP_media_port { |
integer port_number, |
integer num_of_ports optional |
} |
type set of SDP_media_desc SDP_media_desc_list; |
type record SDP_media_field { |
charstring media, |
SDP_media_port ports, |
charstring transport, |
SDP_fmt_list fmts |
} |
type record SDP_media_port { |
integer port_number, |
integer num_of_ports optional |
} |
type record SDP_time { |
SDP_time_field time_field, |
SDP_repeat_list time_repeat optional |
} |
type record SDP_media_field { |
charstring media, |
SDP_media_port ports, |
charstring transport, |
SDP_fmt_list fmts |
} |
type record SDP_time_field { |
charstring start_time, |
//* field is numeric strings that may not fit into 32-bit signed int |
charstring |
stop_time //* field is numeric strings that may not fit into 32-bit signed int |
} |
type record SDP_time{ |
SDP_time_field time_field, |
SDP_repeat_list time_repeat optional |
} |
type record SDP_repeat { |
SDP_typed_time repeat_interval, |
SDP_typed_time active, |
SDP_typed_time_list offsets |
} |
type record SDP_time_field{ |
charstring start_time, //* field is numeric strings that may not fit into 32-bit signed int |
charstring stop_time //* field is numeric strings that may not fit into 32-bit signed int |
} |
type set of SDP_repeat SDP_repeat_list; |
type record SDP_repeat{ |
SDP_typed_time repeat_interval, |
SDP_typed_time active, |
SDP_typed_time_list offsets |
} |
type record SDP_typed_time { |
integer time, |
charstring unit optional |
} |
type set of SDP_repeat SDP_repeat_list; |
type set of SDP_typed_time SDP_typed_time_list; |
type record SDP_typed_time{ |
integer time, |
charstring unit optional |
} |
type set of SDP_time SDP_time_list; |
type set of SDP_typed_time SDP_typed_time_list; |
type record SDP_timezone { |
charstring adjustment_time, |
SDP_typed_time offset |
} |
type set of SDP_time SDP_time_list; |
type set of SDP_timezone SDP_timezone_list; |
type record SDP_timezone{ |
charstring adjustment_time, |
SDP_typed_time offset |
} |
type record SDP_Origin { |
charstring user_name, |
charstring session_id, |
//* field is numeric strings that may not fit into 32-bit signed int |
charstring session_version, |
//* field is numeric strings that may not fit into 32-bit signed int |
charstring net_type, |
charstring addr_type, |
charstring addr |
} |
type set of SDP_timezone SDP_timezone_list; |
type set of SDP_contact_tel SDP_phone_list; |
type record SDP_Origin{ |
charstring user_name, |
charstring session_id,//* field is numeric strings that may not fit into 32-bit signed int |
charstring session_version, //* field is numeric strings that may not fit into 32-bit signed int |
charstring net_type, |
charstring addr_type, |
charstring addr |
} |
} //* group SubTypes |
type set of SDP_contact_tel SDP_phone_list; |
} //* group SubTypes |
group MessageTypes { |
type record SDP_Message { |
integer protocol_version, |
SDP_Origin origin, |
charstring session_name, |
charstring information optional, |
charstring uri optional, |
SDP_email_list emails optional, |
SDP_phone_list phone_numbers optional, |
SDP_connection connection optional, |
SDP_bandwidth_list bandwidth optional, |
SDP_time_list times, |
SDP_timezone_list timezone_adjustments optional, |
SDP_key key optional, |
SDP_attribute_list attributes optional, |
SDP_media_desc_list media_list optional |
} |
with { |
encode "SDPCodec"; |
} |
group MessageTypes |
{ |
type record SDP_Message{ |
integer protocol_version, |
SDP_Origin origin, |
charstring session_name, |
charstring information optional, |
charstring uri optional, |
SDP_email_list emails optional, |
SDP_phone_list phone_numbers optional, |
SDP_connection connection optional, |
SDP_bandwidth_list bandwidth optional, |
SDP_time_list times, |
SDP_timezone_list timezone_adjustments optional, |
SDP_key key optional, |
SDP_attribute_list attributes optional, |
SDP_media_desc_list media_list optional |
} with { encode "SDPCodec" } |
} // group MessageTypes |
} // group Types |
} // group MessageTypes |
} // group Types |
} // end module LibSip_SDPTypes |
/trunk/ttcn/LibSip_SIPTypesAndValues.ttcn |
---|
1,1923 → 1,1941 |
/** |
* @author STF 346, STF366, STF368, STF369, STF450 |
* @version $Id$ |
* @desc This module defines message, header, structured and simple SIP |
* types as well constants used by LipSip constructs. <br> |
* Note that any changes made to the definitions in this module |
* may be overwritten by future releases of this library |
* End users are encouraged to contact the distributers of this |
* module regarding their modifications or additions |
* This module is part of LibSipV2. |
* @remark Adding of new message and header types is ok; |
* Adding of new optional header fields in @see MessageHeader type |
* is ok but should be done at same time as dummy template updates; |
* Existing message or header types shall not be changed or removed - |
* change requests shall be made to http://t-ort.etsi.org |
* @author STF 346, STF366, STF368, STF369, STF450, STF471 |
* @version $Id$ |
* @desc This module defines message, header, structured and simple SIP |
* types as well constants used by LipSip constructs. <br> |
* Note that any changes made to the definitions in this module |
* may be overwritten by future releases of this library |
* End users are encouraged to contact the distributers of this |
* module regarding their modifications or additions |
* This module is part of LibSipV3. |
* @remark Adding of new message and header types is ok; Adding of new optional header fields in |
* @see MessageHeader type is ok but should be done at same time as dummy template updates; Existing message or header types shall not be changed or removed - change requests shall be made to http://t-ort.etsi.org |
*/ |
module LibSip_SIPTypesAndValues { |
import from LibSip_MessageBodyTypes all; |
import from LibSip_PIXITS all; |
module LibSip_SIPTypesAndValues |
{ |
import from LibSip_MessageBodyTypes all; |
group Constants { |
group SimpleConstants { |
// SIP name protocol plus version |
const charstring c_sipNameVersion := "SIP/2.0"; |
group Constants |
{ |
group SimpleConstants |
{ |
// SIP name protocol plus version |
const charstring c_sipNameVersion := "SIP/2.0"; |
// SIP name protocol |
const charstring c_sipName := "SIP"; |
// SIP version |
const charstring c_sipVersion := "2.0"; |
// SIP scheme |
const charstring c_sipScheme := "sip"; |
// TEL scheme |
const charstring c_telScheme := "tel"; |
// URN schema |
const charstring c_urnScheme := "urn"; |
// SIP name protocol |
const charstring c_sipName := "SIP"; |
// TAG_ID |
const charstring c_tagId := "tag"; |
// BRANCH_ID |
const charstring c_branchId := "branch"; |
// BRANCH_COOKIE |
const charstring c_branchCookie := "z9hG4bK"; |
// EXPIRES_ID |
const charstring c_expiresId := "expires"; |
// MADDR_ID |
const charstring c_maddrId := "maddr"; |
// METHOD_ID |
const charstring c_methodId := "method"; |
// RECEIVED_ID |
const charstring c_receivedId := "received"; |
// TTL_ID |
const charstring c_ttlId := "ttl"; |
// USER_ID |
const charstring c_userId := "user"; |
// SDP name application |
const charstring c_sdpAplication := "application/sdp"; |
// XML name application |
const charstring c_xmlAplication := "application/xml"; |
// XML name application |
const charstring c_xmlreginfoAplication := "application/reginfo+xml"; |
// SIP version |
const charstring c_sipVersion := "2.0"; |
// MIME name application |
const charstring c_mimeMultipart := "multipart/mixed"; |
// SIP scheme |
const charstring c_sipScheme := "sip"; |
// IMS 3GPP name application |
const charstring c_ims3gppAplication := "application/3gpp-ims+xml"; |
// TEL scheme |
const charstring c_telScheme := "tel"; |
// IMS 3GPP name CW application |
const charstring c_ims3gppCwApplication := "application/vnd.3gpp.cw+xml"; |
// URN schema |
const charstring c_urnScheme := "urn"; |
// IMS ETSI name MCID application |
const charstring c_imsEtsiMcidApplication := "application/vnd.etsi.mcid+xml"; |
// TAG_ID |
const charstring c_tagId := "tag"; |
// IMS ETSI name CUG application |
const charstring c_imsEtsiCugApplication := "application/vnd.etsi.cug+xml"; |
// BRANCH_ID |
const charstring c_branchId := "branch"; |
// IMS ETSI name Simservs application(TIP/TIR, ACR, CDIV, OIP/OIR, CUG) |
const charstring c_imsEtsiSimservsApplication := "application/vnd.etsi.simservs+xml"; |
// OCTET-STREAM name application |
const charstring c_octetAplication := "application/octet-stream"; |
// BRANCH_COOKIE |
const charstring c_branchCookie := "z9hG4bK"; |
// PLAIN-TEXT name application |
const charstring c_plainText := "text/plain"; |
// EXPIRES_ID |
const charstring c_expiresId := "expires"; |
//text content of 1300 bytes for messages with message body |
const charstring c_longMessageContent_1300Bytes :=//"Hello!"; |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"& |
oct2char('0D'O) & oct2char('0A'O); // CRLF |
// MADDR_ID |
const charstring c_maddrId := "maddr"; |
// Default SIP port number : 5060 |
const integer c_defaultSipPort := 5060; |
// Default SIP protocol : UDP |
const charstring c_defaultSipProt := "UDP"; |
// Fixed IP multicast address |
const charstring c_mcastSipIpaddr := "224.0.1.75"; |
// Short delta-second used in expires parameter to acknowledge a registration |
const charstring c_shortRegistration := "3600"; |
// METHOD_ID |
const charstring c_methodId := "method"; |
// ([RFC3891]Sec 6.1) |
const charstring c_earlyFlag := "early-only"; |
// RECEIVED_ID |
const charstring c_receivedId := "received"; |
// option tag replaces ([RFC3261]) |
const charstring c_replaces := "replaces"; |
// option tag 100rel (reliable provisional response [RFC3262]) |
const charstring c_tag100rel := "100rel"; |
// option tag from-change ([RFC4916]) |
const charstring c_tagFromChange := "from-change"; |
// option tag precondition (ch.11 [RFC3312]) |
const charstring c_tagPrecond := "precondition"; |
// TTL_ID |
const charstring c_ttlId := "ttl"; |
// due to problem with TAU compiler because hardcoded return statement constant is created |
const HostPort c_hostport_dummy := {host:="", portField:=c_defaultSipPort}; |
// USER_ID |
const charstring c_userId := "user"; |
// CLIP/CLIR information |
const PrivacyValue c_privacy_none := "none"; |
const PrivacyValue c_privacy_id := "id"; |
const PrivacyValue c_privacy_header := "header"; |
const PrivacyValue c_privacy_user := "user"; |
const PrivacyValue c_privacy_critical := "critical"; |
const PrivacyValue c_privacy_session := "session"; |
// SDP name application |
const charstring c_sdpApplication := "application/sdp"; |
// @ (at) sign |
const charstring c_AT := "@"; |
//MRO |
const charstring c_SP := oct2char('20'O); |
const charstring c_SLASH := oct2char('2F'O); |
const charstring c_LT := oct2char('3C'O); |
const charstring c_GT := oct2char('3E'O); |
// XML name application |
const charstring c_xmlApplication := "application/xml"; |
// * (wildchard) sign |
const charstring c_WILDCARD := "*"; |
// XML name application |
const charstring c_xmlreginfoApplication := "application/reginfo+xml"; |
const integer c_CRlen := 2; // length of new line (0d0a) |
// XML name resource-list |
const charstring c_xmlresourcelistApplication := "application/resource-lists+xml"; |
const GenericParam c_Integrity_protected_yes := {"integrity-protected","yes"} |
const GenericParam c_Integrity_protected_no := {"integrity-protected","no"} |
const GenericParam c_Integrity_protected_ip_assoc_pending := {"integrity-protected","ip-assoc-pending"} |
// MIME name application |
const charstring c_mimeMultipart := "multipart/mixed;boundary=""" & PX_SIP_MIME_BOUNDARY & """"; |
// IMS 3GPP name application |
const charstring c_ims3gppApplication := "application/3gpp-ims+xml"; |
} //end group SimpleConstants |
// IMS 3GPP name CW application |
const charstring c_ims3gppCwApplication := "application/vnd.3gpp.cw+xml"; |
group AuthorizationConstants { |
// IMS ETSI name MCID application |
const charstring c_imsEtsiMcidApplication := "application/vnd.etsi.mcid+xml"; |
const charstring c_ik := ""; |
const charstring c_ck := ""; |
const charstring c_nonce := ""; |
const charstring c_nonce_value := "0edff6c521cc3f407f2d9e01cf6ed82b"; |
// IMS ETSI name CUG application |
const charstring c_imsEtsiCugApplication := "application/vnd.etsi.cug+xml"; |
} //end group AuthorizationConstants |
// IMS ETSI name Simservs application(TIP/TIR, ACR, CDIV, OIP/OIR, CUG) |
const charstring c_imsEtsiSimservsApplication := "application/vnd.etsi.simservs+xml"; |
group PChargingVectorConstants { |
// OCTET-STREAM name application |
const charstring c_octetApplication := "application/octet-stream"; |
const charstring c_icid := "icid-value"; |
const charstring c_icid_value := "123abc"; |
const charstring c_icid_generated_at := "icid-generated-at"; |
const charstring c_orig_ioi := "orig-ioi"; |
const charstring c_term_ioi := "term-ioi"; |
const charstring c_access_network_charging_info := "access-network-charging-info"; |
// PLAIN-TEXT name application |
const charstring c_plainText := "text/plain"; |
} //end group PChargingVectorConstants |
// SIP fragment message |
const charstring c_sipfragMessage := "message/sipfrag"; |
group HeaderFieldConstants { |
// text content of 1300 bytes for messages with message body |
const charstring c_longMessageContent_1300Bytes := |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & |
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & oct2char('0D'O) & oct2char('0A'O); |
// CRLF |
// Default SIP port number : 5060 |
const integer c_defaultSipPort := 5060; |
const CallId c_empty_CallId := |
{ |
fieldName := CALL_ID_E, |
callid := "" |
}; |
// Default SIP protocol : UDP |
const charstring c_defaultSipProt := "UDP"; |
const ContentType c_empty_ContentType := |
{ |
fieldName := CONTENT_TYPE_E, |
mediaType := "" |
}; |
// Fixed IP multicast address |
const charstring c_mcastSipIpaddr := "224.0.1.75"; |
const CSeq c_empty_cSeq := { |
fieldName := CSEQ_E, |
seqNumber:=0, |
method:="EMPTY" }; |
// Short delta-second used in expires parameter to acknowledge a registration |
const charstring c_shortRegistration := "3600"; |
const From c_empty_From := { |
fieldName := FROM_E, |
addressField := { |
nameAddr := { |
displayName := omit, |
addrSpec := { |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := omit , |
hostPort := {host:="127.0.0.1", portField:=c_defaultSipPort} |
} |
}, |
urlParameters := omit, |
headers := omit |
} |
} |
}, |
fromParams := omit |
}; |
// ([RFC3891 ] Sec 6.1) |
const charstring c_earlyFlag := "early-only"; |
const MaxForwards c_maxForwards70 := {fieldName:=MAX_FORWARDS_E, forwards:=70} |
// option tag replaces ([RFC3261 ] ) |
const charstring c_replaces := "replaces"; |
const SipUrl c_empty_RequestUri := |
{ |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := omit , |
hostPort := {host:="127.0.0.1", portField:=c_defaultSipPort} |
} |
}, |
urlParameters := omit, |
headers := omit |
}; |
// option tag 100rel (reliable provisional response [RFC3262 ] ) |
const charstring c_tag100rel := "100rel"; |
const SipUrl c_unavailableUri := |
{ |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := {userOrTelephoneSubscriber:="unavailable", password:=omit}, |
hostPort := {host:="anonymous.invalid", portField:=c_defaultSipPort} |
} |
}, |
urlParameters := omit, |
headers := omit |
}; |
// option tag from-change ([RFC4916 ] ) |
const charstring c_tagFromChange := "from-change"; |
const To c_empty_To := |
{ // value of To header |
fieldName := TO_E, |
addressField := { |
nameAddr := { |
displayName := omit, |
addrSpec := { |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := omit , |
hostPort := {host:="127.0.0.1", portField:=c_defaultSipPort} |
} |
}, |
urlParameters := omit, |
headers := omit |
} |
// option tag precondition (ch.11 [RFC3312 ] ) |
const charstring c_tagPrecond := "precondition"; |
// due to problem with TAU compiler because hardcoded return statement constant is created |
const HostPort c_hostport_dummy := { |
host := "", |
portField := c_defaultSipPort |
}; |
// CLIP/CLIR information |
const PrivacyValue c_privacy_none := "none"; |
const PrivacyValue c_privacy_id := "id"; |
const PrivacyValue c_privacy_header := "header"; |
const PrivacyValue c_privacy_user := "user"; |
const PrivacyValue c_privacy_critical := "critical"; |
const PrivacyValue c_privacy_session := "session"; |
// |
const charstring c_AT := "@"; |
// MRO |
const charstring c_SP := oct2char('20'O); |
const charstring c_SLASH := oct2char('2F'O); |
const charstring c_LT := oct2char('3C'O); |
const charstring c_GT := oct2char('3E'O); |
// * (wildchard) sign |
const charstring c_WILDCARD := "*"; |
const integer c_CRlen := 2; |
// length of new line (0d0a) |
const GenericParam c_Integrity_protected_yes := {"integrity-protected", {tokenOrHost := "yes"}}; |
const GenericParam c_Integrity_protected_no := {"integrity-protected", {tokenOrHost := "no"}}; |
const GenericParam c_Integrity_protected_ip_assoc_pending := {"integrity-protected", {tokenOrHost := "ip-assoc-pending"}}; |
const charstring c_algorithm := "MD5"; |
} // end group SimpleConstants |
group AuthorizationConstants { |
const charstring c_ik := ""; |
const charstring c_ck := ""; |
const charstring c_nonce := ""; |
const charstring c_nonce_value := "0edff6c521cc3f407f2d9e01cf6ed82b"; |
} // end group AuthorizationConstants |
group PChargingVectorConstants { |
const charstring c_icid := "icid-value"; |
const charstring c_icid_value := "123abc"; |
const charstring c_icid_generated_at := "icid-generated-at"; |
const charstring c_orig_ioi := "orig-ioi"; |
const charstring c_term_ioi := "term-ioi"; |
const charstring c_access_network_charging_info := "access-network-charging-info"; |
} // end group PChargingVectorConstants |
group HeaderFieldConstants { |
const CallId c_empty_CallId := { |
fieldName := CALL_ID_E, |
callid := "" |
}; |
const ContentType c_empty_ContentType := { |
fieldName := CONTENT_TYPE_E, |
mediaType := "" |
}; |
const CSeq c_empty_cSeq := { |
fieldName := CSEQ_E, |
seqNumber := 0, |
method := "EMPTY" |
}; |
const From c_empty_From := { |
fieldName := FROM_E, |
addressField := { |
nameAddr := { |
displayName := omit, |
addrSpec := { |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := omit, |
hostPort := { |
host := "127.0.0.1", |
portField := c_defaultSipPort |
} |
} |
}, |
urlParameters := omit, |
headers := omit |
} |
} |
}, |
fromParams := omit |
}; |
const MaxForwards c_maxForwards70 := { |
fieldName := MAX_FORWARDS_E, |
forwards := 70 |
}; |
const SipUrl c_empty_RequestUri := { |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := omit, |
hostPort := { |
host := "127.0.0.1", |
portField := c_defaultSipPort |
} |
} |
}, |
urlParameters := omit, |
headers := omit |
}; |
const SipUrl c_unavailableUri := { |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := { |
userOrTelephoneSubscriber := "unavailable", |
password := omit |
}, |
hostPort := { |
host := "anonymous.invalid", |
portField := c_defaultSipPort |
} |
} |
}, |
urlParameters := omit, |
headers := omit |
}; |
const To c_empty_To := { |
// value of To header |
fieldName := TO_E, |
addressField := { |
nameAddr := { |
displayName := omit, |
addrSpec := { |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := omit, |
hostPort := { |
host := "127.0.0.1", |
portField := c_defaultSipPort |
} |
} |
}, |
urlParameters := omit, |
headers := omit |
} |
} |
}, |
toParams := omit |
}; |
const Via c_empty_Via := { |
fieldName := VIA_E, |
viaBody := { |
{ |
sentProtocol := { |
protocolName := c_sipName, |
protocolVersion := c_sipVersion, |
transport := c_defaultSipProt |
}, |
sentBy := { |
host := "127.0.0.1", |
portField := c_defaultSipPort |
}, |
viaParams := omit |
} |
} |
}; |
} |
}, |
toParams := omit |
}; |
const Via c_empty_Via := { |
fieldName := VIA_E, |
viaBody :={ |
{sentProtocol := { |
protocolName := c_sipName, |
protocolVersion := c_sipVersion, |
transport := c_defaultSipProt |
}, |
sentBy := {host:="127.0.0.1", portField:=c_defaultSipPort}, |
viaParams:= omit |
group UserProfileConstants { |
// number of user profile from 1-10 for SIP profile |
const integer c_userProfile_SIP1_home := 1; |
const integer c_userProfile_SIP2_home := 2; |
} // end group UserProfileConstants |
group StatusLines { |
const StatusLine c_statusLine100 := {c_sipNameVersion, 100, "Trying"}; |
const StatusLine c_statusLine180 := {c_sipNameVersion, 180, "Ringing"}; |
const StatusLine c_statusLine181 := {c_sipNameVersion, 181, "Call Is Being Forwarded"}; |
const StatusLine c_statusLine182 := {c_sipNameVersion, 182, "Queued"}; |
const StatusLine c_statusLine183 := {c_sipNameVersion, 183, "Session Progress"}; |
const StatusLine c_statusLine200 := {c_sipNameVersion, 200, "OK"}; |
const StatusLine c_statusLine202 := {c_sipNameVersion, 202, "Accepted"}; |
const StatusLine c_statusLine300 := {c_sipNameVersion, 300, "Multiple Choices"}; |
const StatusLine c_statusLine301 := {c_sipNameVersion, 301, "Moved Permanently"}; |
const StatusLine c_statusLine302 := {c_sipNameVersion, 302, "Moved Temporarily"}; |
const StatusLine c_statusLine305 := {c_sipNameVersion, 305, "Use Proxy"}; |
const StatusLine c_statusLine380 := {c_sipNameVersion, 380, "Alternative Service"}; |
const StatusLine c_statusLine400 := {c_sipNameVersion, 400, "Bad Request"}; |
const StatusLine c_statusLine401 := {c_sipNameVersion, 401, "Unauthorized"}; |
const StatusLine c_statusLine402 := {c_sipNameVersion, 402, "Payment Required"}; |
const StatusLine c_statusLine403 := {c_sipNameVersion, 403, "Forbidden"}; |
const StatusLine c_statusLine404 := {c_sipNameVersion, 404, "Not Found"}; |
const StatusLine c_statusLine405 := {c_sipNameVersion, 405, "Method Not Allowed"}; |
const StatusLine c_statusLine406 := {c_sipNameVersion, 406, "Not Acceptable"}; |
const StatusLine c_statusLine407 := {c_sipNameVersion, 407, "Proxy Authentication Required"}; |
const StatusLine c_statusLine408 := {c_sipNameVersion, 408, "Request Timeout"}; |
const StatusLine c_statusLine410 := {c_sipNameVersion, 410, "Gone"}; |
const StatusLine c_statusLine413 := {c_sipNameVersion, 413, "Request Entity Too Large"}; |
const StatusLine c_statusLine414 := {c_sipNameVersion, 414, "Request-URI Too Long"}; |
const StatusLine c_statusLine415 := {c_sipNameVersion, 415, "Unsupported Media Type"}; |
const StatusLine c_statusLine416 := {c_sipNameVersion, 416, "Unsupported URI Scheme"}; |
const StatusLine c_statusLine420 := {c_sipNameVersion, 420, "Bad Extension"}; |
const StatusLine c_statusLine421 := {c_sipNameVersion, 421, "Extension Required"}; |
const StatusLine c_statusLine422 := {c_sipNameVersion, 422, "Session Interval Too Small"}; |
const StatusLine c_statusLine423 := {c_sipNameVersion, 423, "Interval Too Brief"}; |
const StatusLine c_statusLine433 := {c_sipNameVersion, 433, "Anonymity Disallowed"}; |
const StatusLine c_statusLine480 := {c_sipNameVersion, 480, "Temporarily Unavailable"}; |
const StatusLine c_statusLine481 := {c_sipNameVersion, 481, "Call/Transaction Does Not Exist"}; |
const StatusLine c_statusLine482 := {c_sipNameVersion, 482, "Loop Detected"}; |
const StatusLine c_statusLine483 := {c_sipNameVersion, 483, "Too Many Hops"}; |
const StatusLine c_statusLine484 := {c_sipNameVersion, 484, "Address Incomplete"}; |
const StatusLine c_statusLine485 := {c_sipNameVersion, 485, "Ambiguous"}; |
const StatusLine c_statusLine486 := {c_sipNameVersion, 486, "Busy Here"}; |
const StatusLine c_statusLine487 := {c_sipNameVersion, 487, "Request Terminated"}; |
const StatusLine c_statusLine488 := {c_sipNameVersion, 488, "Not Acceptable Here"}; |
const StatusLine c_statusLine493 := {c_sipNameVersion, 493, "Undecipherable"}; |
const StatusLine c_statusLine500 := {c_sipNameVersion, 500, "Server Internal Error"}; |
const StatusLine c_statusLine501 := {c_sipNameVersion, 501, "Not implemented"}; |
const StatusLine c_statusLine502 := {c_sipNameVersion, 502, "Bad Gateway"}; |
const StatusLine c_statusLine503 := {c_sipNameVersion, 503, "Service Unavailable"}; |
const StatusLine c_statusLine504 := {c_sipNameVersion, 504, "Server Time-out"}; |
const StatusLine c_statusLine505 := {c_sipNameVersion, 505, "Version Not Supported"}; |
const StatusLine c_statusLine513 := {c_sipNameVersion, 513, "Message Too Large"}; |
const StatusLine c_statusLine580 := {c_sipNameVersion, 580, "Precondition Failure"}; |
const StatusLine c_statusLine600 := {c_sipNameVersion, 600, "Busy Everywhere"}; |
const StatusLine c_statusLine603 := {c_sipNameVersion, 603, "Decline"}; |
const StatusLine c_statusLine604 := {c_sipNameVersion, 604, "Does Not Exist Anywhere"}; |
const StatusLine c_statusLine606 := {c_sipNameVersion, 606, "Not Acceptable"}; |
} // end StatusLines |
group SIPSyncPointNames { |
const charstring c_Ringing := "Ringing"; |
const charstring c_uPlane := "uPlane"; |
const charstring c_sync1 := "sync1"; |
const charstring c_sync2 := "sync2"; |
const charstring c_sync3 := "sync3"; |
const charstring c_sync4 := "sync4"; |
const charstring c_uPlaneStop := "uPlaneStop"; |
const charstring c_annoucA := "announcementA"; |
const charstring c_annoucB := "announcementB"; |
const charstring c_annouc := "announcement"; |
const charstring c_voicem := "voiceMessage"; |
} |
}}; |
} |
} // end group Constants |
group Types { |
group SubTypes { |
// Subtypes |
group TokenTypes // TokensTypes |
{ |
// [20 ] |
type enumerated FieldName { |
ACCEPT_E, |
ACCEPT_ENCODING_E, |
ACCEPT_LANGUAGE_E, |
ALERT_INFO_E, |
ALLOW_E, |
AUTHENTICATION_INFO_E, |
AUTHORIZATION_E, |
CALL_ID_E, |
CALL_INFO_E, |
CONTACT_E, |
CONTENT_DISPOSITION_E, |
CONTENT_ENCODING_E, |
CONTENT_LANGUAGE_E, |
CONTENT_LENGTH_E, |
CONTENT_TYPE_E, |
CSEQ_E, |
DATE_E, |
ERROR_INFO_E, |
EXPIRES_E, |
FROM_E, |
IN_REPLY_TO_E, |
MAX_FORWARDS_E, |
MIME_VERSION_E, |
MIN_EXPIRES_E, |
ORGANIZATION_E, |
PRIORITY_E, |
PROXY_AUTHENTICATE_E, |
PROXY_AUTHORIZATION_E, |
PROXY_REQUIRE_E, |
RECORD_ROUTE_E, |
REPLY_TO_E, |
REQUIRE_E, |
RETRY_AFTER_E, |
ROUTE_E, |
SERVER_E, |
SUBJECT_E, |
SUPPORTED_E, |
TIMESTAMP_E, |
TO_E, |
UNSUPPORTED_E, |
USER_AGENT_E, |
VIA_E, |
WARNING_E, |
WWW_AUTHENTICATE_E, |
// [3262/7.1 ] |
RACK_E, |
RSEQ_E, |
// [3265/7.2 ] |
ALLOW_EVENTS_E, |
EVENT_E, |
SUBSCRIPTION_STATE_E, |
// [3313 ] |
P_MEDIA_AUTHORIZATION_E, |
// [3323 ] |
PRIVACY_E, |
// [3325 ] |
P_ASSERTED_ID_E, |
P_PREFERRED_ID_E, |
P_PREFERRED_SERVICE_E, |
// [3326 ] |
REASON_E, |
// [3515 ] - REFER method |
REFER_TO_E, |
// [4488 ] - REFER method |
REFER_SUB_E, |
// [3891 ] |
REPLACES_E, |
// [3892 ] - REFER method |
REFERRED_BY_E, |
// [4244 ] |
HISTORY_INFO_E, |
// [3313 ] |
P_MEDIA_AUTH_E, |
// [3327 ] |
PATH_E, |
// [3329 ] |
SECURITY_CLIENT_E, |
SECURITY_SERVER_E, |
SECURITY_VERIFY_E, |
// [3455 ] |
P_ACCESS_NETWORK_INFO_E, |
P_ASSOCIATED_URI_E, |
P_CALLED_PARTY_E, |
P_CHARGING_FUNCTION_ADDRESSES_E, |
P_CHARGING_VECTOR_E, |
P_VISITED_NETWORK_E, |
// [3608 ] |
SERVICE_ROUTE_E, |
// [3841 ] |
ACCEPT_CONTACT_E, |
REQUEST_DISPOSITION_E, |
// [4028 ] |
MIN_SE_E, |
SESSION_EXPIRES_E, |
P_ASSERTED_SERVICE_E, |
// [5009 ] |
P_EARLY_MEDIA_E, |
// http://tools.ietf.org/html/draft-johnston-sipping-cc-uui-07 |
// Transporting User to User Call Control Information in SIP for ISDN Interworking |
USER_TO_USER_E, |
// [6442 ] /* |
// @sic R5-133151 update of header fields sic@ */ |
GEOLOCATION_E, |
GEOLOCATION_ROUTING_E, |
SESSION_ID_E, |
SIP_ETAG_E, |
SIP_IF_MATCH_E, |
FEATURE_CAPS_E |
} |
group UserProfileConstants |
{ |
// number of user profile from 1-10 for SIP profile |
const integer c_userProfile_SIP1_home := 1; |
const integer c_userProfile_SIP2_home := 2; |
// [7.1 ] |
type enumerated Method { |
ACK_E, |
BYE_E, |
CANCEL_E, |
INVITE_E, |
OPTIONS_E, |
REGISTER_E, |
PRACK_E // Note: this element is not defined in [5 ] |
, |
SUBSCRIBE_E, |
NOTIFY_E // [3265 ] |
, |
PUBLISH_E // [3903/12 ] |
, |
REFER_E // [3515 ] |
, |
UPDATE_E // [3311 ] |
, |
MESSAGE_E // [3428 ] |
, |
INFO_E // [2976 ] |
, |
UNKNOWN_METHOD_E |
} |
} //end group UserProfileConstants |
type union GenValue { |
charstring tokenOrHost, |
charstring quotedString |
} |
group StatusLines |
{ |
const StatusLine c_statusLine100 := {c_sipNameVersion, 100, "Trying"}; |
const StatusLine c_statusLine180 := {c_sipNameVersion, 180, "Ringing"}; |
const StatusLine c_statusLine181 := {c_sipNameVersion, 181, "Call Is Being Forwarded"}; |
const StatusLine c_statusLine182 := {c_sipNameVersion, 182, "Queued"}; |
const StatusLine c_statusLine183 := {c_sipNameVersion, 183, "Session Progress"}; |
// [20.1, 20.3, 20.4, 20.7, 20.9, 20.10, 20.11, 20.18, 20.20, 20.27, 20.28, 20.30, 20.31, |
// 20.33, 20.34, 20.39, 20.42, 20.44 ] |
type record GenericParam { |
charstring id, |
GenValue paramValue optional |
} |
const StatusLine c_statusLine200 := {c_sipNameVersion, 200, "OK"}; |
const StatusLine c_statusLine202 := {c_sipNameVersion, 202, "Accepted"}; |
// [? ] |
type set of GenericParam SemicolonParam_List; |
const StatusLine c_statusLine300 := {c_sipNameVersion, 300, "Multiple Choices"}; |
const StatusLine c_statusLine301 := {c_sipNameVersion, 301, "Moved Permanently"}; |
const StatusLine c_statusLine302 := {c_sipNameVersion, 302, "Moved Temporarily"}; |
const StatusLine c_statusLine305 := {c_sipNameVersion, 305, "Use Proxy"}; |
const StatusLine c_statusLine380 := {c_sipNameVersion, 380, "Alternative Service"}; |
// [? ] |
type set of GenericParam AmpersandParam_List; |
const StatusLine c_statusLine400 := {c_sipNameVersion, 400, "Bad Request"}; |
const StatusLine c_statusLine401 := {c_sipNameVersion, 401, "Unauthorized"}; |
const StatusLine c_statusLine402 := {c_sipNameVersion, 402, "Payment Required"}; |
const StatusLine c_statusLine403 := {c_sipNameVersion, 403, "Forbidden"}; |
const StatusLine c_statusLine404 := {c_sipNameVersion, 404, "Not Found"}; |
const StatusLine c_statusLine405 := {c_sipNameVersion, 405, "Method Not Allowed"}; |
const StatusLine c_statusLine406 := {c_sipNameVersion, 406, "Not Acceptable"}; |
const StatusLine c_statusLine407 := {c_sipNameVersion, 407, "Proxy Authentication Required"}; |
const StatusLine c_statusLine408 := {c_sipNameVersion, 408, "Request Timeout"}; |
const StatusLine c_statusLine410 := {c_sipNameVersion, 410, "Gone"}; |
const StatusLine c_statusLine413 := {c_sipNameVersion, 413, "Request Entity Too Large"}; |
const StatusLine c_statusLine414 := {c_sipNameVersion, 414, "Request-URI Too Long"}; |
const StatusLine c_statusLine415 := {c_sipNameVersion, 415, "Unsupported Media Type"}; |
const StatusLine c_statusLine416 := {c_sipNameVersion, 416, "Unsupported URI Scheme"}; |
const StatusLine c_statusLine420 := {c_sipNameVersion, 420, "Bad Extension"}; |
const StatusLine c_statusLine421 := {c_sipNameVersion, 421, "Extension Required"}; |
const StatusLine c_statusLine422 := {c_sipNameVersion, 422, "Session Interval Too Small"}; |
const StatusLine c_statusLine423 := {c_sipNameVersion, 423, "Interval Too Brief"}; |
const StatusLine c_statusLine433 := {c_sipNameVersion, 433, "Anonymity Disallowed"}; |
const StatusLine c_statusLine480 := {c_sipNameVersion, 480, "Temporarily Unavailable"}; |
const StatusLine c_statusLine481 := {c_sipNameVersion, 481, "Call/Transaction Does Not Exist"}; |
const StatusLine c_statusLine482 := {c_sipNameVersion, 482, "Loop Detected"}; |
const StatusLine c_statusLine483 := {c_sipNameVersion, 483, "Too Many Hops"}; |
const StatusLine c_statusLine484 := {c_sipNameVersion, 484, "Address Incomplete"}; |
const StatusLine c_statusLine485 := {c_sipNameVersion, 485, "Ambiguous"}; |
const StatusLine c_statusLine486 := {c_sipNameVersion, 486, "Busy Here"}; |
const StatusLine c_statusLine487 := {c_sipNameVersion, 487, "Request Terminated"}; |
const StatusLine c_statusLine488 := {c_sipNameVersion, 488, "Not Acceptable Here"}; |
const StatusLine c_statusLine493 := {c_sipNameVersion, 493, "Undecipherable"}; |
const StatusLine c_statusLine500 := {c_sipNameVersion, 500, "Server Internal Error"}; |
const StatusLine c_statusLine501 := {c_sipNameVersion, 501, "Not implemented"}; |
const StatusLine c_statusLine502 := {c_sipNameVersion, 502, "Bad Gateway"}; |
const StatusLine c_statusLine503 := {c_sipNameVersion, 503, "Service Unavailable"}; |
const StatusLine c_statusLine504 := {c_sipNameVersion, 504, "Server Time-out"}; |
const StatusLine c_statusLine505 := {c_sipNameVersion, 505, "Version Not Supported"}; |
const StatusLine c_statusLine513 := {c_sipNameVersion, 513, "Message Too Large"}; |
const StatusLine c_statusLine580 := {c_sipNameVersion, 580, "Precondition Failure"}; |
const StatusLine c_statusLine600 := {c_sipNameVersion, 600, "Busy Everywhere"}; |
const StatusLine c_statusLine603 := {c_sipNameVersion, 603, "Decline"}; |
const StatusLine c_statusLine604 := {c_sipNameVersion, 604, "Does Not Exist Anywhere"}; |
const StatusLine c_statusLine606 := {c_sipNameVersion, 606, "Not Acceptable"}; |
// [? ] |
type set of GenericParam CommaParam_List; |
} //end StatusLines |
type set length (1..infinity) of charstring Charstring_List; |
group SIPSyncPointNames { |
const charstring c_Ringing := "Ringing"; |
const charstring c_uPlane := "uPlane"; |
const charstring c_sync1 := "sync1"; |
const charstring c_sync2 := "sync2"; |
const charstring c_sync3 := "sync3"; |
const charstring c_sync4 := "sync4"; |
const charstring c_uPlaneStop := "uPlaneStop"; |
const charstring c_annoucA := "announcementA"; |
const charstring c_annoucB := "announcementB"; |
const charstring c_annouc := "announcement"; |
const charstring c_voicem := "voiceMessage"; |
} |
// [20.10, 20.20, 20.30, 20.31, 20.34, 20.39, 20.42, 20.43 ] |
type record HostPort { |
charstring host optional, |
// hostname, IPv4 or IPv6 |
integer portField |
optional // represented as an integer |
} |
} //end group Constants |
// [20.10, 20.20, 20.30, 20.31, 20.34, 20.39 ] |
/** |
* @desc identifier for user or telephone subscriber |
* @member userOrTelephoneSubscriber provides the username or a phone name identifying the subscriber |
* @member password related password information |
*/ |
type record UserInfo { |
charstring userOrTelephoneSubscriber, |
charstring password optional |
} |
group Types { |
group SubTypes{// Subtypes |
group TokenTypes // TokensTypes |
{ |
// [20] |
type enumerated FieldName |
{ |
ACCEPT_E, |
ACCEPT_ENCODING_E, |
ACCEPT_LANGUAGE_E, |
ALERT_INFO_E, |
ALLOW_E, |
AUTHENTICATION_INFO_E, |
AUTHORIZATION_E, |
CALL_ID_E, |
CALL_INFO_E, |
CONTACT_E, |
CONTENT_DISPOSITION_E, |
CONTENT_ENCODING_E, |
CONTENT_LANGUAGE_E, |
CONTENT_LENGTH_E, |
CONTENT_TYPE_E, |
CSEQ_E, |
DATE_E, |
ERROR_INFO_E, |
EXPIRES_E, |
FROM_E, |
IN_REPLY_TO_E, |
MAX_FORWARDS_E, |
MIME_VERSION_E, |
MIN_EXPIRES_E, |
ORGANIZATION_E, |
PRIORITY_E, |
PROXY_AUTHENTICATE_E, |
PROXY_AUTHORIZATION_E, |
PROXY_REQUIRE_E, |
RECORD_ROUTE_E, |
REPLY_TO_E, |
REQUIRE_E, |
RETRY_AFTER_E, |
ROUTE_E, |
SERVER_E, |
SUBJECT_E, |
SUPPORTED_E, |
TIMESTAMP_E, |
TO_E, |
UNSUPPORTED_E, |
USER_AGENT_E, |
VIA_E, |
WARNING_E, |
WWW_AUTHENTICATE_E, |
// [3262/7.1] |
RACK_E, |
RSEQ_E, |
// [19.1.1 ;used in: 20.10, 20.20, 20.30, 20.31, 20.34, 20.39 ] |
/** |
* @desc Uniform Resource Identifier (URI) |
* @member scheme distinguishes call types, e.g. voice, fax etc. or related address scheme, e.g. tel, sip |
* @member userInfo Contains user information (also in non-SIP URLs) with optional parameter as passwords |
* @member hostPort Hostname or IP address information and port identifier of the target |
* @member urlParameters Contains either SIP or TEL URL parameters, separated by semicolons, e.g. transport=tcp or user=phone |
* @member headers Additional information added after the parameters, e.g. priority=urgent |
*/ |
type record SipUriComponents { |
// sip-uri acc. to RFC 3261 cl. 19.1 |
UserInfo userInfo optional, |
HostPort hostPort |
} |
// [3265/7.2] |
ALLOW_EVENTS_E, |
EVENT_E, |
SUBSCRIPTION_STATE_E, |
type record TelUriComponents { |
// tel-uri acc. to RFC 3966 |
charstring subscriber |
} |
// [3313] |
P_MEDIA_AUTHORIZATION_E, |
type record UrnUriComponents { |
// urn-uri acc. to RFC 2141 |
charstring namespaceId, |
// e.g. "service" as acc. to RFC 5031 |
charstring |
namespaceSpecificString // e.g. "sos" |
} |
// [3323] |
PRIVACY_E, |
type union UriComponents { |
SipUriComponents sip, |
// scheme: "sip" or sips" |
TelUriComponents tel, |
// scheme: "tel" |
UrnUriComponents urn, |
// scheme: "urn" |
charstring |
other // scheme: none of the above schemes |
} |
// [3325] |
P_ASSERTED_ID_E, |
P_PREFERRED_ID_E, |
P_PREFERRED_SERVICE_E, |
type record SipUrl { |
charstring scheme, |
// e.g "sip" or "tel" |
UriComponents components, |
// corresponding to the scheme |
SemicolonParam_List urlParameters optional, |
AmpersandParam_List headers optional |
} |
// [3326] |
REASON_E, |
// [20.1, RFC2616 14.1 ] |
type record AcceptBody { |
charstring mediaRange, |
SemicolonParam_List acceptParam optional |
} |
// [3515] - REFER method |
REFER_TO_E, |
// [20.1, RFC2616 14.1 ] |
type set of AcceptBody AcceptBody_List; |
// [4488] - REFER method |
REFER_SUB_E, |
// [20.4 ] |
type record AlertInfoBody { |
charstring url, |
// any URI |
SemicolonParam_List genericParams optional |
} |
// [3891] |
REPLACES_E, |
// [20.4 ] |
type set of AlertInfoBody AlertInfoBody_List; |
// [3892] - REFER method |
REFERRED_BY_E, |
// [20.8 ] |
type charstring CallidString; |
// token [" |
// [20.8 ] |
type set of CallidString CallidString_List; |
// [4244] |
HISTORY_INFO_E, |
// [20.9 ] |
type record CallInfoBody { |
charstring url, |
// any URI |
SemicolonParam_List infoParams optional |
} |
// [3313] |
P_MEDIA_AUTH_E, |
// [20.9 ] |
type set of CallInfoBody CallInfoBody_List; |
// [3327] |
PATH_E, |
// [20.27, 20.44, .......10.32, 10.48; RFC2616 14.33, 14.47; RFC2617 1.2 ] |
type union Challenge { |
CommaParam_List digestCln, |
OtherAuth otherChallenge |
} |
// [3329] |
SECURITY_CLIENT_E, |
SECURITY_SERVER_E, |
SECURITY_VERIFY_E, |
// [20.10, 20.20, 20.30, 20.31, 20.34, 20.39 ] |
type record NameAddr { |
charstring displayName optional, |
SipUrl addrSpec |
} |
// [3455] |
P_ACCESS_NETWORK_INFO_E, |
P_ASSOCIATED_URI_E, |
P_CALLED_PARTY_E, |
P_CHARGING_FUNCTION_ADDRESSES_E, |
P_CHARGING_VECTOR_E, |
P_VISITED_NETWORK_E, |
// [20.10, 20.20, 20.31, 20.39 ] |
type union Addr_Union { |
NameAddr nameAddr, |
SipUrl |
addrSpecUnion // STS: "Union" added to filed name to avoid dangerous name equivalence with 2nd NameAddr field |
} |
// [3608] |
SERVICE_ROUTE_E, |
// [20.10 ] |
type record ContactAddress { |
Addr_Union addressField, |
SemicolonParam_List contactParams optional |
} |
// [3841] |
ACCEPT_CONTACT_E, |
REQUEST_DISPOSITION_E, |
// [20.10 ] |
type set of ContactAddress ContactAddress_List; |
// 1 or more elements |
// [20.10 ] |
type union ContactBody { |
charstring wildcard, |
ContactAddress_List contactAddresses |
} |
// [4028] |
MIN_SE_E, |
SESSION_EXPIRES_E, |
// [20.2, 20.12; RFC2616 14.3, 14.11 ] |
type charstring ContentCoding; |
P_ASSERTED_SERVICE_E, |
// [20.2, 20.12; RFC2616 14.3, 14.11 ] |
type set of ContentCoding ContentCoding_List; |
//[5009] |
P_EARLY_MEDIA_E, |
// [20.7, 20.28; RFC2616 14.35 RFC2617 1.2 ] |
type union Credentials { |
CommaParam_List digestResponse, |
OtherAuth otherResponse |
} |
//http://tools.ietf.org/html/draft-johnston-sipping-cc-uui-07 |
//Transporting User to User Call Control Information in SIP for ISDN Interworking |
USER_TO_USER_E, |
//[6442] /* @sic R5-133151 update of header fields sic@ */ |
GEOLOCATION_E, |
GEOLOCATION_ROUTING_E, |
SESSION_ID_E, |
SIP_ETAG_E, |
SIP_IF_MATCH_E |
} |
// [7.1] |
type enumerated Method { |
ACK_E, |
BYE_E, |
CANCEL_E, |
INVITE_E, |
OPTIONS_E, |
REGISTER_E, |
PRACK_E, // Note: this element is not defined in [5] |
SUBSCRIBE_E, NOTIFY_E, // [3265] |
PUBLISH_E, // [3903/12] |
REFER_E, // [3515] |
UPDATE_E, // [3311] |
MESSAGE_E, // [3428] |
INFO_E, // [2976] |
UNKNOWN_METHOD_E |
} |
// allow multiple Authorization headers due to RFC3261 ch. 20.7 and 20.28 |
type record of Credentials CredentialsList; |
// [20.1, 20.3, 20.4, 20.7, 20.9, 20.10, 20.11, 20.18, 20.20, 20.27, 20.28, 20.30, 20.31, |
// 20.33, 20.34, 20.39, 20.42, 20.44] |
type record GenericParam |
{ |
charstring id, |
charstring paramValue optional |
} |
// [?] |
type set of GenericParam SemicolonParam_List; |
// [?] |
type set of GenericParam AmpersandParam_List; |
// [?] |
type set of GenericParam CommaParam_List; |
// [20.10, 20.20, 20.30, 20.31, 20.34, 20.39, 20.42, 20.43] |
type record HostPort |
{ |
charstring host optional, // hostname, IPv4 or IPv6 |
integer portField optional // represented as an integer |
} |
// [20.10, 20.20, 20.30, 20.31, 20.34, 20.39] |
/** |
* |
* @desc identifier for user or telephone subscriber |
* @member userOrTelephoneSubscriber provides the username or a phone name identifying the subscriber |
* @member password related password information |
* |
*/ |
type record UserInfo |
{ |
charstring userOrTelephoneSubscriber, |
charstring password optional |
} |
// [19.1.1 ;used in: 20.10, 20.20, 20.30, 20.31, 20.34, 20.39] |
// [20.19, 20.23, 20.33 ] |
type charstring DeltaSec; |
// an external operation can handle this field |
// [20.18 ] |
type record ErrorInfoBody { |
charstring uri, |
// any URI |
SemicolonParam_List genericParams optional |
} |
// [20.18 ] |
type set of ErrorInfoBody ErrorInfoBody_List; |
/** |
* |
* @desc Uniform Resource Identifier (URI) |
* @member scheme distinguishes call types, e.g. voice, fax etc. or related address scheme, e.g. tel, sip |
* @member userInfo Contains user information (also in non-SIP URLs) with optional parameter as passwords |
* @member hostPort Hostname or IP address information and port identifier of the target |
* @member urlParameters Contains either SIP or TEL URL parameters, separated by semicolons, e.g. transport=tcp or user=phone |
* @member headers Additional information added after the parameters, e.g. priority=urgent |
*/ |
// [20.3 RFC2616 14.4 ] |
type record LanguageBody { |
charstring languageRange, |
SemicolonParam_List acceptParam optional |
} |
type record SipUriComponents { // sip-uri acc. to RFC 3261 cl. 19.1 |
UserInfo userInfo optional, |
HostPort hostPort |
} |
// [20.3 RFC2616 14.4 ] |
type set of LanguageBody LanguageBody_List; |
type record TelUriComponents { // tel-uri acc. to RFC 3966 |
charstring subscriber |
} |
type record UrnUriComponents { // urn-uri acc. to RFC 2141 |
charstring namespaceId, // e.g. "service" as acc. to RFC 5031 |
charstring namespaceSpecificString // e.g. "sos" |
} |
type union UriComponents { |
SipUriComponents sip, // scheme: "sip" or sips" |
TelUriComponents tel, // scheme: "tel" |
UrnUriComponents urn, // scheme: "urn" |
charstring other // scheme: none of the above schemes |
} |
type record SipUrl |
{ |
charstring scheme, // e.g "sip" or "tel" |
UriComponents components, // corresponding to the scheme |
SemicolonParam_List urlParameters optional, |
AmpersandParam_List headers optional |
} |
// [20.13; RFC2616 14.12 ] |
type charstring LanguageTag; |
// [20.1, RFC2616 14.1] |
type record AcceptBody |
{ |
charstring mediaRange, |
SemicolonParam_List acceptParam optional |
} |
// [20.1, RFC2616 14.1] |
type set of AcceptBody AcceptBody_List; |
// [20.4] |
type record AlertInfoBody |
{ |
charstring url, // any URI |
SemicolonParam_List genericParams optional |
} |
// [20.4] |
type set of AlertInfoBody AlertInfoBody_List; |
// [20.8] |
type charstring CallidString; // token ["@" token] |
// [20.8] |
type set of CallidString CallidString_List; |
// [20.9] |
type record CallInfoBody |
{ |
charstring url, // any URI |
SemicolonParam_List infoParams optional |
} |
// [20.9] |
type set of CallInfoBody CallInfoBody_List; |
// [20.27, 20.44, .......10.32, 10.48; RFC2616 14.33, 14.47; RFC2617 1.2] |
type union Challenge |
{ |
CommaParam_List digestCln, |
OtherAuth otherChallenge |
} |
// [20.10, 20.20, 20.30, 20.31, 20.34, 20.39] |
type record NameAddr |
{ |
charstring displayName optional, |
SipUrl addrSpec |
} |
// [20.10, 20.20, 20.31, 20.39] |
type union Addr_Union |
{ |
NameAddr nameAddr, |
SipUrl addrSpecUnion // STS: "Union" added to filed name to avoid dangerous name equivalence with 2nd NameAddr field |
} |
// [20.10] |
type record ContactAddress |
{ |
Addr_Union addressField, |
SemicolonParam_List contactParams optional |
} |
// [20.10] |
type set of ContactAddress ContactAddress_List; // 1 or more elements |
// [20.10] |
type union ContactBody |
{ |
charstring wildcard, |
ContactAddress_List contactAddresses |
} |
// [20.2, 20.12; RFC2616 14.3, 14.11] |
type charstring ContentCoding; |
// [20.2, 20.12; RFC2616 14.3, 14.11] |
type set of ContentCoding ContentCoding_List; |
// [20.7, 20.28; RFC2616 14.35 RFC2617 1.2] |
type union Credentials |
{ |
CommaParam_List digestResponse, |
OtherAuth otherResponse |
} |
// allow multiple Authorization headers due to RFC3261 ch. 20.7 and 20.28 |
type record of Credentials CredentialsList; |
// [20.19, 20.23, 20.33] |
type charstring DeltaSec; // an external operation can handle this field |
// [20.18] |
type record ErrorInfoBody |
{ |
charstring uri, // any URI |
SemicolonParam_List genericParams optional |
} |
// [20.18] |
type set of ErrorInfoBody ErrorInfoBody_List; |
// [20.3 RFC2616 14.4] |
type record LanguageBody |
{ |
charstring languageRange, |
SemicolonParam_List acceptParam optional |
} |
// [20.3 RFC2616 14.4] |
type set of LanguageBody LanguageBody_List; |
// [20.13; RFC2616 14.12] |
type charstring LanguageTag; |
// [20.13; RFC2616 14.12] |
type set of LanguageTag LanguageTag_List; |
// [20.5] |
type set of charstring Method_List; |
// [20.29, 20.32, 20.37, 20.40] |
type charstring OptionTag; |
// [20.29, 20.32, 20.37, 20.40] |
type set of OptionTag OptionTag_List; |
// [20.7, 20.27, 20.28, 20.44 ; RFC2616 14.33, 14.47; RFC2617 1.2] |
type record OtherAuth |
{ |
charstring authScheme, |
CommaParam_List authParams |
} |
type record Payload |
{ |
integer payloadlength, |
charstring payloadvalue |
} |
// [20.30,20.34] |
type record RouteBody |
{ |
NameAddr nameAddr, |
SemicolonParam_List rrParam optional |
} |
// [20.30,20.34] |
type record of RouteBody RouteBody_List; |
// [20.42] |
type record SentProtocol |
{ |
charstring protocolName, |
charstring protocolVersion, |
charstring transport |
} |
// [20.35, 20.41; RFC2616 14.43] |
type charstring ServerVal; |
// [20.35, 20.41; RFC2616 14.43] |
type set of ServerVal ServerVal_List; |
// [20.38] |
type record TimeValue |
{ |
integer majorDigit, // represented as an integer |
integer minorDigit optional // represented as an integer |
} |
// [20.42] |
type record ViaBody |
{ |
SentProtocol sentProtocol, |
HostPort sentBy, |
SemicolonParam_List viaParams optional |
} |
// [20.42] |
type record of ViaBody ViaBody_List; |
// [20.43] |
type union WarnAgent |
{ |
HostPort hostPort, |
charstring pseudonym |
} |
// [20.43] |
type record WarningValue |
{ |
integer warnCode, // represented as an integer |
WarnAgent warnAgent, |
charstring warnText |
} |
// [20.43] |
type set of WarningValue WarningValue_List; |
// [20.13; RFC2616 14.12 ] |
type set of LanguageTag LanguageTag_List; |
type Addr_Union PAssertedIDValue; |
type record of PAssertedIDValue PAssertedIDValue_List; |
// [20.5 ] |
type set of charstring Method_List; |
type charstring PAssertedServiceValue; |
type Addr_Union PPreferredIDValue; |
type record of PPreferredIDValue PPreferredIDValue_List; |
// [20.29, 20.32, 20.37, 20.40 ] |
type charstring OptionTag; |
type charstring PrivacyValue; |
type record of PrivacyValue PrivacyValue_List; |
// [20.29, 20.32, 20.37, 20.40 ] |
type set of OptionTag OptionTag_List; |
} // end group TokensType |
group HeaderFieldTypes // Header Fields |
{ |
group CommonHeaderFieldTypes |
{ |
// [20.1, RFC2616 14.1] |
type record Accept |
{ |
FieldName fieldName (ACCEPT_E), |
AcceptBody_List acceptArgs optional |
} |
// [20.2, RFC2616 14.3] |
type record AcceptEncoding |
{ |
FieldName fieldName (ACCEPT_ENCODING_E), |
ContentCoding_List contentCoding optional |
} |
// [20.3, RFC2616 14.4] |
type record AcceptLanguage |
{ |
FieldName fieldName (ACCEPT_LANGUAGE_E), |
LanguageBody_List languageBody optional |
} |
// [20.4] |
type record AlertInfo |
{ |
FieldName fieldName (ALERT_INFO_E), |
AlertInfoBody_List alertInfoBody optional |
} |
// [20.5] |
type record Allow |
{ |
FieldName fieldName (ALLOW_E), |
Method_List methods optional |
} |
// [20.6] |
type record AuthenticationInfo |
{ |
FieldName fieldName (AUTHENTICATION_INFO_E), |
CommaParam_List ainfo |
} |
// [20.7 RFC2617 3.2.2] |
type record Authorization |
{ |
FieldName fieldName (AUTHORIZATION_E), |
CredentialsList body // changed from Credentials to allow multiple Authorization headers |
} |
// [20.8] |
type record CallId |
{ |
FieldName fieldName (CALL_ID_E), |
CallidString callid |
} |
// [20.9] |
type record CallInfo |
{ |
FieldName fieldName (CALL_INFO_E), |
CallInfoBody_List callInfoBody optional |
} |
// [20.10] |
type record Contact |
{ |
FieldName fieldName (CONTACT_E), |
ContactBody contactBody |
} |
// [20.11] |
type record ContentDisposition |
{ |
FieldName fieldName (CONTENT_DISPOSITION_E), |
charstring dispositionType, |
SemicolonParam_List dispositionParams optional |
} |
// [20.12 RFC2616 14.11] |
type record ContentEncoding |
{ |
FieldName fieldName (CONTENT_ENCODING_E), |
ContentCoding_List contentCoding |
} |
// [20.13 RFC2616 14.12] |
type record ContentLanguage |
{ |
FieldName fieldName (CONTENT_LANGUAGE_E), |
LanguageTag_List languageTag |
} |
// [20.14] |
type record ContentLength |
{ |
FieldName fieldName (CONTENT_LENGTH_E), |
integer len // this field is represented as an integer |
} |
// [20.15] |
type record ContentType |
{ |
FieldName fieldName (CONTENT_TYPE_E), |
charstring mediaType |
} |
// [20.16] |
type record CSeq |
{ |
FieldName fieldName (CSEQ_E), |
integer seqNumber, // this field is represented as an integer |
charstring method |
} |
// [20.17] |
type record Date |
{ |
FieldName fieldName (DATE_E), |
charstring sipDate |
} |
// [20.18] |
type record ErrorInfo |
{ |
FieldName fieldName (ERROR_INFO_E), |
ErrorInfoBody_List errorInfo optional |
} |
// [20.19] |
type record Expires |
{ |
FieldName fieldName (EXPIRES_E), |
DeltaSec deltaSec |
} |
// [20.20] |
type record From |
{ |
FieldName fieldName (FROM_E), |
Addr_Union addressField, |
SemicolonParam_List fromParams optional |
} |
// [20.21] |
type record InReplyTo |
{ |
FieldName fieldName (IN_REPLY_TO_E), |
CallidString_List callids |
} |
// [20.22] |
type record MaxForwards |
{ |
FieldName fieldName (MAX_FORWARDS_E), |
integer forwards // this field is represented as an integer |
} |
// [20.23] |
type record MinExpires |
{ |
FieldName fieldName (MIN_EXPIRES_E), |
DeltaSec deltaSec |
} |
// [20.24 RFC2616 19.4.1] |
type record MimeVersion |
{ |
FieldName fieldName (MIME_VERSION_E), |
integer majorNumber, // this field is represented as an integer |
integer minorNumber // this field is represented as an integer |
} |
// [20.25] |
type record Organization |
{ |
FieldName fieldName (ORGANIZATION_E), |
charstring organization |
} |
// [20.26] |
type record Priority |
{ |
FieldName fieldName (PRIORITY_E), |
charstring priorityValue |
} |
// [20.27 RFC2616 14.33 RFC2617 1.2] |
type record ProxyAuthenticate |
{ |
FieldName fieldName (PROXY_AUTHENTICATE_E), |
Challenge challenge |
} |
// [20.28 RFC2616 14.35 RFC2617 1.2] |
type record ProxyAuthorization |
{ |
FieldName fieldName (PROXY_AUTHORIZATION_E), |
CredentialsList credentials // changed from Credentials to allow multiple Authorization headers |
} |
// [20.29] |
type record ProxyRequire |
{ |
FieldName fieldName (PROXY_REQUIRE_E), |
OptionTag_List optionsTags |
} |
// [20.30] |
type record RecordRoute |
{ |
FieldName fieldName (RECORD_ROUTE_E), |
RouteBody_List routeBody |
} |
// [20.31] |
type record ReplyTo |
{ |
FieldName fieldName (REPLY_TO_E), |
Addr_Union addressField, |
SemicolonParam_List replyToParams optional |
} |
// [20.32] |
type record Require |
{ |
FieldName fieldName (REQUIRE_E), |
OptionTag_List optionsTags |
} |
// [20.33] |
type record RetryAfter |
{ |
FieldName fieldName (RETRY_AFTER_E), |
DeltaSec deltaSec, |
charstring comment optional, |
SemicolonParam_List retryParams optional |
} |
// [20.34] |
type record Route |
{ |
FieldName fieldName (ROUTE_E), |
RouteBody_List routeBody |
} |
// [20.35 RFC2616 14.38] |
type record Server |
{ |
FieldName fieldName (SERVER_E), |
ServerVal_List serverBody |
} |
// [20.36] |
type record Subject |
{ |
FieldName fieldName (SUBJECT_E), |
charstring summary |
} |
// [20.37] |
type record Supported |
{ |
FieldName fieldName (SUPPORTED_E), |
OptionTag_List optionsTags optional |
} |
// [20.38] |
type record Timestamp |
{ |
FieldName fieldName (TIMESTAMP_E), |
TimeValue timeValue optional, |
TimeValue delay optional |
} |
// [20.39] |
type record To |
{ |
FieldName fieldName (TO_E), |
Addr_Union addressField, |
SemicolonParam_List toParams optional |
} |
// [20.40] |
type record Unsupported |
{ |
FieldName fieldName (UNSUPPORTED_E), |
OptionTag_List optionsTags |
} |
// Undefined header field |
type record UndefinedHeader |
{ |
charstring headerName, |
charstring headerValue |
} |
type set of UndefinedHeader UndefinedHeader_List; |
// [20.41 RFC2616 14.43] |
type record UserAgent |
{ |
FieldName fieldName (USER_AGENT_E), |
ServerVal_List userAgentBody |
} |
// [20.42] |
type record Via |
{ |
FieldName fieldName (VIA_E), |
ViaBody_List viaBody |
} |
// [20.43] |
type record Warning |
{ |
FieldName fieldName (WARNING_E), |
WarningValue_List warningValue |
} |
// [20.44 RFC2616 14.47 RFC2617 1.2] |
type record WwwAuthenticate |
{ |
FieldName fieldName (WWW_AUTHENTICATE_E), |
Challenge challenge |
} |
}//end group CommonHeaderFieldTypes |
group RFC3262HeaderFieldTypes |
{ |
// [3262/7.1] |
type record RSeq { |
FieldName fieldName(RSEQ_E), |
integer responseNum |
} |
// [3262/7.2] |
type record RAck { |
FieldName fieldName(RACK_E), |
integer responseNum, |
integer seqNumber, |
charstring method |
} |
}//end group RFC3262HeaderFieldTypes |
// [20.7, 20.27, 20.28, 20.44 ; RFC2616 14.33, 14.47; RFC2617 1.2 ] |
type record OtherAuth { |
charstring authScheme, |
CommaParam_List authParams |
} |
group RFC3265HeaderFieldTypes |
{ |
// [3265/7.2] |
type record AllowEvents { |
FieldName fieldName(ALLOW_EVENTS_E), |
EventType_List eventTypes |
} |
type record Payload { |
integer payloadlength, |
charstring payloadvalue |
} |
type set of EventType EventType_List; |
type charstring EventType; |
// [20.30,20.34 ] |
type record RouteBody { |
NameAddr nameAddr, |
SemicolonParam_List rrParam optional |
} |
// [3265/7.2] |
type record Event { |
FieldName fieldName(EVENT_E), |
EventType eventType, |
SemicolonParam_List eventParams optional |
} |
// [20.30,20.34 ] |
type record of RouteBody RouteBody_List; |
// [3265/7.2] |
type record SubscriptionState { |
FieldName fieldName(SUBSCRIPTION_STATE_E), |
SubState subState, |
SemicolonParam_List substateParams optional |
} |
// [20.42 ] |
type record SentProtocol { |
charstring protocolName, |
charstring protocolVersion, |
charstring transport |
} |
type charstring SubState; |
}//end group RFC3265HeaderFieldTypes |
// [20.35, 20.41; RFC2616 14.43 ] |
type charstring ServerVal; |
group RFC3313HeaderFieldTypes |
{ |
// [3313/5] |
type record PMediaAuthorization { |
FieldName fieldName(P_MEDIA_AUTHORIZATION_E), |
PMediaAuthorization_List pMediaAuthorizations |
} |
// [20.35, 20.41; RFC2616 14.43 ] |
type set of ServerVal ServerVal_List; |
type charstring PMediaAuthValue; //HEXDIG "0"-"9", "A"-"F" |
// [20.38 ] |
type record TimeValue { |
integer majorDigit, |
// represented as an integer |
integer minorDigit |
optional // represented as an integer |
} |
type record of PMediaAuthValue PMediaAuthorization_List; |
// [20.42 ] |
type record ViaBody { |
SentProtocol sentProtocol, |
HostPort sentBy, |
SemicolonParam_List viaParams optional |
} |
}//end group RFC3265HeaderFieldTypes |
// [20.42 ] |
type record of ViaBody ViaBody_List; |
group RFC3323HeaderFieldTypes |
{ |
// [3323] |
type record Privacy { |
FieldName fieldName(PRIVACY_E), |
PrivacyValue_List privValueList |
} |
}//end group RFC3323HeaderFieldTypes |
// [20.43 ] |
type union WarnAgent { |
HostPort hostPort, |
charstring pseudonym |
} |
group RFC3325HeaderFieldTypes |
{ |
// [3325] |
type record PAssertedID { |
FieldName fieldName(P_ASSERTED_ID_E), |
PAssertedIDValue_List pAssertedIDValueList |
} |
// [20.43 ] |
type record WarningValue { |
integer warnCode, |
// represented as an integer |
WarnAgent warnAgent, |
charstring warnText |
} |
// [3325] |
type record PPreferredID { |
FieldName fieldName(P_PREFERRED_ID_E), |
PPreferredIDValue_List pPreferredIDValueList |
} |
// draft-drage-sipping-service-identification-01 (July 2007) |
type record PPreferredService { |
FieldName fieldName (P_PREFERRED_SERVICE_E), |
charstring serviceId |
} |
// [20.43 ] |
type set of WarningValue WarningValue_List; |
}//end group RFC3325HeaderFieldTypes |
type Addr_Union PAssertedIDValue; |
group RFC3326HeaderFieldTypes |
{ |
//[3326] |
type record of ReasonValue ReasonValues; |
type record of PAssertedIDValue PAssertedIDValue_List; |
type record ReasonValue { |
charstring token, |
SemicolonParam_List reasonParams optional |
} |
type charstring PAssertedServiceValue; |
type record Reason { |
FieldName fieldName(REASON_E), |
ReasonValues reasonValues |
} |
}//end group RFC3326HeaderFieldTypes |
type Addr_Union PPreferredIDValue; |
group RFC3327HeaderFieldTypes |
{ |
// [3327] |
type record Path { |
FieldName fieldName(PATH_E), |
PathValues pathValues |
} |
type record of PPreferredIDValue PPreferredIDValue_List; |
type record of PathValue PathValues; |
type charstring PrivacyValue; |
type record PathValue { |
NameAddr nameAddr, |
SemicolonParam_List rrParam optional |
} |
}//end group RFC3515HeaderFieldTypes |
type record of PrivacyValue PrivacyValue_List; |
type set of FcValue FcValue_List; |
type record FcValue { |
charstring wildcard(c_WILDCARD), |
SemicolonParam_List fcParams optional |
} |
group RFC4488HeaderFieldTypes |
{ |
// [4488] |
type record ReferSub { |
FieldName fieldName(REFER_SUB_E), |
boolean referSubValue, |
SemicolonParam_List referSubParams optional |
} |
}//end group RFC4488HeaderFieldTypes |
group RFC3329HeaderFieldTypes |
{ |
// [RFC3329/2.2] |
type record SecurityMechanism { |
charstring mechName, |
SemicolonParam_List mechParams optional |
} |
} // end group TokensType |
type set of SecurityMechanism SecurityMechanism_List; |
type record SecurityClient { |
FieldName fieldName(SECURITY_CLIENT_E), |
SecurityMechanism_List securityMech |
} |
group HeaderFieldTypes // Header Fields |
{ |
group CommonHeaderFieldTypes { |
// [20.1, RFC2616 14.1 ] |
type record Accept { |
FieldName fieldName (ACCEPT_E) , |
AcceptBody_List acceptArgs optional |
} |
type record SecurityServer { |
FieldName fieldName(SECURITY_SERVER_E), |
SecurityMechanism_List securityMech |
} |
// [20.2, RFC2616 14.3 ] |
type record AcceptEncoding { |
FieldName fieldName (ACCEPT_ENCODING_E) , |
ContentCoding_List contentCoding optional |
} |
type record SecurityVerify { |
FieldName fieldName(SECURITY_VERIFY_E), |
SecurityMechanism_List securityMech |
} |
}//end group RFC3329HeaderFieldTypes |
// [20.3, RFC2616 14.4 ] |
type record AcceptLanguage { |
FieldName fieldName (ACCEPT_LANGUAGE_E) , |
LanguageBody_List languageBody optional |
} |
group RFC3455HeaderFieldTypes |
{ |
type record of NameAddrParam NameAddrParam_List; |
// [20.4 ] |
type record AlertInfo { |
FieldName fieldName (ALERT_INFO_E) , |
AlertInfoBody_List alertInfoBody optional |
} |
type record NameAddrParam { |
NameAddr nameAddr, |
SemicolonParam_List genericParams optional |
} |
//[3455/5.1] |
type record PAssociatedURI { |
FieldName fieldName(P_ASSOCIATED_URI_E), |
NameAddrParam_List nameAddrList |
} |
//[3455/5.2] |
type record PCalledPartyID { |
FieldName fieldName(P_CALLED_PARTY_E), |
NameAddrParam nameAddParams |
} |
// [20.5 ] |
type record Allow { |
FieldName fieldName (ALLOW_E) , |
Method_List methods optional |
} |
type record of VnetworkSpec VnetworkSpec_List; |
// [20.6 ] |
type record AuthenticationInfo { |
FieldName fieldName (AUTHENTICATION_INFO_E) , |
CommaParam_List ainfo |
} |
type record VnetworkSpec { |
charstring vNetworkSpecToken, |
SemicolonParam_List genericParams optional |
} |
// [20.7 RFC2617 3.2.2 ] |
type record Authorization { |
FieldName fieldName (AUTHORIZATION_E) , |
CredentialsList |
body // changed from Credentials to allow multiple Authorization headers |
} |
//[3455/5.3] |
type record PVisitedNetworkID { |
FieldName fieldName(P_VISITED_NETWORK_E), |
VnetworkSpec_List vNetWorkSpec |
} |
// [20.8 ] |
type record CallId { |
FieldName fieldName (CALL_ID_E) , |
CallidString callid |
} |
//[3455/5.4] |
type record PAccessNetworkInfo { |
FieldName fieldName(P_ACCESS_NETWORK_INFO_E), |
charstring accessType, |
SemicolonParam_List genericParams optional |
} |
// [20.9 ] |
type record CallInfo { |
FieldName fieldName (CALL_INFO_E) , |
CallInfoBody_List callInfoBody optional |
} |
//[3455/5.5] |
type record PChargingFunctionAddresses { |
FieldName fieldName(P_CHARGING_FUNCTION_ADDRESSES_E), |
SemicolonParam_List chargeAddrParams optional |
} |
// [20.10 ] |
type record Contact { |
FieldName fieldName (CONTACT_E) , |
ContactBody contactBody |
} |
//[3455/5.6] |
type record PChargingVector { |
FieldName fieldName(P_CHARGING_VECTOR_E), |
SemicolonParam_List chargeParams optional |
} |
}//end group RFC33455HeaderFieldTypes |
// [20.11 ] |
type record ContentDisposition { |
FieldName fieldName (CONTENT_DISPOSITION_E) , |
charstring dispositionType, |
SemicolonParam_List dispositionParams optional |
} |
group RFC3515HeaderFieldTypes |
{ |
// [3515] |
type record ReferTo { |
FieldName fieldName(REFER_TO_E), |
NameAddr nameAddr, |
SemicolonParam_List referToParams optional |
} |
}//end group RFC3515HeaderFieldTypes |
// [20.12 RFC2616 14.11 ] |
type record ContentEncoding { |
FieldName fieldName (CONTENT_ENCODING_E) , |
ContentCoding_List contentCoding |
} |
group RFC3608HeaderFieldTypes |
{ |
// [3608] |
type record ServiceRoute { |
FieldName fieldName(SERVICE_ROUTE_E), |
RouteBody_List routeBody |
} |
}//end group RFC33608HeaderFieldTypes |
// [20.13 RFC2616 14.12 ] |
type record ContentLanguage { |
FieldName fieldName (CONTENT_LANGUAGE_E) , |
LanguageTag_List languageTag |
} |
// [20.14 ] |
type record ContentLength { |
FieldName fieldName (CONTENT_LENGTH_E) , |
integer |
len // this field is represented as an integer |
} |
group RFC3841HeaderFieldTypes |
{ |
// [3841] |
type record AcceptContact { |
FieldName fieldName(ACCEPT_CONTACT_E), |
AcRcValue_List acValues |
} |
// [20.15 ] |
type record ContentType { |
FieldName fieldName (CONTENT_TYPE_E) , |
charstring mediaType |
} |
type set of AcRcValue AcRcValue_List; |
// [20.16 ] |
type record CSeq { |
FieldName fieldName (CSEQ_E) , |
integer seqNumber, |
// this field is represented as an integer |
charstring method |
} |
type record AcRcValue { |
charstring wildcard(c_WILDCARD), |
SemicolonParam_List acRcParams optional |
} |
// [RFC 3841] |
type charstring Directive; |
type set of Directive Directive_List; |
type record RequestDisposition { |
FieldName fieldName (REQUEST_DISPOSITION_E), |
Directive_List directives |
} |
// [20.17 ] |
type record Date { |
FieldName fieldName (DATE_E) , |
charstring sipDate |
} |
}// end group RFC3841HeaderFieldTypes |
// [20.18 ] |
type record ErrorInfo { |
FieldName fieldName (ERROR_INFO_E) , |
ErrorInfoBody_List errorInfo optional |
} |
group RFC3891HeaderFieldTypes |
{ |
// [3891] |
type record Replaces |
{ |
FieldName fieldName (REPLACES_E), |
SemicolonParam_List replacesParams |
} |
}// end group RFC3891HeaderFieldTypes |
group RFC3892HeaderFieldTypes |
{ |
// [3892] |
type record ReferredBy { |
FieldName fieldName(REFERRED_BY_E), |
NameAddr nameAddr, |
SemicolonParam_List referredbyIdParams optional |
} |
}//end group RFC3892HeaderFieldTypes |
// [20.19 ] |
type record Expires { |
FieldName fieldName (EXPIRES_E) , |
DeltaSec deltaSec |
} |
group RFC4028HeaderFieldTypes |
{ |
// [4028] |
type record MinSE { |
FieldName fieldName(MIN_SE_E), |
DeltaSec deltaSec, |
SemicolonParam_List minSeParam optional |
} |
// [4028] |
type record SessionExpires { |
FieldName fieldName(SESSION_EXPIRES_E), |
DeltaSec deltaSec, |
SemicolonParam_List seParam optional |
} |
}//end group RFC4028HeaderFieldTypes |
//[6809] |
type record FeatureCaps { |
FieldName fieldName(FEATURE_CAPS_E), |
FcValue_List fcValues |
} |
group RFC4244HeaderFieldTypes |
{ |
// [4244] |
type record HistoryInfo { |
FieldName fieldName(HISTORY_INFO_E), |
HistoryInfo_List historyInfoList |
} |
// [20.20 ] |
type record From { |
FieldName fieldName (FROM_E) , |
Addr_Union addressField, |
SemicolonParam_List fromParams optional |
} |
type record of HistoryInfoEntry HistoryInfo_List; |
// [20.21 ] |
type record InReplyTo { |
FieldName fieldName (IN_REPLY_TO_E) , |
CallidString_List callids |
} |
// [20.22 ] |
type record MaxForwards { |
FieldName fieldName (MAX_FORWARDS_E) , |
integer |
forwards // this field is represented as an integer |
} |
type record of charstring StringList; |
// [20.23 ] |
type record MinExpires { |
FieldName fieldName (MIN_EXPIRES_E) , |
DeltaSec deltaSec |
} |
type record HistoryInfoEntry { |
NameAddr nameAddr, |
StringList hiIndex optional, |
SemicolonParam_List hiExtention optional |
} |
}//end group RFC4244HeaderFieldTypes |
// [20.24 RFC2616 19.4.1 ] |
type record MimeVersion { |
FieldName fieldName (MIME_VERSION_E) , |
integer majorNumber, |
// this field is represented as an integer |
integer |
minorNumber // this field is represented as an integer |
} |
group RFC5009PEarlyMediaHeader |
{ |
// [5009] |
type record PEarlyMedia { |
FieldName fieldName(P_EARLY_MEDIA_E), |
EM_List em_param |
} |
type record of charstring EM_List; |
}//end group RFC5009PEarlyMediaHeader |
// [20.25 ] |
type record Organization { |
FieldName fieldName (ORGANIZATION_E) , |
charstring organization |
} |
//http://tools.ietf.org/html/draft-johnston-sipping-cc-uui-07, expires 16.Aug.2009 |
//Transporting User to User Call Control Information in SIP for ISDN Interworking |
//type definition of SIP header mechanism |
group UserToUser_PreliminaryRFCDraft |
{ |
type record UserToUser{ |
FieldName fieldName (USER_TO_USER_E), |
charstring uuiData length(256), /*length limitation due to ISDN, max of allowed 128 hex digits are represented by 256 characters*/ |
GenericParam uuiParam |
} |
// [20.26 ] |
type record Priority { |
FieldName fieldName (PRIORITY_E) , |
charstring priorityValue |
} |
}//end group UserToUser_PreliminaryRFCDraft |
// [20.27 RFC2616 14.33 RFC2617 1.2 ] |
type record ProxyAuthenticate { |
FieldName fieldName (PROXY_AUTHENTICATE_E) , |
Challenge challenge |
} |
type record PAssertedService { |
FieldName fieldName(P_ASSERTED_SERVICE_E), |
PAssertedServiceValue pAssertedServiceValue |
} |
// [20.28 RFC2616 14.35 RFC2617 1.2 ] |
type record ProxyAuthorization { |
FieldName fieldName (PROXY_AUTHORIZATION_E) , |
CredentialsList |
credentials // changed from Credentials to allow multiple Authorization headers |
} |
group RFC6442GeolocationConveyance |
{ /* @sic R5-133151 update of header fields sic@ */ |
// [6442] |
type record Geolocation { // RFC6442 clause 4.1 |
FieldName fieldName(GEOLOCATION_E), |
SipUrl addrSpec, |
SemicolonParam_List geolocParam optional |
} |
type enumerated GeolocationRoutingState |
{GEOLOCATION_ROUTING_YES_E, |
GEOLOCATION_ROUTING_NO_E, |
GEOLOCATION_ROUTING_OTHER_E |
}; |
type record GeolocationRouting { // RFC6442 clause 4.2 |
FieldName fieldName(GEOLOCATION_ROUTING_E), |
GeolocationRoutingState state, |
GenericParam genericValue optional |
} |
}//end group RFC6442GeolocationConveyance |
// [20.29 ] |
type record ProxyRequire { |
FieldName fieldName (PROXY_REQUIRE_E) , |
OptionTag_List optionsTags |
} |
type charstring SessIdString length(32); |
// [20.30 ] |
type record RecordRoute { |
FieldName fieldName (RECORD_ROUTE_E) , |
RouteBody_List routeBody |
} |
type record SessionId { |
FieldName fieldName (SESSION_ID_E), |
SessIdString sessid, |
GenericParam sessidParam optional |
} |
// [20.31 ] |
type record ReplyTo { |
FieldName fieldName (REPLY_TO_E) , |
Addr_Union addressField, |
SemicolonParam_List replyToParams optional |
} |
type charstring EntityTag; |
// [20.32 ] |
type record Require { |
FieldName fieldName (REQUIRE_E) , |
OptionTag_List optionsTags |
} |
type record SIP_ETag { |
FieldName fieldName (SIP_ETAG_E), |
EntityTag entityTag |
} |
// [20.33 ] |
type record RetryAfter { |
FieldName fieldName (RETRY_AFTER_E) , |
DeltaSec deltaSec, |
charstring comment optional, |
SemicolonParam_List retryParams optional |
} |
type record SIP_If_Match { |
FieldName fieldName (SIP_IF_MATCH_E), |
EntityTag entityTag |
} |
// [20.34 ] |
type record Route { |
FieldName fieldName (ROUTE_E) , |
RouteBody_List routeBody |
} |
} // end group HeaderFieldTypes |
group MessageHeaderTypes |
{ |
// Message-Header for all SIP requests and responses [20] |
type set MessageHeader |
{ |
Accept accept optional, |
AcceptContact acceptContact optional, |
AcceptEncoding acceptEncoding optional, |
AcceptLanguage acceptLanguage optional, |
AlertInfo alertInfo optional, |
Allow allow optional, |
AllowEvents allowEvents optional, // 3265/7.2 |
AuthenticationInfo authenticationInfo optional, // only in responses |
Authorization authorization optional, // only in requests |
CallId callId optional, // optional only in Invalid test cases mandatory otherwise |
CallInfo callInfo optional, |
Contact contact optional, // optional in response and all requests except INVITE where mandatory |
ContentDisposition contentDisposition optional, |
ContentEncoding contentEncoding optional, |
ContentLanguage contentLanguage optional, |
ContentLength contentLength optional, // optional in responses and all requests except ACK where mandatory |
ContentType contentType optional, |
CSeq cSeq optional, // optional only in Invalid test cases mandatory otherwise |
Date date optional, |
ErrorInfo errorInfo optional, // only in responses |
Event event optional, // 3265/7.2 |
Expires expires optional, |
From fromField, |
Geolocation geolocation optional, // 6442 |
GeolocationRouting geolocationRouting optional, // 6442 @sic R5-133151 update of header fields sic@ |
HistoryInfo historyInfo optional, // 4244 |
InReplyTo inReplyTo optional, // only in requests |
MaxForwards maxForwards optional, // mandatory in requests not required in responses! |
MimeVersion mimeVersion optional, |
MinExpires minExpires optional, // only in responses |
MinSE minSE optional, // 4028 |
Organization organization optional, |
PAccessNetworkInfo pAccessNetworkInfo optional, // 3455 |
PAssertedID pAssertedID optional, // 3325 |
PAssertedService pAssertedService optional, |
PAssociatedURI pAssociatedURI optional, // 3455 |
Path path optional, // 3327 |
PCalledPartyID pCalledPartyID optional, // 3455 |
PChargingFunctionAddresses pChargingFunctionAddresses optional, // 3455 |
PChargingVector pChargingVector optional, // 3455 |
PEarlyMedia pEarlyMedia optional, // 5009 |
PMediaAuthorization pMediaAuthorization optional, // 3313 |
PPreferredID pPreferredID optional, // 3325 |
PPreferredService pPreferredService optional, // draft-drage-sipping-service-identification-01 (July 2007) |
Priority priority optional, // only in requests |
Privacy privacy optional, // 3323 |
ProxyAuthenticate proxyAuthenticate optional, // only in responses |
ProxyAuthorization proxyAuthorization optional, // only in requests |
ProxyRequire proxyRequire optional, // only in requests |
PVisitedNetworkID pVisitedNetworkID optional, // 3455 |
RAck rAck optional, // 3262/7.1 |
RSeq rSeq optional, // 3262/7.1 |
Reason reason optional, // 3326 |
RecordRoute recordRoute optional, |
RequestDisposition requestDisposition optional, // 3841 |
ReferredBy referredBy optional, // 3892 - REFER method |
ReferTo referTo optional, // 3515 - REFER method |
ReferSub referSub optional, // 4488 - REFER method |
Replaces replaces optional, // 3891 |
ReplyTo replyTo optional, // optional in responses and INVITE requests |
Require require optional, |
RetryAfter retryAfter optional, // only in responses |
Route route optional, // only in requests |
SecurityClient securityClient optional, // 3329 |
SecurityServer securityServer optional, // 3329 |
SecurityVerify securityVerify optional, // 3329 |
Server server optional, // only in responses |
ServiceRoute serviceRoute optional, // 3608 |
SessionExpires sessionExpires optional, // 4028 |
SessionId sessionId optional, |
SIP_ETag sipETag optional, |
SIP_If_Match sipIfMatch optional, |
Subject subject optional, // only in requests |
SubscriptionState subscriptionState optional, // 3265/7.2 |
Supported supported optional, |
Timestamp timestamp optional, |
To toField, |
Unsupported unsupported optional, // only in responses |
UserToUser userToUser optional, |
UserAgent userAgent optional, |
Via via, |
Warning warning optional, // only in responses |
WwwAuthenticate wwwAuthenticate optional, // only in responses |
UndefinedHeader_List undefinedHeader_List optional |
} |
} // end group MessageHeaderTypes |
group StartLineTypes |
{ |
// Request-Line [7.1] |
type record RequestLine |
{ |
Method method, |
SipUrl requestUri, |
charstring sipVersion |
} |
// Status-Line [7.2] |
type record StatusLine |
{ |
charstring sipVersion, |
integer statusCode, |
charstring reasonPhrase |
} |
} // end group StartLineTypes |
group otherTypes{ |
type record SipUserProfile |
{ |
/** @desc integer for the userprofile identifier |
*/ |
integer id, |
// [20.35 RFC2616 14.38 ] |
type record Server { |
FieldName fieldName (SERVER_E) , |
ServerVal_List serverBody |
} |
/** @desc integer for Port number to exchange SIP messages |
*/ |
integer currPort, |
// [20.36 ] |
type record Subject { |
FieldName fieldName (SUBJECT_E) , |
charstring summary |
} |
/** @desc charstring for IP address to exchange SIP messages |
*/ |
charstring currIpaddr, |
// [20.37 ] |
type record Supported { |
FieldName fieldName (SUPPORTED_E) , |
OptionTag_List optionsTags optional |
} |
/** @desc integer for Port number to exchange SIP messages |
*/ |
integer contactPort, |
// [20.38 ] |
type record Timestamp { |
FieldName fieldName (TIMESTAMP_E) , |
TimeValue timeValue optional, |
TimeValue delay optional |
} |
/** @desc charstring for IP address to exchange SIP messages |
*/ |
charstring contactIpaddr, |
// [20.39 ] |
type record To { |
FieldName fieldName (TO_E) , |
Addr_Union addressField, |
SemicolonParam_List toParams optional |
} |
/** @desc charstring for IP address used by the TS to exchange media streams |
*/ |
charstring bearerIpaddr, |
// [20.40 ] |
type record Unsupported { |
FieldName fieldName (UNSUPPORTED_E) , |
OptionTag_List optionsTags |
} |
/** @desc charstring for identity of the tester local domain |
*/ |
charstring homeDomain, |
// Undefined header field |
type record UndefinedHeader { |
charstring headerName, |
charstring headerValue |
} |
/** @desc charstring for identity of the tester local user |
*/ |
charstring publUsername, |
type set of UndefinedHeader UndefinedHeader_List; |
/** @desc charstring for RFC 2617 3.2.1 qop options: |
* Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The |
* value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. |
*/ |
charstring qop, |
// [20.41 RFC2616 14.43 ] |
type record UserAgent { |
FieldName fieldName (USER_AGENT_E) , |
ServerVal_List userAgentBody |
} |
/** @desc charstring for RFC 2617 3.2.2 username for authentication |
* The name of user in the specified realm |
*/ |
charstring privUsername, |
// [20.42 ] |
type record Via { |
FieldName fieldName (VIA_E) , |
ViaBody_List viaBody |
} |
/** @desc charstring for RFC 2617 3.2.2.2 passwd: A known shared secret, the password of user of the specified username |
*/ |
charstring passwd, |
// [20.43 ] |
type record Warning { |
FieldName fieldName (WARNING_E) , |
WarningValue_List warningValue |
} |
/** @desc charstring for registrar domain for authentication and request line |
*/ |
charstring registrarDomain |
// [20.44 RFC2616 14.47 RFC2617 1.2 ] |
type record WwwAuthenticate { |
FieldName fieldName (WWW_AUTHENTICATE_E) , |
Challenge challenge |
} |
} |
} // end group otherTypes |
}// end group Subtypes |
} // end group CommonHeaderFieldTypes |
group RFC3262HeaderFieldTypes { |
// [3262/7.1 ] |
type record RSeq { |
FieldName fieldName (RSEQ_E) , |
integer responseNum |
} |
// [3262/7.2 ] |
type record RAck { |
FieldName fieldName (RACK_E) , |
integer responseNum, |
integer seqNumber, |
charstring method |
} |
group MSGtypes{ |
group RequestTypes |
{ |
// [7.1] |
} // end group RFC3262HeaderFieldTypes |
/** |
* |
* @desc generic type of a SIP request message |
* @member statusLine contains a method name, a Request-URI, and the protocol version |
* @member msgHeader include all possible header fields that are allowed to be present according to RFCs and other standards |
* @member messageBody depends on the request method, includes e.g. SDP message. |
* @member payload contains the whole message as it has been received in its text format |
*/ |
type record Request |
{ |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec"} |
// Note: the introduction of the following specific types is to enable better means for logging |
// on the other side the generic type is useful for functions dealing with multiple SIP message types |
type record REGISTER_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec"} |
group RFC3265HeaderFieldTypes { |
// [3265/7.2 ] |
type record AllowEvents { |
FieldName fieldName (ALLOW_EVENTS_E) , |
EventType_List eventTypes |
} |
type record INVITE_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec"} |
type set of EventType EventType_List; |
type charstring EventType; |
type record OPTIONS_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec"} |
// [3265/7.2 ] |
type record Event { |
FieldName fieldName (EVENT_E) , |
EventType eventType, |
SemicolonParam_List eventParams optional |
} |
type record BYE_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec"} |
// [3265/7.2 ] |
type record SubscriptionState { |
FieldName fieldName (SUBSCRIPTION_STATE_E) , |
SubState subState, |
SemicolonParam_List substateParams optional |
} |
type record CANCEL_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec"} |
type charstring SubState; |
type record ACK_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec" } |
} // end group RFC3265HeaderFieldTypes |
// [3262/7.1] |
type record PRACK_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec" } |
group RFC3313HeaderFieldTypes { |
// [3313/5 ] |
type record PMediaAuthorization { |
FieldName fieldName (P_MEDIA_AUTHORIZATION_E) , |
PMediaAuthorization_List pMediaAuthorizations |
} |
// [3265/7.1] |
type record NOTIFY_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec" } |
type charstring PMediaAuthValue; |
// HEXDIG "0"-"9", "A"-"F" |
type record of PMediaAuthValue PMediaAuthorization_List; |
// [3265/7.1] |
type record SUBSCRIBE_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec"} |
// [3903/11.1] |
type record PUBLISH_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec" } |
} // end group RFC3265HeaderFieldTypes |
// [3311/7] |
type record UPDATE_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec" } |
group RFC3323HeaderFieldTypes { |
// [3323 ] |
type record Privacy { |
FieldName fieldName (PRIVACY_E) , |
PrivacyValue_List privValueList |
} |
// |
type record REFER_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec"} |
} // end group RFC3323HeaderFieldTypes |
// |
type record MESSAGE_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec" } |
group RFC3325HeaderFieldTypes { |
// [3325 ] |
type record PAssertedID { |
FieldName fieldName (P_ASSERTED_ID_E) , |
PAssertedIDValue_List pAssertedIDValueList |
} |
// |
type record INFO_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec"} |
// [3325 ] |
type record PPreferredID { |
FieldName fieldName (P_PREFERRED_ID_E) , |
PPreferredIDValue_List pPreferredIDValueList |
} |
// draft-drage-sipping-service-identification-01 (July 2007) |
type record PPreferredService { |
FieldName fieldName (P_PREFERRED_SERVICE_E) , |
charstring serviceId |
} |
type union RequestUnion { |
REGISTER_Request Register, |
INVITE_Request Invite, |
OPTIONS_Request Options, |
BYE_Request Bye, |
CANCEL_Request Cancel, |
ACK_Request Ack, |
PRACK_Request Prack, |
NOTIFY_Request Notify, |
SUBSCRIBE_Request Subscribe, |
PUBLISH_Request Publish, |
UPDATE_Request Update, |
REFER_Request Refer, |
MESSAGE_Request Message |
} with { encode "SIPCodec"} |
} //with { encode "SIPCodec" }// end group RequestTypes |
group ResponseTypes |
{ |
// [7.2] |
} // end group RFC3325HeaderFieldTypes |
/** |
* |
* @desc generic type of a SIP response message |
* @member statusLine consists of the protocol version followed by a numeric Status-Code and its associated textual phrase |
* @member msgHeader include all possible header fields that are allowed to be present according to RFCs and other standards |
* @member messageBody depends on the response method, includes e.g. SDP message. |
* @member payload contains the whole message as it has been received in its text format |
*/ |
type record Response |
{ |
StatusLine statusLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} with { encode "SIPCodec"} |
group RFC3326HeaderFieldTypes { |
// [3326 ] |
type record of ReasonValue ReasonValues; |
} //with { encode "SIPCodec" }// end group ResponseTypes |
// This MSG type is defined for sending synctactic variations, ans syntactically |
// erroneous messages, and receving messages failed parsing. |
group SyntacticTypes |
{ |
type charstring Raw; |
} // end group SyntacticTypes |
// This type is defined for particular SIP message body types like SDP |
type record ReasonValue { |
charstring token, |
SemicolonParam_List reasonParams optional |
} |
}// end group MSGTypes |
}// end group Types |
type record Reason { |
FieldName fieldName (REASON_E) , |
ReasonValues reasonValues |
} |
} with {encode "LibSip V2"} // end module LibSip_TypesAndValues |
} // end group RFC3326HeaderFieldTypes |
group RFC3327HeaderFieldTypes { |
// [3327 ] |
type record Path { |
FieldName fieldName (PATH_E) , |
PathValues pathValues |
} |
type record of PathValue PathValues; |
type record PathValue { |
NameAddr nameAddr, |
SemicolonParam_List rrParam optional |
} |
} // end group RFC3515HeaderFieldTypes |
group RFC4488HeaderFieldTypes { |
// [4488 ] |
type record ReferSub { |
FieldName fieldName (REFER_SUB_E) , |
boolean referSubValue, |
SemicolonParam_List referSubParams optional |
} |
} // end group RFC4488HeaderFieldTypes |
group RFC3329HeaderFieldTypes { |
// [RFC3329/2.2 ] |
type record SecurityMechanism { |
charstring mechName, |
SemicolonParam_List mechParams optional |
} |
type set of SecurityMechanism SecurityMechanism_List; |
type record SecurityClient { |
FieldName fieldName (SECURITY_CLIENT_E) , |
SecurityMechanism_List securityMech |
} |
type record SecurityServer { |
FieldName fieldName (SECURITY_SERVER_E) , |
SecurityMechanism_List securityMech |
} |
type record SecurityVerify { |
FieldName fieldName (SECURITY_VERIFY_E) , |
SecurityMechanism_List securityMech |
} |
} // end group RFC3329HeaderFieldTypes |
group RFC3455HeaderFieldTypes { |
type record of NameAddrParam NameAddrParam_List; |
type record NameAddrParam { |
NameAddr nameAddr, |
SemicolonParam_List genericParams optional |
} |
// [3455/5.1 ] |
type record PAssociatedURI { |
FieldName fieldName (P_ASSOCIATED_URI_E) , |
NameAddrParam_List nameAddrList |
} |
// [3455/5.2 ] |
type record PCalledPartyID { |
FieldName fieldName (P_CALLED_PARTY_E) , |
NameAddrParam nameAddParams |
} |
type record of VnetworkSpec VnetworkSpec_List; |
type record VnetworkSpec { |
charstring vNetworkSpecToken, |
SemicolonParam_List genericParams optional |
} |
// [3455/5.3 ] |
type record PVisitedNetworkID { |
FieldName fieldName (P_VISITED_NETWORK_E) , |
VnetworkSpec_List vNetWorkSpec |
} |
// [3455/5.4 ] |
type record PAccessNetworkInfo { |
FieldName fieldName (P_ACCESS_NETWORK_INFO_E) , |
charstring accessType, |
SemicolonParam_List genericParams optional |
} |
// [3455/5.5 ] |
type record PChargingFunctionAddresses { |
FieldName fieldName (P_CHARGING_FUNCTION_ADDRESSES_E) , |
SemicolonParam_List chargeAddrParams optional |
} |
// [3455/5.6 ] |
type record PChargingVector { |
FieldName fieldName (P_CHARGING_VECTOR_E) , |
charstring icidValue, |
SemicolonParam_List chargeParams optional |
} |
} // end group RFC33455HeaderFieldTypes |
group RFC3515HeaderFieldTypes { |
// [3515 ] |
type record ReferTo { |
FieldName fieldName (REFER_TO_E) , |
NameAddr nameAddr, |
SemicolonParam_List referToParams optional |
} |
} // end group RFC3515HeaderFieldTypes |
group RFC3608HeaderFieldTypes { |
// [3608 ] |
type record ServiceRoute { |
FieldName fieldName (SERVICE_ROUTE_E) , |
RouteBody_List routeBody |
} |
} // end group RFC33608HeaderFieldTypes |
group RFC3841HeaderFieldTypes { |
// [3841 ] |
type record AcceptContact { |
FieldName fieldName (ACCEPT_CONTACT_E) , |
AcRcValue_List acValues |
} |
type set of AcRcValue AcRcValue_List; |
type record AcRcValue { |
charstring wildcard (c_WILDCARD) , |
SemicolonParam_List acRcParams optional |
} |
// [RFC 3841 ] |
type charstring Directive; |
type set of Directive Directive_List; |
type record RequestDisposition { |
FieldName fieldName (REQUEST_DISPOSITION_E) , |
Directive_List directives |
} |
} // end group RFC3841HeaderFieldTypes |
group RFC3891HeaderFieldTypes { |
// [3891 ] |
type record Replaces { |
FieldName fieldName (REPLACES_E) , |
CallidString callid, |
SemicolonParam_List replacesParams optional |
} |
} // end group RFC3891HeaderFieldTypes |
group RFC3892HeaderFieldTypes { |
// [3892 ] |
type record ReferredBy { |
FieldName fieldName (REFERRED_BY_E) , |
NameAddr nameAddr, |
SemicolonParam_List referredbyIdParams optional |
} |
} // end group RFC3892HeaderFieldTypes |
group RFC4028HeaderFieldTypes { |
// [4028 ] |
type record MinSE { |
FieldName fieldName (MIN_SE_E) , |
DeltaSec deltaSec, |
SemicolonParam_List minSeParam optional |
} |
// [4028 ] |
type record SessionExpires { |
FieldName fieldName (SESSION_EXPIRES_E) , |
DeltaSec deltaSec, |
SemicolonParam_List seParam optional |
} |
} // end group RFC4028HeaderFieldTypes |
group RFC4244HeaderFieldTypes { |
// [4244 ] |
type record HistoryInfo { |
FieldName fieldName (HISTORY_INFO_E) , |
HistoryInfo_List historyInfoList |
} |
type record of HistoryInfoEntry HistoryInfo_List; |
type record of integer IntegerList; |
type record HistoryInfoEntry { |
NameAddr nameAddr, |
IntegerList hiIndex optional, |
SemicolonParam_List hiExtention optional |
} |
type record of charstring StringList; |
} // end group RFC4244HeaderFieldTypes |
group RFC5009PEarlyMediaHeader { |
// [5009 ] |
type record PEarlyMedia { |
FieldName fieldName (P_EARLY_MEDIA_E) , |
EM_List em_param |
} |
type record of charstring EM_List; |
} // end group RFC5009PEarlyMediaHeader |
// http://tools.ietf.org/html/draft-johnston-sipping-cc-uui-07, expires 16.Aug.2009 |
// Transporting User to User Call Control Information in SIP for ISDN Interworking |
// type definition of SIP header mechanism |
group UserToUser_PreliminaryRFCDraft { |
type record UserToUser { |
FieldName fieldName (USER_TO_USER_E) , |
charstring uuiData length(256), |
/*length limitation due to ISDN, max of allowed 128 hex digits are represented by 256 characters*/ |
GenericParam uuiParam |
} |
} // end group UserToUser_PreliminaryRFCDraft |
type record PAssertedService { |
FieldName fieldName (P_ASSERTED_SERVICE_E) , |
PAssertedServiceValue pAssertedServiceValue |
} |
group RFC6442GeolocationConveyance { |
/* @sic R5-133151 update of header fields sic@ */ |
// [6442 ] |
type record Geolocation { |
// RFC6442 clause 4.1 |
FieldName fieldName (GEOLOCATION_E) , |
SipUrl addrSpec, |
SemicolonParam_List geolocParam optional |
} |
type enumerated GeolocationRoutingState { |
GEOLOCATION_ROUTING_YES_E, GEOLOCATION_ROUTING_NO_E, GEOLOCATION_ROUTING_OTHER_E |
} |
type record GeolocationRouting { |
// RFC6442 clause 4.2 |
FieldName fieldName (GEOLOCATION_ROUTING_E) , |
GeolocationRoutingState state, |
GenericParam genericValue optional |
} |
} // end group RFC6442GeolocationConveyance |
type charstring SessIdString length(32); |
type record SessionId { |
FieldName fieldName (SESSION_ID_E) , |
SessIdString sessid, |
GenericParam sessidParam optional |
} |
type charstring EntityTag; |
type record SIP_ETag { |
FieldName fieldName (SIP_ETAG_E) , |
EntityTag entityTag |
} |
type record SIP_If_Match { |
FieldName fieldName (SIP_IF_MATCH_E) , |
EntityTag entityTag |
} |
} // end group HeaderFieldTypes |
group MessageHeaderTypes { |
// Message-Header for all SIP requests and responses [20 ] |
type set MessageHeader { |
Accept accept optional, |
AcceptContact acceptContact optional, |
AcceptEncoding acceptEncoding optional, |
AcceptLanguage acceptLanguage optional, |
AlertInfo alertInfo optional, |
Allow allow optional, |
AllowEvents allowEvents optional, |
// 3265/7.2 |
AuthenticationInfo authenticationInfo optional, |
// only in responses |
Authorization authorization optional, |
// only in requests |
CallId callId optional, |
// optional only in Invalid test cases mandatory otherwise |
CallInfo callInfo optional, |
Contact contact optional, |
// optional in response and all requests except INVITE where mandatory |
ContentDisposition contentDisposition optional, |
ContentEncoding contentEncoding optional, |
ContentLanguage contentLanguage optional, |
ContentLength contentLength optional, |
// optional in responses and all requests except ACK where mandatory |
ContentType contentType optional, |
CSeq cSeq optional, |
// optional only in Invalid test cases mandatory otherwise |
Date date optional, |
ErrorInfo errorInfo optional, |
// only in responses |
Event event optional, |
// 3265/7.2 |
Expires expires optional, |
From fromField, |
Geolocation geolocation optional, |
// 6442 |
GeolocationRouting geolocationRouting optional, |
// 6442 |
// @sic R5-133151 update of header fields sic@ |
HistoryInfo historyInfo optional, |
// 4244 |
InReplyTo inReplyTo optional, |
// only in requests |
MaxForwards maxForwards optional, |
// mandatory in requests not required in responses! |
MimeVersion mimeVersion optional, |
MinExpires minExpires optional, |
// only in responses |
MinSE minSE optional, |
// 4028 |
Organization organization optional, |
PAccessNetworkInfo pAccessNetworkInfo optional, |
// 3455 |
PAssertedID pAssertedID optional, |
// 3325 |
PAssertedService pAssertedService optional, |
PAssociatedURI pAssociatedURI optional, |
// 3455 |
Path path optional, |
// 3327 |
PCalledPartyID pCalledPartyID optional, |
// 3455 |
PChargingFunctionAddresses pChargingFunctionAddresses optional, |
// 3455 |
PChargingVector pChargingVector optional, |
// 3455 |
PEarlyMedia pEarlyMedia optional, |
// 5009 |
PMediaAuthorization pMediaAuthorization optional, |
// 3313 |
PPreferredID pPreferredID optional, |
// 3325 |
PPreferredService pPreferredService optional, |
// draft-drage-sipping-service-identification-01 (July 2007) |
Priority priority optional, |
// only in requests |
Privacy privacy optional, |
// 3323 |
ProxyAuthenticate proxyAuthenticate optional, |
// only in responses |
ProxyAuthorization proxyAuthorization optional, |
// only in requests |
ProxyRequire proxyRequire optional, |
// only in requests |
PVisitedNetworkID pVisitedNetworkID optional, |
// 3455 |
RAck rAck optional, |
// 3262/7.1 |
RSeq rSeq optional, |
// 3262/7.1 |
Reason reason optional, |
// 3326 |
RecordRoute recordRoute optional, |
RequestDisposition requestDisposition optional, |
// 3841 |
ReferredBy referredBy optional, |
// 3892 - REFER method |
ReferTo referTo optional, |
// 3515 - REFER method |
ReferSub referSub optional, |
// 4488 - REFER method |
Replaces replaces optional, |
// 3891 |
ReplyTo replyTo optional, |
// optional in responses and INVITE requests |
Require require optional, |
RetryAfter retryAfter optional, |
// only in responses |
Route route optional, |
// only in requests |
SecurityClient securityClient optional, |
// 3329 |
SecurityServer securityServer optional, |
// 3329 |
SecurityVerify securityVerify optional, |
// 3329 |
Server server optional, |
// only in responses |
ServiceRoute serviceRoute optional, |
// 3608 |
SessionExpires sessionExpires optional, |
// 4028 |
SessionId sessionId optional, |
SIP_ETag sipETag optional, |
SIP_If_Match sipIfMatch optional, |
Subject subject optional, |
// only in requests |
SubscriptionState subscriptionState optional, |
// 3265/7.2 |
Supported supported optional, |
Timestamp timestamp optional, |
To toField, |
Unsupported unsupported optional, |
// only in responses |
UserToUser userToUser optional, |
UserAgent userAgent optional, |
Via via, |
Warning warning optional, |
// only in responses |
WwwAuthenticate wwwAuthenticate optional, |
// only in responses |
UndefinedHeader_List undefinedHeader_List optional |
} |
} // end group MessageHeaderTypes |
group StartLineTypes { |
// Request-Line [7.1 ] |
type record RequestLine { |
Method method, |
SipUrl requestUri, |
charstring sipVersion |
} |
// Status-Line [7.2 ] |
type record StatusLine { |
charstring sipVersion, |
integer statusCode, |
charstring reasonPhrase |
} |
} // end group StartLineTypes |
group otherTypes { |
type record SipUserProfile { |
/** |
* @desc integer for the userprofile identifier |
*/ |
integer id, |
/** |
* @desc integer for Port number to exchange SIP messages |
*/ |
integer currPort, |
/** |
* @desc charstring for IP address to exchange SIP messages |
*/ |
charstring currIpaddr, |
/** |
* @desc integer for Port number to exchange SIP messages |
*/ |
integer contactPort, |
/** |
* @desc charstring for IP address to exchange SIP messages |
*/ |
charstring contactIpaddr, |
/** |
* @desc charstring for IP address used by the TS to exchange media streams |
*/ |
charstring bearerIpaddr, |
/** |
* @desc charstring for identity of the tester local domain |
*/ |
charstring homeDomain, |
/** |
* @desc charstring for identity of the tester local user |
*/ |
charstring publUsername, |
/** |
* @desc charstring for RFC 2617 3.2.1 qop options: Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. |
*/ |
charstring qop, |
/** |
* @desc charstring for RFC 2617 3.2.2 username for authentication The name of user in the specified realm |
*/ |
charstring privUsername, |
/** |
* @desc charstring for RFC 2617 3.2.2.2 passwd: A known shared secret, the password of user of the specified username |
*/ |
charstring passwd, |
/** |
* @desc charstring for registrar domain for authentication and request line |
*/ |
charstring registrarDomain |
} |
} // end group otherTypes |
} // end group Subtypes |
group MSGtypes { |
group RequestTypes { |
// [7.1 ] |
/** |
* @desc generic type of a SIP request message |
* @member statusLine contains a method name, a Request-URI, and the protocol version |
* @member msgHeader include all possible header fields that are allowed to be present according to RFCs and other standards |
* @member messageBody depends on the request method, includes e.g. SDP message. |
* @member payload contains the whole message as it has been received in its text format |
*/ |
type record Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
// Note: the introduction of the following specific types is to enable better means for logging |
// on the other side the generic type is useful for functions dealing with multiple SIP message types |
type record REGISTER_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
type record INVITE_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
type record OPTIONS_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
type record BYE_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
type record CANCEL_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
type record ACK_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
// [3262/7.1 ] |
type record PRACK_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
// [3265/7.1 ] |
type record NOTIFY_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
// [3265/7.1 ] |
type record SUBSCRIBE_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
// [3903/11.1 ] |
type record PUBLISH_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
// [3311/7 ] |
type record UPDATE_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
type record REFER_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
type record MESSAGE_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
type record INFO_Request { |
RequestLine requestLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
type union RequestUnion { |
REGISTER_Request Register, |
INVITE_Request Invite, |
OPTIONS_Request Options, |
BYE_Request Bye, |
CANCEL_Request Cancel, |
ACK_Request Ack, |
PRACK_Request Prack, |
NOTIFY_Request Notify, |
SUBSCRIBE_Request Subscribe, |
PUBLISH_Request Publish, |
UPDATE_Request Update, |
REFER_Request Refer, |
MESSAGE_Request Message |
} |
} // end group RequestTypes |
group ResponseTypes { |
// [7.2 ] |
/** |
* @desc generic type of a SIP response message |
* @member statusLine consists of the protocol version followed by a numeric Status-Code and its associated textual phrase |
* @member msgHeader include all possible header fields that are allowed to be present according to RFCs and other standards |
* @member messageBody depends on the response method, includes e.g. SDP message. |
* @member payload contains the whole message as it has been received in its text format |
*/ |
type record Response { |
StatusLine statusLine, |
MessageHeader msgHeader, |
MessageBody messageBody optional, |
Payload payload optional |
} |
} // end group ResponseTypes |
// This MSG type is defined for sending synctactic variations, ans syntactically |
// erroneous messages, and receving messages failed parsing. |
group SyntacticTypes { |
type charstring Raw; |
} // end group SyntacticTypes |
// This type is defined for particular SIP message body types like SDP |
} // end group MSGTypes |
} // end group Types |
} |
with { |
encode "LibSip V3"; |
} // end module LibSip_TypesAndValues |
/trunk/ttcn/LibSip_SMSFunctions.ttcn3 |
---|
1,52 → 1,48 |
/* |
* @author STF 435 |
/** |
* @author STF 435, 471 |
* @version $Id$ |
* @desc This module provides the functions used by the test component |
* for SIP-SMS over IMS as specified in 3GPP 24.341 tests. |
* This module is part of LibSipV2. |
* @desc This module provides the functions used by the test component |
* for SIP-SMS over IMS as specified in 3GPP 24-341 tests. |
* This module is part of LibSipV3. |
*/ |
module LibSip_SMSFunctions { |
import from LibSip_SMSTypesAndValues all; |
function f_IA5_2oct(charstring p_ASCII_String) |
return octetstring |
{ |
function f_IA5_2oct( |
charstring p_ASCII_String |
) return octetstring { |
var integer i; |
var integer k; |
var integer j; |
var integer v_Length := lengthof(p_ASCII_String); |
var integer v_Temp; |
var octetstring v_Noctets :=''O; |
var bitstring v_TempBitSrc := ''B; |
var bitstring v_TempBitDes := ''B; |
if ((v_Length<=0) or (v_Length>160) or (((v_Length *7) mod 8) != 0)) |
{ |
log("Invalid value of input string length."); |
var integer v_Temp; |
var octetstring v_Noctets := ''O; |
var bitstring v_TempBitSrc := ''B; |
var bitstring v_TempBitDes := ''B; |
if ((v_Length <= 0) or (v_Length > 160) or (((v_Length * 7) mod 8) != 0)) { |
log("*** " & __SCOPE__ & "INFO: Invalid value of input string length ***"); |
} |
for(i:=0; i<v_Length; i:=i+1) |
{ |
for (i := 0; i < v_Length; i := i + 1) { |
v_Temp := char2int(p_ASCII_String[i]); |
v_TempBitSrc := int2bit(v_Temp, 8); |
for(k:=1; k<=7; k:=k+1) |
{ |
v_TempBitDes := v_TempBitSrc[8-k] & v_TempBitDes; |
if(((7*i+k) mod 8) == 0) |
{ |
v_TempBitSrc := int2bit(v_Temp, 8); |
for (j := 1; j <= 7; j := j + 1) { |
v_TempBitDes := v_TempBitSrc[8 - j] & v_TempBitDes; |
if (((7 * i + j) mod 8) == 0) { |
v_Noctets := v_Noctets & bit2oct(v_TempBitDes); |
v_TempBitDes := ''B; |
} |
} |
} |
return v_Noctets; |
} // f_IA5_2oct |
external function fx_GetSC_TimeStamp(integer p_TimeZone) return TP_ServiceCentreTimeStamp_Type; |
external function fx_GetSC_TimeStamp( |
integer p_TimeZone |
) return TP_ServiceCentreTimeStamp_Type; |
} // End of module LibSip_SMSFunctions |
/trunk/ttcn/LibSip_SMSTemplates.ttcn3 |
---|
1,395 → 1,304 |
/* |
* @author STF 435 |
/** |
* @author STF 435, STF 471 |
* @version $Id$ |
* @desc This module provides the types used by the test component |
* for SIP-SMS over IMS as specified in 3GPP 24.341 tests. |
* This module is part of LibSipV2. |
* @desc This module provides the types used by the test component |
* for SIP-SMS over IMS as specified in 3GPP 24-341 tests. |
* This module is part of LibSipV3. |
*/ |
module LibSip_SMSTemplates { |
import from LibCommon_DataStrings all; |
import from LibSip_SMSTypesAndValues all; |
import from LibSip_SMSFunctions all; |
group SMS_Templates_Group { |
/* Non-SMS Type Constraints */ |
template (present) TypeOfNumberingPlan cr_TypeOfNumberingPlanAny := |
{ |
extBit := ?, |
typeOfNumber := ?, |
numberingPlanId := ? |
}; |
template (value) TypeOfNumberingPlan cs_TypeOfNumberingPlan := |
{ |
extBit := '1'B, |
typeOfNumber := '001'B, // international number |
numberingPlanId := '0001'B // ISDN/telephony numbering plan (Rec. E.164/E.163) |
}; |
template (present) TypeOfNumberingPlan cr_TypeOfNumberingPlan := |
{ |
extBit := ?, |
typeOfNumber := ?, |
numberingPlanId := ? |
}; |
template(present) TypeOfNumberingPlan mw_TypeOfNumberingPlanAny := { |
extBit := ?, |
typeOfNumber := ?, |
numberingPlanId := ? |
} |
template(value) TypeOfNumberingPlan m_TypeOfNumberingPlan := { |
extBit := '1'B, |
typeOfNumber := '001'B, // international number |
numberingPlanId := |
'0001'B // ISDN/telephony numbering plan (Rec. E.164/E.163) |
} |
template(present) TypeOfNumberingPlan mw_TypeOfNumberingPlan := mw_TypeOfNumberingPlanAny; |
/* End Non-SMS Type Constraints */ |
template (omit) RP_OriginatorAddress_dl cs_RP_OriginatorAddress_dl := |
{ |
spare := omit, |
iei := omit, |
iel := '06'O, // 6 semi-octets |
typeOfNumberingPlan := cs_TypeOfNumberingPlan, |
digits := '001122'O |
}; |
template (omit) RP_OriginatorAddress_ul cr_RP_OriginatorAddress_ul := |
{ |
spare := omit, |
iei := omit, |
iel := '00'O |
}; |
template RP_DestinationAddress_ul cr_RP_DestinationAddress_ul := |
{ |
spare := omit, |
iei := omit, |
iel := ?, |
typeOfNumberingPlan := cr_TypeOfNumberingPlan, |
digits := ? |
}; |
template (omit) RP_DestinationAddress_dl cs_RP_DestinationAddress_dl := |
{ |
spare := omit, |
iei := omit, |
iel := '00'O |
}; |
template (omit) RP_UserData cs_RP_UserData_DELIVER (octetstring p_Digits) := |
{ |
spare := omit, |
iei := omit, |
iel := int2oct ((153 + lengthof (p_Digits)), 1), |
tP_PDU := {SMS_DELIVER := cs_SMS_DELIVER (p_Digits)} |
}; |
template (omit) RP_UserData cs_RP_UserData_SUBMIT_REPORT := |
{ |
spare := '0'B, |
iei := tsc_IEI_RP_UserData, |
iel := '0A'O, // the TPDU data length is 10 octets |
tP_PDU := {SMS_SUBMIT_REPORT := cs_SMS_SUBMIT_REPORT} |
}; |
template (omit) RP_UserData cs_RP_UserData_STATUS_REPORT |
(TP_MessageReference_Type p_MessageRef, |
TP_Address_Type p_RecipientAddress, |
TP_ServiceCentreTimeStamp_Type p_SCTP |
) := |
{ |
spare := '0'B, |
iei := tsc_IEI_RP_UserData, |
iel := '0A'O, // the TPDU data length is 10 octets |
tP_PDU := {SMS_STATUS_REPORT := cs_SMS_STATUS_REPORT(p_MessageRef, p_RecipientAddress, p_SCTP)} |
}; |
/* |
template RP_UserData cr_RP_UserData (TP_PDU_Type p_TP_PDU) := |
{ |
spare := omit, |
iei := omit, |
iel := ?, |
tP_PDU := p_TP_PDU |
}; |
*/ |
template RP_UserData cr_RP_UserData_SUBMIT := |
{ |
spare := omit, |
iei := omit, |
iel := ?, |
tP_PDU := {SMS_SUBMIT := cr_SMS_SUBMIT_VPF_REF} |
}; |
template RP_UserData cr_RP_UserData_DELIVER_REPORT := |
{ |
spare := '0'B, |
iei := tsc_IEI_RP_UserData, |
iel := ?, |
tP_PDU := {SMS_DELIVER_REPORT := cr_SMS_DELIVER_REPORT} |
}; |
template(value) RP_OriginatorAddress_dl m_RP_OriginatorAddress_dl := { |
spare := omit, |
iei := omit, |
iel := '06'O, // 6 semi-octets |
typeOfNumberingPlan := m_TypeOfNumberingPlan, |
digits := '001122'O |
} |
template(present) RP_OriginatorAddress_ul mw_RP_OriginatorAddress_ul := { |
spare := omit, |
iei := omit, |
iel := '00'O |
} |
template(present) RP_DestinationAddress_ul mw_RP_DestinationAddress_ul := { |
spare := omit, |
iei := omit, |
iel := ?, |
typeOfNumberingPlan := mw_TypeOfNumberingPlan, |
digits := ? |
} |
template(omit) RP_DestinationAddress_dl m_RP_DestinationAddress_dl := { |
spare := omit, |
iei := omit, |
iel := '00'O |
} |
template(omit) RP_UserData m_RP_UserData_DELIVER( |
octetstring p_Digits |
) := { |
spare := omit, |
iei := omit, |
iel := int2oct((153 + lengthof(p_Digits)), 1), |
tP_PDU := {SMS_DELIVER := m_SMS_DELIVER(p_Digits)} |
} |
template(value) RP_UserData m_RP_UserData_SUBMIT_REPORT := { |
spare := '0'B, |
iei := c_IEI_RP_UserData, |
iel := '0A'O, // the TPDU data length is 10 octets |
tP_PDU := {SMS_SUBMIT_REPORT := m_SMS_SUBMIT_REPORT} |
} |
template(value) RP_UserData m_RP_UserData_STATUS_REPORT( |
template(value) TP_MessageReference_Type p_MessageRef, |
template(value) TP_Address_Type p_RecipientAddress, |
template(value) TP_ServiceCentreTimeStamp_Type p_SCTP |
) modifies m_RP_UserData_SUBMIT_REPORT := { |
tP_PDU := {SMS_STATUS_REPORT := m_SMS_STATUS_REPORT(p_MessageRef, p_RecipientAddress, p_SCTP)} |
} |
template(present) RP_UserData mw_RP_UserData_SUBMIT := { |
spare := omit, |
iei := omit, |
iel := ?, |
tP_PDU := {SMS_SUBMIT := mw_SMS_SUBMIT_VPF_REF} |
} |
template(present) RP_UserData mw_RP_UserData_DELIVER_REPORT := { |
spare := '0'B, |
iei := c_IEI_RP_UserData, |
iel := ?, |
tP_PDU := {SMS_DELIVER_REPORT := mw_SMS_DELIVER_REPORT} |
} |
/* End SM-RP Type Constraints */ |
/* SM-RP PDU Constraints */ |
template (value) RP_DATA_dl_Type cs_RP_DATA_dl_DELIVER (octetstring p_Digits) := |
{ |
spare5 := '00000'B, |
rP_MessageTypeIndicator := tsc_MT_RP_DATA_dl, |
rP_MessageReference := '00'O, |
rP_OriginatorAddress := cs_RP_OriginatorAddress_dl, |
rP_DestinationAddress := cs_RP_DestinationAddress_dl, |
rP_UserData := cs_RP_UserData_DELIVER(p_Digits) |
}; |
template (value) RP_DATA_dl_Type cs_RP_DATA_dl_STATUS_REPORT ( |
TP_MessageReference_Type p_MessageRef, |
TP_Address_Type p_RecipientAddress, |
TP_ServiceCentreTimeStamp_Type p_SCTP |
) := |
{ |
spare5 := '00000'B, |
rP_MessageTypeIndicator := tsc_MT_RP_DATA_dl, |
rP_MessageReference := '00'O, |
rP_OriginatorAddress := cs_RP_OriginatorAddress_dl, |
rP_DestinationAddress := cs_RP_DestinationAddress_dl, |
rP_UserData := cs_RP_UserData_STATUS_REPORT (p_MessageRef, p_RecipientAddress, p_SCTP) |
}; |
template (present) RP_DATA_ul_Type cr_RP_DATA_ul_SUBMIT := |
{ |
spare5 := '00000'B, |
rP_MessageTypeIndicator := tsc_MT_RP_DATA_ul, |
rP_MessageReference := ?, |
rP_OriginatorAddress := cr_RP_OriginatorAddress_ul, |
rP_DestinationAddress := cr_RP_DestinationAddress_ul, |
rP_UserData := cr_RP_UserData_SUBMIT |
}; |
template (value) RP_ACK_Type cs_RP_ACK_SUBMIT_REPORT (Oct1 p_msgReference := '00'O):= |
{ |
spare5 := '00000'B, |
rP_MessageTypeIndicator := tsc_MT_RP_ACK_dl, |
rP_MessageReference := p_msgReference, |
rP_UserData := cs_RP_UserData_SUBMIT_REPORT |
}; |
template (present) RP_ACK_Type cr_RP_ACK_DELIVER_REPORT := |
{ |
spare5 := '00000'B, |
rP_MessageTypeIndicator := tsc_MT_RP_ACK_ul, |
rP_MessageReference := ?, |
rP_UserData := cr_RP_UserData_DELIVER_REPORT |
}; |
template(value) RP_DATA_dl_Type m_RP_DATA_dl_base := { |
spare5 := '00000'B, |
rP_MessageTypeIndicator := c_MT_RP_DATA_dl, |
rP_MessageReference := '00'O, |
rP_OriginatorAddress := m_RP_OriginatorAddress_dl, |
rP_DestinationAddress := m_RP_DestinationAddress_dl, |
rP_UserData := m_RP_UserData_DELIVER('0000'O) |
} |
template(value) RP_DATA_dl_Type m_RP_DATA_dl_DELIVER( |
octetstring p_Digits |
) modifies m_RP_DATA_dl_base := {rP_UserData := m_RP_UserData_DELIVER(p_Digits)} |
template(value) RP_DATA_dl_Type m_RP_DATA_dl_STATUS_REPORT( |
template(value) TP_MessageReference_Type p_MessageRef, |
template(value) TP_Address_Type p_RecipientAddress, |
template(value) TP_ServiceCentreTimeStamp_Type p_SCTP |
) modifies m_RP_DATA_dl_base := { |
rP_UserData := m_RP_UserData_STATUS_REPORT(p_MessageRef, p_RecipientAddress, p_SCTP) |
} |
template(present) RP_DATA_ul_Type mw_RP_DATA_ul_SUBMIT := { |
spare5 := '00000'B, |
rP_MessageTypeIndicator := c_MT_RP_DATA_ul, |
rP_MessageReference := ?, |
rP_OriginatorAddress := mw_RP_OriginatorAddress_ul, |
rP_DestinationAddress := mw_RP_DestinationAddress_ul, |
rP_UserData := mw_RP_UserData_SUBMIT |
} |
template(value) RP_ACK_Type m_RP_ACK_SUBMIT_REPORT( |
template(value) Oct1 p_msgReference := '00'O |
) := { |
spare5 := '00000'B, |
rP_MessageTypeIndicator := c_MT_RP_ACK_dl, |
rP_MessageReference := p_msgReference, |
rP_UserData := m_RP_UserData_SUBMIT_REPORT |
} |
template(present) RP_ACK_Type mw_RP_ACK_DELIVER_REPORT := { |
spare5 := '00000'B, |
rP_MessageTypeIndicator := c_MT_RP_ACK_ul, |
rP_MessageReference := ?, |
rP_UserData := mw_RP_UserData_DELIVER_REPORT |
} |
/* End SM-RP PDU Constraints */ |
/* SM-TP Type Constraints */ |
template (value) TP_ProtocolIdentifier_Type cr_TP_ProtocolIdentifier := |
{ |
pidType := '01'B, |
interworking := '0'B, |
pidValue := '00000'B |
}; |
template (value) TP_ProtocolIdentifier_Type cs_TP_ProtocolIdentifier := |
{ |
pidType := '01'B, |
interworking := '0'B, |
pidValue := '00000'B |
}; |
template (value) TP_DataCodingScheme_Type cs_TP_DataCodingScheme := |
{ |
codingGroup := '0000'B, |
codeValue := '0000'B |
}; |
template TP_Address_Type cr_TP_AddressAny := |
{ |
iel := ?, |
typeOfNumberingPlan := cr_TypeOfNumberingPlanAny, |
digits := * |
}; |
template (value) TP_Address_Type cs_TP_Address (octetstring p_Digits) := |
{ |
iel := int2oct(2 * lengthof(p_Digits), 1), |
// length is number of useful semi-octets |
// as p_digits is declared as octetstring the number must be even |
typeOfNumberingPlan := cs_TypeOfNumberingPlan, |
digits := p_Digits |
}; |
template (value) TP_ParameterIndicator_Type cs_TP_ParameterIndicator := |
{ |
extBit1 := '0'B, |
spare4 := '0000'B, |
tP_UDL := '0'B, |
tP_DCS := '0'B, |
tP_PID := '1'B |
}; |
template(value) TP_ProtocolIdentifier_Type mw_TP_ProtocolIdentifier := { |
pidType := '01'B, |
interworking := '0'B, |
pidValue := '00000'B |
} |
template(value) TP_ProtocolIdentifier_Type m_TP_ProtocolIdentifier := { |
pidType := '01'B, |
interworking := '0'B, |
pidValue := '00000'B |
} |
template(value) TP_DataCodingScheme_Type m_TP_DataCodingScheme := { |
codingGroup := '0000'B, |
codeValue := '0000'B |
} |
template(present) TP_Address_Type mw_TP_AddressAny := { |
iel := ?, |
typeOfNumberingPlan := mw_TypeOfNumberingPlanAny, |
digits := * |
} |
template(value) TP_Address_Type m_TP_Address( |
octetstring p_Digits |
) := { |
iel := int2oct(2 * lengthof(p_Digits), 1), |
// length is number of useful semi-octets |
// as p_digits is declared as octetstring the number must be even |
typeOfNumberingPlan := m_TypeOfNumberingPlan, |
digits := p_Digits |
} |
template(value) TP_ParameterIndicator_Type m_TP_ParameterIndicator := { |
extBit1 := '0'B, |
spare4 := '0000'B, |
tP_UDL := '0'B, |
tP_DCS := '0'B, |
tP_PID := '1'B |
} |
/* End SM-TP Type Constraints */ |
/* SM-TP PDU Constraints */ |
template (value) SMS_DELIVER_Type cs_SMS_DELIVER (octetstring p_Digits) := |
{ |
tP_ReplyPath := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
tP_StatusReportIndication := '1'B, |
spare2 := '00'B, |
tP_MoreMessagesToSend := '0'B, |
tP_MessageTypeIndicator := tsc_MT_SMS_DELIVER, |
tP_OriginatingAddress := cs_TP_Address (p_Digits), |
tP_ProtocolIdentifier := cs_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := cs_TP_DataCodingScheme, |
tP_ServiceCentreTimeStamp := fx_GetSC_TimeStamp(0), // Time Zone 0 assumed |
tP_UserDataLength := int2oct(160,1), |
tP_UserData := f_IA5_2oct(tsc_Fox) |
}; |
template SMS_DELIVER_REPORT_Type cr_SMS_DELIVER_REPORT := |
{ |
spare1 := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
spare4 := '0000'B, |
tP_MessageTypeIndicator := tsc_MT_SMS_DELIVER_REPORT, |
tP_FailureCause := omit, |
tP_ParameterIndicator := ?, |
tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := *, |
tP_UserDataLength := *, |
tP_UserData := * |
}; |
template SMS_SUBMIT_Type cr_SMS_SUBMIT := |
{ |
tP_ReplyPath := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
tP_StatusReportRequest := '1'B, |
tP_ValidityPeriodFormat := '??'B, |
tP_RejectDuplicates := '0'B, |
tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT, |
tP_MessageReference := ?, |
tP_DestinationAddress := cr_TP_AddressAny, |
tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := ?, |
tP_ValidityPeriod := *, |
tP_UserDataLength := int2oct(160,1), |
tP_UserData := ? // any data will do: 140 octets |
}; |
template SMS_SUBMIT_Type cr_SMS_SUBMIT_VPF_NP := |
{ |
tP_ReplyPath := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
tP_StatusReportRequest := '1'B, |
tP_ValidityPeriodFormat := '00'B, |
tP_RejectDuplicates := '0'B, |
tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT, |
tP_MessageReference := ?, |
tP_DestinationAddress := cr_TP_AddressAny, |
tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := ?, |
tP_ValidityPeriod := omit, |
tP_UserDataLength := int2oct(160,1), |
tP_UserData := ? // any data will do: 140 octets |
}; |
template SMS_SUBMIT_Type cr_SMS_SUBMIT_VPF_REF := |
{ |
tP_ReplyPath := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
tP_StatusReportRequest := '1'B, |
tP_ValidityPeriodFormat := '10'B, |
tP_RejectDuplicates := '0'B, |
tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT, |
tP_MessageReference := ?, |
tP_DestinationAddress := cr_TP_AddressAny, |
tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := ?, |
tP_ValidityPeriod := ?, |
tP_UserDataLength := int2oct(160,1), |
tP_UserData := ? // any data will do: 140 octets |
}; |
template SMS_SUBMIT_Type cr_SMS_SUBMIT_VPF_ENH := |
{ |
tP_ReplyPath := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
tP_StatusReportRequest := '1'B, |
tP_ValidityPeriodFormat := '01'B, |
tP_RejectDuplicates := '0'B, |
tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT, |
tP_MessageReference := ?, |
tP_DestinationAddress := cr_TP_AddressAny, |
tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := ?, |
tP_ValidityPeriod := ?, |
tP_UserDataLength := int2oct(160,1), |
tP_UserData := ? // any data will do: 140 octets |
}; |
template SMS_SUBMIT_Type cr_SMS_SUBMIT_VPF_ABS := |
{ |
tP_ReplyPath := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
tP_StatusReportRequest := '1'B, |
tP_ValidityPeriodFormat := '11'B, |
tP_RejectDuplicates := '0'B, |
tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT, |
tP_MessageReference := ?, |
tP_DestinationAddress := cr_TP_AddressAny, |
tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := ?, |
tP_ValidityPeriod := ?, |
tP_UserDataLength := int2oct(160,1), |
tP_UserData := ? // any data will do: 140 octets |
}; |
template (value) SMS_SUBMIT_REPORT_Type cs_SMS_SUBMIT_REPORT := |
{ |
spare1 := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
spare4 := '0000'B, |
tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT_REPORT, |
tP_FailureCause := omit, |
tP_ParameterIndicator := cs_TP_ParameterIndicator, |
tP_ServiceCentreTimeStamp := fx_GetSC_TimeStamp(0), // Time Zone 0 assumed |
tP_ProtocolIdentifier := cs_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := omit, |
tP_UserDataLength := omit, |
tP_UserData := omit |
}; |
template (value) SMS_STATUS_REPORT_Type cs_SMS_STATUS_REPORT ( |
TP_MessageReference_Type p_MessageRef, |
TP_Address_Type p_RA, |
TP_ServiceCentreTimeStamp_Type p_SCTP |
):= |
{ |
// TS 34.229-1 clause A.7.5 |
spare1 := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
tP_StatusReportQualifier := '0'B, |
spare2 := '00'B, |
tP_MoreMessagesToSend := '0'B, |
tP_MessageTypeIndicator := tsc_MT_SMS_STATUS_REPORT, |
tP_MessageReference := p_MessageRef, |
tP_RecipientAddress := p_RA, |
tP_ServiceCentreTimeStamp := p_SCTP, |
tP_DischargeTime := '00000000000000'H, |
tP_Status := { |
reserved := '0'B, |
status := '0000000'B |
}, |
tP_ParameterIndicator := cs_TP_ParameterIndicator, |
tP_ProtocolIdentifier := cs_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := omit, |
tP_UserDataLength := omit, |
tP_UserData := omit |
}; |
/* End SM-TP PDU Constraints */ |
template(value) SMS_DELIVER_Type m_SMS_DELIVER( |
octetstring p_Digits |
) := { |
tP_ReplyPath := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
tP_StatusReportIndication := '1'B, |
spare2 := '00'B, |
tP_MoreMessagesToSend := '0'B, |
tP_MessageTypeIndicator := c_MT_SMS_DELIVER, |
tP_OriginatingAddress := m_TP_Address(p_Digits), |
tP_ProtocolIdentifier := m_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := m_TP_DataCodingScheme, |
tP_ServiceCentreTimeStamp := fx_GetSC_TimeStamp(0), // Time Zone 0 assumed |
tP_UserDataLength := int2oct(160, 1), |
tP_UserData := f_IA5_2oct(c_Fox) |
} |
template(present) SMS_DELIVER_REPORT_Type mw_SMS_DELIVER_REPORT := { |
spare1 := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
spare4 := '0000'B, |
tP_MessageTypeIndicator := c_MT_SMS_DELIVER_REPORT, |
tP_FailureCause := omit, |
tP_ParameterIndicator := ?, |
tP_ProtocolIdentifier := mw_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := *, |
tP_UserDataLength := *, |
tP_UserData := * |
} |
template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT := { |
tP_ReplyPath := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
tP_StatusReportRequest := '1'B, |
tP_ValidityPeriodFormat := '??'B, |
tP_RejectDuplicates := '0'B, |
tP_MessageTypeIndicator := c_MT_SMS_SUBMIT, |
tP_MessageReference := ?, |
tP_DestinationAddress := mw_TP_AddressAny, |
tP_ProtocolIdentifier := mw_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := ?, |
tP_ValidityPeriod := *, |
tP_UserDataLength := int2oct(160, 1), |
tP_UserData := |
? // any data will do: 140 octets |
} |
template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT_VPF_NP modifies mw_SMS_SUBMIT := { |
tP_ValidityPeriodFormat := '00'B, |
tP_ValidityPeriod := omit |
} |
template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT_VPF_REF modifies mw_SMS_SUBMIT := { |
tP_ValidityPeriodFormat := '10'B, |
tP_ValidityPeriod := ? |
} |
template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT_VPF_ENH modifies mw_SMS_SUBMIT := { |
tP_ValidityPeriodFormat := '01'B, |
tP_ValidityPeriod := ? |
} |
template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT_VPF_ABS modifies mw_SMS_SUBMIT := { |
tP_ValidityPeriodFormat := '11'B, |
tP_ValidityPeriod := ? |
} |
template(value) SMS_SUBMIT_REPORT_Type m_SMS_SUBMIT_REPORT := { |
spare1 := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
spare4 := '0000'B, |
tP_MessageTypeIndicator := c_MT_SMS_SUBMIT_REPORT, |
tP_FailureCause := omit, |
tP_ParameterIndicator := m_TP_ParameterIndicator, |
tP_ServiceCentreTimeStamp := fx_GetSC_TimeStamp(0), // Time Zone 0 assumed |
tP_ProtocolIdentifier := m_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := omit, |
tP_UserDataLength := omit, |
tP_UserData := omit |
} |
template(value) SMS_STATUS_REPORT_Type m_SMS_STATUS_REPORT( |
template(value) TP_MessageReference_Type p_MessageRef, |
template(value) TP_Address_Type p_RA, |
template(value) TP_ServiceCentreTimeStamp_Type p_SCTP |
) := { |
// TS 34.229-1 clause A.7.5 |
spare1 := '0'B, |
tP_UserDataHeaderIndicator := '0'B, |
tP_StatusReportQualifier := '0'B, |
spare2 := '00'B, |
tP_MoreMessagesToSend := '0'B, |
tP_MessageTypeIndicator := c_MT_SMS_STATUS_REPORT, |
tP_MessageReference := p_MessageRef, |
tP_RecipientAddress := p_RA, |
tP_ServiceCentreTimeStamp := p_SCTP, |
tP_DischargeTime := '00000000000000'H, |
tP_Status := { |
reserved := '0'B, |
status := '0000000'B |
}, |
tP_ParameterIndicator := m_TP_ParameterIndicator, |
tP_ProtocolIdentifier := m_TP_ProtocolIdentifier, |
tP_DataCodingScheme_Type := omit, |
tP_UserDataLength := omit, |
tP_UserData := omit |
} |
/* End SM-TP PDU Constraints */ |
} // group SMS_Templates_Group |
} // End of module LibSip_SMSTypesAndValues |
/trunk/ttcn/LibSip_SMSTypesAndValues.ttcn |
---|
1,328 → 1,485 |
/******************************************************************************/ |
// $Date: 2009-11-25 18:40:50 +0100 (Mi, 25 Nov 2009) $ |
// $Author: STF160 $ |
// $Rev: 2184 $ |
/******************************************************************************/ |
/* |
* This module contains the type definitions for SMS messages as specified in |
* 3GPP 24.011 and 3GPP 23.040 Rel 8 and 9. |
* SMS over IMS is specified in 3GPP 24.341. |
* This module is part of LibSipV2. |
/****************************************************************************** |
* @author STF 435, STF471 |
* @version $Id$ |
* @desc This module contains the type definitions for SMS messages as specified in |
* 3GPP 24-011 and 3GPP 23-040 Rel 8 and 9. |
* SMS over IMS is specified in 3GPP 24-341. |
* This module is part of LibSipV3. |
*/ |
module LibSip_SMSTypesAndValues { |
import from LibCommon_DataStrings all; |
group SMS_Declarations { |
const RP_MessageTypeIndicator_Type tsc_MT_RP_DATA_ul := '000'B; /* RP_DATA_ul */ |
const RP_MessageTypeIndicator_Type tsc_MT_RP_DATA_dl := '001'B; /* RP_DATA_dl */ |
const RP_MessageTypeIndicator_Type tsc_MT_RP_ACK_ul := '010'B; /* RP_ACK_ul */ |
const RP_MessageTypeIndicator_Type tsc_MT_RP_ACK_dl := '011'B; /* RP_ACK_dl */ |
const RP_MessageTypeIndicator_Type tsc_MT_RP_ERROR_ul := '100'B; /* RP_ERROR_ul */ |
const RP_MessageTypeIndicator_Type tsc_MT_RP_ERROR_dl := '101'B; /* RP_ERROR_dl */ |
const RP_MessageTypeIndicator_Type tsc_MT_RP_SMMA := '110'B; /* RP_SMMA */ |
const TP_MessageTypeIndicator_Type tsc_MT_SMS_DELIVER := '00'B; /* SMS DELIVER */ |
const TP_MessageTypeIndicator_Type tsc_MT_SMS_DELIVER_REPORT := '00'B; /* SMS DELIVER REPORT */ |
const TP_MessageTypeIndicator_Type tsc_MT_SMS_STATUS_REPORT := '10'B; /* SMS STATUS REPORT */ |
const TP_MessageTypeIndicator_Type tsc_MT_SMS_COMMAND := '10'B; /* SMS COMMAND */ |
const TP_MessageTypeIndicator_Type tsc_MT_SMS_SUBMIT := '01'B; /* SMS SUBMIT, SMS SUBMIT REPORT */ |
const TP_MessageTypeIndicator_Type tsc_MT_SMS_SUBMIT_REPORT := '01'B; /* SMS SUBMIT, SMS SUBMIT REPORT */ |
const Bit7 tsc_IEI_RP_UserData := '1000001'B; /* 24.011 cl. 8.2.5.3 */ |
const charstring tsc_Fox := "The quick brown fox jumps over the lazy dog's back. Kaufen Sie Ihrer Frau vier bequeme Pelze. - 0123456789 - THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG'S BACK."; |
type record TypeOfNumberingPlan { /* 24.008 cl. 10.5.4.7, 10.5.4.9, 10.5.4.13 */ |
Bit1 extBit, /* Extension Bit */ |
Bit3 typeOfNumber, /* Type Of Number */ |
Bit4 numberingPlanId /* Numbering Plan Identification */ |
}; |
const RP_MessageTypeIndicator_Type c_MT_RP_DATA_ul := '000'B; |
/* RP_DATA_ul */ |
const RP_MessageTypeIndicator_Type c_MT_RP_DATA_dl := '001'B; |
/* RP_DATA_dl */ |
const RP_MessageTypeIndicator_Type c_MT_RP_ACK_ul := '010'B; |
/* RP_ACK_ul */ |
const RP_MessageTypeIndicator_Type c_MT_RP_ACK_dl := '011'B; |
/* RP_ACK_dl */ |
const RP_MessageTypeIndicator_Type c_MT_RP_ERROR_ul := '100'B; |
/* RP_ERROR_ul */ |
const RP_MessageTypeIndicator_Type c_MT_RP_ERROR_dl := '101'B; |
/* RP_ERROR_dl */ |
const RP_MessageTypeIndicator_Type c_MT_RP_SMMA := '110'B; |
/* RP_SMMA */ |
const TP_MessageTypeIndicator_Type c_MT_SMS_DELIVER := '00'B; |
/* SMS DELIVER */ |
const TP_MessageTypeIndicator_Type c_MT_SMS_DELIVER_REPORT := '00'B; |
/* SMS DELIVER REPORT */ |
const TP_MessageTypeIndicator_Type c_MT_SMS_STATUS_REPORT := '10'B; |
/* SMS STATUS REPORT */ |
const TP_MessageTypeIndicator_Type c_MT_SMS_COMMAND := '10'B; |
/* SMS COMMAND */ |
const TP_MessageTypeIndicator_Type c_MT_SMS_SUBMIT := '01'B; |
/* SMS SUBMIT, SMS SUBMIT REPORT */ |
const TP_MessageTypeIndicator_Type c_MT_SMS_SUBMIT_REPORT := '01'B; |
/* SMS SUBMIT, SMS SUBMIT REPORT */ |
const Bit7 c_IEI_RP_UserData := '1000001'B; |
/* 24.011 cl. 8.2.5.3 */ |
const charstring c_Fox := "The quick brown fox jumps over the lazy dog's back. Kaufen Sie Ihrer Frau vier bequeme Pelze. - 0123456789 - THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG'S BACK."; |
type record TypeOfNumberingPlan { |
/* 24.008 cl. 10.5.4.7, 10.5.4.9, 10.5.4.13 */ |
Bit1 extBit, |
/* Extension Bit */ |
Bit3 typeOfNumber, |
/* Type Of Number */ |
Bit4 numberingPlanId /* Numbering Plan Identification */ |
} |
/* SM-RP Type Declarations */ |
type Bit3 RP_MessageTypeIndicator_Type; /* 24.011 cl. 8.2.2 */ |
type Oct1 RP_MessageReference_Type; /* 24.011 cl. 8.2.3 */ |
type record RP_OriginatorAddress_dl { /* 24.011 cl. 8.2.5.1 */ |
Bit1 spare optional, /* 0 */ |
Bit7 iei optional, /* 0101 1110 */ |
Oct1 iel, /* min value 2 and max value is 11 */ |
TypeOfNumberingPlan typeOfNumberingPlan, /* */ |
octetstring digits length(1..10) |
}; |
type record RP_OriginatorAddress_ul { /* 24.011 cl. 8.2.5.1 */ |
Bit1 spare optional, /* 0 */ |
Bit7 iei optional, /* 0101 1110 */ |
Oct1 iel /* 0 */ |
}; |
type record RP_DestinationAddress_ul { /* 24.011 cl. 8.2.5.2 */ |
Bit1 spare optional, /* 0 */ |
Bit7 iei optional, /* 0101 1110 */ |
Oct1 iel, /* min value 2 and max value is 11 */ |
TypeOfNumberingPlan typeOfNumberingPlan, /* */ |
octetstring digits length(1..10) |
}; |
type record RP_DestinationAddress_dl { /* 24.011 cl. 8.2.5.2 */ |
Bit1 spare optional, /* 0 */ |
Bit7 iei optional, /* 0101 1110 */ |
Oct1 iel /* 0 */ |
}; |
type record RP_UserData { /* 24.011 cl. 8.2.5.3 */ |
Bit1 spare optional, /* 0, present in case of TLV; omit in case of LV */ |
Bit7 iei optional, /* 1000001, present in case of TLV; omit in case of LV */ |
Oct1 iel, /* */ |
TP_PDU_Type tP_PDU /* <= 232 octets */ |
}; |
type record RP_Cause { /* 24.011 cl. 8.2.5.4 */ |
Bit1 spare optional, /* present in case of TLV; omit in case of LV */ |
Bit7 iei optional, /* present in case of TLV; omit in case of LV */ |
Oct1 iel, /* 2 or 3 */ |
Bit1 extBit1, /* 0 */ |
Bit7 causeValue1, /* Table 8.4/3GPP TS 24.011 */ |
Bit1 extBit2, /* 0 */ |
Bit7 causeValue2, /* Table 8.4/3GPP TS 24.011 */ |
Oct1 diagnostic optional /* Parameters included in the return error from MAP */ |
}; |
type Bit3 RP_MessageTypeIndicator_Type; |
/* 24.011 cl. 8.2.2 */ |
type Oct1 RP_MessageReference_Type; |
/* 24.011 cl. 8.2.3 */ |
type record RP_OriginatorAddress_dl { |
/* 24.011 cl. 8.2.5.1 */ |
Bit1 spare optional, |
/* 0 */ |
Bit7 iei optional, |
/* 0101 1110 */ |
Oct1 iel, |
/* min value 2 and max value is 11 */ |
TypeOfNumberingPlan typeOfNumberingPlan, |
/* */ |
octetstring digits length(1 .. 10) |
} |
type record RP_OriginatorAddress_ul { |
/* 24.011 cl. 8.2.5.1 */ |
Bit1 spare optional, |
/* 0 */ |
Bit7 iei optional, |
/* 0101 1110 */ |
Oct1 iel /* 0 */ |
} |
type record RP_DestinationAddress_ul { |
/* 24.011 cl. 8.2.5.2 */ |
Bit1 spare optional, |
/* 0 */ |
Bit7 iei optional, |
/* 0101 1110 */ |
Oct1 iel, |
/* min value 2 and max value is 11 */ |
TypeOfNumberingPlan typeOfNumberingPlan, |
/* */ |
octetstring digits length(1 .. 10) |
} |
type record RP_DestinationAddress_dl { |
/* 24.011 cl. 8.2.5.2 */ |
Bit1 spare optional, |
/* 0 */ |
Bit7 iei optional, |
/* 0101 1110 */ |
Oct1 iel /* 0 */ |
} |
type record RP_UserData { |
/* 24.011 cl. 8.2.5.3 */ |
Bit1 spare optional, |
/* 0, present in case of TLV; omit in case of LV */ |
Bit7 iei optional, |
/* 1000001, present in case of TLV; omit in case of LV */ |
Oct1 iel, |
/* */ |
TP_PDU_Type tP_PDU /* <= 232 octets */ |
} |
type record RP_Cause { |
/* 24.011 cl. 8.2.5.4 */ |
Bit1 spare optional, |
/* present in case of TLV; omit in case of LV */ |
Bit7 iei optional, |
/* present in case of TLV; omit in case of LV */ |
Oct1 iel, |
/* 2 or 3 */ |
Bit1 extBit1, |
/* 0 */ |
Bit7 causeValue1, |
/* Table 8.4/3GPP TS 24.011 */ |
Bit1 extBit2, |
/* 0 */ |
Bit7 causeValue2, |
/* Table 8.4/3GPP TS 24.011 */ |
Oct1 diagnostic optional /* Parameters included in the return error from MAP */ |
} |
/* End SM-RP Type Declarations */ |
/* SM-RP PDU Declarations */ |
type record RP_DATA_dl_Type { /* 24.011 cl. 7.3.1.1 |
type record RP_DATA_dl_Type { |
/* 24.011 cl. 7.3.1.1 |
Direction: n -> ue */ |
Bit5 spare5, /* cl. 8.2.2 M V 5 bits */ |
RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ |
RP_MessageReference_Type rP_MessageReference, /* cl. 8.2.3 M LV 1 */ |
RP_OriginatorAddress_dl rP_OriginatorAddress, /* cl. 8.2.5.1 M LV 1-12 octets */ |
RP_DestinationAddress_dl rP_DestinationAddress, /* cl. 8.2.5.2 M LV 1 */ |
RP_UserData rP_UserData /* cl. 8.2.5.3 M LV <= 233 octets */ |
}; |
type record RP_DATA_ul_Type { /* 24.011 cl. 7.3.1.2 |
Bit5 spare5, |
/* cl. 8.2.2 M V 5 bits */ |
RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, |
/* cl. 8.2.2 M V 3 bits */ |
RP_MessageReference_Type rP_MessageReference, |
/* cl. 8.2.3 M LV 1 */ |
RP_OriginatorAddress_dl rP_OriginatorAddress, |
/* cl. 8.2.5.1 M LV 1-12 octets */ |
RP_DestinationAddress_dl rP_DestinationAddress, |
/* cl. 8.2.5.2 M LV 1 */ |
RP_UserData rP_UserData /* cl. 8.2.5.3 M LV <= 233 octets */ |
} |
type record RP_DATA_ul_Type { |
/* 24.011 cl. 7.3.1.2 |
Direction: ue -> n */ |
Bit5 spare5, /* cl. 8.2.2 M V 5 bits */ |
RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ |
RP_MessageReference_Type rP_MessageReference, /* cl. 8.2.3 M LV 1 */ |
RP_OriginatorAddress_ul rP_OriginatorAddress, /* cl. 8.2.5.1 M LV 1 */ |
RP_DestinationAddress_ul rP_DestinationAddress, /* cl. 8.2.5.2 M LV 1 */ |
RP_UserData rP_UserData /* cl. 8.2.5.3 M LV <= 233 octets */ |
}; |
type record RP_SMMA_Type { /* 24.011 cl. 7.3.2 |
Bit5 spare5, |
/* cl. 8.2.2 M V 5 bits */ |
RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, |
/* cl. 8.2.2 M V 3 bits */ |
RP_MessageReference_Type rP_MessageReference, |
/* cl. 8.2.3 M LV 1 */ |
RP_OriginatorAddress_ul rP_OriginatorAddress, |
/* cl. 8.2.5.1 M LV 1 */ |
RP_DestinationAddress_ul rP_DestinationAddress, |
/* cl. 8.2.5.2 M LV 1 */ |
RP_UserData rP_UserData /* cl. 8.2.5.3 M LV <= 233 octets */ |
} |
type record RP_SMMA_Type { |
/* 24.011 cl. 7.3.2 |
Direction: ue -> n */ |
Bit5 spare5, /* cl. 8.2.2 M V 5 bits */ |
RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ |
RP_MessageReference_Type rP_MessageReference /* cl. 8.2.3 M LV 1 */ |
}; |
type record RP_ACK_Type { /* 24.011 cl. 7.3.3 |
Bit5 spare5, |
/* cl. 8.2.2 M V 5 bits */ |
RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, |
/* cl. 8.2.2 M V 3 bits */ |
RP_MessageReference_Type rP_MessageReference /* cl. 8.2.3 M LV 1 */ |
} |
type record RP_ACK_Type { |
/* 24.011 cl. 7.3.3 |
Direction: ue <-> n */ |
Bit5 spare5, /* cl. 8.2.2 M V 5 bits */ |
RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ |
RP_MessageReference_Type rP_MessageReference, /* cl. 8.2.3 M LV 1 */ |
RP_UserData rP_UserData optional /* cl. 8.2.5.3 O TLV <= 234 octets */ |
}; |
type record RP_ERROR_Type { /* 24.011 cl. 7.3.4 |
Bit5 spare5, |
/* cl. 8.2.2 M V 5 bits */ |
RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, |
/* cl. 8.2.2 M V 3 bits */ |
RP_MessageReference_Type rP_MessageReference, |
/* cl. 8.2.3 M LV 1 */ |
RP_UserData rP_UserData optional /* cl. 8.2.5.3 O TLV <= 234 octets */ |
} |
type record RP_ERROR_Type { |
/* 24.011 cl. 7.3.4 |
Direction: ue <-> n */ |
Bit5 spare5, /* cl. 8.2.2 M V 5 bits */ |
RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ |
RP_MessageReference_Type rP_MessageReference, /* cl. 8.2.3 M LV 1 */ |
RP_Cause rP_Cause, /* cl. 8.2.5.4 M LV 2-3 */ |
RP_UserData rP_UserData optional /* cl. 8.2.5.3 O TLV <= 234 octets */ |
}; |
Bit5 spare5, |
/* cl. 8.2.2 M V 5 bits */ |
RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, |
/* cl. 8.2.2 M V 3 bits */ |
RP_MessageReference_Type rP_MessageReference, |
/* cl. 8.2.3 M LV 1 */ |
RP_Cause rP_Cause, |
/* cl. 8.2.5.4 M LV 2-3 */ |
RP_UserData rP_UserData optional /* cl. 8.2.5.3 O TLV <= 234 octets */ |
} |
type union RP_PDU_Type { |
RP_DATA_dl_Type RP_DATA_dl, |
RP_DATA_ul_Type RP_DATA_ul, |
RP_SMMA_Type RP_SMMA, |
RP_ACK_Type RP_ACK, |
RP_ERROR_Type RP_ERROR |
}; |
RP_DATA_dl_Type RP_DATA_dl, |
RP_DATA_ul_Type RP_DATA_ul, |
RP_SMMA_Type RP_SMMA, |
RP_ACK_Type RP_ACK, |
RP_ERROR_Type RP_ERROR |
} |
/* End SM-RP PDU Declarations */ |
/* SM-TP Type Declarations */ |
type record TP_Address_Type { /* 23.040 cl. 9.1.2.5 */ |
Oct1 iel, /* min value 2 and max value is 11 */ |
TypeOfNumberingPlan typeOfNumberingPlan, |
octetstring digits length(0..10) optional |
}; |
type Bit2 TP_MessageTypeIndicator_Type; /* 23.040 cl. 9.2.3.1 */ |
type Oct1 TP_MessageReference_Type; /* 23.040 cl. 9.2.3.6 */ |
type Oct1 TP_UserDataLength_Type; /* 23.040 cl. 9.2.3.16 */ |
type record TP_ProtocolIdentifier_Type { /* 23.040 cl. 9.2.3.9 */ |
Bit2 pidType, /* */ |
Bit1 interworking, /* */ |
Bit5 pidValue /* */ |
}; |
type record TP_DataCodingScheme_Type { /* 23.040 cl. 9.2.3.10 + 23.040 cl. 4 */ |
Bit4 codingGroup, /* */ |
Bit4 codeValue /* */ |
}; |
type hexstring TP_ServiceCentreTimeStamp_Type length (14); /* 23.040 cl. 9.2.3.11 */ |
type Oct1 TP_ValidityPeriodRelative_Type; /* 23.040 cl. 9.2.3.12.1 */ |
type hexstring TP_ValidityPeriodAbsolute_Type length (14); /* 23.040 cl. 9.2.3.12.2 */ |
type record TP_ValidityPeriodEnhanced_Type { /* 23.040 cl. 9.2.3.12.3 */ |
Bit1 extBit, /* */ |
Bit1 singleShot, /* */ |
Bit3 spare3, /* */ |
Bit3 validityPeriodFormat, /* */ |
Oct6 validityPeriod /* */ |
}; |
type union TP_ValidityPeriod_Type { /* 23.040 cl. 9.2.3.3 */ |
TP_ValidityPeriodRelative_Type TP_ValidityPeriodRelative, /* Relative format */ |
TP_ValidityPeriodAbsolute_Type TP_ValidityPeriodAbsolute, /* Absolute format */ |
TP_ValidityPeriodEnhanced_Type TP_ValidityPeriodEnhanced /* Enhanced format */ |
}; |
type record TP_Status_Type { /* 23.040 cl. 9.2.3.15 */ |
Bit1 reserved, /* */ |
Bit7 status /* */ |
}; |
type Bit8 TP_Command_Type; /* 23.040 cl. 9.2.3.19 */ |
type record TP_ParameterIndicator_Type { /* 23.040 cl. 9.2.3.27 */ |
Bit1 extBit1, /* */ |
Bit4 spare4, /* */ |
Bit1 tP_UDL, /* */ |
Bit1 tP_DCS, /* */ |
Bit1 tP_PID /* */ |
}; |
type record TP_Address_Type { |
/* 23.040 cl. 9.1.2.5 */ |
Oct1 iel, |
/* min value 2 and max value is 11 */ |
TypeOfNumberingPlan typeOfNumberingPlan, |
octetstring digits length(0 .. 10) optional |
} |
type Bit2 TP_MessageTypeIndicator_Type; |
/* 23.040 cl. 9.2.3.1 */ |
type Oct1 TP_MessageReference_Type; |
/* 23.040 cl. 9.2.3.6 */ |
type Oct1 TP_UserDataLength_Type; |
/* 23.040 cl. 9.2.3.16 */ |
type record TP_ProtocolIdentifier_Type { |
/* 23.040 cl. 9.2.3.9 */ |
Bit2 pidType, |
/* */ |
Bit1 interworking, |
/* */ |
Bit5 pidValue /* */ |
} |
type record TP_DataCodingScheme_Type { |
/* 23.040 cl. 9.2.3.10 + 23.040 cl. 4 */ |
Bit4 codingGroup, |
/* */ |
Bit4 codeValue /* */ |
} |
type hexstring TP_ServiceCentreTimeStamp_Type length(14); |
/* 23.040 cl. 9.2.3.11 */ |
type Oct1 TP_ValidityPeriodRelative_Type; |
/* 23.040 cl. 9.2.3.12.1 */ |
type hexstring TP_ValidityPeriodAbsolute_Type length(14); |
/* 23.040 cl. 9.2.3.12.2 */ |
type record TP_ValidityPeriodEnhanced_Type { |
/* 23.040 cl. 9.2.3.12.3 */ |
Bit1 extBit, |
/* */ |
Bit1 singleShot, |
/* */ |
Bit3 spare3, |
/* */ |
Bit3 validityPeriodFormat, |
/* */ |
Oct6 validityPeriod /* */ |
} |
type union TP_ValidityPeriod_Type { |
/* 23.040 cl. 9.2.3.3 */ |
TP_ValidityPeriodRelative_Type TP_ValidityPeriodRelative, |
/* Relative format */ |
TP_ValidityPeriodAbsolute_Type TP_ValidityPeriodAbsolute, |
/* Absolute format */ |
TP_ValidityPeriodEnhanced_Type TP_ValidityPeriodEnhanced /* Enhanced format */ |
} |
type record TP_Status_Type { |
/* 23.040 cl. 9.2.3.15 */ |
Bit1 reserved, |
/* */ |
Bit7 status /* */ |
} |
type Bit8 TP_Command_Type; |
/* 23.040 cl. 9.2.3.19 */ |
type record TP_ParameterIndicator_Type { |
/* 23.040 cl. 9.2.3.27 */ |
Bit1 extBit1, |
/* */ |
Bit4 spare4, |
/* */ |
Bit1 tP_UDL, |
/* */ |
Bit1 tP_DCS, |
/* */ |
Bit1 tP_PID /* */ |
} |
/* End SM-TP Type Declarations */ |
/* SM-TP PDU Declarations */ |
type record SMS_DELIVER_Type { /* 23.040 cl. 9.2.2.1 |
type record SMS_DELIVER_Type { |
/* 23.040 cl. 9.2.2.1 |
Direction: n -> ue */ |
Bit1 tP_ReplyPath, /* 23.040 cl. 9.2.3.17 */ |
Bit1 tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ |
Bit1 tP_StatusReportIndication, /* 23.040 cl. 9.2.3.4 */ |
Bit2 spare2, /* */ |
Bit1 tP_MoreMessagesToSend, /* 23.040 cl. 9.2.3.2 */ |
TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ |
TP_Address_Type tP_OriginatingAddress, /* 23.040 cl. 9.1.2.5 */ |
TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, /* 23.040 cl. 9.2.3.9 */ |
TP_DataCodingScheme_Type tP_DataCodingScheme_Type, /* 23.040 cl. 9.2.3.10 */ |
TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, /* 23.040 cl. 9.2.3.11 */ |
TP_UserDataLength_Type tP_UserDataLength, /* 23.040 cl. 9.2.3.16, derived from SUBMIT */ |
octetstring tP_UserData length (0..140) optional /* 23.040 cl. 9.2.3.24, derived from SUBMIT */ |
}; |
type record SMS_DELIVER_REPORT_Type { /* 23.040 cl. 9.2.2.1a |
Bit1 tP_ReplyPath, |
/* 23.040 cl. 9.2.3.17 */ |
Bit1 tP_UserDataHeaderIndicator, |
/* 23.040 cl. 9.2.3.23 */ |
Bit1 tP_StatusReportIndication, |
/* 23.040 cl. 9.2.3.4 */ |
Bit2 spare2, |
/* */ |
Bit1 tP_MoreMessagesToSend, |
/* 23.040 cl. 9.2.3.2 */ |
TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, |
/* 23.040 cl. 9.2.3.1 */ |
TP_Address_Type tP_OriginatingAddress, |
/* 23.040 cl. 9.1.2.5 */ |
TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, |
/* 23.040 cl. 9.2.3.9 */ |
TP_DataCodingScheme_Type tP_DataCodingScheme_Type, |
/* 23.040 cl. 9.2.3.10 */ |
TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, |
/* 23.040 cl. 9.2.3.11 */ |
TP_UserDataLength_Type tP_UserDataLength, |
/* 23.040 cl. 9.2.3.16, derived from SUBMIT */ |
octetstring tP_UserData length(0 .. 140) optional /* 23.040 cl. 9.2.3.24, derived from SUBMIT */ |
} |
type record SMS_DELIVER_REPORT_Type { |
/* 23.040 cl. 9.2.2.1a |
Direction: ue -> n */ |
Bit1 spare1, /* */ |
Bit1 tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ |
Bit4 spare4, /* */ |
TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ |
Oct1 tP_FailureCause optional, /* 23.040 cl. 9.2.3.22, provided if RP_ERROR, not if RP_ACK */ |
TP_ParameterIndicator_Type tP_ParameterIndicator, /* 23.040 cl. 9.2.3.27 */ |
TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, /* 23.040 cl. 9.2.3.9 */ |
TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, /* 23.040 cl. 9.2.3.10 */ |
TP_UserDataLength_Type tP_UserDataLength optional, /* 23.040 cl. 9.2.3.16 */ |
octetstring tP_UserData length (0..159) optional /* 23.040 cl. 9.2.3.24 */ |
}; |
type record SMS_SUBMIT_Type { /* 23.040 cl. 9.2.2.2 |
Bit1 spare1, |
/* */ |
Bit1 tP_UserDataHeaderIndicator, |
/* 23.040 cl. 9.2.3.23 */ |
Bit4 spare4, |
/* */ |
TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, |
/* 23.040 cl. 9.2.3.1 */ |
Oct1 tP_FailureCause optional, |
/* 23.040 cl. 9.2.3.22, provided if RP_ERROR, not if RP_ACK */ |
TP_ParameterIndicator_Type tP_ParameterIndicator, |
/* 23.040 cl. 9.2.3.27 */ |
TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, |
/* 23.040 cl. 9.2.3.9 */ |
TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, |
/* 23.040 cl. 9.2.3.10 */ |
TP_UserDataLength_Type tP_UserDataLength optional, |
/* 23.040 cl. 9.2.3.16 */ |
octetstring tP_UserData length(0 .. 159) optional /* 23.040 cl. 9.2.3.24 */ |
} |
type record SMS_SUBMIT_Type { |
/* 23.040 cl. 9.2.2.2 |
Direction: ue -> n */ |
Bit1 tP_ReplyPath, /* 23.040 cl. 9.2.3.17 */ |
Bit1 tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ |
Bit1 tP_StatusReportRequest, /* 23.040 cl. 9.2.3.5 */ |
Bit2 tP_ValidityPeriodFormat, /* 23.040 cl. 9.2.3.3 */ |
Bit1 tP_RejectDuplicates, /* 23.040 cl. 9.2.3.25 */ |
TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ |
TP_MessageReference_Type tP_MessageReference, /* 23.040 cl. 9.2.3.6 */ |
TP_Address_Type tP_DestinationAddress, /* 23.040 cl. 9.1.2.5 */ |
TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, /* 23.040 cl. 9.2.3.9 */ |
TP_DataCodingScheme_Type tP_DataCodingScheme_Type, /* 23.040 cl. 9.2.3.10 */ |
// one of the subsequent ValidityPeriod solutions has be removed |
TP_ValidityPeriod_Type tP_ValidityPeriod optional, /* 23.040 cl. 9.2.3.12 */ |
// TP_ValidityPeriodRelative_Type tP_ValidityPeriodRelative optional, /* 23.040 cl. 9.2.3.12.1 */ |
// TP_ValidityPeriodAbsolute_Type tP_ValidityPeriodAbsolute optional, /* 23.040 cl. 9.2.3.12.2 */ |
// TP_ValidityPeriodEnhanced_Type tP_ValidityPeriodEnhanced optional, /* 23.040 cl. 9.2.3.12.3 */ |
TP_UserDataLength_Type tP_UserDataLength, /* 23.040 cl. 9.2.3.16 */ |
octetstring tP_UserData length (0..140) optional /* 23.040 cl. 9.2.3.24 */ |
}; |
type record SMS_SUBMIT_REPORT_Type { /* 23.040 cl. 9.2.2.2a |
Bit1 tP_ReplyPath, |
/* 23.040 cl. 9.2.3.17 */ |
Bit1 tP_UserDataHeaderIndicator, |
/* 23.040 cl. 9.2.3.23 */ |
Bit1 tP_StatusReportRequest, |
/* 23.040 cl. 9.2.3.5 */ |
Bit2 tP_ValidityPeriodFormat, |
/* 23.040 cl. 9.2.3.3 */ |
Bit1 tP_RejectDuplicates, |
/* 23.040 cl. 9.2.3.25 */ |
TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, |
/* 23.040 cl. 9.2.3.1 */ |
TP_MessageReference_Type tP_MessageReference, |
/* 23.040 cl. 9.2.3.6 */ |
TP_Address_Type tP_DestinationAddress, |
/* 23.040 cl. 9.1.2.5 */ |
TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, |
/* 23.040 cl. 9.2.3.9 */ |
TP_DataCodingScheme_Type tP_DataCodingScheme_Type, |
/* 23.040 cl. 9.2.3.10 */ |
// one of the subsequent ValidityPeriod solutions has be removed |
TP_ValidityPeriod_Type tP_ValidityPeriod optional, |
/* 23.040 cl. 9.2.3.12 */ |
// TP_ValidityPeriodRelative_Type tP_ValidityPeriodRelative optional, /* 23.040 cl. 9.2.3.12.1 */ |
// TP_ValidityPeriodAbsolute_Type tP_ValidityPeriodAbsolute optional, /* 23.040 cl. 9.2.3.12.2 */ |
// TP_ValidityPeriodEnhanced_Type tP_ValidityPeriodEnhanced optional, /* 23.040 cl. 9.2.3.12.3 */ |
TP_UserDataLength_Type tP_UserDataLength, |
/* 23.040 cl. 9.2.3.16 */ |
octetstring tP_UserData length(0 .. 140) optional /* 23.040 cl. 9.2.3.24 */ |
} |
type record SMS_SUBMIT_REPORT_Type { |
/* 23.040 cl. 9.2.2.2a |
Direction: n -> ue */ |
Bit1 spare1, /* */ |
Bit1 tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ |
Bit4 spare4, /* */ |
TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ |
Oct1 tP_FailureCause optional, /* 23.040 cl. 9.2.3.22, provided if RP_ERROR, not if RP_ACK */ |
TP_ParameterIndicator_Type tP_ParameterIndicator, /* 23.040 cl. 9.2.3.27 */ |
TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, /* 23.040 cl. 9.2.3.11 */ |
TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, /* 23.040 cl. 9.2.3.9 */ |
TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, /* 23.040 cl. 9.2.3.10 */ |
TP_UserDataLength_Type tP_UserDataLength optional, /* 23.040 cl. 9.2.3.16 */ |
octetstring tP_UserData length (0..152) optional /* 23.040 cl. 9.2.3.24 */ |
}; |
type record SMS_STATUS_REPORT_Type { /* 23.040 cl. 9.2.2.3 |
Bit1 spare1, |
/* */ |
Bit1 tP_UserDataHeaderIndicator, |
/* 23.040 cl. 9.2.3.23 */ |
Bit4 spare4, |
/* */ |
TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, |
/* 23.040 cl. 9.2.3.1 */ |
Oct1 tP_FailureCause optional, |
/* 23.040 cl. 9.2.3.22, provided if RP_ERROR, not if RP_ACK */ |
TP_ParameterIndicator_Type tP_ParameterIndicator, |
/* 23.040 cl. 9.2.3.27 */ |
TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, |
/* 23.040 cl. 9.2.3.11 */ |
TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, |
/* 23.040 cl. 9.2.3.9 */ |
TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, |
/* 23.040 cl. 9.2.3.10 */ |
TP_UserDataLength_Type tP_UserDataLength optional, |
/* 23.040 cl. 9.2.3.16 */ |
octetstring tP_UserData length(0 .. 152) optional /* 23.040 cl. 9.2.3.24 */ |
} |
type record SMS_STATUS_REPORT_Type { |
/* 23.040 cl. 9.2.2.3 |
Direction: n -> ue */ |
Bit1 spare1, /* */ |
Bit1 tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ |
Bit1 tP_StatusReportQualifier, /* 23.040 cl. 9.2.3.26 */ |
Bit2 spare2, /* */ |
Bit1 tP_MoreMessagesToSend, /* 23.040 cl. 9.2.3.2 */ |
TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ |
TP_MessageReference_Type tP_MessageReference, /* 23.040 cl. 9.2.3.6 */ |
TP_Address_Type tP_RecipientAddress, /* 23.040 cl. 9.1.2.5 */ |
TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, /* 23.040 cl. 9.2.3.11 */ |
TP_ServiceCentreTimeStamp_Type tP_DischargeTime, /* 23.040 cl. 9.2.3.12 */ |
TP_Status_Type tP_Status, /* 23.040 cl. 9.2.3.15 */ |
TP_ParameterIndicator_Type tP_ParameterIndicator optional, /* 23.040 cl. 9.2.3.27 */ |
TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, /* 23.040 cl. 9.2.3.9 */ |
TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, /* 23.040 cl. 9.2.3.10 */ |
TP_UserDataLength_Type tP_UserDataLength optional, /* 23.040 cl. 9.2.3.16 */ |
octetstring tP_UserData length (0..143) optional /* 23.040 cl. 9.2.3.24 */ |
}; |
type record SMS_COMMAND_Type { /* 23.040 cl. 9.2.2.4 |
Bit1 spare1, |
/* */ |
Bit1 tP_UserDataHeaderIndicator, |
/* 23.040 cl. 9.2.3.23 */ |
Bit1 tP_StatusReportQualifier, |
/* 23.040 cl. 9.2.3.26 */ |
Bit2 spare2, |
/* */ |
Bit1 tP_MoreMessagesToSend, |
/* 23.040 cl. 9.2.3.2 */ |
TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, |
/* 23.040 cl. 9.2.3.1 */ |
TP_MessageReference_Type tP_MessageReference, |
/* 23.040 cl. 9.2.3.6 */ |
TP_Address_Type tP_RecipientAddress, |
/* 23.040 cl. 9.1.2.5 */ |
TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, |
/* 23.040 cl. 9.2.3.11 */ |
TP_ServiceCentreTimeStamp_Type tP_DischargeTime, |
/* 23.040 cl. 9.2.3.12 */ |
TP_Status_Type tP_Status, |
/* 23.040 cl. 9.2.3.15 */ |
TP_ParameterIndicator_Type tP_ParameterIndicator optional, |
/* 23.040 cl. 9.2.3.27 */ |
TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, |
/* 23.040 cl. 9.2.3.9 */ |
TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, |
/* 23.040 cl. 9.2.3.10 */ |
TP_UserDataLength_Type tP_UserDataLength optional, |
/* 23.040 cl. 9.2.3.16 */ |
octetstring tP_UserData length(0 .. 143) optional /* 23.040 cl. 9.2.3.24 */ |
} |
type record SMS_COMMAND_Type { |
/* 23.040 cl. 9.2.2.4 |
Direction: ue -> n */ |
Bit1 spare1, /* */ |
Bit1 tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ |
Bit1 tP_StatRptReq, /* Table 8.4/3GPP TS 24.011 */ |
Bit3 spare3, /* */ |
TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ |
TP_MessageReference_Type tP_MessageReference, /* 23.040 cl. 9.2.3.6 */ |
TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, /* 23.040 cl. 9.2.3.9 */ |
TP_Command_Type tP_CommandType, /* 23.040 cl. 9.2.3.19 */ |
TP_MessageReference_Type tP_MessageNumber, /* 23.040 cl. 9.2.3.18 */ |
TP_Address_Type tP_DestinationAddress, /* 23.040 cl. 9.1.2.5 */ |
TP_UserDataLength_Type tP_CommandDataLength, /* 23.040 cl. 9.2.3.20 (number of octets) */ |
octetstring tP_CommandData length (0..156) optional /* 23.040 cl. 9.2.3.21 */ |
}; |
Bit1 spare1, |
/* */ |
Bit1 tP_UserDataHeaderIndicator, |
/* 23.040 cl. 9.2.3.23 */ |
Bit1 tP_StatRptReq, |
/* Table 8.4/3GPP TS 24.011 */ |
Bit3 spare3, |
/* */ |
TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, |
/* 23.040 cl. 9.2.3.1 */ |
TP_MessageReference_Type tP_MessageReference, |
/* 23.040 cl. 9.2.3.6 */ |
TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, |
/* 23.040 cl. 9.2.3.9 */ |
TP_Command_Type tP_CommandType, |
/* 23.040 cl. 9.2.3.19 */ |
TP_MessageReference_Type tP_MessageNumber, |
/* 23.040 cl. 9.2.3.18 */ |
TP_Address_Type tP_DestinationAddress, |
/* 23.040 cl. 9.1.2.5 */ |
TP_UserDataLength_Type tP_CommandDataLength, |
/* 23.040 cl. 9.2.3.20 (number of octets) */ |
octetstring tP_CommandData length(0 .. 156) optional /* 23.040 cl. 9.2.3.21 */ |
} |
type union TP_PDU_Type { |
SMS_DELIVER_Type SMS_DELIVER, |
SMS_DELIVER_REPORT_Type SMS_DELIVER_REPORT, |
SMS_SUBMIT_Type SMS_SUBMIT, |
SMS_SUBMIT_REPORT_Type SMS_SUBMIT_REPORT, |
SMS_STATUS_REPORT_Type SMS_STATUS_REPORT, |
SMS_COMMAND_Type SMS_COMMAND |
}; |
/* End SM-TP PDU Declarations */ |
} with { encode "SMS Types"} // group SMS_Declarations |
SMS_DELIVER_Type SMS_DELIVER, |
SMS_DELIVER_REPORT_Type SMS_DELIVER_REPORT, |
SMS_SUBMIT_Type SMS_SUBMIT, |
SMS_SUBMIT_REPORT_Type SMS_SUBMIT_REPORT, |
SMS_STATUS_REPORT_Type SMS_STATUS_REPORT, |
SMS_COMMAND_Type SMS_COMMAND |
} |
/* End SM-TP PDU Declarations */ |
} |
with { |
encode "SMS Types"; |
} // group SMS_Declarations |
} // End of module LibSip_SMSTypesAndValues |
/trunk/ttcn/LibSip_SimpleMsgSummaryTypes.ttcn |
---|
1,59 → 1,57 |
/** |
* @author STF 406 |
* @version $Id: LibSip_SimpleMsgSummaryTypes.ttcn 488 2010-11-08 10:17:19Z pintar $ |
* @desc This module provides the SMS type system for SIP tests. |
* This module is part of LibSipV2. |
*/ |
module LibSip_SimpleMsgSummaryTypes { // RFC 3842 |
group SMSConstants{ |
* @author STF 406, 471 |
* @version $Id: LibSip_SimpleMsgSummaryTypes.ttcn 488 2010-11-08 10:17:19Z pintar $ |
* @desc This module provides the SMS type system for SIP tests. |
* This module is part of LibSipV3. |
*/ |
module LibSip_SimpleMsgSummaryTypes { |
// RFC 3842 |
group SMSConstants { |
// IMS ETSI name MWI application |
const charstring c_imsEtsiMwiApplication := "application/simple-message-summary"; |
// msg_status line := "Message-Waiting" |
const charstring c_messageWaiting := "Message-Waiting"; |
// msg_status line := "Message-Account" |
const charstring c_messageAccount := "Message-Account"; |
// msg_summary line := "Voice-Message" |
const charstring c_voiceMessage := "Voice-Message"; |
// msg_status line := "Message-Waiting" |
const charstring c_messageWaiting := "Message-Waiting"; |
// msg_status line := "Message-Account" |
const charstring c_messageAccount := "Message-Account"; |
// msg_summary line := "Voice-Message" |
const charstring c_voiceMessage := "Voice-Message"; |
} |
group SMSTypes{ |
//TODO add (SMS sms) into type union MessageBody{ in module LibSIPTypesAndValues |
type record SimpleMsgSummary { //Simple_message_summary |
group SMSTypes { |
type record SimpleMsgSummary { |
// Simple_message_summary |
Msg_status_line msg_status_line, |
Msg_account msg_account optional, |
Msg_summary_line_list msg_summary_line_list optional, |
Opt_msg_headers opt_msg_headers optional |
Opt_msg_headers opt_msg_headers optional |
} |
type record Msg_status_line { |
charstring msg_type, |
charstring msg_status |
} |
type record Msg_account { |
charstring msg_type_account, |
charstring account_URI |
} |
type set of Msg_summary_line Msg_summary_line_list; |
type record Msg_summary_line { |
charstring msg_context_class, |
charstring msgs, |
charstring urgent_msgs optional |
} |
type set of charstring Opt_msg_headers; |
//type integer msgcount length(1); //msgs and urgent_msgs can be dividet into subtypes |
// type integer msgcount length(1); //msgs and urgent_msgs can be dividet into subtypes |
} |
} |
/trunk/ttcn/LibSip_Steps.ttcn |
---|
1,4515 → 1,4902 |
/* |
* @author STF 346, STF366, STF368, STF369, STF450 |
* @version $Id$ |
* @desc This module provides the types used by the test component |
/** |
* @author STF 346, STF366, STF368, STF369, STF450, STF471 |
* @version $Id$ |
* @desc This module provides the functions, altsteps and external functions used |
* for SIP-IMS tests. |
* This module is part of LibSipV2. |
*/ |
* This module is part of LibSipV3. |
*/ |
module LibSip_Steps { |
// LibCommon |
import from LibCommon_Sync all; |
import from LibCommon_VerdictControl all; |
// LibSip |
import from LibSip_SIPTypesAndValues all; |
import from LibSip_SDPTypes all; |
import from LibSip_Templates all; |
import from LibSip_Interface all; |
import from LibSip_PIXITS all; |
import from LibSip_XMLTypes all; |
module LibSip_Steps //MRO |
{ |
//LibCommon |
import from LibCommon_Sync all ; |
import from LibCommon_VerdictControl all ; |
//LibSip |
import from LibSip_SIPTypesAndValues all; |
import from LibSip_SDPTypes all; |
import from LibSip_Templates all; |
import from LibSip_Interface all; |
import from LibSip_PIXITS all; |
import from LibSip_XMLTypes all; |
group externalfunctions { |
group externalfunctions { |
//Return random charstring |
external function fx_rndStr() return charstring; |
// Return the equivalent string in lower case |
external function fx_putInLowercase(charstring par_string) return charstring; |
external function fx_getIpAddr(charstring host_name) return charstring; |
/** |
* @desc External function to return random charstring |
*/ |
external function fx_rndStr( |
) return charstring; |
/** |
* @desc External function to return the equivalent string in lower case |
*/ |
external function fx_putInLowercase( |
charstring p_string |
) return charstring; |
// External function to generate a digest response. |
// References: |
// * RFC 2617 HTTP Authentication: Basic and Digest Access |
// Authentication, and |
// * RFC 1321 The MD5 Message-Digest Algorithm |
// See RFC 2617, chapter 5 Sample implementation, for example usage, as |
// the signature of calculateDigestResponse is according to the example |
// given in the RFC. |
// |
external function fx_calculateDigestResponse( |
charstring nonce, |
charstring cnonce, |
charstring user, |
charstring realm, |
charstring passwd, |
charstring alg, |
charstring nonceCount, |
charstring method, |
charstring qop, |
charstring URI, |
charstring HEntity) return charstring; |
/** |
* @desc External function to get IP address. |
*/ |
external function fx_getIpAddr( |
charstring p_host_name |
) return charstring; |
} |
/** |
* @desc External function to generate a digest response. |
* @reference RFC 2617 HTTP Authentication: Basic and Digest Access Authentication, and RFC 1321 The MD5 Message-Digest Algorithm |
* @see RFC 2617, chapter 5 Sample implementation, for example usage, as the signature of calculateDigestResponse is according to the example given in the RFC. |
*/ |
external function fx_calculateDigestResponse( |
charstring p_nonce, |
charstring p_cnonce, |
charstring p_user, |
charstring p_realm, |
charstring p_passwd, |
charstring p_alg, |
charstring p_nonceCount, |
charstring p_method, |
charstring p_qop, |
charstring p_URI, |
charstring p_HEntity |
) return charstring; |
group ParameterOperations { |
} |
/** |
* |
* @desc function to generate a 32 bits random number as a charstring for tag field |
* (used as e.g.: tag in from-header field, or branch parameter in via header) |
* @return random value with at least 32 bits of randomness |
* |
*/ |
function f_getRndTag() return charstring |
{ |
var charstring tag_value; |
//tag_value is initialized with a random value with at least 32 bits of randomness |
// 4294967296 is a 32 bits integer |
tag_value := fx_rndStr()&fx_rndStr(); |
return(tag_value); |
} |
group ParameterOperations { |
/** |
* |
* @desc Function to prepare credentials for request that has an empty |
* entity body such as a REGISTER message. |
* @param p_userprofile to get important parameters |
* @return Credentials field |
*/ |
function f_calculatecCredentials_empty(in SipUserProfile p_userprofile, in boolean p_algorithm:=false) return Credentials |
{ |
var template Credentials v_result; |
var charstring v_nonce := ""; |
// RFC 2617 3.2.2 username: |
// The name of user in the specified realm. |
var charstring v_username := p_userprofile.privUsername; |
var charstring v_realm := p_userprofile.registrarDomain; |
var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; |
var charstring v_response := ""; |
// Construct credentials for an Authorization field of a request. |
if (not p_algorithm) { |
v_result := |
{ |
digestResponse := |
{ |
{ id := "username", paramValue := v_username }, |
{ id := "realm", paramValue := v_realm }, |
{ id := "uri", paramValue := v_uri }, |
{ id := "nonce=""""", paramValue := omit }, // already enclosed to " characters |
{ id := "response=""""", paramValue := omit } // already enclosed to " characters |
}}; |
} else { |
v_result := |
{ |
digestResponse := |
{ |
{ id := "username", paramValue := v_username }, |
{ id := "realm", paramValue := v_realm }, |
{ id := "uri", paramValue := v_uri }, |
{ id := "nonce=""""", paramValue := omit }, // already enclosed to " characters |
{ id := "response=""""", paramValue := omit }, // already enclosed to " characters |
{ id := "algorithm", paramValue := PX_AUTH_ALGORITHM } // already enclosed to " characters |
}}; |
} |
return valueof(v_result); |
} |
/** |
* @desc function to generate a 32 bits random number as a charstring for tag field (used as e.g.: tag in from-header field, or branch parameter in via header) |
* @return random value with at least 32 bits of randomness |
*/ |
function f_getRndTag( |
) return charstring { |
var charstring v_tag_value; |
// tag_value is initialized with a random value with at least 32 bits of randomness |
// 4294967296 is a 32 bits integer |
v_tag_value := fx_rndStr() & fx_rndStr(); |
return (v_tag_value); |
} |
/** |
* @desc Function to prepare credentials for request that has an empty entity body such as a REGISTER message. |
* @param p_userprofile to get important parameters |
* @param p_algorithm Algorthm to be used. Default: omit |
* @return Credentials field |
*/ |
function f_calculatecCredentials_empty( |
in SipUserProfile p_userprofile, |
in boolean p_algorithm := false |
) return Credentials { |
var Credentials v_result; |
/** |
* |
* @desc Function to calculate credentials for request that has an empty |
* entity body such as a REGISTER message. |
* @param p_userprofile to get important parameters |
* @param p_method (can be "REGISTER", "INVITE",....) |
* @param p_challenge parameter from 4xx response |
* @return Credentials field |
* @verdict |
*/ |
function f_calculatecCredentials(in SipUserProfile p_userprofile, in charstring p_method, |
in CommaParam_List p_challenge) return Credentials |
{ |
var template Credentials v_result; |
var charstring v_nonce := ""; |
// Use a fixed client nonce. |
var charstring v_cnonce := "1317265"; |
// RFC 2617 3.2.2 username: |
// The name of user in the specified realm. |
var charstring v_username := p_userprofile.privUsername; |
var charstring v_realm; |
// RFC 2617 3.2.2.2 passwd: |
// A known shared secret, the password of user of the specified |
// username. |
var charstring v_passwd := p_userprofile.passwd; |
var charstring v_algorithm; |
// Use a fixed nonce count. |
const charstring c_nonceCount := "00000002"; |
// RFC 2617 3.2.2 username: |
// The name of user in the specified realm. |
var charstring v_username := p_userprofile.privUsername; |
var charstring v_realm := p_userprofile.registrarDomain; |
var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; |
var CommaParam_List v_digestResponse := {}; |
// Construct credentials for an Authorization field of a request. |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "username", |
paramValue := { quotedString := v_username } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "realm", |
paramValue := { quotedString := v_realm } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "uri", |
paramValue := { quotedString := v_uri } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "nonce", |
paramValue := { quotedString := "" } |
}); // already enclosed to " characters |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "response", |
paramValue := { quotedString := "" } |
}); // already enclosed to " characters |
var charstring v_qop := p_userprofile.qop; |
var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; |
// MD5 hash of empty entity body. |
const charstring c_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; |
var charstring v_response; |
var charstring v_opaque; |
// extract nonce, realm, algorithm, and opaque from challenge |
v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); |
v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); |
v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); |
v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); |
// calculate a digest response for the Authorize header |
v_response := fx_calculateDigestResponse( |
v_nonce, |
v_cnonce, |
v_username, |
v_realm, |
v_passwd, |
v_algorithm, |
c_nonceCount, |
p_method, |
v_qop, |
v_uri, |
c_hEntity); |
// Construct credentials for an Authorization field of a request. |
v_result := |
{ |
digestResponse := |
{ |
{ id := "username", paramValue := v_username }, |
{ id := "realm", paramValue := v_realm }, |
{ id := "nonce", paramValue := v_nonce }, |
{ id := "uri", paramValue := v_uri }, |
{ id := "response", paramValue := v_response }, |
{ id := "algorithm="&v_algorithm, paramValue := omit }, // algorithm is not enclosed to " characters |
{ id := "cnonce", paramValue := v_cnonce }, |
{ id := "opaque", paramValue := v_opaque }, // already enclosed to " characters |
{ id := "qop="&v_qop, paramValue := omit },//qop |
{ id := "nc="&c_nonceCount, paramValue := omit }//nonceCount |
} |
}; |
return valueof(v_result); |
} |
if (p_algorithm) { |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "algorithm", |
paramValue := { tokenOrHost := PX_AUTH_ALGORITHM } |
}); // already enclosed to " characters |
} |
v_result := {digestResponse := v_digestResponse}; |
/** |
* |
* @desc Function to calculate credentials for request that has an empty |
* entity body such as a REGISTER message. NO RESPONSE value to cause an error! |
* @param p_userprofile to get important parameters |
* @param p_method (can be "REGISTER", "INVITE",....) |
* @param p_challenge parameter from 4xx response |
* @return Credentials field |
* @verdict |
*/ |
function f_calculatecCredentials_wo_response(in SipUserProfile p_userprofile, in charstring p_method, |
in CommaParam_List p_challenge) return Credentials |
{ |
var Credentials v_result; |
var charstring v_nonce := ""; |
// Use a fixed client nonce. |
var charstring v_cnonce := "1317265"; |
// RFC 2617 3.2.2 username: |
// The name of user in the specified realm. |
var charstring v_username := p_userprofile.privUsername; |
var charstring v_realm; |
// RFC 2617 3.2.2.2 passwd: |
// A known shared secret, the password of user of the specified |
// username. |
var charstring v_passwd := p_userprofile.passwd; |
var charstring v_algorithm; |
// Use a fixed nonce count. |
const charstring c_nonceCount := "00000002"; |
return v_result; |
} |
var charstring v_qop := p_userprofile.qop; |
var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; |
// MD5 hash of empty entity body. |
const charstring c_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; |
var charstring v_response; |
var charstring v_opaque; |
// extract nonce, realm, algorithm, and opaque from challenge |
v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); |
v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); |
v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); |
v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); |
// calculate a digest response for the Authorize header |
v_response := fx_calculateDigestResponse( |
v_nonce, |
v_cnonce, |
v_username, |
v_realm, |
v_passwd, |
v_algorithm, |
c_nonceCount, |
p_method, |
v_qop, |
v_uri, |
c_hEntity); |
// Construct credentials for an Authorization field of a request. |
v_result := |
{ |
digestResponse := |
{ |
{ id := "username", paramValue := v_username }, |
{ id := "realm", paramValue := v_realm }, |
{ id := "nonce", paramValue := v_nonce }, |
{ id := "uri", paramValue := v_uri }, |
// { id := "response", paramValue := v_response }, // not included to cause an error |
{ id := "algorithm="&v_algorithm, paramValue := omit }, // algorithm is not enclosed to " characters |
{ id := "cnonce", paramValue := v_cnonce }, |
{ id := "opaque=""""", paramValue := omit }, // already enclosed to " characters |
{ id := "qop="&v_qop, paramValue := omit },//qop |
{ id := "nc="&c_nonceCount, paramValue := omit }//nonceCount |
} |
}; |
return v_result; |
} |
/** |
* |
* @desc Function to calculate credentials for response 401 - WWW-Authorization |
* @param p_qop of the peer UE (alternatively ) |
* @param p_authorization parameter from 1st REGISTER request |
* @return Credentials field |
* @verdict |
*/ |
function f_calculatecChallenge_forWWWAuthorizationBody(in charstring p_qop, in Authorization p_authorization) return Challenge |
{ |
var CommaParam_List v_challenge; |
if (ischosen(p_authorization.body[0].digestResponse)) |
{v_challenge := p_authorization.body[0].digestResponse} |
else {v_challenge := p_authorization.body[0].otherResponse.authParams}; |
return (f_calculatecChallenge_forWWWAuthorization(p_qop,v_challenge)); |
} |
/** |
* |
* @desc Function to calculate credentials for response 401 - WWW-Authorization |
* @param p_qop of the peer UE (alternatively ) |
* @param p_challenge parameter from 1st REGISTER request |
* @return Credentials field |
* @verdict |
*/ |
function f_calculatecChallenge_forWWWAuthorization(in charstring p_qop, in CommaParam_List p_challenge) return Challenge |
{ |
var Challenge v_result; |
var charstring v_realm; |
var charstring v_qop := p_qop; |
/** |
* @desc Function to calculate credentials for request that has an empty entity body such as a REGISTER message. |
* @param p_userprofile to get important parameters |
* @param p_method (can be "REGISTER", "INVITE",....) |
* @param p_challenge parameter from 4xx response |
* @return Credentials field |
* @verdict |
*/ |
function f_calculatecCredentials( |
in SipUserProfile p_userprofile, |
in charstring p_method, |
in CommaParam_List p_challenge |
) return Credentials { |
var Credentials v_result; |
var charstring v_nonce := ""; |
var charstring v_cnonce := int2str(float2int(int2float(13172657659 - 1317266) * rnd()) + 1317265); |
v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); |
// Construct credentials for an Authorization field of a request. |
v_result := |
{ |
digestCln := |
{ |
{ id := "realm", paramValue := v_realm }, |
{ id := "nonce", paramValue := "0edff6c521cc3f407f2d9e01cf6ed82b"}, |
{ id := "algorithm", paramValue := PX_AUTH_ALGORITHM/*TODO To be removed c_algorithm*/ }, // algorithm is not enclosed with " characters |
{ id := "ck", paramValue := "00112233445566778899aabbccddeeff" }, |
{ id := "ik", paramValue := "ffeeddccbbaa99887766554433221100" }, // already enclosed to " characters |
{ id := "qop="""&v_qop&"""", paramValue := omit }//qop |
// RFC 2617 3.2.2 username: |
// The name of user in the specified realm. |
var charstring v_username := p_userprofile.privUsername; |
var charstring v_realm; |
} |
}; |
return v_result; |
} |
/** |
* |
* @desc Function to calculate credentials for request that has an empty |
* entity body such as a REGISTER message and at the end put different private name |
* @param p_userprofile to get important parameters |
* @param p_method (can be "REGISTER", "INVITE",....) |
* @param p_challenge parameter from 4xx response |
* @return Credentials field |
* @verdict |
*/ |
function f_calculatecCredentialsAndChangeUserName(in SipUserProfile p_userprofile, in charstring p_method, |
in CommaParam_List p_challenge) return Credentials |
{ |
var Credentials v_result; |
var charstring v_nonce := ""; |
// Use a fixed client nonce. |
var charstring v_cnonce := "1317265"; |
// RFC 2617 3.2.2 username: |
// The name of user in the specified realm. |
var charstring v_username := p_userprofile.privUsername; |
var charstring v_realm; |
// RFC 2617 3.2.2.2 passwd: |
// A known shared secret, the password of user of the specified |
// username. |
var charstring v_passwd := p_userprofile.passwd; |
var charstring v_algorithm; |
// Use a fixed nonce count. |
const charstring c_nonceCount := "00000002"; |
// RFC 2617 3.2.2.2 passwd: |
// A known shared secret, the password of user of the specified |
// username. |
var charstring v_passwd := p_userprofile.passwd; |
var charstring v_algorithm; |
var charstring v_qop := p_userprofile.qop; |
var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; |
// MD5 hash of empty entity body. |
const charstring c_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; |
var charstring v_response; |
var charstring v_opaque; |
// extract nonce, realm, algorithm, and opaque from challenge |
v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); |
v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); |
v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); |
v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); |
// calculate a digest response for the Authorize header |
v_response := fx_calculateDigestResponse( |
v_nonce, |
v_cnonce, |
v_username, |
v_realm, |
v_passwd, |
v_algorithm, |
c_nonceCount, |
p_method, |
v_qop, |
v_uri, |
c_hEntity); |
// Construct credentials for an Authorization field of a request. |
v_result := |
{ |
digestResponse := |
{ |
{ id := "username", paramValue := "DifferentToPrivateUser"}, |
{ id := "realm", paramValue := v_realm }, |
{ id := "nonce", paramValue := v_nonce }, |
{ id := "uri", paramValue := v_uri }, |
{ id := "response", paramValue := v_response }, |
{ id := "algorithm="&v_algorithm, paramValue := omit }, // algorithm is not enclosed to " characters |
{ id := "cnonce", paramValue := v_cnonce }, |
{ id := "opaque=""""", paramValue := omit }, // already enclosed to " characters |
{ id := "qop="&v_qop, paramValue := omit },//qop |
{ id := "nc="&c_nonceCount, paramValue := omit }//nonceCount |
} |
}; |
return v_result; |
} |
// a new pseudo-random cnonce value is used every time |
// that assumes it is only used once |
const charstring cl_nonceCount := "00000001"; |
var charstring v_qop := p_userprofile.qop; |
var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; |
/** |
* |
* @desc Function to check if param related to id from CommanParam_List exist |
* containing challenge. |
* @param p_challenge parameter from 4xx response |
* @param p_id name of parameter("nonce", "realm", "ck", "ik"...) |
* @return parameter p_id value |
*/ |
function f_checkParamValueFromChallengeIfPresent(in CommaParam_List p_challenge, in charstring p_id) return boolean |
{ |
var boolean v_result := false; |
var integer v_len := sizeof(p_challenge); |
var charstring v_id := fx_putInLowercase(p_id); |
for (var integer i := 0; i < v_len; i := i + 1) |
{ |
if (fx_putInLowercase(p_challenge[i].id) == v_id) |
{ |
v_result := true; |
} |
} |
return v_result; |
} |
/** |
* |
* @desc Function to check if tag is present in SemicolonParam_List |
* @param p_param_l SemicolonParam_List |
* @return boolean true if tag is present |
*/ |
function f_checkTagPresent(SemicolonParam_List p_param_l) runs on SipComponent return boolean { |
var integer v_numberOfParams; |
var integer i := 0; |
// MD5 hash of empty entity body. |
const charstring cl_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; |
var charstring v_response; |
var charstring v_opaque; |
var CommaParam_List v_digestResponse := {}; |
v_numberOfParams := sizeof (p_param_l); |
while (i < v_numberOfParams) { |
if (fx_putInLowercase(p_param_l[i].id) == c_tagId) { |
return (true); |
} |
i := i + 1; |
} |
return (false); |
} |
/** |
* |
* @desc Function to extract paramValue related to id from CommanParam_List |
* containing challenge. |
* @param p_challenge parameter from 4xx response |
* @param p_id name of parameter("nonce", "realm",...) |
* @return parameter p_id value |
*/ |
function f_extractParamValueFromChallenge(in CommaParam_List p_challenge, in charstring p_id) return charstring |
{ |
var charstring v_result := ""; |
var integer v_len := sizeof(p_challenge); |
var charstring v_id := fx_putInLowercase(p_id); |
for (var integer i := 0; i < v_len; i := i + 1) |
{ |
if (fx_putInLowercase(p_challenge[i].id) == v_id) |
{ |
v_result := p_challenge[i].paramValue; |
} |
} |
// extract nonce, realm, algorithm, and opaque from challenge |
v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); |
v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); |
v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); |
v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); |
if (v_result == "") |
{ |
if(match(p_id,"algorithm")) |
{ |
v_result := "MD5" |
} |
else if(match(p_id,"opaque")) |
{ |
v_result := "" |
} |
else |
{ |
var charstring v_tmpchar := "Cannot acquire value from credentials."; |
log ("Cannot acquire value from credentials."); |
setverdict(inconc); |
stop; |
} |
} |
return v_result; |
} |
}//end group ParameterOperations |
// calculate a digest response for the Authorize header |
v_response := fx_calculateDigestResponse(v_nonce, v_cnonce, v_username, v_realm, v_passwd, v_algorithm, cl_nonceCount, p_method, v_qop, v_uri, cl_hEntity); |
group FieldOperations { |
// Construct credentials for an Authorization field of a request. |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "username", |
paramValue := { quotedString := v_username } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "realm", |
paramValue := { quotedString := v_realm } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "nonce", |
paramValue := { quotedString := v_nonce } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "uri", |
paramValue := { quotedString := v_uri } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "response", |
paramValue := { quotedString := v_response } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "algorithm", |
paramValue := { tokenOrHost := "md5" } |
}); // algorithm is not enclosed to " characters |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "cnonce", |
paramValue := { quotedString := v_cnonce } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "qop", |
paramValue := { tokenOrHost := v_qop } |
}); // qop |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "nc", |
paramValue := { tokenOrHost := cl_nonceCount } |
}); // nonceCount |
if (v_opaque != "") { |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "opaque", |
paramValue := { quotedString := v_opaque } |
}); // already enclosed to " characters |
} |
v_result := {digestResponse := v_digestResponse}; |
/** |
* |
* @desc function adds "Tag"-parameter in "To"-headerfield |
* @param p_to To header field that should get a Tag parameter |
* |
*/ |
function f_addTagInTo(inout To p_to) runs on SipComponent |
{ |
f_addParameterTagIfNotPresent(c_tagId, f_getRndTag(), p_to); |
} |
return v_result; |
} |
/** |
* |
* @desc addition of a single parameter in the via header field |
* @param p_parameter_name name of parameter to be added |
* @param p_parameter_value value of parameter to be added |
* @param p_viaBody the via parameter to be extended |
* @verdict |
*/ |
function f_addParameterIfNotPresent( |
in charstring p_parameter_name, |
in charstring p_parameter_value, |
inout ViaBody p_viaBody) |
{ |
if (ispresent (p_viaBody.viaParams)) { |
return; |
} |
p_viaBody.viaParams := { |
{ |
p_parameter_name, |
p_parameter_value |
} |
}; |
} |
/** |
* |
* @desc function to addd a parameter to the "To" header field (if there is not any parameter) |
* @param p_parameter_name name of the parameter to be added |
* @param p_parameter_value value of the paramter to be added |
* @param p_to "To" header field to be extended |
* @verdict |
*/ |
function f_addParameterTagIfNotPresent( |
in charstring p_parameter_name, |
in charstring p_parameter_value, |
inout To p_to) |
{ |
if (ispresent (p_to.toParams)) { |
return; |
} |
p_to.toParams := { |
{ |
p_parameter_name, |
p_parameter_value |
} |
}; |
} |
/** |
* @desc Function to calculate credentials for request that has an empty entity body such as a REGISTER message. NO RESPONSE value to cause an error! |
* @param p_userprofile to get important parameters |
* @param p_method (can be "REGISTER", "INVITE",....) |
* @param p_challenge parameter from 4xx response |
* @return Credentials field |
* @verdict |
*/ |
function f_calculatecCredentials_wo_response( |
in SipUserProfile p_userprofile, |
in charstring p_method, |
in CommaParam_List p_challenge |
) return Credentials { |
var Credentials v_result; |
var charstring v_nonce := ""; |
var charstring v_cnonce := int2str(float2int(int2float(13172657659 - 1317266) * rnd()) + 1317265); |
/** |
* |
* @desc function compares the IP address of two hosts |
* @param p_host1 hostname |
* @param p_host2 hostname |
* @return boolean value that is true if the IP addresses are identical |
* @verdict |
*/ |
function f_equivalentHostAddr(in charstring p_host1, in charstring p_host2) return boolean |
{ |
//A DNS server may be used |
return(fx_getIpAddr(p_host1) == fx_getIpAddr(p_host2)); |
} |
// RFC 2617 3.2.2 username: |
// The name of user in the specified realm. |
var charstring v_username := p_userprofile.privUsername; |
var charstring v_realm; |
// RFC 2617 3.2.2.2 passwd: |
// A known shared secret, the password of user of the specified |
// username. |
var charstring v_passwd := p_userprofile.passwd; |
var charstring v_algorithm; |
/** |
* |
* @desc function checks if Require contains Precondition |
* @param p_message (request or response) SIP message to be analysed |
* @return true if p_id parameter exist |
*/ |
function f_checkRequirePrecondition(in Request p_message) |
{ |
if (ispresent(p_message.msgHeader.require)) |
{ |
var boolean v_precondition_found:=false; |
for (var integer v_i:=0; v_i<sizeof(p_message.msgHeader.require.optionsTags); v_i:=v_i+1){ |
if (match(p_message.msgHeader.require.optionsTags[v_i],c_tagPrecond)) { |
v_precondition_found:=true; |
} |
} |
if (not(v_precondition_found)){ |
setverdict(fail); |
log("FAIL: precondition not found in Require options list!"); |
} |
} |
else |
{ |
setverdict(fail); |
log("FAIL: Require options is not present!"); |
} |
} |
/** |
* |
* @desc function checks if P-Charging-Vector contains a particular parameter |
* @param p_message (request or response) SIP message to be analysed |
* @param p_id name of parameter |
* @return true if p_id parameter exist |
*/ |
function f_checkPChargingVectorHeaderParamId(in Request p_message, charstring p_id) return boolean |
{ |
var integer v_chargeParamsLen; |
if (ispresent(p_message.msgHeader.pChargingVector)) { |
for (var integer i:=0; i<sizeof(p_message.msgHeader.pChargingVector.chargeParams); i:=i+1) |
{if(p_message.msgHeader.pChargingVector.chargeParams[i].id == p_id) |
{return (true)} |
}; |
} |
return (false) |
} |
// a new pseudo-random cnonce value is used every time |
// that assumes it is only used once |
const charstring cl_nonceCount := "00000001"; |
var charstring v_qop := p_userprofile.qop; |
var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; |
/** |
* |
* @desc function checks if P-Charging-Vector contains a particular parameter |
* @param p_message (request or response) SIP message to be analysed |
* @param p_id name of parameter |
* @return true if p_id parameter exist |
*/ |
function f_checkPChargingVectorHeaderParamIdResponse(in Response p_message, charstring p_id) return boolean |
{ |
var integer v_chargeParamsLen; |
if (ispresent(p_message.msgHeader.pChargingVector)) { |
for (var integer i:=0; i<sizeof(p_message.msgHeader.pChargingVector.chargeParams); i:=i+1) |
{if(p_message.msgHeader.pChargingVector.chargeParams[i].id == p_id) |
{return (true)} |
}; |
} |
return (false) |
} |
// MD5 hash of empty entity body. |
const charstring cl_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; |
var charstring v_response; |
var charstring v_opaque; |
var CommaParam_List v_digestResponse := {}; |
/** |
* |
* @desc function returns the Host/Port of a given Contact header field |
* @param p_contact contact header field to be analysed |
* @return Host/Port record from the contact header field |
*/ |
function f_getContactUri(in ContactAddress p_contact) runs on SipComponent return SipUrl |
{ |
var SipUrl v_SipUrl; |
if (ischosen(p_contact.addressField.nameAddr)) |
{ |
v_SipUrl := p_contact.addressField.nameAddr.addrSpec; |
} |
else |
{ |
v_SipUrl := p_contact.addressField.addrSpecUnion; |
} |
return(v_SipUrl); |
} // end f_getContactUri |
// extract nonce, realm, algorithm, and opaque from challenge |
v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); |
v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); |
v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); |
v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); |
/** |
* |
* @desc function returns the Host/Port of a given Contact header field |
* @param p_contact contact header field to be analysed |
* @return Host/Port record from the contact header field |
*/ |
function f_getContactAddr(in ContactAddress p_contact) runs on SipComponent return HostPort |
{ |
var HostPort v_locAddr; |
var SipUrl v_SipUrl; |
if (ischosen(p_contact.addressField.nameAddr)) |
{ |
v_SipUrl := p_contact.addressField.nameAddr.addrSpec; |
} |
else |
{ |
v_SipUrl := p_contact.addressField.addrSpecUnion; |
} |
v_locAddr.host := v_SipUrl.components.sip.hostPort.host; |
if (ispresent(v_SipUrl.components.sip.hostPort.portField)) |
{ |
v_locAddr.portField := v_SipUrl.components.sip.hostPort.portField; |
} |
else |
{ |
v_locAddr.portField := c_defaultSipPort; |
} |
return(v_locAddr); |
} // end f_getContactAddr |
// calculate a digest response for the Authorize header |
v_response := fx_calculateDigestResponse(v_nonce, v_cnonce, v_username, v_realm, v_passwd, v_algorithm, cl_nonceCount, p_method, v_qop, v_uri, cl_hEntity); |
/** |
* |
* @desc function checks if History-Info-Header of the p_message contains a particular URI |
* @param p_message (request or response) SIP message to be analysed |
* @param p_URI name of parameter |
* @return true if p_URI parameter exist |
*/ |
function f_checkHeaderInfoURI(in Response p_message, SipUrl p_URI) return boolean |
{ |
var integer v_chargeParamsLen; |
if (ispresent(p_message.msgHeader.historyInfo)) { |
for (var integer i:=0; i<sizeof(p_message.msgHeader.historyInfo.historyInfoList); i:=i+1) |
{if(p_message.msgHeader.historyInfo.historyInfoList[i].nameAddr.addrSpec == p_URI) |
{return (true)} |
}; |
} |
return (false) |
} |
/** |
* |
* @desc function returns the Userinfo from a given To header field |
* @param p_to To header field to be analysed |
* @return Userinfo from the To header field as a charstring |
*/ |
function f_getUserfromTo(in To p_to) runs on SipComponent return charstring |
{ |
var SipUrl v_SipUrl; |
if (ischosen(p_to.addressField.nameAddr)) |
{ |
v_SipUrl := p_to.addressField.nameAddr.addrSpec; |
} |
else |
{ |
v_SipUrl := p_to.addressField.addrSpecUnion; |
} |
return(v_SipUrl.components.sip.userInfo.userOrTelephoneSubscriber); |
} // end f_getUserfromTo |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "username", |
paramValue := { quotedString := v_username } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "realm", |
paramValue := { quotedString := v_realm } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "nonce", |
paramValue := { quotedString := v_nonce } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "uri", |
paramValue := { quotedString := v_uri } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "algorithm", |
paramValue := { tokenOrHost := "md5" } |
}); // algorithm is not enclosed to " characters |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "cnonce", |
paramValue := { quotedString := v_cnonce } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "qop", |
paramValue := { tokenOrHost := v_qop } |
}); // qop |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "nc", |
paramValue := { tokenOrHost := cl_nonceCount } |
}); // nonceCount |
if (v_opaque == "") { |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "opaque", |
paramValue := { quotedString := v_opaque } |
}); // already enclosed to " characters |
} |
v_result := {digestResponse := v_digestResponse}; |
/** |
* |
* @desc function to generate a 32 bits random number as a charstring for tag field |
* @param p_cSeq_s CSeq parameter used to modify the tag field value |
* @return tag value |
*/ |
function f_getRndCallId(inout CSeq p_cSeq_s) return charstring |
{ |
var charstring v_tag_value; |
v_tag_value := fx_rndStr()&fx_rndStr(); |
//v_tag_value is initialized with a random value with at least 32 bits of randomness |
// 4294967296 is a 32 bits integer |
//v_tag_value := int2str(float2int(4294967296.0*rnd()) + loc_CSeq_s.seqNumber ); |
return(v_tag_value); |
} |
return v_result; |
} |
/** |
* |
* @desc function give access to the top element of the Path header field. |
* @param p_Request SIP message to be analysed |
* @return NameAddr (e.g. <sip:p.home.com>) or omit |
*/ |
function f_getPathHeaderTop(inout Request p_Request) return template NameAddr |
{ |
if (ispresent(p_Request.msgHeader.path)) { |
if (sizeof(p_Request.msgHeader.path.pathValues)>0) { |
return(p_Request.msgHeader.path.pathValues[0].nameAddr)} |
}; |
return(omit) |
} |
/** |
* @desc Function to calculate credentials for response 401 - WWW-Authorization |
* @param p_qop of the peer UE (alternatively ) |
* @param p_authorization parameter from 1st REGISTER request |
* @return Credentials field |
* @verdict |
*/ |
function f_calculatecChallenge_forWWWAuthorizationBody( |
in charstring p_qop, |
in Authorization p_authorization |
) return Challenge { |
var CommaParam_List v_challenge; |
/** |
* |
* @desc function updates first element of a Via headerfield list |
* @param p_viaBody_List address list of a Via header field |
* @param p_source_address address to be inserted in the top element |
*/ |
function f_getViaReplyAddr(inout ViaBody_List p_viaBody_List, inout address4SIP p_source_address) |
runs on SipComponent |
{ |
var ViaBody v_viaBody; |
var HostPort v_locAddr; |
// The address to send message shall be updated after getting information |
// in the Via header fied and according to 18.2.2 |
v_viaBody := p_viaBody_List[0]; |
// received parameter has to be addded to the via hader field |
// Be careful it could be an Host name and not an IP Address |
if (ischosen(p_authorization.body[0].digestResponse)) { |
v_challenge := p_authorization.body[0].digestResponse; |
} |
else { |
v_challenge := p_authorization.body[0].otherResponse.authParams; |
} |
// TODO produce an error because of unkown host exception |
//if (not f_equivalentHostAddr(valueof (v_viaBody.sentBy.host), |
// valueof (p_source_address.host))) { |
f_addParameterIfNotPresent( |
c_receivedId, |
valueof (p_source_address.host), |
v_viaBody); |
//} |
if (ispresent(v_viaBody.sentBy.portField)) |
{ |
p_source_address.portField := valueof(v_viaBody.sentBy.portField); |
} |
else |
{ |
p_source_address.portField := c_defaultSipPort; |
} |
} |
/** |
* |
* @desc functions give access to an element of the Route header field (record). |
* @param p_message (request) SIP message to be analysed |
* @param p_index index of Route record element to be retrieved |
* @return HostPort value of the Route element or omit |
*/ |
function f_getRouteHeaderElementAddressFromRequest(in Request p_message, in integer p_index) return HostPort |
{ |
if (ispresent(p_message.msgHeader.route)) { |
if (sizeof(p_message.msgHeader.route.routeBody)>p_index) { |
return(p_message.msgHeader.route.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort)} |
}; |
setverdict(fail); |
return(c_hostport_dummy) |
} |
return (f_calculatecChallenge_forWWWAuthorization(p_qop, v_challenge)); |
} |
/** |
* |
* @desc functions give access to an element of the Record-Route header field (record). |
* @param p_message (request) SIP message to be analysed |
* @param p_index index of recordRoute record element to be retrieved |
* @return HostPort value of the Record-Route element or omit |
*/ |
function f_getRecordRouteHeaderElementAddressFromRequest(in Request p_message, in integer p_index) return HostPort |
{ |
if (ispresent(p_message.msgHeader.recordRoute)) { |
if (sizeof(p_message.msgHeader.recordRoute.routeBody)>p_index) { |
return(p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort)} |
}; |
setverdict(fail); |
return(c_hostport_dummy) |
} |
/** |
* |
* @desc functions give access to an element of the Record-Route header field (record). |
* @param p_message (response) SIP message to be analysed |
* @param p_index index of recordRoute record element to be retrieved |
* @return HostPort value of the Record-Route element or omit |
*/ |
function f_getRecordRouteHeaderElementAddressFromResponse(in Response p_message, in integer p_index) return HostPort |
{ |
if (ispresent(p_message.msgHeader.recordRoute)) { |
if (sizeof(p_message.msgHeader.recordRoute.routeBody)>p_index) { |
return(p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort)} |
}; |
setverdict(fail); |
return(c_hostport_dummy) |
} |
/** |
* |
* @desc functions give access to an element of the Via header field (record). |
* @param p_message (request) SIP message to be analysed |
* @param p_index index of via record element to be retrieved |
* @return HostPort value of the Via element or omit |
*/ |
function f_getViaHeaderElementHostPort(in Request p_message, in integer p_index) return HostPort |
{ |
if (sizeof(p_message.msgHeader.via.viaBody)>p_index) { |
return(p_message.msgHeader.via.viaBody[p_index].sentBy)} |
setverdict(fail); |
return(c_hostport_dummy) |
} |
/** |
* |
* @desc functions give access to an element of the Via header field (record). |
* @param p_message (response) SIP message to be analysed |
* @param p_index index of via record element to be retrieved |
* @return HostPort value of the Via element or omit |
*/ function f_getViaHeaderElementHostPortResponse(in Response p_message, in integer p_index) return HostPort |
{ |
if (sizeof(p_message.msgHeader.via.viaBody)>p_index) { |
return(p_message.msgHeader.via.viaBody[p_index].sentBy)} |
setverdict(fail); |
return(c_hostport_dummy) |
} |
/** |
* |
* @desc function checks indicators if topology hiding (TH) has been applied: |
* - second element in via-header record has tokenized-by parameter |
* @param p_Request SIP message to be analysed |
* @return boolean value (true indicate TH, false otherwise) |
*/ |
function f_topologyHiding(inout Request p_request) runs on SipComponent return boolean |
{ var GenericParam v_viaParameter; |
if (sizeof(p_request.msgHeader.via.viaBody)<2) |
{return(false)}; |
v_viaParameter := p_request.msgHeader.via.viaBody[1].viaParams[0]; // second element |
if (not v_viaParameter.id == "tokenized-by") |
{return(false)}; |
return(true) |
} |
/** |
* @desc Function to calculate credentials for response 401 - WWW-Authorization |
* @param p_qop of the peer UE (alternatively ) |
* @param p_challenge parameter from 1st REGISTER request |
* @return Credentials field |
* @verdict |
*/ |
function f_calculatecChallenge_forWWWAuthorization( |
in charstring p_qop, |
in CommaParam_List p_challenge |
) return Challenge { |
var Challenge v_result; |
/** |
* |
* @desc function checks indicators if topology hiding (TH) has been applied: |
* - any element in via-header record has tokenized-by parameter |
* @param Response SIP message to be analysed |
* @return boolean value (true indicate TH, false otherwise) |
*/ |
function f_topologyHidingResponse(inout Response p_response) runs on SipComponent return boolean |
{ |
var GenericParam v_viaParameter; |
log(p_response.msgHeader); |
for (var integer v_i := 0; v_i < sizeof(p_response.msgHeader.via.viaBody); v_i := v_i + 1) { |
v_viaParameter := p_response.msgHeader.via.viaBody[v_i].viaParams[0]; // first parameter |
var charstring v_realm; |
if (not v_viaParameter.id == "tokenized-by") |
{return(false)} |
} |
return(true); |
} |
var charstring v_qop := p_qop; |
v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); |
group SetHeaders { |
// Construct credentials for an Authorization field of a request. |
v_result := { |
digestCln := { |
{ |
id := "realm", |
paramValue := { quotedString := v_realm } |
}, |
{ |
id := "nonce", |
paramValue := { quotedString := "0edff6c521cc3f407f2d9e01cf6ed82b" } |
}, |
{ |
id := "algorithm", |
paramValue := { tokenOrHost := PX_AUTH_ALGORITHM } |
}, // algorithm is not enclosed with " characters |
{ |
id := "ck", |
paramValue := { quotedString := "00112233445566778899aabbccddeeff" } |
}, |
{ |
id := "ik", |
paramValue := { quotedString := "ffeeddccbbaa99887766554433221100" } |
}, // already enclosed to " characters |
{ |
/** |
* This directive is optional, but is made so only for backward compatibility with RFC 2069 |
* it SHOULD be used by all implementations compliant with this version of the Digest scheme |
*/ |
id := "qop", |
paramValue := { tokenOrHost := v_qop } |
} // qop |
} |
}; |
return v_result; |
} |
/** |
* |
* @desc function for setting of component variables related to message header fields |
* (message type independent: CSeq, contact, via), function uses information from userprofile |
* |
* @param p_cSeq_s CSeq parameter |
* @param p_method method name for cSeq header field |
*/ |
function f_setHeadersGeneral(inout CSeq p_cSeq_s, in charstring p_method) runs on SipComponent |
{ |
p_cSeq_s.fieldName := CSEQ_E; |
p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; |
p_cSeq_s.method := p_method ; |
vc_cSeq := p_cSeq_s; |
vc_contact := valueof(m_Contact(m_SipUrl_contactIpaddr(vc_userprofile))); |
/** |
* @desc Function to calculate credentials for request that has an empty entity body such as a REGISTER message and at the end put different private name |
* @param p_userprofile to get important parameters |
* @param p_method (can be "REGISTER", "INVITE",....) |
* @param p_challenge parameter from 4xx response |
* @return Credentials field |
* @verdict |
*/ |
function f_calculatecCredentialsAndChangeUserName( |
in SipUserProfile p_userprofile, |
in charstring p_method, |
in CommaParam_List p_challenge |
) return Credentials { |
var Credentials v_result; |
var charstring v_nonce := ""; |
var charstring v_cnonce := int2str(float2int(int2float(13172657659 - 1317266) * rnd()) + 1317265); |
vc_branch := c_branchCookie & f_getRndTag(); |
vc_via:={ |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
}// end function f_setHeadersGeneral |
// RFC 2617 3.2.2 username: |
// The name of user in the specified realm. |
var charstring v_username := p_userprofile.privUsername; |
var charstring v_realm; |
// RFC 2617 3.2.2.2 passwd: |
// A known shared secret, the password of user of the specified |
// username. |
var charstring v_passwd := p_userprofile.passwd; |
var charstring v_algorithm; |
/** |
* |
* @desc function for setting of component variables related to message header fields |
* (message type independent: CSeq, contact, via), function uses information from userprofile |
* |
* @param p_cSeq_s CSeq parameter |
* @param p_method method name for cSeq header field |
*/ |
function f_setHeadersACK() runs on SipComponent |
{ |
// vc_requestUri.hostPort := vc_reqHostPort; |
if(vc_response.statusLine.statusCode >= 200 and vc_response.statusLine.statusCode <= 299 ) //ref. RFC3261 8.1.1.7 Via |
{ |
vc_branch := c_branchCookie & f_getRndTag(); |
} |
vc_via:={ |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
}// end function f_setHeadersGeneral |
/** |
* |
* @desc setting of general and basic Bye header fields |
* in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersBYE(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
f_setHeadersGeneral(p_cSeq_s, "BYE"); // cseq, contact, branch, via |
//vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
// a new pseudo-random cnonce value is used every time |
// that assumes it is only used once |
const charstring cl_nonceCount := "00000001"; |
var charstring v_qop := p_userprofile.qop; |
var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; |
f_addTagInTo(vc_to); |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
}// end function f_setHeadersBYE |
/** |
* |
* @desc setting of general and basic CANCEL header fields |
* @param p_cSeq_s |
*/ |
function f_setHeadersCANCEL(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
// MD5 hash of empty entity body. |
const charstring cl_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; |
var charstring v_response; |
var charstring v_opaque; |
var CommaParam_List v_digestResponse := {}; |
p_cSeq_s.method := "CANCEL"; |
//vc_branch := c_branchCookie & f_getRndTag(); // STF 406: CANCEL and ACK should have the same branch as the INVITE |
vc_via:={ |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
}// end function f_setHeadersCANCEL |
/** |
* |
* @desc function sets header field for the next outgoing REGISTER message |
* @param p_cSeq_s CSeq parameter to be applied |
*/ |
function f_setHeaders_REGISTER(inout CSeq p_cSeq_s, boolean p_emergency:=false) runs on SipComponent |
{ |
var SemicolonParam_List v_params; |
// extract nonce, realm, algorithm, and opaque from challenge |
v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); |
v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); |
v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); |
v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); |
f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via |
// calculate a digest response for the Authorize header |
v_response := fx_calculateDigestResponse(v_nonce, v_cnonce, v_username, v_realm, v_passwd, v_algorithm, cl_nonceCount, p_method, v_qop, v_uri, cl_hEntity); |
vc_requestUri:= |
{ |
scheme := c_sipScheme, |
components := {sip:={ |
userInfo := omit, |
hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit}}}, |
urlParameters := omit, |
headers := omit |
}; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
vc_callIdReg := vc_callId; //remember callId for de-registration |
vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); |
vc_cancel_To := vc_to; |
v_params := {{id:=c_tagId, paramValue:=f_getRndTag()}} |
vc_from := {fieldName := FROM_E, |
addressField :=vc_to.addressField, |
fromParams := v_params |
}; |
if(not vc_firstREGISTER_sent) |
{ |
if (p_emergency) { |
v_params := { { "sos", omit } }; |
vc_contact.contactBody.contactAddresses[0].addressField.addrSpecUnion.urlParameters := v_params; |
} else { |
v_params := { {id:=c_expiresId, paramValue:=c_shortRegistration} }; |
vc_contact.contactBody.contactAddresses[0].contactParams := v_params; |
} |
} |
vc_firstREGISTER_sent := true;//f_setHeaders_Register is called in deREGISTER function |
vc_authorization := |
{ |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentials_empty(vc_userprofile)} |
} |
vc_via_REG := vc_via; |
}// end function setHeaders_REGISTER |
// Construct credentials for an Authorization field of a request. |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "username", |
paramValue := { quotedString := "DifferentToPrivateUser" } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "realm", |
paramValue := { quotedString := v_realm } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "nonce", |
paramValue := { quotedString := v_nonce } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "uri", |
paramValue := { quotedString := v_uri } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "response", |
paramValue := { quotedString := v_response } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "algorithm", |
paramValue := { tokenOrHost := "md5" } |
}); // algorithm is not enclosed to " characters |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "cnonce", |
paramValue := { quotedString := v_cnonce } |
}); |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "qop", |
paramValue := { tokenOrHost := v_qop } |
}); // qop |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "nc", |
paramValue := { tokenOrHost := cl_nonceCount } |
}); |
if (v_opaque != "") { |
v_digestResponse := f_addParameter(v_digestResponse, { |
id := "opaque", |
paramValue := { quotedString := "" } |
}); // already enclosed to " characters |
} |
v_result := {digestResponse := v_digestResponse}; |
/** |
* |
* @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER |
* @verdict |
*/ |
function f_setHeaders_2ndREGISTER(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
var CommaParam_List v_challenge; |
//Increment CSeq sequence number |
p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; |
vc_cSeq := p_cSeq_s; |
vc_requestUri:= |
{ |
scheme := c_sipScheme, |
components := {sip:={ |
userInfo := omit, |
hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit}}}, |
urlParameters := omit, |
headers := omit |
}; |
//new branch tag due to different branch tag in new REGISTER method |
vc_branch := c_branchCookie & f_getRndTag(); |
return v_result; |
} |
vc_via_REG :={ |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
// Extract challenge and calculate credentials for a response. |
v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.digestCln; |
// Prepair right answer |
vc_authorization := |
{ |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentials(vc_userprofile, "REGISTER", v_challenge)} |
} |
}// end function f_setHeaders_2ndREGISTER |
/** |
* |
* @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER |
* NO response in Authorization header to cause an error |
* @verdict |
*/ |
function f_setHeaders_2ndREGISTER_wo_response() runs on SipComponent |
{ |
var CommaParam_List v_challenge; |
vc_branch := c_branchCookie & f_getRndTag(); |
/** |
* @desc Function to check if param related to id from CommanParam_List exist containing challenge. |
* @param p_challenge parameter from 4xx response |
* @param p_id name of parameter("nonce", "realm", "ck", "ik"...) |
* @return parameter p_id value |
*/ |
function f_checkParamValueFromChallengeIfPresent( |
in CommaParam_List p_challenge, |
in charstring p_id |
) return boolean { |
var boolean v_result := false; |
var integer v_len := lengthof(p_challenge); |
var charstring v_id := fx_putInLowercase(p_id); |
var integer i; |
for (i := 0; i < v_len; i := i + 1) { |
if (fx_putInLowercase(p_challenge[i].id) == v_id) { |
v_result := true; |
} |
} |
vc_via_REG :={ |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
if(ischosen(vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge)) |
// Extract challenge and calculate credentials for a response. |
{ |
v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; |
} |
else |
{ |
v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.digestCln; |
} |
// Increment CSeq sequence number |
vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; |
// Prepair right answer |
vc_authorization := |
{ |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentials_wo_response(vc_userprofile, "REGISTER", v_challenge)} |
} |
}// end function f_setHeaders_2ndREGISTER_wo_response |
return v_result; |
} |
/** |
* |
* @desc function sets via, cseq and authorization header with different private name for the next outgoing (protected) REGISTER |
* @verdict |
*/ |
function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName() runs on SipComponent |
{ |
var CommaParam_List v_challenge; |
vc_branch := c_branchCookie & f_getRndTag(); |
vc_requestUri:= |
{ |
scheme := c_sipScheme, |
components := {sip:={ |
userInfo := omit, |
hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit}}}, |
urlParameters := omit, |
headers := omit |
}; |
/** |
* @desc Function to check if tag is present in SemicolonParam_List |
* @param p_param_l SemicolonParam_List |
* @return boolean true if tag is present |
*/ |
function f_checkTagPresent( |
SemicolonParam_List p_param_l |
) runs on SipComponent |
return boolean { |
var integer v_numberOfParams; |
var integer i := 0; |
vc_via_REG :={ |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
// Extract challenge and calculate credentials for a response. |
v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; |
// Increment CSeq sequence number |
vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; |
// Prepair right answer |
vc_authorization := |
{ |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentialsAndChangeUserName(vc_userprofile, "REGISTER", v_challenge)} |
} |
}// end function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName |
v_numberOfParams := lengthof(p_param_l); |
while (i < v_numberOfParams) { |
if (fx_putInLowercase(p_param_l[i].id) == c_tagId) { |
return (true); |
} |
i := i + 1; |
} |
return (false); |
} |
/** |
* @desc Function to remove a parameter from SemicolonParam_List |
* @param p_param_l SemicolonParam_List |
* @return SemicolonParam_List new parameter list |
*/ |
function f_removeParameter( |
SemicolonParam_List p_param_l, |
charstring p_id |
) runs on SipComponent |
return SemicolonParam_List { |
var integer v_numberOfParams; |
var integer i := 0; |
var integer j := 0; |
var SemicolonParam_List v_newParamList; |
/** |
* |
* @desc function sets header fields for the next outgoing REGISTER (de-registration) |
* @param p_cSeq_s cSeq to be used |
* @verdict |
*/ |
function f_setHeaders_deREGISTER(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
var SemicolonParam_List v_params; |
f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via |
vc_requestUri:= |
{ |
scheme := c_sipScheme, |
components := {sip:={ |
userInfo := omit, |
hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit}}}, |
urlParameters := omit, |
headers := omit |
}; |
vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); |
v_params := {{id:=c_tagId, paramValue:=f_getRndTag()}} |
vc_from := {fieldName := FROM_E, |
addressField :=vc_to.addressField, |
fromParams := v_params |
}; |
vc_via_REG :={ |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
//set of empty authorization header to avoid setting of different values of nonce count and response |
vc_authorization := |
{ |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentials_empty(vc_userprofile)} |
v_numberOfParams := lengthof(p_param_l); |
while (i < v_numberOfParams) { |
if (not fx_putInLowercase(p_param_l[i].id) == p_id) { |
v_newParamList[j] := p_param_l[i]; |
j := j + 1; |
} |
i := i + 1; |
} |
return v_newParamList; |
} |
//TODO: delete 2nd solution of deregistration when other is working |
vc_contact.contactBody.contactAddresses[0].contactParams := {{"expires","0"}}; |
// TODO: 1st solution of deRegistration: Cancelation of Registration due to RFC3665/2.4 |
// vc_contact := |
// { |
// fieldName := CONTACT_E, |
// contactBody := {wildcard := "*" } |
// }; |
/** |
* @desc Function to add a parameter to SemicolonParam_List |
* @param p_param_l SemicolonParam_List |
* @return SemicolonParam_List new parameter list |
*/ |
function f_addParameter( |
SemicolonParam_List p_param_l, |
GenericParam p_genparam |
) |
return SemicolonParam_List { |
var SemicolonParam_List v_newParamList := p_param_l; |
var integer v_numberOfParams := lengthof(p_param_l); |
v_newParamList[v_numberOfParams] := p_genparam; |
return v_newParamList; |
} |
/** |
* @desc Function to extract paramValue related to id from CommanParam_List containing challenge. |
* @param p_challenge parameter from 4xx response |
* @param p_id name of parameter("nonce", "realm",...) |
* @return parameter p_id value |
*/ |
function f_extractParamValueFromChallenge( |
in CommaParam_List p_challenge, |
in charstring p_id |
) return charstring { |
var charstring v_result := ""; |
var integer v_len := lengthof(p_challenge); |
var charstring v_id := fx_putInLowercase(p_id); |
var integer i; |
var charstring v_tmpchar; |
} // end function f_setHeaders_deREGISTER |
for (i := 0; i < v_len; i := i + 1) { |
if (fx_putInLowercase(p_challenge[i].id) == v_id) { |
if (isvalue(p_challenge[i].paramValue)) { |
if(ischosen(p_challenge[i].paramValue.quotedString)) { |
v_result := valueof(p_challenge[i].paramValue.quotedString); |
} else { |
v_result := valueof(p_challenge[i].paramValue.tokenOrHost); |
} |
} |
} |
} |
if (v_result == "") { |
if (match(p_id, "algorithm")) { |
v_result := "MD5"; |
} |
else if (match(p_id, "opaque")) { |
v_result := ""; |
} |
else { |
v_tmpchar := "Cannot acquire value from credentials."; |
log("*** " & __SCOPE__ &": INFO: Cannot acquire value from credentials ***"); |
setverdict(inconc); |
stop; |
} |
} |
/** |
* |
* @desc setting of general and basic Invite header fields |
* in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersINVITE(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via |
return v_result; |
} |
vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
/** |
* @desc Return the updated component variable of via header |
* @return component variable of via header |
*/ |
function f_updateViaHeaderAS( |
in Via p_via |
) runs on SipComponent |
return Via { |
var Via v_via; |
var ViaBody_List v_viaBody_List := p_via.viaBody; |
var integer v_size_via := lengthof(v_viaBody_List); |
var integer v_size_via_updated := v_size_via + 1; |
var ViaBody_List v_viaBody_List_updated; |
var integer i; |
vc_branch := c_branchCookie & f_getRndTag(); |
v_viaBody_List_updated[0] := valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)); |
// p_viaBody_List_updated[0 ] := vc_request.msgHeader.route.routeBody[0 ] ; |
for (i := 1; i < v_size_via_updated; i := i + 1) { |
v_viaBody_List_updated[i] := v_viaBody_List[i - 1]; |
} |
v_via.fieldName := p_via.fieldName; |
v_via.viaBody := v_viaBody_List_updated; |
return (v_via); |
} |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
/** |
* @desc Return the updated component variable of route header |
* @return component variable of route header |
*/ |
function f_updateRouteHeaderAS( |
in Route p_route |
) runs on SipComponent |
return Route { |
var Route v_route; |
var RouteBody_List v_routeBody_List := p_route.routeBody; |
var integer v_size_route := lengthof(v_routeBody_List); |
var integer v_size_route_updated := v_size_route - 1; |
var RouteBody_List v_routeBody_List_updated; |
var integer i; |
if (ischosen(vc_requestUri.components.sip)) { // sip/sips call |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
} else if (ischosen(vc_requestUri.components.urn)) { // Emergency call |
vc_reqUrnUri := vc_requestUri.components.urn; |
} else { |
log ("f_setHeadersINVITE: unsupported field: ", vc_requestUri); |
setverdict(fail); |
} |
}// end function f_setHeadersINVITE |
/** |
* |
* @desc setting of general and basic Update header fields |
* in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersUPDATE(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
f_setHeadersGeneral(p_cSeq_s, "UPDATE"); // cseq, contact, branch, via |
for (i := 0; i < v_size_route_updated; i := i + 1) { |
v_routeBody_List_updated[i] := v_routeBody_List[i + 1]; |
} |
v_route.fieldName := p_route.fieldName; |
v_route.routeBody := v_routeBody_List_updated; |
return (v_route); |
} |
vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
/** |
* @desc Return the updated component variable of record route header |
* @return component variable of record route header |
*/ |
function f_updateRecordRouteHeaderAS( |
in template(value) RecordRoute p_recordRoute |
) runs on SipComponent |
return RecordRoute { |
var |
RecordRoute |
v_recordRoute := |
valueof( |
m_recordRoute_currIpAddr_params( |
vc_userprofile, |
{ |
{ |
"lr", |
omit |
} |
} |
) |
); |
var integer v_size_recordRoute := 0; |
var integer i; |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
}// end function f_setHeadersUPDATE |
if (isvalue(p_recordRoute)) { |
v_size_recordRoute := lengthof(valueof(p_recordRoute).routeBody); |
} |
for (i := 1; i < v_size_recordRoute + 1; i := i + 1) { |
v_recordRoute.routeBody[i] := valueof(p_recordRoute).routeBody[i - 1]; |
} |
/** |
* |
* @desc setting of general and basic Message header fields |
* in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersMESSAGE(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
f_setHeadersGeneral(p_cSeq_s, "MESSAGE"); // cseq, contact, branch, via |
return (v_recordRoute); |
} |
vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
}// end function f_setHeadersMESSAGE |
/** |
* |
* @desc setting of general and basic Notify header fields |
* in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersNOTIFY(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
f_setHeadersGeneral(p_cSeq_s, "NOTIFY"); // cseq, contact, branch, via |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
}// end function f_setHeadersNOTIFY |
} // end group ParameterOperations |
/** |
* |
* @desc setting of general and basic Publish header fields |
* in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersPUBLISH(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
f_setHeadersGeneral(p_cSeq_s, "PUBLISH"); // cseq, contact, branch, via |
//after SUBSCRIBE message callid shall be same |
//vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
group FieldOperations { |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
}// end function f_setHeadersPUBLISH |
/** |
* @desc function adds "Tag"-parameter in "To"-headerfield |
* @param p_to To header field that should get a Tag parameter |
*/ |
function f_addTagInTo( |
inout To p_to |
) runs on SipComponent { |
f_addParameterTagIfNotPresent(c_tagId, { tokenOrHost := f_getRndTag() }, p_to); |
} |
/** |
* |
* @desc function sets header field for the next outgoing SUBSCRIBE message |
* @param p_cSeq_s CSeq parameter to be applied |
*/ |
function f_setHeaders_SUBSCRIBE(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
var SemicolonParam_List v_params; |
f_setHeadersGeneral(p_cSeq_s, "SUBSCRIBE"); // cseq, contact, branch, via |
vc_requestUri:=valueof(m_SipUrl_currDomain(vc_userprofile)); |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
vc_callId := { |
fieldName := CALL_ID_E, |
callid := f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr |
} |
vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); |
vc_cancel_To := vc_to; |
v_params := {{id := c_tagId, paramValue := f_getRndTag()}}; |
vc_from := { |
fieldName := FROM_E, |
addressField := vc_to.addressField, |
fromParams := v_params |
}; |
}// end function setHeaders_SUBSCRIBE |
/** |
* |
* @desc setting of general and basic Subscribe header fields |
* in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersSUBSCRIBE(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
f_setHeadersGeneral(p_cSeq_s, "SUBSCRIBE"); // cseq, contact, branch, via |
/** |
* @desc addition of a single parameter in the via header field |
* @param p_parameter_name name of parameter to be added |
* @param p_parameter_value value of parameter to be added |
* @param p_viaBody the via parameter to be extended |
* @verdict |
*/ |
function f_addParameterIfNotPresent( |
in charstring p_parameter_name, |
in GenValue p_parameter_value, |
inout ViaBody p_viaBody |
) { |
if (isvalue(p_viaBody.viaParams)) { |
return; |
} |
p_viaBody.viaParams := { |
{ |
p_parameter_name, |
p_parameter_value |
} |
}; |
} |
vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
/** |
* @desc function to addd a parameter to the "To" header field (if there is not any parameter) |
* @param p_parameter_name name of the parameter to be added |
* @param p_parameter_value value of the paramter to be added |
* @param p_to "To" header field to be extended |
* @verdict |
*/ |
function f_addParameterTagIfNotPresent( |
in charstring p_parameter_name, |
in GenValue p_parameter_value, |
inout To p_to |
) { |
if (isvalue(p_to.toParams)) { |
return; |
} |
p_to.toParams := { |
{ |
p_parameter_name, |
p_parameter_value |
} |
}; |
} |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
}// end function f_setHeadersMESSAGE |
/** |
* |
* @desc setting of general and basic REFER header fields |
* in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersREFER(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
f_setHeadersGeneral(p_cSeq_s, "REFER"); // cseq, contact, branch, via |
/** |
* @desc function compares the IP address of two hosts |
* @param p_host1 hostname |
* @param p_host2 hostname |
* @return boolean value that is true if the IP addresses are identical |
* @verdict |
*/ |
function f_equivalentHostAddr( |
in charstring p_host1, |
in charstring p_host2 |
) return boolean { |
// A DNS server may be used |
return (fx_getIpAddr(p_host1) == fx_getIpAddr(p_host2)); |
} |
//vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
}// end function f_setHeadersREFER |
/** |
* @desc function checks if Require contains Precondition |
* @param p_message (request or response) SIP message to be analysed |
* @return true if p_id parameter exist |
*/ |
function f_checkRequirePrecondition( |
in Request p_message |
) { |
var boolean v_precondition_found; |
var integer i; |
if (isvalue(p_message.msgHeader.require)) { |
v_precondition_found := false; |
for (i := 0; i < lengthof(p_message.msgHeader.require.optionsTags); i := i + 1) { |
if (match(p_message.msgHeader.require.optionsTags[i], c_tagPrecond)) { |
v_precondition_found := true; |
} |
} |
if (not (v_precondition_found)) { |
setverdict(fail); |
log("*** " & __SCOPE__ & ": FAIL: precondition not found in Require options list! ***"); |
} |
} |
else { |
setverdict(fail); |
log("*** " & __SCOPE__ & ": FAIL: Require options is not present! ***"); |
} |
} |
/** |
* |
* @desc This function reads all necessary headers from the received REGISTER message and generate the tag for the answer |
* @param p_Request REGISTER that has been received |
*/ |
function f_setHeadersOnReceiptOfREGISTER(Request p_Request) |
runs on SipComponent { |
/** |
* @desc function checks if P-Charging-Vector contains a particular parameter |
* @param p_message (request or response) SIP message to be analysed |
* @param p_id name of parameter |
* @return true if p_id parameter exist |
*/ |
function f_checkPChargingVectorHeaderParamId( |
in Request p_message, |
charstring p_id |
) return boolean { |
var integer i; |
f_setHeadersOnReceiptOfRequest(p_Request); |
vc_callId := p_Request.msgHeader.callId; |
vc_caller_From := vc_from; |
f_addTagInTo(vc_to); |
vc_caller_To := vc_to; |
vc_requestUri := p_Request.requestLine.requestUri; |
vc_cancel_To := p_Request.msgHeader.toField; |
if (ispresent(p_Request.msgHeader.contact) and (not ischosen(p_Request.msgHeader.contact.contactBody.wildcard))) { |
vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); |
} |
// update callee information and pick up tag if the call need to be canceled |
vc_callee_To := {fieldName := TO_E, |
addressField := vc_caller_From.addressField, |
toParams := vc_caller_From.fromParams}; |
vc_callee_From := {fieldName := FROM_E, |
addressField := vc_caller_To.addressField, |
fromParams := vc_caller_To.toParams}; |
if (isvalue(p_message.msgHeader.pChargingVector)) { |
for (i := 0; i < lengthof(p_message.msgHeader.pChargingVector.chargeParams); i := i + 1) { |
if (p_message.msgHeader.pChargingVector.chargeParams[i].id == p_id) { |
return (true); |
} |
} |
} |
return (false); |
} |
if (ispresent(p_Request.msgHeader.authorization)) { |
vc_authorization := p_Request.msgHeader.authorization; |
}; |
} // end f_setHeadersOnReceiptOfREGISTER |
/** |
* @desc function checks if P-Charging-Vector contains a particular parameter |
* @param p_message (request or response) SIP message to be analysed |
* @param p_id name of parameter |
* @return true if p_id parameter exist |
*/ |
function f_checkPChargingVectorHeaderParamIdResponse( |
in Response p_message, |
charstring p_id |
) return boolean { |
var integer i; |
/** |
* |
* @desc This function reads all necessary headers from the received SUBSCRIBE message and generate the tag for the answer |
* @param p_Request SUBSCRIBE that has been received |
*/ |
function f_setHeadersOnReceiptOfSUBSCRIBE(Request p_Request) |
runs on SipComponent { |
if (isvalue(p_message.msgHeader.pChargingVector)) { |
for (i := 0; i < lengthof(p_message.msgHeader.pChargingVector.chargeParams); i := i + 1) { |
if (p_message.msgHeader.pChargingVector.chargeParams[i].id == p_id) { |
return true; |
} |
} |
} |
return (false); |
} |
f_setHeadersOnReceiptOfRequest(p_Request); |
vc_callId := p_Request.msgHeader.callId; |
vc_caller_From := vc_from; |
f_addTagInTo(vc_to); |
vc_caller_To := vc_to; |
vc_requestUri := p_Request.requestLine.requestUri; |
vc_cancel_To := p_Request.msgHeader.toField; |
if (ispresent(p_Request.msgHeader.contact)) { |
vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); |
} |
// update callee information and pick up tag if the call need to be canceled |
vc_callee_To := {fieldName := TO_E, |
addressField := vc_caller_From.addressField, |
toParams := vc_caller_From.fromParams}; |
vc_callee_From := {fieldName := FROM_E, |
addressField := vc_caller_To.addressField, |
fromParams := vc_caller_To.toParams}; |
} // end f_setHeadersOnReceiptOfSUBSCRIBE |
function f_setHeadersOnReceiptOfREFER(Request p_Request) |
runs on SipComponent { |
/** |
* @desc function returns the Host/Port of a given Contact header field |
* @param p_contact contact header field to be analysed |
* @return Host/Port record from the contact header field |
*/ |
function f_getContactUri( |
in ContactAddress p_contact |
) runs on SipComponent |
return SipUrl { |
var SipUrl v_SipUrl; |
f_setHeadersOnReceiptOfRequest(p_Request); |
vc_requestUri := p_Request.requestLine.requestUri; |
vc_cancel_To := p_Request.msgHeader.toField; |
if (ispresent(p_Request.msgHeader.contact)) { |
vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); |
vc_requestUri := f_getContactUri(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); |
if (ischosen(p_contact.addressField.nameAddr)) { |
v_SipUrl := p_contact.addressField.nameAddr.addrSpec; |
} |
else { |
v_SipUrl := p_contact.addressField.addrSpecUnion; |
} |
return (v_SipUrl); |
} // end f_getContactUri |
/** |
* @desc function returns the Host/Port of a given Contact header field |
* @param p_contact contact header field to be analysed |
* @return Host/Port record from the contact header field |
*/ |
function f_getContactAddr( |
in ContactAddress p_contact |
) runs on SipComponent |
return HostPort { |
var HostPort v_locAddr; |
var SipUrl v_SipUrl; |
if (ischosen(p_contact.addressField.nameAddr)) { |
v_SipUrl := p_contact.addressField.nameAddr.addrSpec; |
} |
else { |
v_SipUrl := p_contact.addressField.addrSpecUnion; |
} |
v_locAddr.host := v_SipUrl.components.sip.hostPort.host; |
if (isvalue(v_SipUrl.components.sip.hostPort.portField)) { |
v_locAddr.portField := v_SipUrl.components.sip.hostPort.portField; |
} |
else { |
v_locAddr.portField := c_defaultSipPort; |
} |
return (v_locAddr); |
} // end f_getContactAddr |
/** |
* @desc function checks if History-Info-Header of the p_message contains a particular URI |
* @param p_message (request or response) SIP message to be analysed |
* @param p_URI name of parameter |
* @return true if p_URI parameter exist |
*/ |
function f_checkHeaderInfoURI( |
in Response p_message, |
SipUrl p_URI |
) return boolean { |
var integer i; |
if (isvalue(p_message.msgHeader.historyInfo)) { |
for (i := 0; i < lengthof(p_message.msgHeader.historyInfo.historyInfoList); i := i + 1) { |
if (p_message.msgHeader.historyInfo.historyInfoList[i].nameAddr.addrSpec == p_URI) { |
return (true); |
} |
} |
} |
return (false); |
} |
// update callee information and pick up tag if the call need to be canceled |
vc_callee_To := {fieldName := TO_E, |
addressField := vc_caller_From.addressField, |
toParams := vc_caller_From.fromParams}; |
vc_callee_From := {fieldName := FROM_E, |
addressField := vc_caller_To.addressField, |
fromParams := vc_caller_To.toParams}; |
} // end f_setHeadersOnReceiptOfSUBSCRIBE |
/** |
* |
* @desc function reads all necessary headers from |
* the received INVITE message and generate the tag for the answer |
* @param p_Request received INVITE message |
* @verdict |
*/ |
function f_setHeadersOnReceiptOfINVITE(Request p_Request) runs on SipComponent { |
f_setHeadersOnReceiptOfRequest(p_Request); |
/** |
* @desc function returns the Userinfo from a given To header field |
* @param p_to To header field to be analysed |
* @return Userinfo from the To header field as a charstring |
*/ |
function f_getUserfromTo( |
in To p_to |
) runs on SipComponent |
return charstring { |
var SipUrl v_SipUrl; |
vc_callId := p_Request.msgHeader.callId; |
if (ischosen(p_to.addressField.nameAddr)) { |
v_SipUrl := p_to.addressField.nameAddr.addrSpec; |
} |
else { |
v_SipUrl := p_to.addressField.addrSpecUnion; |
} |
vc_requestUri2 := p_Request.requestLine.requestUri; |
vc_cancel_To := p_Request.msgHeader.toField; |
f_addTagInTo(vc_to); |
vc_caller_From := vc_from; |
vc_caller_To := vc_to; |
if (ispresent(p_Request.msgHeader.contact)) { |
vc_reqHostPort := |
f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); |
vc_requestUri := f_getContactUri(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); |
}; |
// update callee information and pick up tag if the call need to be canceled |
vc_callee_To := {fieldName := TO_E, |
addressField := vc_caller_From.addressField, |
toParams := vc_caller_From.fromParams}; |
vc_callee_From := {fieldName := FROM_E, |
addressField := vc_caller_To.addressField, |
fromParams := vc_caller_To.toParams}; |
if (ispresent(p_Request.msgHeader.privacy)) { |
vc_privacy := p_Request.msgHeader.privacy; |
}; |
if (ispresent(p_Request.messageBody)) { |
//cleaning of attributes before assignment |
if (ispresent(vc_sdp_remote.media_list)) |
{ |
var integer v_length := sizeof(vc_sdp_remote.media_list); |
for (var integer i:=0; i<v_length; i:=i+1) |
{ |
if (ispresent(vc_sdp_remote.media_list[i].attributes)) |
{ |
vc_sdp_remote.media_list[i].attributes := omit ; |
} |
}; |
} |
// save SDP if present |
if ( ischosen(p_Request.messageBody.sdpMessageBody)) |
{ |
vc_sdp_remote := p_Request.messageBody.sdpMessageBody; |
vc_sdp_remote_is_valid := true; |
f_prepare_SDP_answer(); |
}; |
// save XML if present |
if ( ischosen(p_Request.messageBody.xmlBody)) |
{ |
vc_xml_remote := p_Request.messageBody.xmlBody; |
} |
return (v_SipUrl.components.sip.userInfo.userOrTelephoneSubscriber); |
} // end f_getUserfromTo |
if ( ischosen(p_Request.messageBody.mimeMessageBody)) |
{ |
for (var integer j:=0; j<sizeof(p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList); j:=j+1){ |
if (match(p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type,c_sdpAplication)) |
{ |
vc_sdp_remote := p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.sdpMessageBody; |
vc_sdp_remote_is_valid := true; |
f_prepare_SDP_answer(); |
}; |
if (match(p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type,c_xmlAplication)) |
{ |
vc_xml_remote := p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.xmlBody; |
}; |
} |
} |
}; |
if (ispresent(p_Request.msgHeader.supported.optionsTags)) { |
for (var integer i := sizeof(p_Request.msgHeader.supported.optionsTags); i>0; i:=i-1) |
{ |
if (p_Request.msgHeader.supported.optionsTags[i-1]=="100rel") |
{ vc_supported_100rel := true }; |
if (p_Request.msgHeader.supported.optionsTags[i-1]=="precondition") |
{ vc_supported_precondition := true } |
} |
}; |
} // end f_setHeadersOnReceiptOfINVITE |
/** |
* @desc function to generate a 32 bits random number as a charstring for tag field |
* @param p_cSeq_s CSeq parameter used to modify the tag field value |
* @return tag value |
*/ |
function f_getRndCallId( |
) return charstring { |
var charstring v_tag_value := fx_rndStr() & fx_rndStr(); |
// v_tag_value is initialized with a random value with at least 32 bits of randomness |
// 4294967296 is a 32 bits integer |
// v_tag_value := int2str(float2int(4294967296.0*rnd()) + loc_CSeq_s.seqNumber ); |
return (v_tag_value); |
} |
/** |
* |
* @desc function reads header field of a received BYE message |
* @param p_Request received BYE |
*/ |
function f_setHeadersOnReceiptOfBYE(Request p_BYE_Request) |
runs on SipComponent |
{ |
f_setHeadersOnReceiptOfRequest(p_BYE_Request); |
vc_callId := p_BYE_Request.msgHeader.callId; |
/** |
* @desc function give access to the top element of the Path header field. |
* @param p_Request SIP message to be analysed |
* @return NameAddr (e.g. <sip:p.home.com>) or omit |
*/ |
function f_getPathHeaderTop( |
inout Request p_Request |
) return template(omit) NameAddr { |
if (isvalue(p_Request.msgHeader.path)) { |
if (lengthof(p_Request.msgHeader.path.pathValues) > 0) { |
return (p_Request.msgHeader.path.pathValues[0].nameAddr); |
} |
} |
return (omit); |
} |
} // end f_setHeadersOnReceiptOfBYE |
/** |
* @desc function updates first element of a Via headerfield list |
* @param p_viaBody_List address list of a Via header field |
* @param p_source_address address to be inserted in the top element |
*/ |
function f_getViaReplyAddr( |
inout ViaBody_List p_viaBody_List, |
inout Address4SIP p_source_address |
) runs on SipComponent { |
var ViaBody v_viaBody; |
// The address to send message shall be updated after getting information |
// in the Via header fied and according to 18.2.2 |
v_viaBody := p_viaBody_List[0]; |
/** |
* |
* @desc function reads header field from an incoming Request message |
* @param p_Request received Request message |
*/ |
function f_setHeadersOnReceiptOfRequest(Request p_Request) runs on SipComponent { |
vc_request := p_Request; |
vc_callId := p_Request.msgHeader.callId; |
vc_cSeq := p_Request.msgHeader.cSeq; |
vc_iut_CSeq := p_Request.msgHeader.cSeq; |
vc_from := p_Request.msgHeader.fromField; |
vc_caller_From := p_Request.msgHeader.fromField; |
vc_to := p_Request.msgHeader.toField; |
vc_caller_To := p_Request.msgHeader.toField; |
vc_via := p_Request.msgHeader.via; |
// update sent_label according to received via header field |
f_getViaReplyAddr(vc_via.viaBody, vc_sent_label); |
// Catch route |
vc_boo_recordRoute:=false; |
//add tag field into To header if tag is not present |
if (not(ispresent(p_Request.msgHeader.toField.toParams))) |
{ |
vc_to.toParams := {{id := c_tagId, paramValue := f_getRndTag()}}; |
vc_caller_To := vc_to; |
} |
if (ispresent(p_Request.msgHeader.recordRoute)) |
{ |
vc_boo_recordRoute:=true; |
vc_recordRoute := p_Request.msgHeader.recordRoute; |
} |
if (ispresent(p_Request.msgHeader.route)) |
{ |
//used in case when route header is received (isc interface) |
vc_route := p_Request.msgHeader.route; |
} |
} // end f_setHeadersOnReceiptOfRequest |
// received parameter has to be addded to the via hader field |
// Be careful it could be an Host name and not an IP Address |
// One of the reasons this error can occur is if no DNS server is available. |
// As a workaround, it is possible to adapt the configuration on the local machine the test |
// suite is running on (e.g. under Windows the following file could be configured: |
// C:\WINDOWS\system32\drivers\etc\hosts). |
// Check if host address can be rosolved |
if (not f_equivalentHostAddr(valueof(v_viaBody.sentBy.host), valueof(p_source_address.host))) { |
f_addParameterIfNotPresent(c_receivedId, { tokenOrHost := valueof(p_source_address.host) }, v_viaBody); |
} |
if (isvalue(v_viaBody.sentBy.portField)) { |
p_source_address.portField := valueof(v_viaBody.sentBy.portField); |
} |
else { |
p_source_address.portField := c_defaultSipPort; |
} |
} |
/** |
* |
* @desc functions reads header fields from an incoming Response message |
* @param p_cSeq |
* @param p_response received response message |
* @verdict |
*/ |
function f_setHeadersOnReceiptOfResponse(inout CSeq p_cSeq, Response p_response) runs on SipComponent |
{ |
var integer v_i, v_j, v_nbroute; |
var Contact v_contact; //only for local purpose |
vc_response := p_response; |
//vc_cSeq := p_cSeq; //must not save global c_seq because it can overwrite temporary cSeq |
vc_to :=p_response.msgHeader.toField; |
vc_from :=p_response.msgHeader.fromField; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
if (ispresent(p_response.msgHeader.contact)) |
{ |
v_contact := p_response.msgHeader.contact; |
if (ischosen(v_contact.contactBody.contactAddresses)) |
{ |
vc_reqHostPort := f_getContactAddr(v_contact.contactBody.contactAddresses[0]); |
vc_requestUri := f_getContactUri(v_contact.contactBody.contactAddresses[0]); |
} |
} |
else |
{ |
if (ischosen(vc_to.addressField.nameAddr)) |
{ |
if (ischosen(vc_to.addressField.nameAddr.addrSpec.components.sip)) |
{ |
vc_reqHostPort := vc_to.addressField.nameAddr.addrSpec.components.sip.hostPort; |
vc_requestUri := vc_to.addressField.nameAddr.addrSpec; |
} |
} |
else |
{ |
if (ischosen(vc_to.addressField.addrSpecUnion.components.sip)) { // sip/sips call |
vc_reqHostPort := vc_to.addressField.addrSpecUnion.components.sip.hostPort; |
} else if (ischosen(vc_to.addressField.addrSpecUnion.components.urn)) { // Emergency call |
vc_reqUrnUri := vc_to.addressField.addrSpecUnion.components.urn; |
} else { |
log ("f_setHeadersOnReceiptOfResponse: unsupported field: ", vc_to); |
setverdict(fail); |
} |
vc_requestUri := vc_to.addressField.addrSpecUnion; |
} |
} |
vc_callee_To:={fieldName := TO_E, |
addressField := vc_caller_From.addressField, |
toParams := vc_caller_From.fromParams}; |
vc_callee_From:= {fieldName := FROM_E, |
addressField := vc_caller_To.addressField, |
fromParams := vc_caller_To.toParams}; |
vc_via:= p_response.msgHeader.via; |
// Route Management |
if (ispresent(p_response.msgHeader.recordRoute)) |
{ |
vc_recordRoute := p_response.msgHeader.recordRoute; |
v_nbroute := sizeof(vc_recordRoute.routeBody); |
// copy and reverse the order of the routes in route header |
for (v_i:=0; v_i<=(v_nbroute - 1); v_i:=v_i+1) |
{ |
v_j:= v_nbroute - 1 - v_i; |
vc_route.routeBody[v_j]:=vc_recordRoute.routeBody[v_i]; |
} |
vc_route.fieldName := ROUTE_E; |
vc_boo_recordRoute := true; |
vc_boo_route := true; |
} |
else |
{ |
vc_boo_recordRoute := false; |
vc_boo_route := false; |
}; |
/** |
* @desc functions give access to an element of the Route header field (record). |
* @param p_message (request) SIP message to be analysed |
* @param p_index index of Route record element to be retrieved |
* @return HostPort value of the Route element or omit |
*/ |
function f_getRouteHeaderElementAddressFromRequest( |
in Request p_message, |
in integer p_index |
) return HostPort { |
if (isvalue(p_message.msgHeader.route)) { |
if (lengthof(p_message.msgHeader.route.routeBody) > p_index) { |
return (p_message.msgHeader.route.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort); |
} |
} |
setverdict(fail); |
return (c_hostport_dummy); |
} |
/** |
* @desc functions give access to an element of the Record-Route header field (record). |
* @param p_message (request) SIP message to be analysed |
* @param p_index index of recordRoute record element to be retrieved |
* @return HostPort value of the Record-Route element or omit |
*/ |
function f_getRecordRouteHeaderElementAddressFromRequest( |
in Request p_message, |
in integer p_index |
) return HostPort { |
if (isvalue(p_message.msgHeader.recordRoute)) { |
if (lengthof(p_message.msgHeader.recordRoute.routeBody) > p_index) { |
return (p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort); |
} |
} |
setverdict(fail); |
return (c_hostport_dummy); |
} |
// extentions due to new fields in PRACK and UPDATE messages |
if (ispresent(p_response.msgHeader.rSeq)) { |
vc_rAck := |
{ fieldName := RACK_E, |
responseNum := valueof(p_response.msgHeader.rSeq.responseNum), |
seqNumber := valueof(p_response.msgHeader.cSeq.seqNumber), |
method := valueof(p_response.msgHeader.cSeq.method) |
}; |
}; |
/** |
* @desc functions give access to an element of the Record-Route header field (record). |
* @param p_message (response) SIP message to be analysed |
* @param p_index index of recordRoute record element to be retrieved |
* @return HostPort value of the Record-Route element or omit |
*/ |
function f_getRecordRouteHeaderElementAddressFromResponse( |
in Response p_message, |
in integer p_index |
) return HostPort { |
if (isvalue(p_message.msgHeader.recordRoute)) { |
if (lengthof(p_message.msgHeader.recordRoute.routeBody) > p_index) { |
return (p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort); |
} |
} |
setverdict(fail); |
return (c_hostport_dummy); |
} |
// extentions due to new HistoryInfo fields 180 or 200OK messages |
if (ispresent(p_response.msgHeader.historyInfo)) { |
vc_historyInfoList := valueof(p_response.msgHeader.historyInfo.historyInfoList); |
vc_history_is_valid := true |
} |
else {vc_history_is_valid := false}; |
/** |
* @desc functions give access to an element of the Via header field (record). |
* @param p_message (request) SIP message to be analysed |
* @param p_index index of via record element to be retrieved |
* @return HostPort value of the Via element or omit |
*/ |
function f_getViaHeaderElementHostPort( |
in Request p_message, |
in integer p_index |
) return HostPort { |
//sdpMessageBody answer |
if (ispresent(p_response.messageBody)) { |
if ( ischosen(p_response.messageBody.sdpMessageBody)) |
{ |
vc_sdp_remote := p_response.messageBody.sdpMessageBody; |
vc_sdp_remote_is_valid := true; |
} |
if (lengthof(p_message.msgHeader.via.viaBody) > p_index) { |
return (p_message.msgHeader.via.viaBody[p_index].sentBy); |
} |
setverdict(fail); |
return (c_hostport_dummy); |
} |
if ( ischosen(p_response.messageBody.xmlBody)) |
{ |
vc_xml_remote := p_response.messageBody.xmlBody; |
} |
/** |
* @desc functions give access to an element of the Via header field (record). |
* @param p_message (response) SIP message to be analysed |
* @param p_index index of via record element to be retrieved |
* @return HostPort value of the Via element or omit |
*/ |
function f_getViaHeaderElementHostPortResponse( |
in Response p_message, |
in integer p_index |
) return HostPort { |
if ( ischosen(p_response.messageBody.mimeMessageBody)) |
{ |
for (var integer j:=0; j<sizeof(p_response.messageBody.mimeMessageBody.mimeEncapsulatedList); j:=j+1){ |
if (match(p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type,c_sdpAplication)) |
{ |
vc_sdp_remote := p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.sdpMessageBody; |
}; |
if (match(p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type,c_xmlAplication)) |
{ |
vc_xml_remote := p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.xmlBody; |
}; |
} |
} |
}; |
if (lengthof(p_message.msgHeader.via.viaBody) > p_index) { |
return (p_message.msgHeader.via.viaBody[p_index].sentBy); |
} |
setverdict(fail); |
return (c_hostport_dummy); |
} |
}// end function f_setHeadersOnReceiptOfResponse |
/** |
* @desc function checks indicators if topology hiding (TH) has been applied: - second element in via-header record has tokenized-by parameter |
* @param p_Request SIP message to be analysed |
* @return boolean value (true indicate TH, false otherwise) |
*/ |
function f_topologyHiding( |
inout Request p_request |
) runs on SipComponent |
return boolean { |
var GenericParam v_viaParameter; |
if (lengthof(p_request.msgHeader.via.viaBody) <2 ) { |
return (false); |
} |
v_viaParameter := p_request.msgHeader.via.viaBody[1].viaParams[0]; |
// second element |
if (not v_viaParameter.id == "tokenized-by") { |
return (false); |
} |
return (true); |
} |
/** |
* |
* @desc functions reads ServiceRoute header field from an incoming 200 Response message in registration |
* @param p_cSeq |
* @param p_response received response message |
*/ |
function f_getServiceRouteMapIntoRouteInRegistration(inout CSeq p_cSeq, Response p_response) runs on SipComponent |
{ |
var integer v_i, v_j, v_nbroute; |
var ServiceRoute v_serviceRoute; |
// Route Management |
if (ispresent(p_response.msgHeader.serviceRoute)) |
{ |
v_serviceRoute := p_response.msgHeader.serviceRoute; |
v_nbroute := sizeof(v_serviceRoute.routeBody); |
// copy and reverse the order of the routes in route header |
for (v_i:=0; v_i<=(v_nbroute - 1); v_i:=v_i+1) |
{ |
v_j:= v_nbroute - 1 - v_i; |
vc_route.routeBody[v_j]:=v_serviceRoute.routeBody[v_i]; |
} |
vc_route.fieldName := ROUTE_E; |
vc_route_REG := vc_route; |
vc_boo_route := true; |
} |
/** |
* @desc function checks indicators if topology hiding (TH) has been applied: - any element in via-header record has tokenized-by parameter |
* @param Response SIP message to be analysed |
* @return boolean value (true indicate TH, false otherwise) |
*/ |
function f_topologyHidingResponse( |
inout Response p_response |
) runs on SipComponent |
return boolean { |
var GenericParam v_viaParameter; |
var integer i; |
}// end function f_getServiceRouteMapIntoRouteInRegistration |
for (i := 0; i < lengthof(p_response.msgHeader.via.viaBody); i := i + 1) { |
/** |
* |
* @desc functions reads Route header field from an incoming Request message and generate RecordRoute |
* @param p_cSeq |
* @param p_request received request message |
*/ |
function f_getRouteMapIntoRecordRoute(inout CSeq p_cSeq, Request p_request) runs on SipComponent |
{ |
var integer v_i, v_j, v_nbroute; |
var Route v_route; |
// Route Management |
if (ispresent(p_request.msgHeader.route)) |
{ |
v_route := p_request.msgHeader.route; |
v_nbroute := sizeof(v_route.routeBody); |
// copy and reverse the order of the routes in route header |
for (v_i:=0; v_i<=(v_nbroute - 1); v_i:=v_i+1) |
{ |
v_j:= v_nbroute - 1 - v_i; |
vc_recordRoute.routeBody[v_j]:=v_route.routeBody[v_i]; |
} |
vc_recordRoute.fieldName := RECORD_ROUTE_E; |
vc_boo_recordRoute := true; |
} |
v_viaParameter := p_response.msgHeader.via.viaBody[i].viaParams[0]; // first parameter |
if (not v_viaParameter.id == "tokenized-by") { |
return (false); |
} |
} |
return (true); |
} |
}// end function f_getRouteMapIntoRecordRoute |
} // end group SetHeaders |
} // end group FieldOperations |
group SetHeaders { |
group SDPOperations{ |
/** |
* @desc check if message body include SDP attribute (2nd parameter) |
* for any media |
* |
*/ |
function f_check_attribute(in SDP_Message p_sdp, in template SDP_attribute p_attribute) runs on SipComponent return boolean { |
if (ispresent(p_sdp.media_list)) { |
for (var integer j:=0; j<sizeof(p_sdp.media_list); j:=j+1){ |
if (ispresent(p_sdp.media_list[j].attributes)) { |
for (var integer i:=0; i<sizeof(p_sdp.media_list[j].attributes); i:=i+1){ |
if (match(p_sdp.media_list[j].attributes[i],p_attribute)) |
{return(true);}; |
}; |
} |
}; |
} |
if (ispresent(p_sdp.attributes)) { |
for (var integer j:=0; j<sizeof(p_sdp.attributes); j:=j+1){ |
if (match(p_sdp.attributes[j],p_attribute)) {return(true);}; |
}; |
} |
return(false); |
} |
/** |
* @desc check if message body include SDP (session level) attribute (2nd parameter) |
* for any media |
* |
*/ |
function f_check_session_attribute(in SDP_Message p_sdp, in template SDP_attribute p_attribute) runs on SipComponent return boolean { |
if (ispresent(p_sdp.attributes)) { |
for (var integer j:=0; j<sizeof(p_sdp.attributes); j:=j+1){ |
if (match(p_sdp.attributes[j],p_attribute)) {return(true);}; |
/** |
* @desc function for setting of component variables related to message header fields (message type independent: CSeq, contact, via), function uses information from userprofile |
* @param p_cSeq_s CSeq parameter |
* @param p_method method name for cSeq header field |
*/ |
function f_setHeadersGeneral( |
inout CSeq p_cSeq_s, |
in charstring p_method |
) runs on SipComponent { |
p_cSeq_s.fieldName := CSEQ_E; |
p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; |
p_cSeq_s.method := p_method; |
vc_cSeq := p_cSeq_s; |
vc_contact := valueof(m_Contact(m_SipUrl_contactIpaddr(vc_userprofile))); |
vc_branch := c_branchCookie & f_getRndTag(); |
vc_via := { |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
} |
return(false); |
} |
/** |
* |
* @desc identify an SDP direction attribute (session or first media attribute) in a SDP message and return its answer value |
* @param p_sdp the SDP message that has been received |
* @param p_attribute incoming SDP attribute that need to be used for the SDP direction (answer) |
* @return the new attribute (to be send out) derived from the incoming SDP value |
* @verdict |
*/ |
function f_get_attribute_answer(in SDP_Message p_sdp, in template SDP_attribute p_attribute) runs on SipComponent return SDP_attribute { |
} // end function f_setHeadersGeneral |
var template SDP_attribute v_attribute := p_attribute; |
// check if the selected attribute is included in the SDP offer (session attributes) |
if (ispresent(p_sdp.attributes)) { |
for (var integer j:=0; j<sizeof(p_sdp.attributes); j:=j+1){ |
if (match(p_sdp.attributes[j],p_attribute)) {v_attribute := p_sdp.attributes[j];}; |
}; |
} |
// check if the selected attribute is included in the SDP offer (any of the media attributes) |
else {if (ispresent(p_sdp.media_list)) { |
for (var integer j:=0; j<sizeof(p_sdp.media_list); j:=j+1){ |
if (ispresent(p_sdp.media_list[j].attributes)) { |
for (var integer i:=0; i<sizeof(p_sdp.media_list[j].attributes); i:=i+1){ |
if (match(p_sdp.media_list[j].attributes[i],p_attribute)) |
{v_attribute := p_sdp.media_list[j].attributes[i];}; |
}; |
} |
}; |
}}; |
select (valueof(v_attribute)) |
{ |
case (mw_attribute_sendonly) {return(valueof(m_attribute_recvonly));} |
case (mw_attribute_sendrecv) {return(valueof(m_attribute_sendrecv));}//MRO |
case (mw_attribute_inactive) {return(valueof(m_attribute_inactive));}//MRO |
case (mw_attribute_recvonly) {return(valueof(m_attribute_sendonly));}//MRO |
} |
return(valueof(m_attribute_sendrecv));//the default return value in case of missing attribute offer |
} |
/** |
* @desc check if message body include SDP bandwidth (2nd parameter) |
* either for the session or a media description |
*/ |
function f_check_bandwidth(in SDP_Message loc_sdp, in template SDP_bandwidth loc_bandw) runs on SipComponent return boolean { |
if (ispresent(loc_sdp.bandwidth)) { |
for (var integer j:=0; j<sizeof(loc_sdp.bandwidth); j:=j+1){ |
if (match(loc_sdp.bandwidth[j],loc_bandw)) {return(true);}; |
}; |
}; |
if (ispresent(loc_sdp.media_list)) { |
for (var integer j:=0; j<sizeof(loc_sdp.media_list); j:=j+1){ |
if (ispresent(loc_sdp.media_list[j].bandwidth)) { |
for(var integer i:=0; i< sizeof(loc_sdp.media_list[j].bandwidth); i:=i+1) { |
if (match(loc_sdp.media_list[j].bandwidth[i],loc_bandw)) { |
return(true);}; |
} |
} |
}; |
}; |
return(false); |
} |
/** |
* @desc function for setting of component variables related to message header fields (message type independent: CSeq, contact, via), function uses information from userprofile |
* @param p_cSeq_s CSeq parameter |
* @param p_method method name for cSeq header field |
*/ |
function f_setHeadersACK( |
) runs on SipComponent { |
// vc_requestUri.hostPort := vc_reqHostPort; |
if (vc_response.statusLine.statusCode >= 200 and vc_response.statusLine.statusCode <= 299) |
// ref. RFC3261 8.1.1.7 Via |
{ |
vc_branch := c_branchCookie & f_getRndTag(); |
} |
vc_via := { |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
} // end function f_setHeadersGeneral |
/** |
* @desc check if message body include SDP media (2nd parameter) |
* |
*/ |
function f_check_media(in SDP_Message loc_sdp, in template SDP_media_desc loc_media) runs on SipComponent return boolean { |
if (ispresent(loc_sdp.media_list)) { |
for (var integer j:=0; j<sizeof(loc_sdp.media_list); j:=j+1){ |
if (match(loc_sdp.media_list[j].media_field.transport,loc_media.media_field.transport) and |
match(loc_sdp.media_list[j].media_field.fmts,loc_media.media_field.fmts)) |
{return(true);}; |
}; |
} |
return(false); |
} |
/** |
* @desc |
* check if message body include precondition mechanism (a=des and |
* a=curr) retrun true, else false |
* @param loc_sdp SDP message |
*/ |
function f_check_precondition(in SDP_Message loc_sdp) runs on SipComponent return boolean { |
if (f_check_attribute(loc_sdp, mw_attribute_des) or |
f_check_attribute(loc_sdp, mw_attribute_curr)) |
{return(true);} |
return(false); |
} |
/** |
* @desc setting of general and basic Bye header fields in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersBYE( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
f_setHeadersGeneral(p_cSeq_s, "BYE"); // cseq, contact, branch, via |
// vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
f_addTagInTo(vc_to); |
/** |
* @desc check if message body include SDP media direction return true, else false |
* |
*/ |
function f_check_media_direction(in SDP_Message loc_sdp) runs on SipComponent return boolean { |
if (f_check_attribute(loc_sdp, mw_attribute_sendonly) or |
f_check_attribute(loc_sdp, mw_attribute_recvonly) or |
f_check_attribute(loc_sdp, mw_attribute_sendrecv) or |
f_check_attribute(loc_sdp, mw_attribute_inactive)) |
{return(true);} |
return(false); |
} |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
/** |
* @desc copy media/attribute lines from remote to local SDP variable |
* |
*/ |
function f_check_SDP(integer loc_sdp, integer loc_codec) runs on SipComponent |
return boolean |
{ |
var SDP_media_desc v_media := f_prepare_media(loc_sdp,loc_codec); |
log("log0"); |
if (vc_sdp_remote.media_list[0].media_field.media != v_media.media_field.media) |
{ log("log1"); return false }; |
if (vc_sdp_remote.media_list[0].media_field.transport != v_media.media_field.transport) |
{ log("log2"); return false }; |
if (vc_sdp_remote.media_list[0].media_field.fmts != v_media.media_field.fmts) |
{ log("remote:",vc_sdp_remote.media_list[0].media_field.fmts,"expect:",v_media.media_field.fmts); return false }; |
return true |
} |
/** |
* @desc replace the first curr media attribute with the given value. |
* @param p_sdp SDP message to modify |
* @param p_curr new curr attribute |
*/ |
function f_replace_curr_attribute(inout SDP_Message p_sdp, in SDP_attribute_curr p_curr) { |
if(ispresent(p_sdp.media_list)) { |
var integer mn := sizeof(p_sdp.media_list[0].attributes); |
for(var integer i := 0; i<=mn; i := i+1) { |
if(ischosen(p_sdp.media_list[0].attributes[i].curr)){ |
p_sdp.media_list[0].attributes[i].curr := p_curr; |
i:=mn; |
} |
} |
} |
} |
/** |
* @desc append new media attribute to the first media description. |
* @param p_sdp SDP message to modify |
* @param p_att SDP attribute to appand |
*/ |
function f_append_media_attribute(inout SDP_Message p_sdp, in SDP_attribute p_att) { |
if(ispresent(p_sdp.media_list)) { |
var integer mn := sizeof(p_sdp.media_list[0].attributes); |
p_sdp.media_list[0].attributes[mn] := p_att; |
} |
} |
/** |
* @desc append new media to the existing media list in SDP |
* |
*/ |
function f_append_media(inout SDP_Message loc_SDP, in template SDP_media_desc loc_media) |
{ |
var integer mn := sizeof(loc_SDP.media_list); |
loc_SDP.media_list[mn] := valueof(loc_media); |
} |
/** |
* @desc repare media/attribute lines |
* |
*/ |
function f_prepare_media(integer loc_sdp, integer loc_codec) runs on SipComponent |
return SDP_media_desc |
{ |
var charstring v_codecs[32] := { |
"PCMU/8000", "GSM/8000", "G723/8000", "DVI4/8000", |
"DVI4/16000", "LPC/8000", "PCMA/8000", "G722/8000", |
"L16/44100/2", "L16/44100", "QCELP/8000", "CN/8000", |
"MPA/90000", "G728/8000", "DVI4/11025", "DVI4/22050", |
"G729/8000", "G726-40/8000", "G726-32/8000", "G726-24/8000", |
"G726-16/8000", "G726D/8000", "G726E/8000", "GSM-EFR/8000", |
"CelB/90000", "JPEG/90000", "Nv/90000", "H261/90000", |
"MPV/90000", "MP2T/90000", "H263/90000", "H263-1998/90000" |
} |
var SDP_media_desc v_media := |
{ |
media_field := { |
media := "audio", |
ports := { |
port_number := 10000, |
num_of_ports:=omit }, |
transport := "RTP/AVP", |
fmts := { "0" } |
}, //m=audio 8500 RTP/AVP 0 |
information := omit, |
connections := omit, |
bandwidth := omit, |
key := omit, |
attributes := omit |
}; |
if (32<loc_codec or loc_codec<1) { |
log("Unexpected SDP variant"); |
setverdict(inconc); |
return (v_media)} |
vc_caller_From := vc_from; |
if (loc_sdp == 1) {} |
else if (loc_sdp == 2) { |
v_media.media_field.fmts := {PX_SIP_SDP_dyn}; //{ "98", "0" }; |
v_media.attributes := {{ |
rtpmap := { attr_value := PX_SIP_SDP_dyn & " " & v_codecs[loc_codec-1] } // PX_SIP_SDP_dyn := 98 |
}} |
} else if (loc_sdp == 3) { |
v_media.media_field.fmts := { "8" } |
} else if (loc_sdp == 4) { |
v_media.media_field.fmts := { "99", "8" }; |
v_media.attributes := {{ |
rtpmap := { attr_value := "99 " & v_codecs[loc_codec-1] } |
}} |
} else if (loc_sdp == 5) { |
v_media.media_field.media := "image"; |
v_media.media_field.transport := "udptl"; |
v_media.media_field.fmts := { "t38" } |
} else if (loc_sdp == 6) { |
v_media.media_field.media := "image"; |
v_media.media_field.transport := "tcptl"; |
v_media.media_field.fmts := { "t38" } |
} else { |
log("Unexpected SDP variant"); setverdict(inconc) |
}; |
return (v_media); |
} |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
} // end function f_setHeadersBYE |
/** |
* @desc repare media/attribute lines |
* |
*/ |
function f_prepare_SDP(integer loc_sdp, integer loc_codec) runs on SipComponent |
{ |
/** |
* @desc setting of general and basic CANCEL header fields |
* @param p_cSeq_s |
*/ |
function f_setHeadersCANCEL( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
vc_sdp_local.media_list := {f_prepare_media(loc_sdp,loc_codec)}; |
} |
/** |
* |
* @desc function that copy media/attribute lines from remote to local SDP variable |
*/ |
function f_prepare_SDP_answer() runs on SipComponent |
{ |
var integer mn, cn := 0, i, j, k :=0; |
var charstring v_PT, v_rtpmap := ""; |
var SDP_attribute_list v_mediaAttributes := {}; |
//increase session version |
vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_remote.origin.session_version)+1); |
// if more than one codec, select the firs one |
mn:= sizeof(vc_sdp_remote.media_list); |
for (i :=0; i < mn; i := i+1) |
{ |
//for every single media |
if (ispresent(vc_sdp_remote.media_list[i].attributes)) |
{ |
cn := sizeof(vc_sdp_remote.media_list[i].attributes); |
}; |
if (sizeof(vc_sdp_remote.media_list[i].media_field.fmts)>0) |
{ |
// select the first one |
v_PT := vc_sdp_remote.media_list[i].media_field.fmts[0]; |
vc_sdp_local.media_list[i].media_field.fmts := {v_PT}; |
for (j :=0; j<cn; j:=j+1) |
{ |
if (ischosen(vc_sdp_remote.media_list[i].attributes[j].rtpmap)) |
{ |
if (v_PT == regexp(vc_sdp_remote.media_list[i].attributes[j].rtpmap.attr_value, "[ \t]#(0,)([\d]+)*", 0)) |
{ |
v_rtpmap := vc_sdp_remote.media_list[i].attributes[j]. |
rtpmap.attr_value; |
v_mediaAttributes[k] := {rtpmap := {attr_value := v_rtpmap}}; |
k := k+1; |
} // else line is not copied |
} |
else |
{ |
// simple copy of attribute |
v_mediaAttributes[k] := vc_sdp_remote.media_list[i].attributes[j]; |
k := k+1; |
} |
} |
vc_sdp_local.media_list[i].attributes := v_mediaAttributes; |
if (ispresent(vc_sdp_local.media_list[i].attributes)) |
p_cSeq_s.method := "CANCEL"; |
// vc_branch := c_branchCookie & f_getRndTag(); // STF 406: CANCEL and ACK should have the same branch as the INVITE |
vc_via := { |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
} // end function f_setHeadersCANCEL |
/** |
* @desc function sets header field for the next outgoing REGISTER message |
* @param p_cSeq_s CSeq parameter to be applied |
* @param p_emergency Set to true in case of emergency |
*/ |
function f_setHeaders_REGISTER( |
inout CSeq p_cSeq_s, |
boolean p_emergency := false |
) runs on SipComponent { |
var SemicolonParam_List v_params := {}; |
f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via |
vc_requestUri := { |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := omit, |
hostPort := { |
host := vc_userprofile.registrarDomain, |
portField := omit |
} |
} |
}, |
urlParameters := omit, |
headers := omit |
}; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
vc_callId := { |
fieldName := CALL_ID_E, |
callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr |
}; |
vc_callIdReg := vc_callId; // remember callId for de-registration |
vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); |
vc_cancel_To := vc_to; |
v_params := f_addParameter(v_params, |
{ |
id := c_tagId, |
paramValue := { |
tokenOrHost := f_getRndTag() |
} |
}); |
vc_from := { |
fieldName := FROM_E, |
addressField := vc_to.addressField, |
fromParams := v_params |
}; |
if (not vc_firstREGISTER_sent) { |
if (p_emergency) { |
v_params := { |
{ |
"sos", |
omit |
} |
}; |
vc_contact.contactBody.contactAddresses[0].addressField.addrSpecUnion.urlParameters := v_params; |
} |
else { |
v_params := { |
{ |
id := c_expiresId, |
paramValue := { |
tokenOrHost := c_shortRegistration |
} |
} |
}; |
vc_contact.contactBody.contactAddresses[0].contactParams := v_params; |
} |
} |
vc_firstREGISTER_sent := true; // f_setHeaders_Register is called in deREGISTER function |
vc_authorization := { |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentials_empty(vc_userprofile)} |
}; |
vc_via_REG := vc_via; |
} // end function setHeaders_REGISTER |
/** |
* @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER |
* @verdict |
*/ |
function f_setHeaders_2ndREGISTER( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
var CommaParam_List v_challenge; |
// Increment CSeq sequence number |
p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; |
vc_cSeq := p_cSeq_s; |
vc_requestUri := { |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := omit, |
hostPort := { |
host := vc_userprofile.registrarDomain, |
portField := omit |
} |
} |
}, |
urlParameters := omit, |
headers := omit |
}; |
// new branch tag due to different branch tag in new REGISTER method |
vc_branch := c_branchCookie & f_getRndTag(); |
vc_via_REG := { |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
// Extract challenge and calculate credentials for a response. |
v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.digestCln; |
// Prepair right answer |
vc_authorization := { |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentials(vc_userprofile, "REGISTER", v_challenge)} |
}; |
} // end function f_setHeaders_2ndREGISTER |
/** |
* @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER NO response in Authorization header to cause an error |
* @verdict |
*/ |
function f_setHeaders_2ndREGISTER_wo_response( |
) runs on SipComponent { |
var CommaParam_List v_challenge; |
vc_branch := c_branchCookie & f_getRndTag(); |
vc_via_REG := { |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
if (ischosen(vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge)) |
// Extract challenge and calculate credentials for a response. |
{ |
cn := sizeof(vc_sdp_local.media_list[i].attributes); |
for (j :=0; j<cn; j:=j+1) |
v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; |
} |
else { |
v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.digestCln; |
} |
// Increment CSeq sequence number |
vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; |
// Prepair right answer |
vc_authorization := { |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentials_wo_response(vc_userprofile, "REGISTER", v_challenge)} |
}; |
} // end function f_setHeaders_2ndREGISTER_wo_response |
/** |
* @desc function sets via, cseq and authorization header with different private name for the next outgoing (protected) REGISTER |
* @verdict |
*/ |
function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName( |
) runs on SipComponent { |
var CommaParam_List v_challenge; |
vc_branch := c_branchCookie & f_getRndTag(); |
vc_requestUri := { |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := omit, |
hostPort := { |
host := vc_userprofile.registrarDomain, |
portField := omit |
} |
} |
}, |
urlParameters := omit, |
headers := omit |
}; |
vc_via_REG := { |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
// Extract challenge and calculate credentials for a response. |
v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; |
// Increment CSeq sequence number |
vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; |
// Prepair right answer |
vc_authorization := { |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentialsAndChangeUserName(vc_userprofile, "REGISTER", v_challenge)} |
}; |
} // end function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName |
/** |
* @desc function sets header fields for the next outgoing REGISTER (de-registration) |
* @param p_cSeq_s cSeq to be used |
* @verdict |
*/ |
function f_setHeaders_deREGISTER( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
var SemicolonParam_List v_params := {}; |
f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via |
// reset authorization header to not use nonce from registration (otherwise we have to increase nc) |
vc_authorization := { |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentials_empty(vc_userprofile)} |
}; |
vc_requestUri := { |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := omit, |
hostPort := { |
host := vc_userprofile.registrarDomain, |
portField := omit |
} |
} |
}, |
urlParameters := omit, |
headers := omit |
}; |
vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); |
v_params := f_addParameter(v_params, |
{ |
// simplified handling of status attributes (copy/keep status from peer): |
// a) copy/keep SDP_attribute_curr (invert tags if applicable) |
if (ischosen(vc_sdp_local.media_list[i].attributes[j].curr)) |
{ |
// invert local/remote status tags |
if (vc_sdp_local.media_list[i].attributes[j].curr.statusType == "local") |
{vc_sdp_local.media_list[i].attributes[j].curr.statusType := "remote"}; |
if (vc_sdp_local.media_list[i].attributes[j].curr.statusType == "remote") |
{vc_sdp_local.media_list[i].attributes[j].curr.statusType := "local"}; |
// invert send/recv direction tags |
if (vc_sdp_local.media_list[i].attributes[j].curr.direction == "send") |
{vc_sdp_local.media_list[i].attributes[j].curr.direction := "recv"}; |
if (vc_sdp_local.media_list[i].attributes[j].curr.direction == "recv") |
{vc_sdp_local.media_list[i].attributes[j].curr.direction := "send"}; |
} |
// b) copy/keep SDP_attribute_des (keep strength, invert tags if applicable) |
else if (ischosen(vc_sdp_local.media_list[i].attributes[j].des)) |
{ |
// invert local/remote status tags |
if (vc_sdp_local.media_list[i].attributes[j].des.statusType == "local") |
{vc_sdp_local.media_list[i].attributes[j].des.statusType := "remote"}; |
if (vc_sdp_local.media_list[i].attributes[j].des.statusType == "remote") |
{vc_sdp_local.media_list[i].attributes[j].des.statusType := "local"}; |
// invert send/recv direction tags |
if (vc_sdp_local.media_list[i].attributes[j].des.direction == "send") |
{vc_sdp_local.media_list[i].attributes[j].des.direction := "recv"}; |
if (vc_sdp_local.media_list[i].attributes[j].des.direction == "recv") |
{vc_sdp_local.media_list[i].attributes[j].des.direction := "send"}; |
} |
// c) simplification: assume no SDP_attribute_conf |
else if (ischosen(vc_sdp_local.media_list[i].attributes[j].conf)) |
{ |
// todo: handle SDP_attribute_conf |
} |
id := c_tagId, |
paramValue := { |
tokenOrHost := f_getRndTag() |
} |
}); |
vc_from := { |
fieldName := FROM_E, |
addressField := vc_to.addressField, |
fromParams := v_params |
}; |
vc_contact := { |
fieldName := CONTACT_E, |
contactBody := {wildcard := "*"} |
}; |
} // end function f_setHeaders_deREGISTER |
/** |
* @desc setting of general and basic Invite header fields in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersINVITE( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via |
vc_callId := { |
fieldName := CALL_ID_E, |
callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr |
}; |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
if (ischosen(vc_requestUri.components.sip)) { |
// sip/sips call |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
} |
else if (ischosen(vc_requestUri.components.urn)) { |
// Emergency call |
vc_reqUrnUri := vc_requestUri.components.urn; |
} |
else { |
log("*** " & __SCOPE__ &": INFO:f_setHeadersINVITE: unsupported field: ", vc_requestUri," ***"); |
setverdict(fail); |
} |
} |
/** |
* @desc setting of general and basic Update header fields in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersUPDATE( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
f_setHeadersGeneral(p_cSeq_s, "UPDATE"); // cseq, contact, branch, via |
vc_callId := { |
fieldName := CALL_ID_E, |
callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr |
}; |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
} // end function f_setHeadersUPDATE |
/** |
* @desc setting of general and basic Message header fields in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersMESSAGE( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
f_setHeadersGeneral(p_cSeq_s, "MESSAGE"); // cseq, contact, branch, via |
vc_callId := { |
fieldName := CALL_ID_E, |
callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr |
}; |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
} // end function f_setHeadersMESSAGE |
/** |
* @desc setting of general and basic Notify header fields in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersNOTIFY( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
f_setHeadersGeneral(p_cSeq_s, "NOTIFY"); // cseq, contact, branch, via |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
} // end function f_setHeadersNOTIFY |
/** |
* @desc setting of general and basic Publish header fields in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersPUBLISH( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
f_setHeadersGeneral(p_cSeq_s, "PUBLISH"); // cseq, contact, branch, via |
// after SUBSCRIBE message callid shall be same |
// vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
} // end function f_setHeadersPUBLISH |
/** |
* @desc function sets header field for the next outgoing SUBSCRIBE message |
* @param p_cSeq_s CSeq parameter to be applied |
*/ |
function f_setHeaders_SUBSCRIBE( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
var SemicolonParam_List v_params := {}; |
f_setHeadersGeneral(p_cSeq_s, "SUBSCRIBE"); // cseq, contact, branch, via |
vc_requestUri := valueof(m_SipUrl_currDomain(vc_userprofile)); |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
vc_callId := { |
fieldName := CALL_ID_E, |
callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr |
}; |
// store callId from Subscribe message |
vc_callIdSub := vc_callId; |
vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); |
vc_cancel_To := vc_to; |
v_params := f_addParameter(v_params, |
{ |
id := c_tagId, |
paramValue := { |
tokenOrHost := f_getRndTag() |
} |
}); |
vc_from := { |
fieldName := FROM_E, |
addressField := vc_to.addressField, |
fromParams := v_params |
}; |
} // end function setHeaders_SUBSCRIBE |
/** |
* @desc setting of general and basic Subscribe header fields in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersSUBSCRIBE( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
f_setHeadersGeneral(p_cSeq_s, "SUBSCRIBE"); // cseq, contact, branch, via |
vc_callId := { |
fieldName := CALL_ID_E, |
callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr |
}; |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
} // end function f_setHeadersMESSAGE |
/** |
* @desc setting of general and basic REFER header fields in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersREFER( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
f_setHeadersGeneral(p_cSeq_s, "REFER"); // cseq, contact, branch, via |
// vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
} // end function f_setHeadersREFER |
/** |
* @desc This function reads all necessary headers from the received REGISTER message and generate the tag for the answer |
* @param p_Request REGISTER that has been received |
*/ |
function f_setHeadersOnReceiptOfREGISTER( |
Request p_Request |
) runs on SipComponent { |
f_setHeadersOnReceiptOfRequest(p_Request); |
vc_callId := p_Request.msgHeader.callId; |
vc_caller_From := vc_from; |
f_addTagInTo(vc_to); |
vc_caller_To := vc_to; |
vc_requestUri := p_Request.requestLine.requestUri; |
vc_cancel_To := p_Request.msgHeader.toField; |
if (isvalue(p_Request.msgHeader.contact) and (not ischosen(p_Request.msgHeader.contact.contactBody.wildcard))) { |
vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); |
} |
// update callee information and pick up tag if the call need to be canceled |
vc_callee_To := { |
fieldName := TO_E, |
addressField := vc_caller_From.addressField, |
toParams := vc_caller_From.fromParams |
}; |
vc_callee_From := { |
fieldName := FROM_E, |
addressField := vc_caller_To.addressField, |
fromParams := vc_caller_To.toParams |
}; |
if (isvalue(p_Request.msgHeader.authorization)) { |
vc_authorization := valueof(p_Request.msgHeader.authorization); |
} |
} // end f_setHeadersOnReceiptOfREGISTER |
/** |
* @desc This function reads all necessary headers from the received SUBSCRIBE message and generate the tag for the answer |
* @param p_Request SUBSCRIBE that has been received |
*/ |
function f_setHeadersOnReceiptOfSUBSCRIBE( |
Request p_Request |
) runs on SipComponent { |
f_setHeadersOnReceiptOfRequest(p_Request); |
vc_callId := p_Request.msgHeader.callId; |
vc_caller_From := vc_from; |
f_addTagInTo(vc_to); |
vc_caller_To := vc_to; |
vc_requestUri := p_Request.requestLine.requestUri; |
vc_cancel_To := p_Request.msgHeader.toField; |
if (isvalue(p_Request.msgHeader.contact)) { |
vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); |
} |
// update callee information and pick up tag if the call need to be canceled |
vc_callee_To := { |
fieldName := TO_E, |
addressField := vc_caller_From.addressField, |
toParams := vc_caller_From.fromParams |
}; |
vc_callee_From := { |
fieldName := FROM_E, |
addressField := vc_caller_To.addressField, |
fromParams := vc_caller_To.toParams |
}; |
} // end f_setHeadersOnReceiptOfSUBSCRIBE |
function f_setHeadersOnReceiptOfREFER( |
Request p_Request |
) runs on SipComponent { |
f_setHeadersOnReceiptOfRequest(p_Request); |
vc_requestUri := p_Request.requestLine.requestUri; |
vc_cancel_To := p_Request.msgHeader.toField; |
if (isvalue(p_Request.msgHeader.contact)) { |
vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); |
vc_requestUri := f_getContactUri(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); |
} |
// update callee information and pick up tag if the call need to be canceled |
vc_callee_To := { |
fieldName := TO_E, |
addressField := vc_caller_From.addressField, |
toParams := vc_caller_From.fromParams |
}; |
vc_callee_From := { |
fieldName := FROM_E, |
addressField := vc_caller_To.addressField, |
fromParams := vc_caller_To.toParams |
}; |
} // end f_setHeadersOnReceiptOfREFER |
/** |
* @desc function reads all necessary headers from the received INVITE message and generate the tag for the answer |
* @param p_Request received INVITE message |
* @verdict |
*/ |
function f_setHeadersOnReceiptOfINVITE( |
Request p_Request |
) runs on SipComponent { |
var integer i, j; |
var integer v_length; |
f_setHeadersOnReceiptOfRequest(p_Request); |
vc_callId := p_Request.msgHeader.callId; |
vc_requestUri2 := p_Request.requestLine.requestUri; |
vc_cancel_To := p_Request.msgHeader.toField; |
f_addTagInTo(vc_to); |
vc_caller_From := vc_from; |
vc_caller_To := vc_to; |
if (isvalue(p_Request.msgHeader.contact)) { |
vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); |
vc_requestUri := f_getContactUri(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); |
} |
// update callee information and pick up tag if the call need to be canceled |
vc_callee_To := { |
fieldName := TO_E, |
addressField := vc_caller_From.addressField, |
toParams := vc_caller_From.fromParams |
}; |
vc_callee_From := { |
fieldName := FROM_E, |
addressField := vc_caller_To.addressField, |
fromParams := vc_caller_To.toParams |
}; |
if (isvalue(p_Request.msgHeader.privacy)) { |
vc_privacy := p_Request.msgHeader.privacy; |
} |
if (isvalue(p_Request.messageBody)) { |
// cleaning of attributes before assignment |
if (isvalue(vc_sdp_remote.media_list)) { |
v_length := lengthof(vc_sdp_remote.media_list); |
for (i := 0; i < v_length; i := i + 1) { |
if (isvalue(vc_sdp_remote.media_list[i].attributes)) { |
vc_sdp_remote.media_list[i].attributes := omit; |
} |
} |
} |
// save SDP if present |
if (ischosen(p_Request.messageBody.sdpMessageBody)) { |
vc_sdp_remote := p_Request.messageBody.sdpMessageBody; |
vc_sdp_remote_is_valid := true; |
f_prepare_SDP_answer(); |
} |
// save XML if present |
if (ischosen(p_Request.messageBody.xmlBody)) { |
vc_xml_remote := p_Request.messageBody.xmlBody; |
} |
if (ischosen(p_Request.messageBody.mimeMessageBody)) { |
for (j := 0; j < lengthof(p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList); j := j + 1) { |
if (match(p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type, c_sdpApplication)) { |
vc_sdp_remote := p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.sdpMessageBody; |
vc_sdp_remote_is_valid := true; |
f_prepare_SDP_answer(); |
} |
if (match(p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type, c_xmlApplication)) { |
vc_xml_remote := p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.xmlBody; |
} |
} |
} |
} |
if (isvalue(p_Request.msgHeader.supported.optionsTags)) { |
for (i := lengthof(p_Request.msgHeader.supported.optionsTags); i > 0; i := i - 1) { |
if (p_Request.msgHeader.supported.optionsTags[i - 1] == "100rel") { |
vc_supported_100rel := true; |
} |
if (p_Request.msgHeader.supported.optionsTags[i - 1] == "precondition") { |
vc_supported_precondition := true; |
} |
} |
} |
} // end f_setHeadersOnReceiptOfINVITE |
/** |
* @desc function reads header field of a received BYE message |
* @param p_Request received BYE |
*/ |
function f_setHeadersOnReceiptOfBYE( |
Request p_BYE_Request |
) runs on SipComponent { |
f_setHeadersOnReceiptOfRequest(p_BYE_Request); |
vc_callId := p_BYE_Request.msgHeader.callId; |
} // end f_setHeadersOnReceiptOfBYE |
/** |
* @desc function reads header field from an incoming Request message |
* @param p_Request received Request message |
*/ |
function f_setHeadersOnReceiptOfRequest( |
Request p_Request |
) runs on SipComponent { |
vc_request := p_Request; |
vc_callId := p_Request.msgHeader.callId; |
vc_cSeq := valueof(p_Request.msgHeader.cSeq); // CSeq is mandatory |
vc_iut_CSeq := p_Request.msgHeader.cSeq; |
vc_from := p_Request.msgHeader.fromField; |
vc_caller_From := p_Request.msgHeader.fromField; |
vc_to := p_Request.msgHeader.toField; |
vc_caller_To := p_Request.msgHeader.toField; |
vc_via := p_Request.msgHeader.via; |
// update sent_label according to received via header field |
f_getViaReplyAddr(vc_via.viaBody, vc_sent_label); |
// Catch route |
vc_boo_recordRoute := false; |
// add tag field into To header if tag is not present |
if (not (isvalue(p_Request.msgHeader.toField.toParams))) { |
vc_to.toParams := { |
{ |
id := c_tagId, |
paramValue := { |
tokenOrHost := f_getRndTag() |
} |
} |
}; |
vc_caller_To := vc_to; |
} |
if (isvalue(p_Request.msgHeader.recordRoute)) { |
vc_boo_recordRoute := true; |
vc_recordRoute := p_Request.msgHeader.recordRoute; |
} |
} // end f_setHeadersOnReceiptOfRequest |
/** |
* @desc functions reads header fields from an incoming Response message |
* @param p_cSeq |
* @param p_response received response message |
* @verdict |
*/ |
function f_setHeadersOnReceiptOfResponse( |
Response p_response |
) runs on SipComponent { |
var integer i, j, v_nbroute; |
var template(omit) Contact v_contact; |
// only for local purpose |
vc_response := p_response; |
// vc_cSeq := p_cSeq; //must not save global c_seq because it can overwrite temporary cSeq |
vc_to := p_response.msgHeader.toField; |
vc_from := p_response.msgHeader.fromField; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
if (isvalue(p_response.msgHeader.contact)) { |
v_contact := p_response.msgHeader.contact; |
if (ischosen(v_contact.contactBody.contactAddresses)) { |
vc_reqHostPort := f_getContactAddr(valueof(v_contact.contactBody.contactAddresses[0])); |
vc_requestUri := f_getContactUri(valueof(v_contact.contactBody.contactAddresses[0])); |
} |
} |
else { |
if (ischosen(vc_to.addressField.addrSpecUnion.components.sip)) { |
// sip/sips call |
vc_reqHostPort := vc_to.addressField.addrSpecUnion.components.sip.hostPort; |
} |
else if (ischosen(vc_to.addressField.addrSpecUnion.components.urn)) { |
// Emergency call |
vc_reqUrnUri := vc_to.addressField.addrSpecUnion.components.urn; |
} |
else { |
log("*** f_setHeadersOnReceiptOfResponse: INFO: unsupported field: ", vc_to, " ***"); |
setverdict(fail); |
} |
vc_requestUri := vc_to.addressField.addrSpecUnion; |
} |
vc_callee_To := { |
fieldName := TO_E, |
addressField := vc_caller_From.addressField, |
toParams := vc_caller_From.fromParams |
}; |
} |
} |
// add handling of prenegotiation, change ports if required etc. |
//if prenegotiation... |
} |
/** |
* @desc reject SDP offer by setting media ports to 0 |
* |
*/ |
function f_reject_SDP_offer() runs on SipComponent |
{ |
var integer mn, i; |
f_copy_SDP(); // TO BE DONE with more details! |
//increase session version |
vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_local.origin.session_version)+1); |
// if more than one codec, select the firs one |
mn:= sizeof(vc_sdp_local.media_list); |
for (i :=0; i < mn; i := i+1) |
{ |
vc_sdp_local.media_list[i].media_field.ports := {0, omit}; |
vc_sdp_local.media_list[i].attributes := omit; //{}; |
}; |
} |
vc_callee_From := { |
fieldName := FROM_E, |
addressField := vc_caller_To.addressField, |
fromParams := vc_caller_To.toParams |
}; |
/** |
* |
* @desc copies SDP message elements from remote to local component variable: |
* - bandwidth |
* - session version (will be incremented) |
* - media list |
* modify the direction attribute of an SDP media list entry within an SDP message (vc_sdp_local) |
* @param p_medianum list position number of the media (if value 0 identifies first media list element) |
* @param p_direction the new direction attribute to be included in the media entry |
* @verdict |
*/ |
function f_SIP_modMediaDirection(integer p_medianum, template SDP_attribute p_direction) runs on SipComponent |
{ |
var boolean v_set_direction; // flag indicates if direction attribute has been modified |
var integer v_mn := 0; // length of media list (number of entries) |
var integer v_cn := 0; // number of attributes of a media entry |
var integer i, j, k := 0; |
var SDP_attribute_list v_mediaAttributes := {}; // collect the media attributes (to be assigned at end of function) |
f_copy_SDP(); // copy SDP session bandwidth and media list from remote to local component variable |
// increment session version |
vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_local.origin.session_version)+1); |
// if more than one codec, select the first one |
v_mn:= sizeof(vc_sdp_local.media_list); |
vc_via := p_response.msgHeader.via; |
if (p_medianum == 0) //specific media requested |
{ |
p_medianum := 1; // start checking from first media |
}; |
if (p_medianum > 0) //specific media requested |
{ |
if (not(p_medianum > v_mn)) |
{v_mn := p_medianum} |
}; |
// handling of media list elements |
for (i :=0; i < v_mn; i := i+1) |
{ |
v_cn := 0; // initialize the number of attributes of the media list entry |
if (ispresent(vc_sdp_local.media_list)) //media_list is optional |
{ |
// log("vc_sdp_local.media_list[i] ",vc_sdp_local.media_list[i]); |
if (ispresent(vc_sdp_local.media_list[i].attributes)) |
{ |
v_cn := sizeof(vc_sdp_local.media_list[i].attributes); |
}; |
v_set_direction := false; |
//if (sizeof(vc_sdp_local.media_list[i].media_field.fmts)>1) |
// select the first one |
for (j :=0; j<v_cn; j:=j+1) |
{ |
if (ischosen(vc_sdp_local.media_list[i].attributes[j].recvonly) |
or ischosen(vc_sdp_local.media_list[i].attributes[j].sendonly) |
or ischosen(vc_sdp_local.media_list[i].attributes[j].inactive) |
or ischosen(vc_sdp_local.media_list[i].attributes[j].sendrecv)) |
{ |
v_mediaAttributes[k] := valueof(p_direction); |
v_set_direction := true; |
} |
else // non-direction attributes will be copied |
{ |
v_mediaAttributes[k] := vc_sdp_local.media_list[i].attributes[j]; |
k := k+1; |
} |
} |
if (not v_set_direction) |
{ v_mediaAttributes[k] := valueof(p_direction)}; |
vc_sdp_local.media_list[i].attributes := v_mediaAttributes; |
// } |
} |
} |
// add handling of prenegotiation, change ports if required etc. |
//if prenegotiation... |
} |
/** |
* @desc modify session and media attributes direction |
* |
*/ |
function f_SIP_modSessionDirection(template SDP_attribute p_direction) runs on SipComponent |
{ |
var boolean v_set_direction := false; |
var integer v_mn:= 0, i:=0; |
if (ispresent(vc_sdp_local.attributes)) |
{ v_mn:= sizeof(vc_sdp_local.attributes); |
for (i :=0; i < v_mn; i := i+1) |
{//for every single attribute (that is not omit) |
if (ischosen(vc_sdp_local.attributes[i].recvonly) |
or ischosen(vc_sdp_local.attributes[i].sendonly) |
or ischosen(vc_sdp_local.attributes[i].inactive) |
or ischosen(vc_sdp_local.attributes[i].sendrecv)) |
{ |
vc_sdp_local.attributes[i] := valueof(p_direction); |
v_set_direction := true; |
} |
} |
if (not v_set_direction) // if not sent before |
{ |
vc_sdp_local.attributes[v_mn] := valueof(p_direction); |
}; |
} |
else |
{vc_sdp_local.attributes[0] := valueof(p_direction)}; |
} |
/** |
* @desc c |
* |
*/ |
// Route Management |
if (isvalue(p_response.msgHeader.recordRoute)) { |
vc_recordRoute := p_response.msgHeader.recordRoute; |
v_nbroute := lengthof(vc_recordRoute.routeBody); |
// copy and reverse the order of the routes in route header |
for (i := 0; i <= (v_nbroute - 1); i := i + 1) { |
j := v_nbroute - 1 - i; |
vc_route.routeBody[j] := vc_recordRoute.routeBody[i]; |
} |
vc_route.fieldName := ROUTE_E; |
vc_boo_recordRoute := true; |
vc_boo_route := true; |
} |
else { |
vc_boo_recordRoute := false; |
vc_boo_route := false; |
} |
/* |
* |
* @desc check (from remote) and set (local) the session/media attribute lines on directions |
* @param p_direction_in incoming SDP attribute that need to be checked |
* @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) |
* @return |
* @verdict |
*/ |
function f_SIP_checksetSDPreqDirection(template SDP_attribute p_direction_in, template SDP_attribute p_direction_out) runs on SipComponent |
{ var template SDP_attribute v_direction_out := p_direction_out; |
// check incoming SDP attribute |
log(vc_request.messageBody.sdpMessageBody);log(p_direction_in); |
if (not (ispresent(vc_request.messageBody) and (f_check_attribute(vc_request.messageBody.sdpMessageBody,p_direction_in) |
))) |
{log("than branch of if"); |
if ( |
match(valueof(p_direction_in),valueof(mw_attribute_sendrecv)) and |
not(f_check_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_sendrecv) or |
f_check_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_sendonly) or |
f_check_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_recvonly) or |
f_check_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_inactive) |
) |
){ |
log("no direction attributes with expectation: ", p_direction_in) |
} |
else {setverdict(fail);};} |
else {setverdict(pass);log("attribute found in message body");}; |
if (match(omit,p_direction_out))//not isvalue(v_direction_out))//MRO |
{v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in);} |
f_SIP_modMediaDirection(1, v_direction_out); // handling of attribute in media description |
f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session |
} |
// extentions due to new fields in PRACK and UPDATE messages |
if (isvalue(p_response.msgHeader.rSeq)) { |
vc_rAck := { |
fieldName := RACK_E, |
responseNum := valueof(p_response.msgHeader.rSeq).responseNum, |
seqNumber := valueof(p_response.msgHeader.cSeq).seqNumber, |
method := valueof(p_response.msgHeader.cSeq).method |
}; |
} |
/* |
* |
// extentions due to new HistoryInfo fields 180 or 200OK messages |
if (isvalue(p_response.msgHeader.historyInfo)) { |
vc_historyInfoList := valueof(p_response.msgHeader.historyInfo).historyInfoList; |
vc_history_is_valid := true; |
} |
else { |
vc_history_is_valid := false; |
} |
// sdpMessageBody answer |
if (isvalue(p_response.messageBody)) { |
if (ischosen(p_response.messageBody.sdpMessageBody)) { |
vc_sdp_remote := p_response.messageBody.sdpMessageBody; |
vc_sdp_remote_is_valid := true; |
} |
if (ischosen(p_response.messageBody.xmlBody)) { |
vc_xml_remote := p_response.messageBody.xmlBody; |
} |
if (ischosen(p_response.messageBody.mimeMessageBody)) { |
for (j := 0; j < lengthof(p_response.messageBody.mimeMessageBody.mimeEncapsulatedList); j := j + 1) { |
if (match(p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type, c_sdpApplication)) { |
vc_sdp_remote := p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.sdpMessageBody; |
} |
if (match(p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type, c_xmlApplication)) { |
vc_xml_remote := p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.xmlBody; |
} |
} |
} |
} |
} // end function f_setHeadersOnReceiptOfResponse |
/** |
* @desc functions reads ServiceRoute header field from an incoming 200 Response message in registration |
* @param p_cSeq |
* @param p_response received response message |
*/ |
function f_getServiceRouteMapIntoRouteInRegistration( |
Response p_response |
) runs on SipComponent { |
var integer i, j, v_nbroute; |
var template(omit) ServiceRoute v_serviceRoute; |
// Route Management |
if (isvalue(p_response.msgHeader.serviceRoute)) { |
v_serviceRoute := p_response.msgHeader.serviceRoute; |
v_nbroute := lengthof(v_serviceRoute.routeBody); |
// copy and reverse the order of the routes in route header |
for (i := 0; i <= (v_nbroute - 1); i := i + 1) { |
j := v_nbroute - 1 - i; |
vc_route.routeBody[j] := v_serviceRoute.routeBody[i]; |
} |
vc_route.fieldName := ROUTE_E; |
vc_route_REG := vc_route; |
vc_boo_route := true; |
} |
} // end function f_getServiceRouteMapIntoRouteInRegistration |
/** |
* @desc functions reads Route header field from an incoming Request message and generate RecordRoute |
* @param p_cSeq |
* @param p_request received request message |
*/ |
function f_getRouteMapIntoRecordRoute( |
Request p_request |
) runs on SipComponent { |
var integer i, j, v_nbroute; |
var template(omit) Route v_route; |
// Route Management |
if (isvalue(p_request.msgHeader.route)) { |
v_route := p_request.msgHeader.route; |
v_nbroute := lengthof(v_route.routeBody); |
// copy and reverse the order of the routes in route header |
for (i := 0; i <= (v_nbroute - 1); i := i + 1) { |
j := v_nbroute - 1 - i; |
vc_recordRoute.routeBody[j] := v_route.routeBody[i]; |
} |
vc_recordRoute.fieldName := RECORD_ROUTE_E; |
vc_boo_recordRoute := true; |
} |
} // end function f_getRouteMapIntoRecordRoute |
} // end group SetHeaders |
} // end group FieldOperations |
group SDPOperations { |
/** |
* @desc check if message body include SDP attribute (2nd parameter) for any media |
*/ |
function f_check_attribute( |
in SDP_Message p_sdp, |
in template SDP_attribute p_attribute |
) runs on SipComponent |
return boolean { |
var integer i, j; |
if (isvalue(p_sdp.media_list)) { |
for (j := 0; j < lengthof(p_sdp.media_list); j := j + 1) { |
if (isvalue(p_sdp.media_list[j].attributes)) { |
for (i := 0; i < lengthof(p_sdp.media_list[j].attributes); i := i + 1) { |
if (match(p_sdp.media_list[j].attributes[i], p_attribute)) { |
return (true); |
} |
} |
} |
} |
} |
if (isvalue(p_sdp.attributes)) { |
for (j := 0; j < lengthof(p_sdp.attributes); j := j + 1) { |
if (match(p_sdp.attributes[j], p_attribute)) { |
return (true); |
} |
} |
} |
return (false); |
} |
/** |
* @desc check if message body include SDP (session level) attribute (2nd parameter) for any media |
*/ |
function f_check_session_attribute( |
in SDP_Message p_sdp, |
in template SDP_attribute p_attribute |
) runs on SipComponent |
return boolean { |
var integer j; |
if (isvalue(p_sdp.attributes)) { |
for (j := 0; j < lengthof(p_sdp.attributes); j := j + 1) { |
if (match(p_sdp.attributes[j], p_attribute)) { |
return (true); |
} |
} |
} |
return (false); |
} |
/** |
* @desc identify an SDP direction attribute (session or first media attribute) in a SDP message and return its answer value |
* @param p_sdp the SDP message that has been received |
* @param p_attribute incoming SDP attribute that need to be used for the SDP direction (answer) |
* @return the new attribute (to be send out) derived from the incoming SDP value |
* @verdict |
*/ |
function f_get_attribute_answer( |
in SDP_Message p_sdp, |
in template SDP_attribute p_attribute |
) runs on SipComponent |
return SDP_attribute { |
var integer i, j; |
var template SDP_attribute v_attribute := p_attribute; |
// check if the selected attribute is included in the SDP offer (session attributes) |
if (isvalue(p_sdp.attributes)) { |
for (j := 0; j < lengthof(p_sdp.attributes); j := j + 1) { |
if (match(p_sdp.attributes[j], p_attribute)) { |
v_attribute := p_sdp.attributes[j]; |
} |
} |
} |
else |
// check if the selected attribute is included in the SDP offer (any of the media attributes) |
{ |
if (isvalue(p_sdp.media_list)) { |
for (j := 0; j < lengthof(p_sdp.media_list); j := j + 1) { |
if (isvalue(p_sdp.media_list[j].attributes)) { |
for (i := 0; i < lengthof(p_sdp.media_list[j].attributes); i := i + 1) { |
if (match(p_sdp.media_list[j].attributes[i], p_attribute)) { |
v_attribute := p_sdp.media_list[j].attributes[i]; |
} |
} |
} |
} |
} |
} |
select (valueof(v_attribute)) { |
case (mw_attribute_sendonly) { |
return (valueof(m_attribute_recvonly)); |
} |
case (mw_attribute_sendrecv) { |
return (valueof(m_attribute_sendrecv)); |
} // MRO |
case (mw_attribute_inactive) { |
return (valueof(m_attribute_inactive)); |
} // MRO |
case (mw_attribute_recvonly) { |
return (valueof(m_attribute_sendonly)); |
} // MRO |
} |
return (valueof(m_attribute_sendrecv)); // the default return value in case of missing attribute offer |
} |
/** |
* @desc check if message body include SDP bandwidth (2nd parameter) either for the session or a media description |
*/ |
function f_check_bandwidth( |
in SDP_Message p_loc_sdp, |
in template SDP_bandwidth p_loc_bandw |
) runs on SipComponent |
return boolean { |
var integer i, j; |
if (isvalue(p_loc_sdp.bandwidth)) { |
for (j := 0; j < lengthof(p_loc_sdp.bandwidth); j := j + 1) { |
if (match(p_loc_sdp.bandwidth[j], p_loc_bandw)) { |
return (true); |
} |
} |
} |
if (isvalue(p_loc_sdp.media_list)) { |
for (j := 0; j < lengthof(p_loc_sdp.media_list); j := j + 1) { |
if (isvalue(p_loc_sdp.media_list[j].bandwidth)) { |
for (i := 0; i < lengthof(p_loc_sdp.media_list[j].bandwidth); i := i + 1) { |
if (match(p_loc_sdp.media_list[j].bandwidth[i], p_loc_bandw)) { |
return (true); |
} |
} |
} |
} |
} |
return (false); |
} |
/** |
* @desc check if message body include SDP media (2nd parameter) |
*/ |
function f_check_media( |
in SDP_Message p_loc_sdp, |
in template(present) SDP_media_desc p_loc_media |
) runs on SipComponent |
return boolean { |
var integer j; |
if (isvalue(p_loc_sdp.media_list)) { |
for (j := 0; j < lengthof(p_loc_sdp.media_list); j := j + 1) { |
if (match(p_loc_sdp.media_list[j].media_field.transport, p_loc_media.media_field.transport) and match(p_loc_sdp.media_list[j].media_field.fmts, p_loc_media.media_field.fmts)) { |
return (true); |
} |
} |
} |
return (false); |
} |
/** |
* @desc check if message body include precondition mechanism (a=des and a=curr) retrun true, else false |
* @param loc_sdp SDP message |
*/ |
function f_check_precondition( |
in SDP_Message p_loc_sdp |
) runs on SipComponent |
return boolean { |
if (f_check_attribute(p_loc_sdp, mw_attribute_des) or f_check_attribute(p_loc_sdp, mw_attribute_curr)) { |
return (true); |
} |
return (false); |
} |
/** |
* @desc check if message body include SDP media direction return true, else false |
*/ |
function f_check_media_direction( |
in SDP_Message p_loc_sdp |
) runs on SipComponent |
return boolean { |
if (f_check_attribute(p_loc_sdp, mw_attribute_sendonly) or f_check_attribute(p_loc_sdp, mw_attribute_recvonly) or f_check_attribute(p_loc_sdp, mw_attribute_sendrecv) or f_check_attribute(p_loc_sdp, mw_attribute_inactive)) { |
return (true); |
} |
return (false); |
} |
/** |
* @desc copy media/attribute lines from remote to local SDP variable |
*/ |
function f_check_SDP( |
integer p_loc_sdp, |
integer p_loc_codec |
) runs on SipComponent |
return boolean { |
var SDP_media_desc v_media := f_prepare_media(p_loc_sdp, p_loc_codec); |
if (vc_sdp_remote.media_list[0].media_field.media != v_media.media_field.media) { |
return false; |
} |
if (vc_sdp_remote.media_list[0].media_field.transport != v_media.media_field.transport) { |
return false; |
} |
if (vc_sdp_remote.media_list[0].media_field.fmts != v_media.media_field.fmts) { |
return false; |
} |
return true; |
} |
/** |
* @desc replace the first curr media attribute with the given value. |
* @param p_sdp SDP message to modify |
* @param p_curr new curr attribute |
*/ |
function f_replace_curr_attribute( |
inout SDP_Message p_sdp, |
in SDP_attribute_curr p_curr |
) { |
var integer i; |
var integer v_mn; |
if (isvalue(p_sdp.media_list)) { |
v_mn := lengthof(p_sdp.media_list[0].attributes); |
for (i := 0; i < v_mn; i := i + 1) { |
if (ischosen(p_sdp.media_list[0].attributes[i].curr)) { |
p_sdp.media_list[0].attributes[i].curr := p_curr; |
i := v_mn; |
} |
} |
} |
} |
/** |
* @desc append new media attribute to the first media description. |
* @param p_sdp SDP message to modify |
* @param p_att SDP attribute to appand |
*/ |
function f_append_media_attribute( |
inout SDP_Message p_sdp, |
in SDP_attribute p_att |
) { |
var integer v_mn; |
if (isvalue(p_sdp.media_list)) { |
v_mn := lengthof(p_sdp.media_list[0].attributes); |
p_sdp.media_list[0].attributes[v_mn] := p_att; |
} |
} |
/** |
* @desc append new media to the existing media list in SDP |
*/ |
function f_append_media( |
inout SDP_Message p_loc_SDP, |
template(value) SDP_media_desc p_loc_media |
) { |
var integer v_mn := lengthof(p_loc_SDP.media_list); |
p_loc_SDP.media_list[v_mn] := valueof(p_loc_media); |
} |
/** |
* @desc repare media/attribute lines |
*/ |
function f_prepare_media( |
integer p_loc_sdp, |
integer p_loc_codec |
) runs on SipComponent |
return SDP_media_desc { |
var SDP_attribute_rtpmap_codec v_codecs[32] := { |
{"PCMU", "8000", omit}, {"GSM", "8000", omit}, {"G723", "8000", omit}, {"DVI4", "8000", omit}, |
{"DVI4", "16000", omit}, {"LPC", "8000", omit}, {"PCMA", "8000", omit}, {"G722", "8000", omit}, |
{"L16", "44100", "2"}, {"L16", "44100", omit}, {"QCELP", "8000", omit}, {"CN","8000", omit}, |
{"MPA", "90000", omit}, {"G728", "8000", omit}, {"DVI4", "11025", omit}, {"DVI4", "22050", omit}, |
{"G729", "8000", omit}, {"G726-40", "8000", omit}, {"G726-32", "8000", omit}, {"G726-24", "8000", omit}, |
{"G726-16", "8000", omit}, {"G726D", "8000", omit}, {"G726E", "8000", omit}, {"GSM-EFR", "8000", omit}, |
{"CelB", "90000", omit}, {"JPEG", "90000", omit}, {"Nv", "90000", omit}, {"H261", "90000", omit}, |
{"MPV", "90000", omit}, {"MP2T" ,"90000", omit}, {"H263", "90000", omit}, {"H263-1998", "90000", omit}}; |
var SDP_media_desc v_media := { |
media_field := { |
media := "audio", |
ports := { |
port_number := 10000, |
num_of_ports := omit |
}, |
transport := "RTP/AVP", |
fmts := {"0"} |
}, // m=audio |
// 8500 |
// RTP/AVP |
// 0 |
information := omit, |
connections := omit, |
bandwidth := omit, |
key := omit, |
attributes := omit |
}; |
if (32 < p_loc_codec or p_loc_codec < 1) { |
log("*** " & __SCOPE__ & ": INFO: Unexpected SDP variant ***"); |
setverdict(inconc); |
return (v_media); |
} |
if (p_loc_sdp == 1) { |
} |
else if (p_loc_sdp == 2) { |
v_media.media_field.fmts := {PX_SIP_SDP_DYN}; // { "98", "0" }; |
v_media.attributes := { |
{ |
rtpmap := { |
payload_type := PX_SIP_SDP_DYN, |
codec := v_codecs[p_loc_codec - 1] |
} |
} |
}; |
} |
else if (p_loc_sdp == 3) { |
v_media.media_field.fmts := {"8"}; |
} |
else if (p_loc_sdp == 4) { |
v_media.media_field.fmts := {"99", "8"}; |
v_media.attributes := { |
{ |
rtpmap := { |
payload_type := "99", |
codec := v_codecs[p_loc_codec - 1] |
} |
} |
}; |
} |
else if (p_loc_sdp == 5) { |
v_media.media_field.media := "image"; |
v_media.media_field.transport := "udptl"; |
v_media.media_field.fmts := {"t38"}; |
} |
else if (p_loc_sdp == 6) { |
v_media.media_field.media := "image"; |
v_media.media_field.transport := "tcptl"; |
v_media.media_field.fmts := {"t38"}; |
} |
else { |
log("*** " & __SCOPE__ & ": INFO: Unexpected SDP variant ***"); |
setverdict(inconc); |
} |
return (v_media); |
} |
/** |
* @desc repare media/attribute lines |
*/ |
function f_prepare_SDP( |
integer p_loc_sdp, |
integer p_loc_codec |
) runs on SipComponent { |
vc_sdp_local.media_list := {f_prepare_media(p_loc_sdp, p_loc_codec)}; |
} |
/** |
* @desc function that copy media/attribute lines from remote to local SDP variable |
*/ |
function f_prepare_SDP_answer( |
) runs on SipComponent { |
var integer v_mn, v_cn := 0, i, j, k := 0; |
var charstring v_PT; |
var SDP_attribute_rtpmap_codec v_rtpmap := { "", "", omit}; |
var SDP_attribute_list v_mediaAttributes := {}; |
// increase session version |
vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_remote.origin.session_version) + 1); |
// if more than one codec, select the firs one |
v_mn := lengthof(vc_sdp_remote.media_list); |
for (i := 0; i < v_mn; i := i + 1) { |
// for every single media |
if (isvalue(vc_sdp_remote.media_list[i].attributes)) { |
v_cn := lengthof(vc_sdp_remote.media_list[i].attributes); |
} |
if (lengthof(vc_sdp_remote.media_list[i].media_field.fmts) > 0) { |
// select the first one |
v_PT := vc_sdp_remote.media_list[i].media_field.fmts[0]; |
vc_sdp_local.media_list[i].media_field.fmts := {v_PT}; |
for (j := 0; j < v_cn; j := j + 1) { |
if (ischosen(vc_sdp_remote.media_list[i].attributes[j].rtpmap)) { |
if (v_PT == vc_sdp_remote.media_list[i].attributes[j].rtpmap.payload_type) { |
v_rtpmap := vc_sdp_remote.media_list[i].attributes[j].rtpmap.codec; |
v_mediaAttributes[k] := {rtpmap := {v_PT, v_rtpmap}}; |
k := k + 1; |
} // else line is not copied |
} |
else { |
// simple copy of attribute |
v_mediaAttributes[k] := vc_sdp_remote.media_list[i].attributes[j]; |
k := k + 1; |
} |
} |
vc_sdp_local.media_list[i].attributes := v_mediaAttributes; |
if (isvalue(vc_sdp_local.media_list[i].attributes)) { |
v_cn := lengthof(vc_sdp_local.media_list[i].attributes); |
for (j := 0; j < v_cn; j := j + 1) { |
// simplified handling of status attributes (copy/keep status from peer): |
// a) copy/keep SDP_attribute_curr (invert tags if applicable) |
if (ischosen(vc_sdp_local.media_list[i].attributes[j].curr)) { |
// invert local/remote status tags |
if (vc_sdp_local.media_list[i].attributes[j].curr.statusType == "local") { |
vc_sdp_local.media_list[i].attributes[j].curr.statusType := "remote"; |
} |
if (vc_sdp_local.media_list[i].attributes[j].curr.statusType == "remote") { |
vc_sdp_local.media_list[i].attributes[j].curr.statusType := "local"; |
} |
// invert send/recv direction tags |
if (vc_sdp_local.media_list[i].attributes[j].curr.direction == "send") { |
vc_sdp_local.media_list[i].attributes[j].curr.direction := "recv"; |
} |
if (vc_sdp_local.media_list[i].attributes[j].curr.direction == "recv") { |
vc_sdp_local.media_list[i].attributes[j].curr.direction := "send"; |
} |
} |
else |
if ( |
// b) copy/keep SDP_attribute_des (keep strength, invert tags if applicable) |
ischosen(vc_sdp_local.media_list[i].attributes[j].des) |
) { |
// invert local/remote status tags |
if (vc_sdp_local.media_list[i].attributes[j].des.statusType == "local") { |
vc_sdp_local.media_list[i].attributes[j].des.statusType := "remote"; |
} |
if (vc_sdp_local.media_list[i].attributes[j].des.statusType == "remote") { |
vc_sdp_local.media_list[i].attributes[j].des.statusType := "local"; |
} |
// invert send/recv direction tags |
if (vc_sdp_local.media_list[i].attributes[j].des.direction == "send") { |
vc_sdp_local.media_list[i].attributes[j].des.direction := "recv"; |
} |
if (vc_sdp_local.media_list[i].attributes[j].des.direction == "recv") { |
vc_sdp_local.media_list[i].attributes[j].des.direction := "send"; |
} |
} |
else |
if ( |
// c) simplification: assume no SDP_attribute_conf |
ischosen(vc_sdp_local.media_list[i].attributes[j].conf) |
) { |
// handle SDP_attribute_conf |
} |
} |
} |
} |
} |
// add handling of prenegotiation, change ports if required etc. |
// if prenegotiation... |
} |
/** |
* @desc reject SDP offer by setting media ports to 0 |
*/ |
function f_reject_SDP_offer( |
) runs on SipComponent { |
var integer mn, i; |
f_copy_SDP(); // TO BE DONE with more details! |
// increase session version |
vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_local.origin.session_version) + 1); |
// if more than one codec, select the firs one |
mn := lengthof(vc_sdp_local.media_list); |
for (i := 0; i < mn; i := i + 1) { |
vc_sdp_local.media_list[i].media_field.ports := {0, omit}; |
vc_sdp_local.media_list[i].attributes := omit; // {}; |
} |
} |
/** |
* @desc copies SDP message elements from remote to local component variable: - bandwidth - session version (will be incremented) - media list modify the direction attribute of an SDP media list entry within an SDP message (vc_sdp_local) |
* @param p_medianum list position number of the media (if value 0 identifies first media list element) |
* @param p_direction the new direction attribute to be included in the media entry |
* @verdict |
*/ |
function f_SIP_modMediaDirection( |
integer p_medianum, |
template(value) SDP_attribute p_direction |
) runs on SipComponent { |
var boolean v_set_direction; |
// flag indicates if direction attribute has been modified |
var integer v_mn := 0; |
// length of media list (number of entries) |
var integer v_cn := 0; |
// number of attributes of a media entry |
var integer i, j, k := 0; |
var SDP_attribute_list v_mediaAttributes := {}; |
// collect the media attributes (to be assigned at end of function) |
f_copy_SDP(); // copy SDP session bandwidth and media list from remote to local component variable |
// increment session version |
vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_local.origin.session_version) + 1); |
// if more than one codec, select the first one |
v_mn := lengthof(vc_sdp_local.media_list); |
if (p_medianum == 0) |
// specific media requested |
{ |
p_medianum := 1; // start checking from first media |
} |
if (p_medianum > 0) |
// specific media requested |
{ |
if (not (p_medianum > v_mn)) { |
v_mn := p_medianum; |
} |
} |
// handling of media list elements |
for (i := 0; i < v_mn; i := i + 1) { |
v_cn := 0; // initialize the number of attributes of the media list entry |
if (isvalue(vc_sdp_local.media_list)) |
// media_list is optional |
{ |
// log("vc_sdp_local.media_list[i ] ",vc_sdp_local.media_list[i ] ); |
if (isvalue(vc_sdp_local.media_list[i].attributes)) { |
v_cn := lengthof(vc_sdp_local.media_list[i].attributes); |
} |
v_set_direction := false; |
// if (lengthof(vc_sdp_local.media_list[i ] .media_field.fmts)>1) |
// select the first one |
for (j := 0; j < v_cn; j := j + 1) { |
if (ischosen(vc_sdp_local.media_list[i].attributes[j].recvonly) or ischosen(vc_sdp_local.media_list[i].attributes[j].sendonly) or ischosen(vc_sdp_local.media_list[i].attributes[j].inactive) or ischosen(vc_sdp_local.media_list[i].attributes[j].sendrecv)) { |
v_mediaAttributes[k] := valueof(p_direction); |
v_set_direction := true; |
} |
else |
// non-direction attributes will be copied |
{ |
v_mediaAttributes[k] := vc_sdp_local.media_list[i].attributes[j]; |
} |
k := k + 1; |
} |
if (not v_set_direction) { |
v_mediaAttributes[k] := valueof(p_direction); |
} |
vc_sdp_local.media_list[i].attributes := v_mediaAttributes; |
// } |
} |
} |
// add handling of prenegotiation, change ports if required etc. |
// if prenegotiation... |
} |
/** |
* @desc modify session and media attributes direction |
*/ |
function f_SIP_modSessionDirection( |
template(value) SDP_attribute p_direction |
) runs on SipComponent { |
var boolean v_set_direction := false; |
var integer v_mn := 0, i := 0; |
if (isvalue(vc_sdp_local.attributes)) { |
v_mn := lengthof(vc_sdp_local.attributes); |
for (i := 0; i < v_mn; i := i + 1) { |
// for every single attribute (that is not omit) |
if (ischosen(vc_sdp_local.attributes[i].recvonly) or ischosen(vc_sdp_local.attributes[i].sendonly) or ischosen(vc_sdp_local.attributes[i].inactive) or ischosen(vc_sdp_local.attributes[i].sendrecv)) { |
vc_sdp_local.attributes[i] := valueof(p_direction); |
v_set_direction := true; |
} |
} |
if (not v_set_direction) |
// if not sent before |
{ |
vc_sdp_local.attributes[v_mn] := valueof(p_direction); |
} |
} |
else { |
vc_sdp_local.attributes[0] := valueof(p_direction); |
} |
} |
/** |
* @desc check (from remote) and set (local) the session/media attribute lines on directions |
* @param p_direction_in incoming SDP attribute that need to be checked |
* @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) |
* @return |
* @verdict |
*/ |
function f_SIP_checksetSDPreqDirection( |
template(value) SDP_attribute p_direction_in, |
template(value) SDP_attribute p_direction_out |
) runs on SipComponent { |
var template(value) SDP_attribute v_direction_out := p_direction_out; |
// check incoming SDP attribute |
if (not (isvalue(vc_request.messageBody) and (f_check_attribute(vc_request.messageBody.sdpMessageBody, p_direction_in)))) { |
if (match(valueof(p_direction_in), mw_attribute_sendrecv) and not (f_check_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_sendrecv) or f_check_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_sendonly) or f_check_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_recvonly) or f_check_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_inactive))) { |
log("*** " &__SCOPE__& ": INFO: no direction attributes with expectation: ", p_direction_in, " ***"); |
} |
else { |
setverdict(fail); |
} |
} |
else { |
setverdict(pass); |
log("*** " &__SCOPE__& ": INFO: attribute found in message body ***"); |
} |
if (match(omit, p_direction_out)) |
// not isvalue(v_direction_out))//MRO |
{ |
v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in); |
} |
f_SIP_modMediaDirection(1, v_direction_out); // handling of attribute in media description |
f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session |
} |
/* |
* |
* @desc check (from remote) and set (local) the session/media attribute lines on directions |
* @param p_direction_in incoming SDP attribute that need to be checked |
* @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) |
* @return |
* @verdict |
*/ |
function f_SIP_checkResponsesetSDPreqDirection(template SDP_attribute p_direction_in, template SDP_attribute p_direction_out) runs on SipComponent |
{ var template SDP_attribute v_direction_out := p_direction_out; |
// check incoming SDP attribute |
log(vc_response.messageBody.sdpMessageBody);log(p_direction_in); |
if (not (ispresent(vc_response.messageBody) and (f_check_attribute(vc_response.messageBody.sdpMessageBody,p_direction_in) |
))) |
{log("than branch of if"); |
if ( |
match(valueof(p_direction_in),valueof(mw_attribute_sendrecv)) and |
not(f_check_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_sendrecv) or |
f_check_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_sendonly) or |
f_check_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_recvonly) or |
f_check_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_inactive) |
) |
){ |
log("no direction attributes with expectation: ", p_direction_in) |
* @return |
* @verdict |
*/ |
function f_SIP_checkResponsesetSDPreqDirection( |
template(value) SDP_attribute p_direction_in, |
template(value) SDP_attribute p_direction_out |
) runs on SipComponent { |
var template(value) SDP_attribute v_direction_out := p_direction_out; |
// check incoming SDP attribute |
if (not (isvalue(vc_response.messageBody) and (f_check_attribute(vc_response.messageBody.sdpMessageBody, p_direction_in)))) { |
if (match(valueof(p_direction_in), mw_attribute_sendrecv) and not (f_check_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_sendrecv) or f_check_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_sendonly) or f_check_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_recvonly) or f_check_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_inactive))) { |
log("*** " &__SCOPE__& ": INFO: no direction attributes with expectation: ", p_direction_in, " ***"); |
} |
else {setverdict(fail);};} |
else {setverdict(pass);log("attribute found in message body");}; |
if (match(omit,p_direction_out))//not isvalue(v_direction_out))//MRO |
{v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in);} |
f_SIP_modMediaDirection(1, v_direction_out); // handling of attribute in media description |
f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session |
} |
/* |
* |
else { |
setverdict(fail); |
} |
} |
else { |
setverdict(pass); |
log("*** " &__SCOPE__& ": INFO: attribute found in message body ***"); |
} |
if (match(omit, p_direction_out)) |
// not isvalue(v_direction_out))//MRO |
{ |
v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in); |
} |
f_SIP_modMediaDirection(1, v_direction_out); // handling of attribute in media description |
f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session |
} |
/* |
* |
* @desc check (from remote) and set (local) the session attribute lines on directions |
* @param p_direction_in incoming SDP attribute that need to be checked |
* @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) |
* @return |
* @verdict |
*/ |
function f_SIP_checksetSDPreqDirectionSession(template SDP_attribute p_direction_in, template SDP_attribute p_direction_out) runs on SipComponent |
{ var template SDP_attribute v_direction_out := p_direction_out; |
// check incoming SDP attribute |
if (not (ispresent(vc_request.messageBody) and (f_check_session_attribute(vc_request.messageBody.sdpMessageBody,p_direction_in) |
))) |
{if ( |
match(valueof(mw_attribute_sendrecv),valueof(p_direction_in)) and |
not(f_check_session_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_sendrecv) or |
f_check_session_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_sendonly) or |
f_check_session_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_recvonly) or |
f_check_session_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_inactive) |
) |
){ |
log("no direction attributes with expectation: ", p_direction_in) |
* @return |
* @verdict |
*/ |
function f_SIP_checksetSDPreqDirectionSession( |
template(value) SDP_attribute p_direction_in, |
template(value) SDP_attribute p_direction_out |
) runs on SipComponent { |
var template(value) SDP_attribute v_direction_out := p_direction_out; |
// check incoming SDP attribute |
if (not (isvalue(vc_request.messageBody) and (f_check_session_attribute(vc_request.messageBody.sdpMessageBody, p_direction_in)))) { |
if (match(valueof(p_direction_in), mw_attribute_sendrecv) and not (f_check_session_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_sendrecv) or f_check_session_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_sendonly) or f_check_session_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_recvonly) or f_check_session_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_inactive))) { |
log("*** " &__SCOPE__& ": INFO: no direction attributes with expectation: ", p_direction_in, " ***"); |
} |
else {setverdict(fail);};}; |
if (match(omit,p_direction_out))//not isvalue(v_direction_out))//MRO |
{v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in);} |
f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session |
} |
else { |
setverdict(fail); |
} |
} |
if (match(omit, p_direction_out)) |
// not isvalue(v_direction_out))//MRO |
{ |
v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in); |
} |
f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session |
} |
/* |
* |
/* |
* |
* @desc check (from remote) and set (local) the session attribute lines on directions |
* @param p_direction_in incoming SDP attribute that need to be checked |
* @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) |
* @return |
* @verdict |
*/ |
function f_SIP_checkResponsesetSDPreqDirectionSession(template SDP_attribute p_direction_in, template SDP_attribute p_direction_out) runs on SipComponent |
{ var template SDP_attribute v_direction_out := p_direction_out; |
// check incoming SDP attribute |
if (not (ispresent(vc_response.messageBody) and (f_check_session_attribute(vc_response.messageBody.sdpMessageBody,p_direction_in) |
))) |
{if ( |
match(valueof(mw_attribute_sendrecv),valueof(p_direction_in)) and |
not(f_check_session_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_sendrecv) or |
f_check_session_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_sendonly) or |
f_check_session_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_recvonly) or |
f_check_session_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_inactive) |
) |
){ |
log("no direction attributes with expectation: ", p_direction_in) |
* @return |
* @verdict |
*/ |
function f_SIP_checkResponsesetSDPreqDirectionSession( |
template(value) SDP_attribute p_direction_in, |
template(value) SDP_attribute p_direction_out |
) runs on SipComponent { |
var template(value) SDP_attribute v_direction_out := p_direction_out; |
// check incoming SDP attribute |
if (not (isvalue(vc_response.messageBody) and (f_check_session_attribute(vc_response.messageBody.sdpMessageBody, p_direction_in)))) { |
if (match(valueof(p_direction_in), mw_attribute_sendrecv) and not (f_check_session_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_sendrecv) or f_check_session_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_sendonly) or f_check_session_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_recvonly) or f_check_session_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_inactive))) { |
log("*** " &__SCOPE__& ": INFO: no direction attributes with expectation: ", p_direction_in, " ***"); |
} |
else {setverdict(fail);};}; |
if (match(omit,p_direction_out))//not isvalue(v_direction_out))//MRO |
{v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in);} |
f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session |
} |
else { |
setverdict(fail); |
} |
} |
if (match(omit, p_direction_out)) |
// not isvalue(v_direction_out))//MRO |
{ |
v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in); |
} |
f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session |
} |
/* |
* |
* @desc check (from remote) and set (local)the session/media attribute lines on directions |
* @param p_direction_in attribute to be check |
* @param p_direction_out attrubyte to be |
* @return |
* @verdict |
*/ |
function f_SIP_checkSDPrespDirection(template SDP_attribute p_direction_in) runs on SipComponent |
{ |
// check incoming SDP attribute |
if (not (ispresent(vc_response.messageBody) and f_check_attribute(vc_response.messageBody.sdpMessageBody,p_direction_in))) |
{setverdict(fail);}; |
} |
/* |
* |
* @desc check (from remote) and set (local)the session/media attribute lines on directions |
* @param p_direction_in attribute to be check |
* @param p_direction_out attrubyte to be |
* @return |
* @verdict |
*/ |
function f_SIP_checkSDPrespDirection( |
template SDP_attribute p_direction_in |
) runs on SipComponent { |
// check incoming SDP attribute |
if (not (isvalue(vc_response.messageBody) and f_check_attribute(vc_response.messageBody.sdpMessageBody, p_direction_in))) { |
setverdict(fail); |
} |
} |
/** |
* @desc check media/attribute lines from remote |
* |
*/ |
function f_SIP_checkMediaDirection(integer p_medianum, template SDP_attribute p_direction) runs on SipComponent |
return boolean |
{ |
var integer v_mn, v_cn := 0, i, j; |
var boolean v_result := false; |
//increase session version |
vc_sdp_remote.origin.session_version := int2str(str2int(vc_sdp_remote.origin.session_version)+1); |
// if more than one codec, select the firs one |
v_mn:= sizeof(vc_sdp_remote.media_list); |
if (p_medianum == 0) //specific media requested |
{ |
p_medianum := 1; // start checking from first media |
}; |
if (p_medianum > 0) //specific media requested |
{ |
if (p_medianum > v_mn) {return false} |
else {v_mn := p_medianum} |
}; |
for (i :=p_medianum-1; i < v_mn; i := i+1) |
{ |
//for every single media |
if (ispresent(vc_sdp_remote.media_list[i].attributes)) |
{ |
v_cn := sizeof(vc_sdp_remote.media_list[i].attributes); |
log (v_cn); |
}; |
if (sizeof(vc_sdp_remote.media_list[i].attributes)>0) |
{ |
// select the first one |
log(vc_sdp_remote.media_list[i].attributes); |
for (j :=0; j<sizeof(vc_sdp_remote.media_list[i].attributes); j:=j+1) |
{ |
log(vc_sdp_remote.media_list[i].attributes[j]); |
if (ischosen(vc_sdp_remote.media_list[i].attributes[j].recvonly) |
or ischosen(vc_sdp_remote.media_list[i].attributes[j].sendonly) |
or ischosen(vc_sdp_remote.media_list[i].attributes[j].inactive) |
or ischosen(vc_sdp_remote.media_list[i].attributes[j].sendrecv)) |
{ |
if (match(vc_sdp_remote.media_list[i].attributes[j],p_direction)) |
{ v_result := true; } |
else { return false; } |
} |
/** |
* @desc check media/attribute lines from remote |
*/ |
function f_SIP_checkMediaDirection( |
integer p_medianum, |
template SDP_attribute p_direction |
) runs on SipComponent |
return boolean { |
var integer v_mn, v_cn := 0, i, j; |
var boolean v_result := false; |
// increase session version |
vc_sdp_remote.origin.session_version := int2str(str2int(vc_sdp_remote.origin.session_version) + 1); |
// if more than one codec, select the firs one |
v_mn := lengthof(vc_sdp_remote.media_list); |
if (p_medianum == 0) |
// specific media requested |
{ |
p_medianum := 1; // start checking from first media |
} |
if (p_medianum > 0) |
// specific media requested |
{ |
if (p_medianum > v_mn) { |
return false; |
} |
else { |
v_mn := p_medianum; |
} |
} |
for (i := p_medianum - 1; i < v_mn; i := i + 1) { |
// for every single media |
if (isvalue(vc_sdp_remote.media_list[i].attributes)) { |
v_cn := lengthof(vc_sdp_remote.media_list[i].attributes); |
} |
if (lengthof(vc_sdp_remote.media_list[i].attributes) > 0) { |
// select the first one |
for (j := 0; j < lengthof(vc_sdp_remote.media_list[i].attributes); j := j + 1) { |
if (ischosen(vc_sdp_remote.media_list[i].attributes[j].recvonly) or ischosen(vc_sdp_remote.media_list[i].attributes[j].sendonly) or ischosen(vc_sdp_remote.media_list[i].attributes[j].inactive) or ischosen(vc_sdp_remote.media_list[i].attributes[j].sendrecv)) { |
if (match(vc_sdp_remote.media_list[i].attributes[j], p_direction)) { |
v_result := true; |
} |
else { |
return false; |
} |
} |
} |
} |
} |
return v_result; |
} |
//v_result := true; // TODO This is a shortcut since direction attributes are not decoded |
} |
} |
} |
return v_result |
} |
/** |
* @desc copy media/attribute lines from remote to local SDP variable |
*/ |
function f_copy_SDP( |
) runs on SipComponent { |
if (isvalue(vc_sdp_remote.connection)) { |
vc_sdp_local.connection := vc_sdp_remote.connection; |
} |
else { |
vc_sdp_local.connection := omit; |
} |
/** |
* @desc copy media/attribute lines from remote to local SDP variable |
* |
*/ |
function f_copy_SDP() runs on SipComponent |
{ |
if (ispresent(vc_sdp_remote.connection)) |
{vc_sdp_local.connection := vc_sdp_remote.connection} |
else {vc_sdp_local.connection := omit}; |
vc_sdp_local.origin := vc_sdp_remote.origin; |
vc_sdp_local.session_name := vc_sdp_remote.session_name; |
if (ispresent(vc_sdp_remote.bandwidth)) |
{vc_sdp_local.bandwidth := vc_sdp_remote.bandwidth} |
else {vc_sdp_local.bandwidth := {}}; |
if (ispresent(vc_sdp_remote.media_list)) |
{ |
// // cleaning of media before assignment |
// if (ispresent(vc_sdp_local.media_list)) |
// { |
// for (var integer i:=0; i<sizeof(vc_sdp_local.media_list); i:=i+1) |
// { |
// vc_sdp_local.media_list[i] := omit ; |
// } |
// }; |
vc_sdp_local.media_list := vc_sdp_remote.media_list; |
} |
} |
}//end group SDPOperations |
vc_sdp_local.origin := vc_sdp_remote.origin; |
vc_sdp_local.session_name := vc_sdp_remote.session_name; |
group AwaitingMessage { |
/** |
* |
* @desc Function for time delay |
*/ |
function f_awaitingDelayTimer(float p_delay) runs on SipComponent |
{ |
tc_tDelay.start(p_delay); |
alt |
{ |
[] tc_tDelay.timeout |
{ |
setverdict (pass); |
} |
} |
} //end f_awaitingDelayTimer |
/** |
* |
* @desc Function waiting for any MSG -request/response |
*/ |
function f_awaitingAnyPassOnTimeout() runs on SipComponent |
{ |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive //TAU error if expect (*) |
{ |
tc_wait.stop; |
vc_boo_response:=true; |
vc_boo_request:=true; |
//setverdict(pass) |
} |
[] tc_wait.timeout |
{ |
vc_boo_response:=false; |
vc_boo_request:=false; |
//setverdict (pass) |
} |
} |
} //end f_awaitingResponsePassOnTimeout |
if (isvalue(vc_sdp_remote.bandwidth)) { |
vc_sdp_local.bandwidth := vc_sdp_remote.bandwidth; |
} |
else { |
vc_sdp_local.bandwidth := {}; |
} |
/** |
* |
* @desc Function waiting for no MSG -request/response |
*/ |
function f_awaitingNonePassOnTimeout() runs on SipComponent |
{ |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] tc_wait.timeout |
{ |
setverdict (pass); |
} |
} |
} //end f_awaitingResponsePassOnTimeout |
/** |
* |
* @desc function awaits REGISTER |
* @param p_register expected REGISTER request |
*/ |
function f_awaitingREGISTER(in template REGISTER_Request p_register) runs on SipComponent |
{ |
var Request v_request; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_register)-> value v_request sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfREGISTER(v_request); |
} |
[] tc_wait.timeout |
{ |
setverdict (fail); |
f_componentStop(); |
if (isvalue(vc_sdp_remote.media_list)) { |
// // cleaning of media before assignment |
// if (isvalue(vc_sdp_local.media_list)) |
// { |
// for (var integer i:=0; i<lengthof(vc_sdp_local.media_list); i:=i+1) |
// { |
// vc_sdp_local.media_list[i ] := omit ; |
// } |
// }; |
vc_sdp_local.media_list := vc_sdp_remote.media_list; |
} |
} |
} |
/** |
* |
* @desc function awaits SUBSCRIBE |
* @param p_register expected SUBSCRIBE request |
*/ |
function f_awaitingSUBSCRIBE(in template SUBSCRIBE_Request p_subscribe) runs on SipComponent |
{ |
var Request v_request; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_subscribe)-> value v_request sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfSUBSCRIBE(v_request); |
} |
[] SIPP.receive(mw_SUBSCRIBE_Request_Base)-> value v_request sender vc_sent_label |
{ |
tc_wait.stop; |
setverdict(fail); |
f_setHeadersOnReceiptOfSUBSCRIBE(v_request); |
//f_send200OK(); |
} |
} // end group SDPOperations |
group AwaitingMessage { |
/** |
* @desc Function for time delay |
*/ |
function f_awaitingDelayTimer( |
float p_delay |
) runs on SipComponent { |
tc_tDelay.start(p_delay); |
alt { |
[] tc_tDelay.timeout { |
setverdict(pass); |
} |
} |
} |
} |
/** |
* |
* @desc function awaits REGISTER and sends a 200 OK response |
* @param p_reply flag used to avoid the 200OK response sending |
*/ |
function f_awaitingREGISTER_sendReply(in template REGISTER_Request p_register, in boolean p_reply) runs on SipComponent |
{ |
var Request v_request; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_register)-> value v_request sender vc_sent_label |
{ |
tc_wait.stop; |
vc_request := v_request; |
f_setHeadersOnReceiptOfREGISTER(v_request); |
//Answer to the Request |
if (p_reply) {f_send200OK();}; |
} |
} // end f_awaitingDelayTimer |
[] tc_wait.timeout |
{ |
setverdict (fail); |
f_componentStop(); |
} |
} |
} |
/** |
* @desc Function waiting for any MSG -request/response |
*/ |
function f_awaitingAnyPassOnTimeout( |
) runs on SipComponent { |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive |
{ |
tc_wait.stop; |
vc_boo_response := true; |
vc_boo_request := true; |
// setverdict(pass) |
} |
[] tc_wait.timeout { |
vc_boo_response := false; |
vc_boo_request := false; |
// setverdict (pass) |
} |
} |
} // end f_awaitingResponsePassOnTimeout |
/** |
* |
* @desc Function waiting for a 200 OK response |
* @param p_cSeq_s current cSeq expectation |
*/ |
function f_awaitingOkResponse(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
/** |
* @desc Function waiting for no MSG -request/response |
*/ |
function f_awaitingNonePassOnTimeout( |
) runs on SipComponent { |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] tc_wait.timeout { |
setverdict(pass); |
} |
} |
} // end f_awaitingNonePassOnTimeout |
tc_resp.start(PX_SIP_TRESP); |
alt |
{ |
[] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response |
{ |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); |
setverdict(pass) |
} |
} |
} //end awaitingOkResponse |
/** |
* @desc function awaits REGISTER |
* @param p_register expected REGISTER request |
*/ |
function f_awaitingREGISTER( |
in template(present) REGISTER_Request p_register := ? |
) runs on SipComponent { |
var Request v_request; |
/** |
* |
* @desc Function waiting for a response |
* @param p_Response expected response message |
*/ |
function f_awaitingResponse(in template Response p_Response) runs on SipComponent |
{ |
tc_resp.start(PX_SIP_TRESP); |
alt |
{ |
[] SIPP.receive (p_Response) -> value vc_response |
{ |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); |
//setverdict(pass) |
} |
} |
} //end f_awaitingResponse |
/** |
* |
* @desc Function waiting for a response and send ACK on FailureResponses 4xx,5xx,6xx |
* @param p_Response expected response message |
*/ |
function f_awaitingResponseSendACK(in template Response p_Response) runs on SipComponent |
{ |
tc_resp.start(PX_SIP_TRESP); |
alt { |
[] SIPP.receive (p_Response) -> value vc_response { |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); |
LibSip_Steps.f_setHeadersACK(); |
f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); |
setverdict(pass); |
} |
} |
} //end f_awaitingResponse |
/** |
* |
* @desc Function waiting for a response |
* @param p_Response expected response message |
*/ |
function f_awaitingResponsePassOnTimeout(in template Response p_Response) runs on SipComponent |
{ |
tc_resp.start(PX_SIP_TRESP); |
alt |
{ |
[] SIPP.receive (p_Response) -> value vc_response |
{ |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); |
vc_boo_response:=true; |
//setverdict(pass) |
} |
[] tc_resp.timeout |
{ |
vc_boo_response:=false; |
//setverdict (pass) |
} |
} |
} //end f_awaitingResponsePassOnTimeout |
/** |
* @desc await INFO request |
* reply with 200 OK |
*/ |
function f_awaitingINFO_sendReply(in template INFO_Request p_info) runs on SipComponent |
{ |
var INFO_Request v_request; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_info)-> value v_request sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_request); |
//Answer to the INFO |
f_send200OK(); |
} |
} |
} // end of f_awaitingINFO_sendReply |
/** |
* |
* @desc function awaiting for an incoming INVITE |
* @param p_request expected message |
*/ |
function f_awaitingINVITE(template INVITE_Request p_request) runs on SipComponent |
{ |
var INVITE_Request v_INVITE_Request; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[]SIPP.receive (p_request) -> value v_INVITE_Request sender vc_sent_label |
{ |
tc_wait.stop; |
vc_ignore_invite := true; |
vc_first_recv:= true; // communication has started |
f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); |
SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; |
} |
[vc_interface_isc]SIPP.receive (mw_INVITE_Request_Base) -> value v_INVITE_Request sender vc_sent_label |
{ |
tc_wait.stop; |
setverdict(fail); |
f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); |
SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; |
//clear session - send 486 and await ACK |
f_sendResponse(m_Response_Base(c_statusLine486,vc_callId,vc_cSeq,vc_caller_From,vc_caller_To,vc_via)); |
f_awaitingACK(mw_ACK_Request_Base(?)); |
//await 486 which go towards and send ACK |
f_awaitingResponse(mw_Response_Base(c_statusLine486,?,?)); |
f_SendACK(m_ACK_Request_Base(vc_requestUri,vc_callId,vc_cSeq,vc_from,vc_to,vc_via)); |
syncPort.send(m_syncClientStop); |
stop |
} |
} |
} //end f_awaitingINVITE |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_register) -> value v_request sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfREGISTER(v_request); |
} |
[] tc_wait.timeout { |
setverdict(fail); |
f_componentStop(); |
} |
} |
} |
/** |
* |
* @desc function awaiting for an incoming INVITE |
* @param p_request expected message |
*/ |
function f_awaitingINVITE_No100Response(template INVITE_Request p_request) runs on SipComponent |
{ |
var INVITE_Request v_INVITE_Request; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[]SIPP.receive (p_request) -> value v_INVITE_Request sender vc_sent_label |
{ |
tc_wait.stop; |
vc_ignore_invite := true; |
vc_first_recv:= true; // communication has started |
f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); |
//SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; |
} |
} |
} //end f_awaitingInviteRequest |
/** |
* @desc function awaits SUBSCRIBE |
* @param p_register expected SUBSCRIBE request |
*/ |
function f_awaitingSUBSCRIBE( |
in template(present) SUBSCRIBE_Request p_subscribe := ? |
) runs on SipComponent { |
var Request v_request; |
/** |
* |
* @desc function awaiting for an incoming INVITE |
* @param p_request expected message |
*/ |
function f_awaitingINVITE_PassOnTimeout(template INVITE_Request p_request) runs on SipComponent |
{ |
var INVITE_Request v_INVITE_Request; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[]SIPP.receive (p_request) -> value v_INVITE_Request sender vc_sent_label |
{ |
tc_wait.stop; |
vc_ignore_invite := true; |
vc_first_recv:= true; // communication has started |
vc_boo_request := true; |
f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); |
SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; |
} |
[]tc_wait.timeout |
{ |
vc_boo_request := false; |
} |
} |
} //end f_awaitingInviteRequest |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_subscribe) -> value v_request sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfSUBSCRIBE(v_request); |
} |
[] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_request sender vc_sent_label { |
tc_wait.stop; |
setverdict(fail); |
f_setHeadersOnReceiptOfSUBSCRIBE(v_request); |
// f_send200OK(); |
} |
} |
} |
/** |
* |
* @desc function awaiting ACK request |
*/ |
function f_awaitingACK(in template ACK_Request p_ACK) runs on SipComponent |
{ |
var Request v_ACK_Request; |
tc_ack.start(PX_SIP_TACK); |
alt |
{ |
[] SIPP.receive(p_ACK) -> value v_ACK_Request |
{ |
f_setHeadersOnReceiptOfRequest(v_ACK_Request); |
tc_ack.stop; |
} |
} |
} //end f_awaitingAckRequest |
/** |
* @desc function awaits REGISTER and sends a 200 OK response |
* @param p_reply flag used to avoid the 200OK response sending |
*/ |
function f_awaitingREGISTER_sendReply( |
in template(present) REGISTER_Request p_register := ?, |
in boolean p_reply |
) runs on SipComponent { |
var Request v_request; |
/** |
* |
* @desc function awaiting BYE and sending 200OK response |
* @param p_BYE expected BYE |
*/ |
function f_awaitingBYE(in template BYE_Request p_BYE) runs on SipComponent |
{ |
var BYE_Request v_BYE_Request; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[]SIPP.receive (p_BYE) -> value v_BYE_Request sender vc_sent_label |
{ |
tc_wait.stop; |
vc_ignore_bye:= true; |
f_setHeadersOnReceiptOfBYE(v_BYE_Request); |
//f_send200OK(); |
} |
} |
} // end f_awaitingBYE |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_register) -> value v_request sender vc_sent_label { |
tc_wait.stop; |
vc_request := v_request; |
f_setHeadersOnReceiptOfREGISTER(v_request); |
// Answer to the Request |
if (p_reply) { |
f_send200OK(); |
} |
} |
[] tc_wait.timeout { |
setverdict(fail); |
f_componentStop(); |
} |
} |
} |
/** |
* |
* @desc function awaiting BYE and sending 200OK response |
* @param p_BYE expected BYE |
*/ |
function f_awaitingBYE_sendReply |
(in template BYE_Request p_BYE) runs on SipComponent |
{ |
var BYE_Request v_BYE_Request; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[]SIPP.receive (p_BYE) -> value v_BYE_Request sender vc_sent_label |
{ |
tc_wait.stop; |
vc_ignore_bye:= true; |
f_setHeadersOnReceiptOfBYE(v_BYE_Request); |
f_send200OK(); |
} |
} |
} // end f_awaitingBYE_sendReply |
/** |
* |
* @desc function awaiting BYE and sending 200OK response |
* @param p_BYE expected BYE |
*/ |
function f_awaitingBYE_sendReply_PassOnTimeout(in template BYE_Request p_BYE) runs on SipComponent |
{ |
var BYE_Request v_BYE_Request; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[]SIPP.receive (p_BYE) -> value v_BYE_Request sender vc_sent_label |
{ |
tc_wait.stop; |
vc_ignore_bye:= true; |
vc_boo_request := true; |
f_setHeadersOnReceiptOfBYE(v_BYE_Request); |
f_send200OK(); |
} |
[] tc_wait.timeout |
{ |
vc_boo_request := false; |
} |
} |
} // end f_awaitingBYE_sendReply_PassOnTimeout |
/** |
* |
* @desc function awaiting CANCEL |
* @param p_CANCEL expected CANCEL |
*/ |
function f_awaitingCANCEL(in template CANCEL_Request p_CANCEL) runs on SipComponent |
{ |
var CANCEL_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[]SIPP.receive (p_CANCEL) -> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
} |
} |
} // end f_awaitingCANCEL |
/** |
* @desc await MESSAGE request |
*/ |
function f_awaitingMESSAGE(in template MESSAGE_Request p_MSG) runs on SipComponent |
{ |
var MESSAGE_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
} |
[] SIPP.receive(mw_MESSAGE_Request_Base)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
log("Received MESSAGE not as expected!"); |
setverdict (fail); |
} |
} |
} // end of f_awaitingMESSAGE |
/** |
* @desc await MESSAGE request |
* reply with 200 OK |
*/ |
function f_awaitingMESSAGE_sendReply() runs on SipComponent |
{ |
var MESSAGE_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(mw_MESSAGE_Request_Base)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
//Answer to the MESSAGE |
f_send200OK(); |
} |
} |
} // end of f_awaitingMESSAGE_sendReply |
/** |
* @desc Function waiting for a 200 OK response |
* @param p_cSeq_s current cSeq expectation |
*/ |
function f_awaitingOkResponse( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
/** |
* @desc await MESSAGE request |
*/ |
function f_awaitingMESSAGE_sendReply_PassOnTimeout(in template MESSAGE_Request p_MSG) runs on SipComponent |
{ |
var MESSAGE_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
//Answer to the MESSAGE |
//f_send200OK(); |
vc_boo_request := true; |
f_send200OK(); |
//setverdict (pass); |
} |
[] tc_wait.timeout |
{ |
vc_boo_request := false; |
//setverdict (pass); |
} |
} |
} // end of f_awaitingMESSAGE_PassOnTimeout |
/** |
* @desc await NOTIFY request |
*/ |
function f_awaitingNOTIFY(in template NOTIFY_Request p_MSG) runs on SipComponent |
{ |
var NOTIFY_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_getRouteMapIntoRecordRoute(vc_cSeq, v_MSG); |
f_setHeadersOnReceiptOfRequest(v_MSG); |
tc_resp.start; |
alt { |
[] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_response); |
setverdict(pass); |
} |
} |
} // end awaitingOkResponse |
/** |
* @desc Function waiting for a response |
* @param p_Response expected response message |
*/ |
function f_awaitingResponse( |
in template(present) Response p_Response := ? |
) runs on SipComponent { |
tc_resp.start; |
a_awaitingResponse(p_Response); |
} // end f_awaitingResponse |
altstep a_awaitingResponse( |
in template(present) Response p_Response := ? |
) runs on SipComponent { |
[] SIPP.receive(p_Response) -> value vc_response { |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_response); |
// setverdict(pass) |
} |
} // end f_awaitingResponse |
/** |
* @desc Function waiting for a response, repeat if 100 Trying is received |
* @param p_Response expected response message |
*/ |
function f_awaitingResponseIgnore100Trying( |
in template(present) Response p_Response := ? |
) runs on SipComponent { |
tc_resp.start; |
alt { |
[] SIPP.receive(p_Response) -> value vc_response { |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_response); |
// setverdict(pass) |
} |
[] SIPP.receive(mw_Response_Base(c_statusLine100, vc_callId, vc_cSeq)) -> value vc_response { |
repeat; |
} |
} |
} // end f_awaitingResponseIgnore100Trying |
/** |
* @desc Function waiting for a response and send ACK on FailureResponses 4xx,5xx,6xx |
* @param p_Response expected response message |
*/ |
function f_awaitingResponseSendACK( |
in template(present) Response p_Response := ? |
) runs on SipComponent { |
tc_resp.start; |
alt { |
[] SIPP.receive(p_Response) -> value vc_response { |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_response); |
LibSip_Steps.f_setHeadersACK(); |
f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); |
setverdict(pass); |
} |
} |
} // end f_awaitingResponse |
/** |
* @desc Function waiting for a response |
* @param p_Response expected response message |
*/ |
function f_awaitingResponsePassOnTimeout( |
in template(present) Response p_Response := ? |
) runs on SipComponent { |
tc_resp.start; |
alt { |
[] SIPP.receive(p_Response) -> value vc_response { |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_response); |
vc_boo_response := true; |
// setverdict(pass) |
} |
[] tc_resp.timeout { |
vc_boo_response := false; |
// setverdict (pass) |
} |
} |
} // end f_awaitingResponsePassOnTimeout |
/** |
* @desc Function waiting for a 200 OK response |
* @param p_cSeq_s current cSeq expectation |
*/ |
function f_awaitingOkResponseAndNOTIFY_sendReply( |
inout CSeq p_cSeq_s, |
in template(present) NOTIFY_Request p_MSG := ? |
) runs on SipComponent { |
var boolean v_received_OK := false; |
var boolean v_received_NOTIFY := false; |
var NOTIFY_Request v_MSG; |
tc_resp.start; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { |
tc_resp.stop; |
vc_subscribed := true; |
f_setHeadersOnReceiptOfResponse(vc_response); |
v_received_OK := true; |
setverdict(pass); |
if (not (v_received_NOTIFY)) { |
repeat; |
} |
} |
[] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_getRouteMapIntoRecordRoute(v_MSG); |
f_setHeadersOnReceiptOfRequest(v_MSG); |
// Answer to the NOTIFY |
f_send200OK(); |
v_received_NOTIFY := true; |
if (not (v_received_OK)) { |
repeat; |
} |
} |
} |
} // end f_awaitingOkResponseAndNOTIFY_sendReply |
/** |
* @desc await INFO request reply with 200 OK |
*/ |
function f_awaitingINFO_sendReply( |
in template(value) INFO_Request p_info |
) runs on SipComponent { |
var INFO_Request v_request; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_info) -> value v_request sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_request); |
// Answer to the INFO |
f_send200OK(); |
} |
} |
} // end of f_awaitingINFO_sendReply |
/** |
* @desc function awaiting for an incoming INVITE |
* @param p_request expected message |
*/ |
function f_awaitingINVITE( |
template(present) INVITE_Request p_request := ? |
) runs on SipComponent { |
var INVITE_Request v_INVITE_Request; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_request) -> value v_INVITE_Request sender vc_sent_label { |
tc_wait.stop; |
vc_ignore_invite := true; |
vc_first_recv := true; // communication has started |
f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); |
SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; |
} |
[vc_interface_isc] SIPP.receive(mw_INVITE_Request_Base) -> value v_INVITE_Request sender vc_sent_label { |
tc_wait.stop; |
setverdict(fail); |
f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); |
SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; |
// clear session - send 486 and await ACK |
f_sendResponse(m_Response_Base(c_statusLine486, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); |
f_awaitingACK(mw_ACK_Request_Base(?)); |
// await 486 which go towards and send ACK |
f_awaitingResponse(mw_Response_Base(c_statusLine486, ?, ?)); |
f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); |
syncPort.send(m_syncClientStop); |
stop; |
} |
} |
} // end f_awaitingINVITE |
/** |
* @desc function awaiting for an incoming INVITE |
* @param p_request expected message |
*/ |
function f_awaitingINVITE_No100Response( |
template(present) INVITE_Request p_request := ? |
) runs on SipComponent { |
var INVITE_Request v_INVITE_Request; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_request) -> value v_INVITE_Request sender vc_sent_label { |
tc_wait.stop; |
vc_ignore_invite := true; |
vc_first_recv := true; // communication has started |
f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); |
// SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; |
} |
} |
} // end f_awaitingInviteRequest |
/** |
* @desc function awaiting for an incoming INVITE |
* @param p_request expected message |
*/ |
function f_awaitingINVITE_PassOnTimeout( |
template(present) INVITE_Request p_request := ? |
) runs on SipComponent { |
var INVITE_Request v_INVITE_Request; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_request) -> value v_INVITE_Request sender vc_sent_label { |
tc_wait.stop; |
vc_ignore_invite := true; |
vc_first_recv := true; // communication has started |
vc_boo_request := true; |
f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); |
SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; |
} |
[] tc_wait.timeout { |
vc_boo_request := false; |
} |
} |
} // end f_awaitingInviteRequest |
/** |
* @desc function awaiting ACK request |
*/ |
function f_awaitingACK( |
in template(present) ACK_Request p_ACK := ? |
) runs on SipComponent { |
f_awaitingACK_setHeaders(p_ACK, false); |
} // end f_awaitingACK |
/** |
* @desc function awaiting ACK request |
*/ |
function f_awaitingACK_setHeaders( |
in template(present) ACK_Request p_ACK := ?, |
in boolean p_setHeaders |
) runs on SipComponent { |
var Request v_ACK_Request; |
tc_ack.start; |
alt { |
[] SIPP.receive(p_ACK) -> value v_ACK_Request { |
tc_ack.stop; |
if (p_setHeaders) { |
f_setHeadersOnReceiptOfRequest(v_ACK_Request); |
} |
} |
} |
} // end f_awaitingACK_setHeaders |
/** |
* @desc function awaiting BYE and sending 200OK response |
* @param p_BYE expected BYE |
*/ |
function f_awaitingBYE( |
in template(present) BYE_Request p_BYE := ? |
) runs on SipComponent { |
var BYE_Request v_BYE_Request; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_BYE) -> value v_BYE_Request sender vc_sent_label { |
tc_wait.stop; |
vc_ignore_bye := true; |
f_setHeadersOnReceiptOfBYE(v_BYE_Request); |
// f_send200OK(); |
} |
} |
} // end f_awaitingBYE |
/** |
* @desc function awaiting BYE and sending 200OK response |
* @param p_BYE expected BYE |
*/ |
function f_awaitingBYE_sendReply( |
in template(present) BYE_Request p_BYE := ? |
) runs on SipComponent { |
var BYE_Request v_BYE_Request; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_BYE) -> value v_BYE_Request sender vc_sent_label { |
tc_wait.stop; |
vc_ignore_bye := true; |
f_setHeadersOnReceiptOfBYE(v_BYE_Request); |
f_send200OK(); |
} |
} |
} // end f_awaitingBYE_sendReply |
/** |
* @desc function awaiting BYE and sending 200OK response |
* @param p_BYE expected BYE |
*/ |
function f_awaitingBYE_sendReply_PassOnTimeout( |
in template(present) BYE_Request p_BYE := ? |
) runs on SipComponent { |
var BYE_Request v_BYE_Request; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_BYE) -> value v_BYE_Request sender vc_sent_label { |
tc_wait.stop; |
vc_ignore_bye := true; |
vc_boo_request := true; |
f_setHeadersOnReceiptOfBYE(v_BYE_Request); |
f_send200OK(); |
} |
[] tc_wait.timeout { |
vc_boo_request := false; |
} |
} |
} // end f_awaitingBYE_sendReply_PassOnTimeout |
/** |
* @desc function awaiting CANCEL |
* @param p_CANCEL expected CANCEL |
*/ |
function f_awaitingCANCEL( |
in template(present) CANCEL_Request p_CANCEL := ? |
) runs on SipComponent { |
var CANCEL_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_CANCEL) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
} |
} |
} // end f_awaitingCANCEL |
/** |
* @desc await MESSAGE request |
*/ |
function f_awaitingMESSAGE( |
in template(present) MESSAGE_Request p_MSG := ? |
) runs on SipComponent { |
var MESSAGE_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
} |
[] SIPP.receive(mw_MESSAGE_Request_Base) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
log("*** " &__SCOPE__& ": INFO: Received MESSAGE not as expected! ***"); |
setverdict(fail); |
} |
} |
} // end of f_awaitingMESSAGE |
/** |
* @desc await MESSAGE request reply with 200 OK |
*/ |
function f_awaitingMESSAGE_sendReply( |
) runs on SipComponent { |
var MESSAGE_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(mw_MESSAGE_Request_Base) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
// Answer to the MESSAGE |
f_send200OK(); |
} |
} |
} // end of f_awaitingMESSAGE_sendReply |
/** |
* @desc await MESSAGE request |
*/ |
function f_awaitingMESSAGE_sendReply_PassOnTimeout( |
in template(present) MESSAGE_Request p_MSG := ? |
) runs on SipComponent { |
var MESSAGE_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
// Answer to the MESSAGE |
// f_send200OK(); |
vc_boo_request := true; |
f_send200OK(); |
// setverdict (pass); |
} |
[] tc_wait.timeout { |
vc_boo_request := false; |
// setverdict (pass); |
} |
} |
} // end of f_awaitingMESSAGE_PassOnTimeout |
/** |
* @desc await NOTIFY request |
*/ |
function f_awaitingNOTIFY( |
in template(present) NOTIFY_Request p_MSG := ? |
) runs on SipComponent { |
var NOTIFY_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_getRouteMapIntoRecordRoute(v_MSG); |
f_setHeadersOnReceiptOfRequest(v_MSG); |
} |
} |
} // end of f_awaitingNOTIFY |
/** |
* @desc await NOTIFY request reply with 200 OK |
*/ |
function f_awaitingNOTIFY_sendReply( |
in template(present) NOTIFY_Request p_MSG := ? |
) runs on SipComponent { |
var NOTIFY_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_getRouteMapIntoRecordRoute(v_MSG); |
f_setHeadersOnReceiptOfRequest(v_MSG); |
// Answer to the NOTIFY |
f_send200OK(); |
} |
} |
} // end of f_awaitingNOTIFY_sendReply |
function f_awaitingNOTIFY_sendReply_postamble( |
in template(present) NOTIFY_Request p_MSG := ? |
) runs on SipComponent { |
var NOTIFY_Request v_MSG; |
tc_wait.start(5.0); |
alt { |
[] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_getRouteMapIntoRecordRoute(v_MSG); |
f_setHeadersOnReceiptOfRequest(v_MSG); |
// Answer to the NOTIFY |
f_send200OK(); |
} |
[] tc_wait.timeout { |
// do nothing as receiving the Notify in de-registration is not part of the test body |
} |
} |
} // end of f_awaitingNOTIFY_sendReply_postamble |
/** |
* @desc await PRACK request reply with 200 OK |
*/ |
function f_awaitingPRACK_sendReply( |
in template(present) PRACK_Request p_MSG := ? |
) runs on SipComponent { |
var PRACK_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
// Answer to the PRACK |
if (isvalue(vc_request.messageBody) and ischosen(vc_request.messageBody.sdpMessageBody)) { |
f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit, f_recordroute(), m_MBody_SDP(vc_sdp_local))); |
} |
else { |
f_sendResponse(m_Response_ext(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit, f_recordroute())); |
} |
} |
} |
} // end of f_awaitingPRACK_sendReply |
function f_awaitingPRACK( |
in template(present) PRACK_Request p_MSG := ? |
) runs on SipComponent { |
var PRACK_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
} |
} |
} // end of f_awaitingPRACK |
/** |
* @desc await PUBLISH request reply with 200 OK |
*/ |
function f_awaitingPUBLISH_sendReply( |
in template(present) PUBLISH_Request p_MSG := ? |
) runs on SipComponent { |
var PUBLISH_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
// Answer to the PUBLISH |
f_send200OK(); |
} |
} |
} // end of f_awaitingPUBLISH_sendReply |
/** |
* @desc await UPDATE request |
*/ |
function f_awaitingUPDATE( |
in template(present) UPDATE_Request p_MSG := ? |
) runs on SipComponent { |
var UPDATE_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
} |
} |
} // end of f_awaitingUPDATE |
/** |
* @desc await UPDATE request reply with 200 OK |
*/ |
function f_awaitingUPDATE_sendReply( |
in template(present) UPDATE_Request p_MSG := ? |
) runs on SipComponent { |
var UPDATE_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
// Answer to the UPDATE |
if (isvalue(vc_request.messageBody) and ischosen(vc_request.messageBody.sdpMessageBody)) { |
f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit, f_recordroute(), m_MBody_SDP(vc_sdp_local))); |
} |
else { |
f_sendResponse(m_Response_ext(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit, f_recordroute())); |
} |
} |
} |
} // end of f_awaitingUPDATE_sendReply |
/** |
* @desc await REFER request |
*/ |
function f_awaitingREFER( |
in template(present) REFER_Request p_MSG := ? |
) runs on SipComponent { |
var REFER_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt { |
[] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
tc_wait.stop; |
f_setHeadersOnReceiptOfREFER(v_MSG); |
} |
} |
} // end of f_awaitingUPDATE |
} // end AwaitingMessage |
group SendMessage { |
/** |
* @desc send ACK message, update the route and recordRoute header fields depending on boolean flags |
* @param p_request template of the message to be sent |
*/ |
function f_SendACK( |
template(value) ACK_Request p_request |
) runs on SipComponent { |
// p_request.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route |
// n/a p_request.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route |
SIPP.send(p_request) to vc_sent_label; |
} |
} // end of f_awaitingNOTIFY |
/** |
* @desc await NOTIFY request |
* reply with 200 OK |
*/ |
function f_awaitingNOTIFY_sendReply(in template NOTIFY_Request p_MSG) runs on SipComponent |
{ |
var NOTIFY_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_getRouteMapIntoRecordRoute(vc_cSeq, v_MSG); |
f_setHeadersOnReceiptOfRequest(v_MSG); |
//Answer to the NOTIFY |
f_send200OK(); |
} |
} |
} // end of f_awaitingNOTIFY_sendReply |
/** |
* @desc await PRACK request |
* reply with 200 OK |
*/ |
function f_awaitingPRACK_sendReply(in template PRACK_Request p_MSG) runs on SipComponent |
{ |
var PRACK_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
//Answer to the PRACK |
f_send200OK(); |
} |
} |
} // end of f_awaitingPRACK_sendReply |
/** |
* @desc await PUBLISH request |
* reply with 200 OK |
*/ |
function f_awaitingPUBLISH_sendReply(in template PUBLISH_Request p_MSG) runs on SipComponent |
{ |
var PUBLISH_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
//Answer to the PUBLISH |
f_send200OK(); |
} |
} |
} // end of f_awaitingPUBLISH_sendReply |
/** |
* @desc await UPDATE request |
*/ |
function f_awaitingUPDATE(in template UPDATE_Request p_MSG) runs on SipComponent |
{ |
var UPDATE_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
} |
} |
} // end of f_awaitingUPDATE |
/** |
* @desc await UPDATE request |
* reply with 200 OK |
*/ |
function f_awaitingUPDATE_sendReply(in template UPDATE_Request p_MSG) runs on SipComponent |
{ |
var UPDATE_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
//Answer to the UPDATE |
f_send200OK(); |
} |
} |
/** |
* @desc send BYE message, update the route and recordRoute header fields depending on boolean flags |
* @param p_request template of the message to be sent |
*/ |
function f_SendBYE( |
template(value) BYE_Request p_request |
) runs on SipComponent { |
SIPP.send(p_request) to vc_sent_label; |
} |
} // end of f_awaitingUPDATE_sendReply |
/** |
* @desc await REFER request |
*/ |
function f_awaitingREFER(in template REFER_Request p_MSG) runs on SipComponent |
{ |
var REFER_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfREFER(v_MSG); |
} |
} |
} // end of f_awaitingUPDATE |
} // end AwaitingMessage |
/** |
* @desc send CANCEL message |
* @param p_request template of the message to be sent |
*/ |
function f_SendCANCEL( |
template(value) CANCEL_Request p_request |
) runs on SipComponent { |
SIPP.send(p_request) to vc_sent_label; |
} |
group SendMessage { |
/** |
* @desc send INFO message |
* @param p_request template of the message to be sent |
*/ |
function f_SendINFO( |
template(value) INFO_Request p_request |
) runs on SipComponent { |
f_setHeadersGeneral(vc_cSeq, "INFO"); // cseq, contact, branch, via |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc send ACK message, update the route and recordRoute header fields depending on boolean flags |
* @param p_request template of the message to be sent |
*/ |
function f_SendACK(template ACK_Request p_request) runs on SipComponent |
{ |
//p_request.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route |
// n/a p_request.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc send BYE message, update the route and recordRoute header fields depending on boolean flags |
* @param p_request template of the message to be sent |
*/ |
function f_SendBYE(template BYE_Request p_request) runs on SipComponent |
{ |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc send CANCEL message |
* @param p_request template of the message to be sent |
*/ |
function f_SendCANCEL(template CANCEL_Request p_request) runs on SipComponent |
{ |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc send INFO message |
* @param p_request template of the message to be sent |
*/ |
function f_SendINFO(template INFO_Request p_request) runs on SipComponent |
{ |
f_setHeadersGeneral(vc_cSeq, "INFO"); // cseq, contact, branch, via |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc send INVITE message |
* @param p_request template of the message to be sent |
*/ |
function f_SendINVITE(template INVITE_Request p_request) runs on SipComponent |
{ |
vc_requestFor407 := valueof(p_request); |
SIPP.send(p_request) to vc_sent_label; |
vc_request := valueof(p_request); |
if(PX_SIP_INVITE_AUTHENTICATION_ENABLED) {a_altstep_401or407();}; |
} |
/** |
* @desc send INVITE message |
* @param p_request template of the message to be sent |
*/ |
function f_SendINVITE( |
template(value) INVITE_Request p_request |
) runs on SipComponent { |
vc_requestFor407 := valueof(p_request); |
SIPP.send(p_request) to vc_sent_label; |
vc_request := vc_requestFor407; |
if (PX_SIP_INVITE_AUTHENTICATION_ENABLED) { |
a_altstep_401or407(); |
} |
} |
/** |
* |
* @desc send PRACK message |
* @param p_request template of the message to be sent |
*/ |
function f_SendPRACK() runs on SipComponent |
{ |
vc_rAck := valueof(m_RAck(vc_response.msgHeader.rSeq.responseNum, vc_cSeq.seqNumber, vc_cSeq.method)); |
f_setHeadersGeneral(vc_cSeq, "PRACK"); // cseq, contact, branch, via |
SIPP.send(m_PRACK_Request_Base( |
vc_requestUri, |
vc_callId, |
vc_cSeq, |
vc_from, |
vc_to, |
vc_via, |
vc_rAck |
)) to vc_sent_label; |
} |
/** |
* @desc send PRACK message |
* @param p_request template of the message to be sent |
*/ |
function f_SendPRACK( |
) runs on SipComponent { |
var integer responseNum := 1; |
var PRACK_Request prackReq; |
if (isvalue(vc_response.msgHeader.rSeq) and |
isvalue(vc_response.msgHeader.rSeq.responseNum)){ |
responseNum := vc_response.msgHeader.rSeq.responseNum; |
} |
vc_rAck := valueof(m_RAck(vc_response.msgHeader.rSeq.responseNum, vc_cSeq.seqNumber, vc_cSeq.method)); |
f_setHeadersGeneral(vc_cSeq, "PRACK"); // cseq, contact, branch, via |
prackReq := m_PRACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_rAck); |
if (isvalue(vc_response.msgHeader.recordRoute)){ |
prackReq.msgHeader.route := f_route(); |
} |
SIPP.send(prackReq) to vc_sent_label; |
} |
/** |
* |
* @desc send PUBLISH message |
* @param p_request template of the message to be sent |
*/ |
function f_SendPUBLISH(template PUBLISH_Request p_request) runs on SipComponent |
{ |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc send REGISTER message |
* @param p_request template of the message to be sent |
*/ |
function f_SendREGISTER(template REGISTER_Request p_request) runs on SipComponent |
{ |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc send SUBSCRIBE message |
* @param p_request template of the message to be sent |
*/ |
function f_SendSUBSCRIBE(template SUBSCRIBE_Request p_request) runs on SipComponent |
{ |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc send UPDATE message |
* @param p_request template of the message to be sent |
*/ |
function f_SendUPDATE(template UPDATE_Request p_request) runs on SipComponent |
{ |
f_setHeadersGeneral(vc_cSeq, "UPDATE"); // cseq, contact, branch, via |
p_request.msgHeader.cSeq := vc_cSeq; |
p_request.msgHeader.contact := vc_contact; |
p_request.msgHeader.via := vc_via; |
vc_requestFor407 := valueof(p_request); |
SIPP.send(p_request) to vc_sent_label; |
if(PX_SIP_INVITE_AUTHENTICATION_ENABLED) {a_altstep_401or407();}; |
} |
/** |
* |
* @desc function send MESSAGE message |
* @param p_request template of the message to be sent |
*/ |
function f_SendMESSAGE(template MESSAGE_Request p_request) runs on SipComponent |
{ |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc function send NOTIFY message |
* @param p_request template of the notify to be sent |
*/ |
function f_SendNOTIFY(template NOTIFY_Request p_request) runs on SipComponent |
{ |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc send REFER message |
* @param p_request template of the message to be sent |
*/ |
function f_SendREFER(template REFER_Request p_request) runs on SipComponent |
{ |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc send 200 OK |
*/ |
function f_send200OK() runs on SipComponent |
{ |
f_sendResponse(m_Response_Base(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); |
} |
/** |
* |
* @desc send response |
* @param p_request template of the message to be sent |
*/ |
function f_sendResponse(template Response p_response) runs on SipComponent |
{ |
//p_response.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route//TODO check if route header is needed in responses |
p_response.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route |
SIPP.send(p_response) to vc_sent_label; |
} |
/** |
* @desc send PUBLISH message |
* @param p_request template of the message to be sent |
*/ |
function f_SendPUBLISH( |
template(value) PUBLISH_Request p_request |
) runs on SipComponent { |
SIPP.send(p_request) to vc_sent_label; |
} |
} // end SendMessage |
/** |
* @desc send REGISTER message |
* @param p_request template of the message to be sent |
*/ |
function f_SendREGISTER( |
template(value) REGISTER_Request p_request |
) runs on SipComponent { |
SIPP.send(p_request) to vc_sent_label; |
} |
group GlobalSteps { |
/** |
* |
* @desc component initialization |
* @param p_cSeq_s cSeq value to be assigned to the component variable |
*/ |
function f_init_component(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
//Variables |
vc_cSeq := p_cSeq_s; |
//Defaults |
vc_def_catchSyncStop := activate(a_Sip_catchSyncStop()); |
vc_default := activate (a_clearRegistration()); |
} |
/** |
* |
* @desc component termination |
*/ |
function f_terminate_component() runs on SipComponent |
{ |
log("component terminated - forced!"); |
deactivate; |
stop; |
} |
/** |
* @desc send SUBSCRIBE message |
* @param p_request template of the message to be sent |
*/ |
function f_SendSUBSCRIBE( |
template(value) SUBSCRIBE_Request p_request |
) runs on SipComponent { |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc component termination |
*/ |
function f_componentStop() runs on SipComponent |
{ |
syncPort.send(m_syncClientStop); |
SIPP.clear; |
stop; |
} |
/** |
* @desc send UPDATE message |
* @param p_request template of the message to be sent |
*/ |
function f_SendUPDATE( |
template(value) UPDATE_Request p_request |
) runs on SipComponent { |
f_setHeadersGeneral(vc_cSeq, "UPDATE"); // cseq, contact, branch, via |
p_request.msgHeader.cSeq := vc_cSeq; |
p_request.msgHeader.contact := vc_contact; |
p_request.msgHeader.via := vc_via; |
vc_requestFor407 := valueof(p_request); |
SIPP.send(p_request) to vc_sent_label; |
if (PX_SIP_INVITE_AUTHENTICATION_ENABLED) { |
a_altstep_401or407(); |
} |
} |
/** |
* |
* @desc setting of user parameters with PIXIT values |
* @param p_user identifies the selected user configuration and location |
*/ |
function f_init_userprofile(in integer p_user) runs on SipComponent |
{ |
vc_userprofile.id := p_user; |
select(p_user){ |
case (c_userProfile_SIP1_home) { //variant c_userProfile_SIP1_home |
vc_userprofile.currPort := PX_SIP_TS1_PORT; |
vc_userprofile.currIpaddr := PX_SIP_TS1_IPADDR; |
vc_userprofile.contactPort := PX_SIP_TS1_PORT; |
vc_userprofile.contactIpaddr := PX_SIP_TS1_IPADDR; |
vc_userprofile.bearerIpaddr := PX_SIP_TS1_BEARER_IPADDR; |
vc_userprofile.homeDomain := PX_SIP_TS1_LOCAL_DOMAIN; |
vc_userprofile.publUsername := PX_SIP_TS1_LOCAL_USER; |
vc_userprofile.qop := PX_SIP_SUT_UE1_QOP; |
vc_userprofile.privUsername := PX_SIP_SUT_UE1_USERNAME; |
vc_userprofile.passwd := PX_SIP_SUT_UE1_PASSWD; |
vc_userprofile.registrarDomain := PX_SIP_SUT_REGISTRAR_DOMAIN; |
} |
case (c_userProfile_SIP2_home) { //variant c_userProfile_SIP2_home |
vc_userprofile.currPort := PX_SIP_TS2_PORT; |
vc_userprofile.currIpaddr := PX_SIP_TS2_IPADDR; |
vc_userprofile.contactPort := PX_SIP_TS2_PORT; |
vc_userprofile.contactIpaddr := PX_SIP_TS2_IPADDR; |
vc_userprofile.bearerIpaddr := PX_SIP_TS2_BEARER_IPADDR; |
vc_userprofile.homeDomain := PX_SIP_TS2_LOCAL_DOMAIN; |
vc_userprofile.publUsername := PX_SIP_TS2_LOCAL_USER; |
vc_userprofile.qop := PX_SIP_SUT_UE2_QOP; |
vc_userprofile.privUsername := PX_SIP_SUT_UE2_USERNAME; |
vc_userprofile.passwd := PX_SIP_SUT_UE2_PASSWD; |
vc_userprofile.registrarDomain := PX_SIP_SUT_REGISTRAR_DOMAIN; |
} |
} |
} |
/** |
* @desc function send MESSAGE message |
* @param p_request template of the message to be sent |
*/ |
function f_SendMESSAGE( |
template(value) MESSAGE_Request p_request |
) runs on SipComponent { |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* |
* @desc function waits for particular time that allows the SUT to return to idle state |
*/ |
function f_awaitSUTidle() runs on SipComponent |
{ |
vc_ignore4xx := true; // allow 4xx in default |
tc_noAct.start; |
alt { |
[] tc_noAct.timeout{} |
} |
} |
/** |
* |
* @desc function waits for particular time before next expected message |
*/ |
function f_wait(float p_time) runs on SipComponent |
{ |
tc_noAct.start(p_time); |
alt { |
[] tc_noAct.timeout{} |
} |
} |
/** |
* |
* @desc function cause termination of a PTC |
* @param p_syncPoint dummy parameter (copied from the common lib) |
*/ |
function f_check2Null(in charstring p_syncPoint) runs on SipComponent |
{ |
//!= pass does not work, because in case of "none" execution shall continue |
if (getverdict == inconc or getverdict == fail){ |
log("**** f_check2Null: Verdict evaluated to fail or inconc. Stopping test execution now "); |
f_selfOrClientSyncAndVerdict (p_syncPoint, e_error) ; |
}//end if |
} |
/* |
* |
/** |
* @desc function send NOTIFY message |
* @param p_request template of the notify to be sent |
*/ |
function f_SendNOTIFY( |
template(value) NOTIFY_Request p_request |
) runs on SipComponent { |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* @desc send REFER message |
* @param p_request template of the message to be sent |
*/ |
function f_SendREFER( |
template(value) REFER_Request p_request |
) runs on SipComponent { |
SIPP.send(p_request) to vc_sent_label; |
} |
/** |
* @desc send 200 OK |
*/ |
function f_send200OK( |
) runs on SipComponent { |
f_sendResponse(m_Response_Base(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); |
} |
/** |
* @desc send response |
* @param p_request template of the message to be sent |
*/ |
function f_sendResponse( |
template(value) Response p_response |
) runs on SipComponent { |
p_response.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route |
p_response.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route |
SIPP.send(p_response) to vc_sent_label; |
} |
} // end SendMessage |
group GlobalSteps { |
/** |
* @desc component initialization |
* @param p_cSeq_s cSeq value to be assigned to the component variable |
*/ |
function f_init_component( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
// Variables |
vc_cSeq := p_cSeq_s; |
// Defaults |
vc_def_catchSyncStop := activate(a_Sip_catchSyncStop()); |
vc_default := activate(a_clearRegistration()); |
} |
/** |
* @desc component termination |
*/ |
function f_terminate_component( |
) runs on SipComponent { |
log("*** " &__SCOPE__& ": INFO: component terminated - forced! ***"); |
deactivate; |
stop; |
} |
/** |
* @desc component termination |
*/ |
function f_componentStop( |
) runs on SipComponent { |
syncPort.send(m_syncClientStop); |
SIPP.clear; |
stop; |
} |
/** |
* @desc function waits for particular time that allows the SUT to return to idle state |
*/ |
function f_awaitSUTidle( |
) runs on SipComponent { |
vc_ignore4xx := true; // allow 4xx in default |
tc_noAct.start; |
alt { |
[] tc_noAct.timeout { |
} |
} |
} |
/** |
* @desc function waits for particular time before next expected message |
*/ |
function f_wait( |
float p_time |
) runs on SipComponent { |
tc_noAct.start(p_time); |
alt { |
[] tc_noAct.timeout { |
} |
} |
} |
/** |
* @desc function cause termination of a PTC |
* @param p_syncPoint dummy parameter (copied from the common lib) |
*/ |
function f_check2Null( |
in charstring p_syncPoint |
) runs on SipComponent { |
// != pass does not work, because in case of "none" execution shall continue |
if (getverdict == inconc or getverdict == fail) { |
log("*** f_check2Null: INFO: Verdict evaluated to fail or inconc. Stopping test execution now ***"); |
f_selfOrClientSyncAndVerdict(p_syncPoint, e_error); |
} // end if |
} |
/* |
* |
* @desc original copied from older LibCommon_VerdictControl |
*/ |
function f_getVerdict() |
return FncRetCode { |
var FncRetCode v_ret := e_error; |
if (getverdict == pass or getverdict == none) { |
v_ret := e_success; |
} |
return v_ret; |
} |
}// end group GlobalSteps |
function f_getVerdict( |
) return FncRetCode { |
var FncRetCode v_ret := e_error; |
if (getverdict == pass or getverdict == none) { |
v_ret := e_success; |
} |
return v_ret; |
} |
group Registration { |
/** |
* |
* @desc registration and authentication with MD5 |
* @param p_cSeq_s cseq parameter |
* @param p_register register template |
* @param p_auth flag indicating if authentication is needed |
*/ |
function f_Registration(inout CSeq p_cSeq_s, out template REGISTER_Request p_register, in boolean p_auth, boolean p_emergency:=false) runs on SipComponent |
{ |
if (PX_SIP_REGISTRATION) |
{ |
f_setHeaders_REGISTER(p_cSeq_s, p_emergency); //TODO need if p_register not set |
p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
f_SendREGISTER(p_register); //LibSip |
//awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER |
if (p_auth) |
{ |
// receiving 401 Unauthorized response. |
// and Re-send REGISTER request with Authorization header |
tc_resp.start(PX_SIP_TRESP); |
alt |
{ |
[] SIPP.receive (mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response |
{ |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(p_cSeq_s, vc_response); |
// set headers via, cseq and authorization |
f_setHeaders_2ndREGISTER(p_cSeq_s); |
p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
// Re-send protected REGISTER |
f_SendREGISTER(p_register);//LibSip |
// awaiting 200 OK REGISTER |
f_awaitingOkResponse(p_cSeq_s); |
f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); |
} |
[] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response |
{ |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); |
f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); |
log ("Authorization was not requested as expected"); |
} |
} |
} |
else |
{ |
f_awaitingOkResponse(p_cSeq_s); |
f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); |
} |
}; |
}//end function f_Registration |
/** |
* |
* @desc registration and authentication with MD5 |
* @param p_cSeq_s cseq parameter |
* @param p_register register template |
* @param p_auth flag indicating if authentication is needed |
*/ |
function f_Registration_withTemplate(inout CSeq p_cSeq_s, inout template REGISTER_Request p_register, in boolean p_auth) runs on SipComponent |
{ |
if (PX_SIP_REGISTRATION) |
{ |
//f_setHeaders_REGISTER(p_cSeq_s); TODO need if p_register not set |
//p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
f_SendREGISTER(p_register); //LibSip |
//awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER |
if (p_auth) |
{ |
// receiving 401 Unauthorized response. |
// and Re-send REGISTER request with Authorization header |
tc_resp.start(PX_SIP_TRESP); |
alt |
{ |
[] SIPP.receive (mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response |
{ |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(p_cSeq_s, vc_response); |
// set headers via, cseq and authorization |
f_setHeaders_2ndREGISTER(p_cSeq_s); |
//p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
// Re-send protected REGISTER |
p_register.requestLine.requestUri := vc_requestUri; |
p_register.msgHeader.cSeq := vc_cSeq; |
p_register.msgHeader.via := vc_via_REG; |
p_register.msgHeader.authorization := vc_authorization; |
f_SendREGISTER(p_register);//LibSip |
// awaiting 200 OK REGISTER |
f_awaitingOkResponse(p_cSeq_s); |
f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); |
} |
[] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response |
{ |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); |
f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); |
log ("Authorization was not requested as expected"); |
} |
} |
} |
else |
{ |
f_awaitingOkResponse(p_cSeq_s); |
f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); |
} |
}; |
}//end function f_Registration_withTemplate |
} // end group GlobalSteps |
group Registration { |
/** |
* |
* @desc remove registration |
* @param p_cSeq_s cseq parameter |
*/ |
function f_RemoveRegistration(inout CSeq p_cSeq) runs on SipComponent |
{ |
var CommaParam_List v_challenge; |
var Credentials v_credentials; |
var template REGISTER_Request v_request; |
// |
if(vc_DeregDone) |
{ |
f_componentStop(); |
} |
else {vc_DeregDone := true;} |
if (PX_SIP_REGISTRATION) |
{ |
f_setHeaders_deREGISTER(p_cSeq); |
//TODO: 1st option |
v_request := m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, |
p_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization, "0"); |
//TODO@ 2nd option |
// v_request := m_REGISTER_Request_Base(vc_requestUri, vc_callIdReg, |
// p_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
//v_request.msgHeader.route := f_route(); |
f_SendREGISTER(v_request); |
if (PX_SIP_REGISTER_AUTHENTICATION_ENABLED) |
{ |
// receiving 401 Unauthorized response. |
// and Re-send REGISTER request with Authorization header |
tc_resp.start(PX_SIP_TRESP); |
alt |
{ |
[] SIPP.receive (mw_Response_Base(c_statusLine401, vc_callIdReg, p_cSeq)) -> value vc_response |
{ |
tc_resp.stop; |
// set headers via, cseq and authorization |
f_setHeaders_2ndREGISTER(p_cSeq); |
// TODO: 1st option |
v_request := m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, |
p_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization, "0"); |
// TODO: 2nd option |
// v_request := m_REGISTER_Request_Base(vc_requestUri, vc_callIdReg, |
// p_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
//v_request.msgHeader.route := f_route(); |
// Re-send protected REGISTER |
f_SendREGISTER(v_request);//LibSip |
// awaiting 200 OK REGISTER |
f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)); |
} |
[] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq))-> value vc_response |
{ |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); |
//log ("Authorization was not requested as expected"); |
} |
} |
} |
else |
{ |
f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)); |
} |
} |
} // end f_RemoveRegistration |
/** |
* @desc registration and authentication with MD5 |
* @param p_cSeq_s cseq parameter |
* @param p_register register template |
* @param p_auth flag indicating if authentication is needed |
* @param p_emergency Set to true in case of emergency call |
*/ |
function f_Registration( |
inout CSeq p_cSeq_s, |
out template(value) REGISTER_Request p_register, |
in boolean p_auth, |
in boolean p_emergency := false |
) runs on SipComponent { |
if (PX_SIP_REGISTRATION) { |
f_setHeaders_REGISTER(p_cSeq_s, p_emergency); |
p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
f_SendREGISTER(p_register); // LibSip |
// awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER |
if (p_auth) { |
// receiving 401 Unauthorized response. |
// and Re-send REGISTER request with Authorization header |
tc_resp.start; |
alt { |
[] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response { |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_response); |
// set headers via, cseq and authorization |
f_setHeaders_2ndREGISTER(p_cSeq_s); |
p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
// Re-send protected REGISTER |
f_SendREGISTER(p_register); // LibSip |
// awaiting 200 OK REGISTER |
f_awaitingOkResponse(p_cSeq_s); |
f_getServiceRouteMapIntoRouteInRegistration(vc_response); |
} |
[] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_response); |
f_getServiceRouteMapIntoRouteInRegistration(vc_response); |
log("*** " &__SCOPE__& ": INFO: Authorization was not requested as expected ***"); |
} |
} |
} |
else { |
f_awaitingOkResponse(p_cSeq_s); |
f_getServiceRouteMapIntoRouteInRegistration(vc_response); |
} |
} |
} // end function f_Registration |
/** |
* |
* @desc remove registration without authorization |
* @param p_cSeq_s cseq parameter |
*/ |
function f_RemoveRegistration_wo_authorization(inout CSeq p_cSeq) runs on SipComponent |
{ |
var SemicolonParam_List tmp_params; |
if (PX_SIP_REGISTRATION) |
{ |
f_setHeaders_deREGISTER(p_cSeq); |
f_SendREGISTER(m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, p_cSeq, |
vc_from, vc_to, vc_via, vc_contact, vc_authorization, "0" )); |
f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)); |
} |
} // end f_RemoveRegistration_wo_authorization |
/** |
* @desc registration and authentication with MD5 |
* @param p_cSeq_s cseq parameter |
* @param p_register register template |
* @param p_auth flag indicating if authentication is needed |
*/ |
function f_Registration_withTemplate( |
inout CSeq p_cSeq_s, |
inout template(value) REGISTER_Request p_register, |
in boolean p_auth |
) runs on SipComponent { |
if (PX_SIP_REGISTRATION) { |
if(not isbound(p_register)){ |
f_setHeaders_REGISTER(p_cSeq_s); |
p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
} |
f_SendREGISTER(p_register); // LibSip |
// awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER |
if (p_auth) { |
// receiving 401 Unauthorized response. |
// and Re-send REGISTER request with Authorization header |
tc_resp.start; |
alt { |
[] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response { |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_response); |
// set headers via, cseq and authorization |
f_setHeaders_2ndREGISTER(p_cSeq_s); |
// p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, |
// vc_authorization); |
// Re-send protected REGISTER |
p_register.requestLine.requestUri := vc_requestUri; |
p_register.msgHeader.cSeq := vc_cSeq; |
p_register.msgHeader.via := vc_via_REG; |
p_register.msgHeader.authorization := vc_authorization; |
f_SendREGISTER(p_register); // LibSip |
// awaiting 200 OK REGISTER |
f_awaitingOkResponse(p_cSeq_s); |
f_getServiceRouteMapIntoRouteInRegistration(vc_response); |
} |
[] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_response); |
f_getServiceRouteMapIntoRouteInRegistration(vc_response); |
log("*** " &__SCOPE__& ": INFO: Authorization was not requested as expected ***"); |
} |
} |
} |
else { |
f_awaitingOkResponse(p_cSeq_s); |
f_getServiceRouteMapIntoRouteInRegistration(vc_response); |
} |
} |
} // end function f_Registration_withTemplate |
}//end group Registration |
group Subscription { |
/** |
* |
* @desc UE send subscrbe, await on 200 OK, await notify and send 200 OK |
* @param p_cSeq_s cseq parameter |
* @param p_subscribe subscribe template |
*/ |
function f_Subscription(inout CSeq p_cSeq_s,template SUBSCRIBE_Request p_subscribe) runs on SipComponent |
{ |
if (PX_SIP_SUBSCRIPTION) |
{ |
//f_setHeaders_SUBSCRIBE(p_cSeq_s); |
//send SUBSCRIBE |
f_SendSUBSCRIBE(p_subscribe); |
// awaiting 200 OK SUBSCRIBE |
f_awaitingOkResponse(p_cSeq_s); |
//await NOTIFY and send reply 200 OK |
f_awaitingNOTIFY_sendReply(mw_NOTIFY_Request_Base(vc_callId)); |
} |
}//end function f_Subscription |
/** |
* @desc remove registration |
* @param p_cSeq_s cseq parameter |
*/ |
function f_RemoveRegistration( |
inout CSeq p_cSeq |
) runs on SipComponent { |
var template(value) REGISTER_Request v_request; |
var boolean v_receivedNotify := false; |
/** |
* |
* @desc UE send subscrbe, await on 200 OK, await notify and send 200 OK |
* @param p_cSeq_s cseq parameter |
* @param p_subscribe subscribe template |
* @param p_notify notify template |
*/ |
function f_SubscriptionWithNotification(inout CSeq p_cSeq_s, template SUBSCRIBE_Request p_subscribe, template NOTIFY_Request p_notify) runs on SipComponent |
{ |
if (PX_SIP_SUBSCRIPTION) |
{ |
f_setHeaders_SUBSCRIBE(p_cSeq_s); |
//send SUBSCRIBE |
f_SendSUBSCRIBE(p_subscribe); |
// awaiting 200 OK SUBSCRIBE |
f_awaitingOkResponse(p_cSeq_s); |
} |
if(PX_SIP_NOTIFICATION) |
{ |
//await NOTIFY and send reply 200 OK |
f_awaitingNOTIFY_sendReply(p_notify); |
} |
}//end function f_Subscription |
// |
if (vc_DeregDone) { |
f_componentStop(); |
} |
else { |
vc_DeregDone := true; |
} |
/** |
* |
* @desc UE await subscrbe, send on 200 OK; possibility to handle also other SUBSCRIBE methods where event is different than reg |
* @param p_cSeq_s cseq parameter |
* @param p_subscribe subscribe template |
*/ |
function f_awaitingSubscription(inout CSeq p_cSeq_s, template SUBSCRIBE_Request p_subscribe) runs on SipComponent |
{ |
var Request v_request; |
tc_wait.start(2.0);//awaiting of all SUBSCRIBES |
alt |
{ |
[] SIPP.receive(p_subscribe)-> value v_request sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfSUBSCRIBE(v_request); |
f_send200OK(); |
repeat; |
if (PX_SIP_REGISTRATION) { |
f_setHeaders_deREGISTER(p_cSeq); |
v_request := m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, p_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization, "0"); |
f_SendREGISTER(v_request); |
if (PX_SIP_REGISTER_AUTHENTICATION_ENABLED) { |
// receiving 401 Unauthorized response. |
// and Re-send REGISTER request with Authorization header |
tc_resp.start; |
alt { |
[] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callIdReg, p_cSeq)) -> value vc_response { |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_response); |
// set headers via, cseq and authorization |
f_setHeaders_2ndREGISTER(p_cSeq); |
v_request := m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, p_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization, "0"); |
// v_request.msgHeader.route := f_route(); |
// Re-send protected REGISTER |
f_SendREGISTER(v_request); // LibSip |
// awaiting 200 OK REGISTER |
f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)); |
} |
[] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)) -> value vc_response { |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_response); |
// log ("Authorization was not requested as expected"); |
} |
[] a_awaitNotify(mw_NOTIFY_Request_Base(vc_callIdSub), v_receivedNotify) { |
} |
} |
} |
[] SIPP.receive(mw_SUBSCRIBE_Request_Base)-> value v_request sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfSUBSCRIBE(v_request); |
f_send200OK(); |
repeat; |
else { |
tc_resp.start; |
alt { |
[] a_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)) { |
} |
[] a_awaitNotify(mw_NOTIFY_Request_Base(vc_callIdSub), v_receivedNotify) { |
} |
} |
} |
[] tc_wait.timeout |
{ |
setverdict(pass); |
// await NOTIFY and send reply 200 OK |
if (vc_subscribed and v_receivedNotify == false) { |
f_awaitingNOTIFY_sendReply_postamble(mw_NOTIFY_Request_Base(vc_callIdReg)); |
} |
} |
// TODO check how to solve sending of NOTIFY on SUBSCRIBE |
}//end function f_awaitingSubscription |
} // end f_RemoveRegistration |
}//end group Subscription |
/** |
* @desc remove registration without authorization |
* @param p_cSeq_s cseq parameter |
*/ |
function f_RemoveRegistration_wo_authorization( |
inout CSeq p_cSeq |
) runs on SipComponent { |
if (PX_SIP_REGISTRATION) { |
f_setHeaders_deREGISTER(p_cSeq); |
f_SendREGISTER(m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, p_cSeq, vc_from, vc_to, vc_via, vc_contact, vc_authorization, "0")); |
f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)); |
} |
} // end f_RemoveRegistration_wo_authorization |
group Preambles { |
/** |
* |
* @desc Set variables and default initialization for user profile |
* @param p_userprofile user profile of call |
* @param p_cSeq_s cseq parameter |
*/ |
function f_SIP_preamble_woREG(in integer p_userprofile, inout CSeq p_cSeq_s) runs on SipComponent |
{ |
//varables and altsteps |
f_init_component(p_cSeq_s); |
//Preamble |
f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable |
vc_sdp_local := valueof(m_SDP_bandwidth(valueof(m_media_dynPT(PX_SIP_SDP_dyn, PX_SIP_SDP_encoding)), vc_userprofile)); |
} |
/** |
* |
* @desc Set variables and default initialization for user profile and handle registration and authentication with MD5 |
* @param p_userprofile user profile of call |
* @param p_cSeq_s cseq parameter |
* @param p_register register template |
*/ |
function f_SIP_preamble_withREG(in integer p_userprofile, inout CSeq p_cSeq_s, template REGISTER_Request p_register) runs on SipComponent |
{ |
//preamble |
f_SIP_preamble_woREG(p_userprofile, p_cSeq_s); |
//Registration, Awaiting |
f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); |
} |
}// end group Preambles |
group Postambles { |
} // end group Registration |
/** |
* |
* @desc function send BYE and awaits reponse |
* @param p_CallId parameter for outgoing BYE |
* @param p_cSeq parameter for outgoing BYE |
* @param p_from parameter for outgoing BYE |
* @param p_to parameter for outgoing BYE |
* @param p_reqHostPort parameter for outgoing BYE |
*/ |
function f_terminateCall(SipUrl p_requestUri, CallId p_CallId, inout CSeq p_cSeq, From p_from, |
template To p_to) runs on SipComponent |
{ |
// Sending of a BYE request to release the call and expect a final response |
f_SendBYE(m_BYE_Request_cause(p_requestUri, p_CallId, p_cSeq, p_from, valueof(p_to), vc_via, PX_SIP_BYE_CAUSE)); |
tc_resp.start(PX_SIP_TRESP); |
alt |
{ |
[] SIPP.receive (mw_Response_Base(mw_statusLine1xx, p_CallId, p_cSeq)) |
{ |
repeat; |
} |
[] SIPP.receive (mw_Response_Base(mw_statusLineFinal, p_CallId, p_cSeq)) |
{ |
tc_resp.stop; |
} |
} |
} // end function f_terminateCall |
group Subscription { |
function f_cancelCall(template CANCEL_Request p_request) |
runs on SipComponent |
{ |
// This function is called to bring back the IUT in idle condition |
// in case of errors or unexpected behaviour. |
// Sending of a CANCEL request with the same Cseq |
f_setHeadersCANCEL(vc_cSeq); |
f_SendCANCEL(p_request); |
tc_resp.start(PX_SIP_TRESP); |
alt |
{ |
[] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)) |
{ |
tc_resp.stop; |
} |
} |
} |
/** |
* @desc UE send subscrbe, await on 200 OK, await notify and send 200 OK |
* @param p_cSeq_s cseq parameter |
* @param p_subscribe subscribe template |
*/ |
function f_Subscription( |
inout CSeq p_cSeq_s, |
template(value) SUBSCRIBE_Request p_subscribe |
) runs on SipComponent { |
// send SUBSCRIBE |
f_SendSUBSCRIBE(p_subscribe); |
// awaiting 200 OK SUBSCRIBE |
// await NOTIFY and send reply 200 OK |
f_awaitingOkResponseAndNOTIFY_sendReply(p_cSeq_s, mw_NOTIFY_Request_Base(vc_callId)); |
} // end function f_Subscription |
function f_cancelCall_await487(template CANCEL_Request p_request) |
runs on SipComponent |
{ |
// This function is called to bring back the IUT in idle condition |
// in case of errors or unexpected behaviour. |
// Sending of a CANCEL request with the same Cseq |
f_cancelCall(p_request); |
// set method on INVITE |
vc_cSeq.method := "INVITE"; |
//await on 487 response and send ACK |
f_awaitingResponse(mw_Response_Base(c_statusLine487, vc_callId, vc_cSeq)); |
f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); |
} |
/** |
* @desc UE send subscrbe, await on 200 OK, await notify and send 200 OK |
* @param p_cSeq_s cseq parameter |
* @param p_subscribe subscribe template |
* @param p_notify notify template |
*/ |
function f_SubscriptionWithNotification( |
inout CSeq p_cSeq_s, |
template(value) SUBSCRIBE_Request p_subscribe, |
template(present) NOTIFY_Request p_notify := ? |
) runs on SipComponent { |
f_setHeaders_SUBSCRIBE(p_cSeq_s); |
// send SUBSCRIBE |
f_SendSUBSCRIBE(p_subscribe); |
// awaiting 200 OK SUBSCRIBE |
// await NOTIFY and send reply 200 OK |
f_awaitingOkResponseAndNOTIFY_sendReply(p_cSeq_s, p_notify); |
} // end function f_SubscriptionWithNotification |
function f_awaitCancelCall_send487(template CANCEL_Request p_request) |
runs on SipComponent |
{ |
f_awaitingCANCEL(p_request); |
f_sendResponse(m_Response_Base(c_statusLine200, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); |
// set method on INVITE |
vc_cSeq.method := "INVITE"; |
//send 487 response and await ACK |
f_sendResponse(m_Response_Base(c_statusLine487, vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via)); |
// await ACK |
f_awaitingACK(mw_ACK_Request_Base(vc_callId)); |
} |
/** |
* @desc UE await subscrbe, send on 200 OK; possibility to handle also other SUBSCRIBE methods where event is different than reg |
* @param p_cSeq_s cseq parameter |
* @param p_subscribe subscribe template |
*/ |
function f_awaitingSubscription( |
template(present) SUBSCRIBE_Request p_subscribe := ? |
) runs on SipComponent { |
var Request v_request; |
} // end group Postambles |
tc_wait.start(2.0); // awaiting of all SUBSCRIBES |
alt { |
[] SIPP.receive(p_subscribe) -> value v_request sender vc_sent_label { |
f_setHeadersOnReceiptOfSUBSCRIBE(v_request); |
f_send200OK(); |
repeat; |
} |
[] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_request sender vc_sent_label { |
f_setHeadersOnReceiptOfSUBSCRIBE(v_request); |
f_send200OK(); |
repeat; |
} |
[] tc_wait.timeout { |
setverdict(pass); |
} |
} |
} // end function f_awaitingSubscription |
group SipChecks |
{ |
/* |
* @desc check the presence of conversation at SIP side |
* |
*/ |
function f_check_Conversation() runs on SipComponent |
{ |
var boolean v_result; |
var charstring v_question := "confirm if conversation at SIP port"; |
if (PX_SIP_CheckConversation) { |
opPort.call(s_SIP_conversation:{v_question, -}) |
{[] opPort.getreply(s_SIP_conversation:{-, true}) {} |
[] opPort.getreply(s_SIP_conversation:{-, false}) |
{all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop;} |
} |
} |
} // end group Subscription |
f_selfOrClientSyncAndVerdict(c_uPlane, f_getVerdict()); // Note: implemented in test bodies |
return |
} // end of f_check_Conversation |
group Preambles { |
/* |
* @desc check the presence of conversation at SIP side |
* |
*/ |
function f_check_Ringing() runs on SipComponent |
{ |
var boolean v_result; |
var charstring v_question := "confirm if ringing at SIP port"; |
if (PX_SIP_CheckRinging) { |
opPort.call(s_SIP_ringing:{v_question, -}) |
{[] opPort.getreply(s_SIP_ringing:{-, true}) {} |
[] opPort.getreply(s_SIP_ringing:{-, false}) |
{all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop;} |
} |
} |
/** |
* @desc Set variables and default initialization for user profile |
* @param p_userprofile user profile of call |
* @param p_cSeq_s cseq parameter |
*/ |
function f_SIP_preamble_woREG( |
inout CSeq p_cSeq_s |
) runs on SipComponent { |
// varables and altsteps |
f_init_component(p_cSeq_s); |
f_selfOrClientSyncAndVerdict(c_Ringing, f_getVerdict()); |
return |
} // end of f_check_Ringing |
// Preamble |
//NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable |
vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); |
} |
/* |
* @desc check the announcement at SIP side (UE A) |
* |
*/ |
function f_check_AnnouncementUE_A() runs on SipComponent |
{ |
var boolean v_result; |
var charstring v_question := "confirm if announcement at UE A"; |
if (PX_SIP_CheckConversation) { |
opPort.call(s_SIP_announcementA:{v_question, -}) |
{[] opPort.getreply(s_SIP_announcementA:{-, true}) {} |
[] opPort.getreply(s_SIP_announcementA:{-, false}) |
{all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop;} |
} |
} |
/** |
* @desc Set variables and default initialization for user profile and handle registration and authentication with MD5 |
* @param p_userprofile user profile of call |
* @param p_cSeq_s cseq parameter |
* @param p_register register template |
*/ |
function f_SIP_preamble_withREG( |
inout CSeq p_cSeq_s, |
template(value) REGISTER_Request p_register |
) runs on SipComponent { |
// preamble |
f_SIP_preamble_woREG(p_cSeq_s); |
f_selfOrClientSyncAndVerdict(c_annoucA, f_getVerdict()); |
return |
} // end of f_check_AnnouncementUE_A |
// Registration, Awaiting |
f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); |
} |
/* |
* @desc check the announcement at SIP side (UE B) |
* |
*/ |
function f_check_AnnouncementUE_B() runs on SipComponent |
{ |
var boolean v_result; |
var charstring v_question := "confirm if announcement at UE B"; |
if (PX_SIP_CheckConversation) { |
opPort.call(s_SIP_announcementB:{v_question, -}) |
{[] opPort.getreply(s_SIP_announcementB:{-, true}) {} |
[] opPort.getreply(s_SIP_announcementB:{-, false}) |
{all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop;} |
} |
} |
f_selfOrClientSyncAndVerdict(c_annoucB, f_getVerdict()); |
return |
} // end of f_check_AnnouncementUE_B |
/* |
* @desc check the announcement at SIP side |
* |
*/ |
function f_check_Announcement() runs on SipComponent |
{ |
var boolean v_result; |
var charstring v_question := "confirm if announcement at SIP side"; |
if (PX_SIP_CheckConversation) { |
opPort.call(s_SIP_announcement:{v_question, -}) |
{[] opPort.getreply(s_SIP_announcement:{-, true}) {} |
[] opPort.getreply(s_SIP_announcement:{-, false}) |
{all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop;} |
} |
} |
} // end group Preambles |
f_selfOrClientSyncAndVerdict(c_annouc, f_getVerdict()); |
return |
} // end of f_check_Announcement |
group Postambles { |
/* |
* @desc check the Voice message at SIP side |
* |
*/ |
function f_check_VoiceMessage() runs on SipComponent |
{ |
var boolean v_result; |
var charstring v_question := "confirm if voice message at SIP side"; |
if (PX_SIP_CheckConversation) { |
opPort.call(s_SIP_voiceMessage:{v_question, -}) |
{[] opPort.getreply(s_SIP_voiceMessage:{-, true}) {} |
[] opPort.getreply(s_SIP_voiceMessage:{-, false}) |
{all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop;} |
} |
} |
/** |
* @desc function send BYE and awaits reponse |
* @param p_CallId parameter for outgoing BYE |
* @param p_cSeq parameter for outgoing BYE |
* @param p_from parameter for outgoing BYE |
* @param p_to parameter for outgoing BYE |
* @param p_reqHostPort parameter for outgoing BYE |
* @param p_byeCause parameter for Release cause to be used |
* in BYE and in Failure messages, former PX_SIP_BYE_CAUSE |
*/ |
function f_terminateCall( |
SipUrl p_requestUri, |
CallId p_CallId, |
inout CSeq p_cSeq, |
From p_from, |
template(value) To p_to, |
integer p_byeCause |
) runs on SipComponent { |
// Sending of a BYE request to release the call and expect a final response |
f_SendBYE(m_BYE_Request_cause(p_requestUri, p_CallId, p_cSeq, p_from, p_to, vc_via, p_byeCause)); |
f_selfOrClientSyncAndVerdict(c_voicem, f_getVerdict()); |
return |
} // end of f_check_Announcement |
/* |
* @desc check the stop of media stream |
* |
*/ |
function f_check_MediaStopped() runs on SipComponent |
{ |
var boolean v_result; |
var charstring v_question := "confirm if media stream stopped"; |
if (PX_SIP_CheckConversation) { |
opPort.call(s_SIP_mediastopped:{v_question, -}) |
{[] opPort.getreply(s_SIP_mediastopped:{-, true}) {} |
[] opPort.getreply(s_SIP_mediastopped:{-, false}) |
{all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop;} |
} |
} |
tc_resp.start; |
alt { |
[] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_CallId, p_cSeq)) { |
repeat; |
} |
[] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_CallId, p_cSeq)) { |
tc_resp.stop; |
} |
} |
} // end function f_terminateCall |
f_selfOrClientSyncAndVerdict(c_uPlaneStop, f_getVerdict()); |
return |
} // end of f_check_MediaStopped |
function f_cancelCall( |
template(value) CANCEL_Request p_request |
) runs on SipComponent { |
// This function is called to bring back the IUT in idle condition |
// in case of errors or unexpected behaviour. |
// Sending of a CANCEL request with the same Cseq |
f_setHeadersCANCEL(vc_cSeq); |
f_SendCANCEL(p_request); |
tc_resp.start; |
alt { |
[] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)) { |
tc_resp.stop; |
} |
} |
} |
} |
function f_cancelCall_await487( |
template(value) CANCEL_Request p_request |
) runs on SipComponent { |
// This function is called to bring back the IUT in idle condition |
// in case of errors or unexpected behaviour. |
// Sending of a CANCEL request with the same Cseq |
f_cancelCall(p_request); |
// set method on INVITE |
vc_cSeq.method := "INVITE"; |
group DefaultsTestStep |
{ |
/** |
* @desc This default handles receiving of the sync server |
* STOP message and calls the RT HUT postamble. (copy from common lib) |
*/ |
altstep a_Sip_catchSyncStop() runs on SipComponent |
{ |
[] syncPort.receive(m_syncServerStop) |
{ |
tc_sync.stop ; |
log("**** a_Sip_catchSyncStop: Test component received STOP signal from MTC - going to IDLE state **** "); |
//TODO complete postamble |
syncPort.send(m_syncClientStop); |
//in case if deregistration was not done |
//f_RemoveRegistration(vc_cSeq); |
f_terminate_component(); |
log("**** a_Sip_catchSyncStop: TEST COMPONENT NOW STOPPING ITSELF! **** ") ; |
setverdict(inconc); |
stop ; |
} |
} |
// await on 487 response and send ACK |
f_awaitingResponse(mw_Response_Base(c_statusLine487, vc_callId, vc_cSeq)); |
f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); |
} |
/** |
* |
* @desc main default altstep to handle unexpected messages and timeout |
* @verdict fail for all unexpected branches |
*/ |
altstep a_clearRegistration() runs on SipComponent |
{ |
var Response v_response; |
var Request v_request; |
[] any timer.timeout |
{ |
setverdict(fail); |
all timer.stop; |
//TODO check how to solve release of call |
//f_SendCANCEL(m_CANCEL_Request(vc_callId, vc_cSeq, vc_from, vc_cancel_To, vc_reqHostPort, vc_via )); // difference between registration state or transaction state |
vc_callId := vc_callIdReg; |
f_RemoveRegistration(vc_cSeq); |
} |
function f_awaitCancelCall_send487( |
template(present) CANCEL_Request p_request := ? |
) runs on SipComponent { |
f_awaitingCANCEL(p_request); |
f_sendResponse(m_Response_Base(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); |
// allow repeated INVITEs |
[vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) |
{ |
repeat |
} |
// allow repeated BYEs after ack of the first BYE |
[vc_ignore_bye] SIPP.receive (mw_BYE_Request_Base(?)) |
{ |
repeat |
} |
[] SIPP.receive (mw_ACK_Request_Base(?)) |
{ |
repeat |
} |
// allow 100 replies |
[] SIPP.receive(mw_Response_Base(c_statusLine100,?, ?)) |
{ |
repeat |
} |
// ignore 181 if flag is set (following TS 183004 §4.5.2.1) |
[vc_ignore181] SIPP.receive(mw_Response_Base(c_statusLine181,vc_callId, vc_cSeq))-> value v_response sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfResponse(v_response.msgHeader.cSeq, v_response); |
repeat; |
} |
// according to SIP chap.8.1.3.2 |
[] SIPP.receive(mw_Response_Base(c_statusLine183,vc_callId, vc_cSeq)) |
{ |
repeat; |
} |
// set method on INVITE |
vc_cSeq.method := "INVITE"; |
// ignore 484 if flag is set |
[vc_ignore484] SIPP.receive(mw_Response_Base(c_statusLine484,vc_callId, vc_cSeq)) |
{ |
repeat |
} |
[vc_ignore4xx] SIPP.receive(mw_Response_Base(mw_statusLine4xx,vc_callId, ?))-> value v_response sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfResponse(v_response.msgHeader.cSeq, v_response); |
f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, valueof(vc_route))); |
repeat |
} |
[vc_ignore200OKinv] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, ?)) |
{ |
repeat |
} |
[] SIPP.receive(mw_INFO_Request_Base(vc_callId))->value v_request sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfRequest(v_request); |
f_send200OK(); |
repeat |
} |
// awaiting of Notify |
[] SIPP.receive(mw_NOTIFY_Request_Base(vc_callId))->value v_request sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfRequest(v_request); |
f_send200OK(); |
repeat |
} |
// awaiting of subscribe from UE |
[vc_ignore_subscribe] SIPP.receive(mw_SUBSCRIBE_Request_Base)-> value v_request sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfSUBSCRIBE(v_request); |
f_send200OK(); |
repeat; |
} |
//awaiting of subscribe on proxy |
[] SIPP.receive(mw_SUBSCRIBE_Request_Base)->value v_request sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfRequest(v_request); |
f_sendResponse(m_Response_Contact(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact)); |
//f_setHeadersGeneral(vc_cSeq, "NOTIFY"); // cseq, contact, branch, via |
//f_SendNOTIFY(m_NOTIFY_Request_contact(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); |
log(v_request.msgHeader.contact.contactBody); |
if (ischosen(v_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr)) { |
log(v_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec); |
f_SendNOTIFY(m_NOTIFY_Request_contact(v_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); |
} else { |
log(v_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.addrSpecUnion); |
f_SendNOTIFY(m_NOTIFY_Request_contact(v_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.addrSpecUnion, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); |
} |
f_awaitingOkResponse(vc_cSeq); |
repeat |
} |
//awaiting of PRACK message |
[] SIPP.receive(mw_PRACK_Request_Base(vc_callId))->value v_request sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfRequest(v_request); |
f_send200OK(); |
repeat |
} |
// send 487 response and await ACK |
f_sendResponse(m_Response_Base(c_statusLine487, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); |
// await ACK |
f_awaitingACK(mw_ACK_Request_Base(vc_callId)); |
} |
// unexpected BYE is acknowledged to avoid retransmissions |
[] SIPP.receive(mw_BYE_Request_Base(?))-> value v_request sender vc_sent_label |
{ |
setverdict(fail); |
f_setHeadersOnReceiptOfRequest(v_request); |
f_send200OK(); |
f_RemoveRegistration(vc_cSeq); |
} |
// unexpected CANCEL is acknowledged to avoid retransmissions |
[] SIPP.receive(mw_CANCEL_Request_Base(?))-> value v_request sender vc_sent_label |
{ |
setverdict(fail); |
f_setHeadersOnReceiptOfRequest(v_request); |
//Answer to the CANCEL |
f_send200OK(); |
f_RemoveRegistration(vc_cSeq); |
} |
// catch 4xx response |
[] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?))-> value v_response sender vc_sent_label |
{ |
setverdict(fail); |
if(v_response.msgHeader.cSeq.method == "INVITE"){ |
f_setHeadersOnReceiptOfResponse(v_response.msgHeader.cSeq, v_response); |
LibSip_Steps.f_setHeadersACK(); |
f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route))}; |
f_RemoveRegistration(vc_cSeq); |
} |
// catch 5xx response |
[] SIPP.receive(mw_Response_Base(mw_statusLine5xx, vc_callId, ?))-> value v_response sender vc_sent_label |
{ |
setverdict(fail); |
if(v_response.msgHeader.cSeq.method == "INVITE"){ |
f_setHeadersOnReceiptOfResponse(v_response.msgHeader.cSeq, v_response); |
LibSip_Steps.f_setHeadersACK(); |
f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route))}; |
f_RemoveRegistration(vc_cSeq); |
} |
// catch invalid REGISTER |
[] SIPP.receive(mw_REGISTER_Request_Base)-> value v_request sender vc_sent_label |
{ |
setverdict(fail); |
f_componentStop(); |
} |
// any |
[] SIPP.receive |
{ |
setverdict(fail); |
all timer.stop; |
// f_setHeadersCANCEL(vc_cSeq); |
// f_SendCANCEL(m_CANCEL_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_cancel_To, vc_via )); // difference between registration state or transaction state |
f_RemoveRegistration(vc_cSeq); |
} |
} |
/** |
* |
* @desc altstep handle authentication for INVITE message |
*/ |
altstep a_altstep_401or407() runs on SipComponent { |
[] any port.check (receive) { |
var CommaParam_List v_challenge; |
var Credentials v_Credentials; |
var Response v_Response; |
var Request v_Request := valueof (vc_requestFor407); |
tc_resp.start (PX_SIP_TRESP); |
alt { |
[] SIPP.receive (mw_Response_Base((c_statusLine401,c_statusLine407), |
vc_callId, |
vc_cSeq)) -> value v_Response { |
tc_resp.stop; |
// get tag from To header if available |
vc_to := v_Response.msgHeader.toField; |
if (vc_cSeq.method == "INVITE"){ |
// send ACK |
f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); |
} |
// resent the INVITE message with Proxyauthorization header include |
// Extract challenge and calculate credentials for a response. |
if (ischosen (v_Response |
.msgHeader |
.proxyAuthenticate |
.challenge |
.otherChallenge // instead of digestCln (changed by axr to comply to alcatel) |
)) { |
v_challenge := |
v_Response |
.msgHeader |
.proxyAuthenticate |
.challenge |
.otherChallenge.authParams; |
v_Credentials := |
f_calculatecCredentials(vc_userprofile, |
vc_requestFor407.msgHeader.cSeq.method, |
v_challenge); |
} else { |
log ("No scheme in Proxy Authenticate header!!"); |
setverdict (inconc); |
stop; |
} |
altstep a_receiveCANCELorNothing( |
in template(present) CANCEL_Request p_CANCEL := ? |
) runs on SipComponent { |
var CANCEL_Request v_MSG; |
[] SIPP.receive(p_CANCEL) -> value v_MSG sender vc_sent_label { |
f_setHeadersOnReceiptOfRequest(v_MSG); |
// Answer to the CANCEL |
f_send200OK(); |
} |
} |
vc_branch := c_branchCookie & f_getRndTag(); |
vc_via := { |
fieldName := VIA_E, |
viaBody := { |
valueof (m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
altstep a_awaitNotify( |
in template(present) NOTIFY_Request p_MSG := ?, |
inout boolean p_receivedNotify |
) runs on SipComponent { |
var NOTIFY_Request v_MSG; |
[vc_subscribed] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { |
p_receivedNotify := true; |
f_getRouteMapIntoRecordRoute(v_MSG); |
f_setHeadersOnReceiptOfRequest(v_MSG); |
// Answer to the NOTIFY |
f_send200OK(); |
repeat; |
} |
} |
v_Request.msgHeader.via := vc_via; |
// Increment CSeq sequence number of and add the credentials |
// to the original saved INVITE message. |
vc_cSeq.method := vc_requestFor407.msgHeader.cSeq.method; |
vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; |
v_Request.msgHeader.cSeq.seqNumber := |
vc_cSeq.seqNumber; |
v_Request.msgHeader.proxyAuthorization.fieldName := |
PROXY_AUTHORIZATION_E; |
v_Request.msgHeader.proxyAuthorization.credentials := |
{v_Credentials}; |
// Re-send the saved INVITE with Authorization header |
// included. |
SIPP.send (v_Request) to vc_sent_label; |
} |
} |
} |
} |
} // end of group DefaultsTestStep |
} // end group Postambles |
group SipChecks { |
/** |
* @desc check the presence of conversation at SIP side |
* @param p_checkConversation boolean to perform check if conversation check is implemented. |
* former PX_SIP_CHECK_CONVERSATION |
*/ |
function f_check_Conversation( |
boolean p_checkConversation := false |
) runs on SipComponent { |
var charstring v_question := "confirm if conversation at SIP port"; |
if (p_checkConversation) { |
opPort |
.call( |
s_SIP_conversation: |
{ |
v_question, |
- |
} |
) { |
[] opPort |
.getreply( |
s_SIP_conversation: |
{ |
-, |
true |
} |
) { |
} |
[] opPort |
.getreply( |
s_SIP_conversation: |
{ |
-, |
false |
} |
) { |
all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop; |
} |
}; |
} |
f_selfOrClientSyncAndVerdict(c_uPlane, f_getVerdict()); // Note: implemented in test bodies |
return; |
} // end of f_check_Conversation |
/** |
* @desc check the presence of conversation at SIP side |
* @param p_checkRinging boolean to perform check if ringing check is implemented. |
* former PX_SIP_CHECK_RINGING |
*/ |
function f_check_Ringing( |
boolean p_checkRinging := false |
) runs on SipComponent { |
var charstring v_question := "confirm if ringing at SIP port"; |
if (p_checkRinging) { |
opPort |
.call( |
s_SIP_ringing: |
{ |
v_question, |
- |
} |
) { |
[] opPort |
.getreply( |
s_SIP_ringing: |
{ |
-, |
true |
} |
) { |
} |
[] opPort |
.getreply( |
s_SIP_ringing: |
{ |
-, |
false |
} |
) { |
all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop; |
} |
}; |
} |
f_selfOrClientSyncAndVerdict(c_Ringing, f_getVerdict()); |
return; |
} // end of f_check_Ringing |
/** |
* @desc check the announcement at SIP side (UE A) |
* @param p_checkConversation boolean to perform check if conversation check is implemented. |
* former PX_SIP_CHECK_CONVERSATION |
*/ |
function f_check_AnnouncementUE_A( |
boolean p_checkConversation := false |
) runs on SipComponent { |
var charstring v_question := "confirm if announcement at UE A"; |
if (p_checkConversation) { |
opPort |
.call( |
s_SIP_announcementA: |
{ |
v_question, |
- |
} |
) { |
[] opPort |
.getreply( |
s_SIP_announcementA: |
{ |
-, |
true |
} |
) { |
} |
[] opPort |
.getreply( |
s_SIP_announcementA: |
{ |
-, |
false |
} |
) { |
all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop; |
} |
}; |
} |
f_selfOrClientSyncAndVerdict(c_annoucA, f_getVerdict()); |
return; |
} // end of f_check_AnnouncementUE_A |
/** |
* @desc check the announcement at SIP side (UE B) |
* @param p_checkConversation boolean to perform check if conversation check is implemented. |
* former PX_SIP_CHECK_CONVERSATION |
*/ |
function f_check_AnnouncementUE_B( |
boolean p_checkConversation := false |
) runs on SipComponent { |
var charstring v_question := "confirm if announcement at UE B"; |
if (p_checkConversation) { |
opPort |
.call( |
s_SIP_announcementB: |
{ |
v_question, |
- |
} |
) { |
[] opPort |
.getreply( |
s_SIP_announcementB: |
{ |
-, |
true |
} |
) { |
} |
[] opPort |
.getreply( |
s_SIP_announcementB: |
{ |
-, |
false |
} |
) { |
all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop; |
} |
}; |
} |
f_selfOrClientSyncAndVerdict(c_annoucB, f_getVerdict()); |
return; |
} // end of f_check_AnnouncementUE_B |
/** |
* @desc check the announcement at SIP side |
* @param p_checkConversation boolean to perform check if conversation check is implemented. |
* former PX_SIP_CHECK_CONVERSATION |
*/ |
function f_check_Announcement( |
boolean p_checkConversation := false |
) runs on SipComponent { |
var charstring v_question := "confirm if announcement at SIP side"; |
if (p_checkConversation) { |
opPort |
.call( |
s_SIP_announcement: |
{ |
v_question, |
- |
} |
) { |
[] opPort |
.getreply( |
s_SIP_announcement: |
{ |
-, |
true |
} |
) { |
} |
[] opPort |
.getreply( |
s_SIP_announcement: |
{ |
-, |
false |
} |
) { |
all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop; |
} |
}; |
} |
f_selfOrClientSyncAndVerdict(c_annouc, f_getVerdict()); |
return; |
} // end of f_check_Announcement |
/** |
* @desc check the Voice message at SIP side |
* @param p_checkConversation boolean to perform check if conversation check is implemented. |
* former PX_SIP_CHECK_CONVERSATION |
*/ |
function f_check_VoiceMessage( |
boolean p_checkConversation := false |
) runs on SipComponent { |
var charstring v_question := "confirm if voice message at SIP side"; |
if (p_checkConversation) { |
opPort |
.call( |
s_SIP_voiceMessage: |
{ |
v_question, |
- |
} |
) { |
[] opPort |
.getreply( |
s_SIP_voiceMessage: |
{ |
-, |
true |
} |
) { |
} |
[] opPort |
.getreply( |
s_SIP_voiceMessage: |
{ |
-, |
false |
} |
) { |
all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop; |
} |
}; |
} |
f_selfOrClientSyncAndVerdict(c_voicem, f_getVerdict()); |
return; |
} // end of f_check_Announcement |
/** |
* @desc check the stop of media stream |
* @param p_checkConversation boolean to perform check if conversation check is implemented. |
* former PX_SIP_CHECK_CONVERSATION |
*/ |
function f_check_MediaStopped( |
boolean p_checkConversation := false |
) runs on SipComponent { |
var charstring v_question := "confirm if media stream stopped"; |
if (p_checkConversation) { |
opPort |
.call( |
s_SIP_mediastopped: |
{ |
v_question, |
- |
} |
) { |
[] opPort |
.getreply( |
s_SIP_mediastopped: |
{ |
-, |
true |
} |
) { |
} |
[] opPort |
.getreply( |
s_SIP_mediastopped: |
{ |
-, |
false |
} |
) { |
all timer.stop; |
setverdict(fail); |
syncPort.send(m_syncClientStop); |
stop; |
} |
}; |
} |
f_selfOrClientSyncAndVerdict(c_uPlaneStop, f_getVerdict()); |
return; |
} // end of f_check_MediaStopped |
} |
group DefaultsTestStep { |
/** |
* @desc This default handles receiving of the sync server STOP message and calls the RT HUT postamble. (copy from common lib) |
*/ |
altstep a_Sip_catchSyncStop( |
) runs on SipComponent { |
[] syncPort.receive(m_syncServerStop) { |
tc_sync.stop; |
log("*** a_Sip_catchSyncStop: INFO: Test component received STOP signal from MTC - going to IDLE state *** "); |
syncPort.send(m_syncClientStop); |
// in case if deregistration was not done |
// f_RemoveRegistration(vc_cSeq); |
f_terminate_component(); |
log("*** a_Sip_catchSyncStop: INFO: TEST COMPONENT NOW STOPPING ITSELF! *** "); |
setverdict(inconc); |
stop; |
} |
} |
/** |
* @desc main default altstep to handle unexpected messages and timeout |
* @verdict fail for all unexpected branches |
*/ |
altstep a_clearRegistration( |
) runs on SipComponent { |
var Response v_response; |
var Request v_request; |
var CSeq v_cSeq; |
[] any timer.timeout { |
setverdict(fail); |
all timer.stop; |
// f_SendCANCEL(m_CANCEL_Request(vc_callId, vc_cSeq, vc_from, vc_cancel_To, vc_reqHostPort, vc_via )); // difference between registration |
// state or transaction state |
vc_callId := vc_callIdReg; |
f_RemoveRegistration(vc_cSeq); |
} |
// allow repeated INVITEs |
[vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) { |
repeat; |
} |
// allow repeated BYEs after ack of the first BYE |
[vc_ignore_bye] SIPP.receive(mw_BYE_Request_Base(?)) { |
repeat; |
} |
[] SIPP.receive(mw_ACK_Request_Base(?)) { |
repeat; |
} |
// allow 100 replies |
[] SIPP.receive(mw_Response_Base(c_statusLine100, ?, ?)) { |
repeat; |
} |
// ignore 181 if flag is set (following TS 183004 4.5.2.1) |
[vc_ignore181] SIPP.receive(mw_Response_Base(c_statusLine181, vc_callId, vc_cSeq)) -> value v_response sender vc_sent_label { |
v_cSeq := valueof(v_response.msgHeader.cSeq); |
f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory |
repeat; |
} |
// according to SIP chap.8.1.3.2 |
[] SIPP.receive(mw_Response_Base(c_statusLine183, vc_callId, vc_cSeq)) { |
repeat; |
} |
// ignore 484 if flag is set |
[vc_ignore484] SIPP.receive(mw_Response_Base(c_statusLine484, vc_callId, vc_cSeq)) { |
repeat; |
} |
[vc_ignore4xx] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response sender vc_sent_label { |
v_cSeq := valueof(v_response.msgHeader.cSeq); |
f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory |
f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); |
repeat; |
} |
[vc_ignore200OKinv] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, ?)) { |
repeat; |
} |
[] SIPP.receive(mw_INFO_Request_Base(vc_callId)) -> value v_request sender vc_sent_label { |
f_setHeadersOnReceiptOfRequest(v_request); |
f_send200OK(); |
repeat; |
} |
// awaiting of Notify |
[] SIPP.receive(mw_NOTIFY_Request_Base(vc_callId)) -> value v_request sender vc_sent_label { |
f_setHeadersOnReceiptOfRequest(v_request); |
f_send200OK(); |
repeat; |
} |
// awaiting of subscribe from UE |
[vc_ignore_subscribe] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_request sender vc_sent_label { |
f_setHeadersOnReceiptOfSUBSCRIBE(v_request); |
f_send200OK(); |
repeat; |
} |
// awaiting of subscribe on proxy |
[] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_request sender vc_sent_label { |
f_setHeadersOnReceiptOfRequest(v_request); |
f_sendResponse(m_Response_Contact(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); |
// f_setHeadersGeneral(vc_cSeq, "NOTIFY"); // cseq, contact, branch, via |
// f_SendNOTIFY(m_NOTIFY_Request_contact(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); |
f_SendNOTIFY(m_NOTIFY_Request_contact(v_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); |
f_awaitingOkResponse(vc_cSeq); |
repeat; |
} |
// unexpected BYE is acknowledged to avoid retransmissions |
[] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_request sender vc_sent_label { |
setverdict(fail); |
f_setHeadersOnReceiptOfRequest(v_request); |
f_send200OK(); |
f_RemoveRegistration(vc_cSeq); |
} |
// unexpected CANCEL is acknowledged to avoid retransmissions |
[] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_request sender vc_sent_label { |
setverdict(fail); |
f_setHeadersOnReceiptOfRequest(v_request); |
// Answer to the CANCEL |
f_send200OK(); |
f_RemoveRegistration(vc_cSeq); |
} |
// catch 4xx response |
[] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response sender vc_sent_label { |
setverdict(fail); |
if (v_response.msgHeader.cSeq.method == "INVITE") { |
v_cSeq := valueof(v_response.msgHeader.cSeq); |
f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory |
LibSip_Steps.f_setHeadersACK(); |
f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); |
} |
f_RemoveRegistration(vc_cSeq); |
} |
// catch 5xx response |
[] SIPP.receive(mw_Response_Base(mw_statusLine5xx, vc_callId, ?)) -> value v_response sender vc_sent_label { |
setverdict(fail); |
if (v_response.msgHeader.cSeq.method == "INVITE") { |
v_cSeq := valueof(v_response.msgHeader.cSeq); |
f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory |
LibSip_Steps.f_setHeadersACK(); |
f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); |
} |
f_RemoveRegistration(vc_cSeq); |
} |
// catch invalid REGISTER |
[] SIPP.receive(mw_REGISTER_Request_Base) -> value v_request sender vc_sent_label { |
setverdict(fail); |
f_componentStop(); |
} |
// any |
[] SIPP.receive { |
setverdict(fail); |
all timer.stop; |
// f_setHeadersCANCEL(vc_cSeq); |
// f_SendCANCEL(m_CANCEL_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_cancel_To, vc_via )); // difference between |
// registration state or transaction state |
f_RemoveRegistration(vc_cSeq); |
} |
} |
/** |
* @desc altstep handle authentication for INVITE message |
*/ |
altstep a_altstep_401or407( |
) runs on SipComponent { |
var CommaParam_List v_challenge; |
var Credentials v_Credentials; |
var Response v_Response; |
var Request v_Request := vc_requestFor407; |
[] any port.check(receive) { |
tc_resp.start; |
alt { |
[] SIPP.receive(mw_Response_Base((c_statusLine401, c_statusLine407), vc_callId, vc_cSeq)) -> value v_Response { |
tc_resp.stop; |
// get tag from To header if available |
vc_to := v_Response.msgHeader.toField; |
if (vc_cSeq.method == "INVITE") { |
// send ACK |
f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); |
} |
// resent the INVITE message with Proxyauthorization header include |
// Extract challenge and calculate credentials for a response. |
if ( |
ischosen( |
v_Response.msgHeader.proxyAuthenticate.challenge |
.otherChallenge // instead of digestCln (changed by axr to comply to alcatel) |
) |
) { |
v_challenge := v_Response.msgHeader.proxyAuthenticate.challenge.otherChallenge.authParams; |
v_Credentials := f_calculatecCredentials(vc_userprofile, vc_requestFor407.msgHeader.cSeq.method, v_challenge); |
} |
else { |
log("*** " &__SCOPE__& ": INFO: No scheme in Proxy Authenticate header!!! ***"); |
setverdict(inconc); |
stop; |
} |
vc_branch := c_branchCookie & f_getRndTag(); |
vc_via := { |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
v_Request.msgHeader.via := vc_via; |
// Increment CSeq sequence number of and add the credentials |
// to the original saved INVITE message. |
vc_cSeq.method := vc_requestFor407.msgHeader.cSeq.method; |
vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; |
v_Request.msgHeader.cSeq.seqNumber := vc_cSeq.seqNumber; |
v_Request.msgHeader.proxyAuthorization.fieldName := PROXY_AUTHORIZATION_E; |
v_Request.msgHeader.proxyAuthorization.credentials := {v_Credentials}; |
// Re-send the saved INVITE with Authorization header |
// included. |
SIPP.send(v_Request) to vc_sent_label; |
} |
} |
} |
} |
} // end of group DefaultsTestStep |
} // end module LibSip_Steps |
/trunk/ttcn/LibSip_Templates.ttcn |
---|
1,3766 → 1,4607 |
/* |
* @author STF 346, STF366, STF368, STF369, STF450 |
* @version $Id$ |
* @desc This module defines SIP Templates for message, header, and |
* structured types. <br> |
* Note that any changes made to the definitions in this module |
* may be overwritten by future releases of this library |
* End users are encouraged to contact the distributers of this |
* module regarding their modifications or additions. |
* This module is part of LibSipV2. |
* @remark Any additions to the templates shall follow the design rules |
* and always modify base templates only; |
* Existing templates shall not be changed or removed - |
* change requests shall be made to http://t-ort.etsi.org |
/** |
* @author STF 346, STF366, STF368, STF369, STF450, STF471 |
* @version $Id$ |
* @desc This module defines SIP Templates for message, header, and |
* structured types. <br> |
* Note that any changes made to the definitions in this module |
* may be overwritten by future releases of this library |
* End users are encouraged to contact the distributers of this |
* module regarding their modifications or additions. |
* This module is part of LibSipV3. |
* @remark Any additions to the templates shall follow the design rules and always modify base templates only; Existing templates shall not be changed or removed - change requests shall be made to http://t-ort.etsi.org |
*/ |
module LibSip_Templates { |
// LibSip |
import from LibSip_SIPTypesAndValues all; |
import from LibSip_SDPTypes all; |
import from LibSip_Interface all; |
import from LibSip_PIXITS all; |
import from LibSip_XMLTypes all; |
import from LibSip_SimpleMsgSummaryTypes all; |
import from LibSip_MessageBodyTypes all; |
module LibSip_Templates |
{ |
//LibSip |
import from LibSip_SIPTypesAndValues all; |
import from LibSip_SDPTypes all; |
import from LibSip_Interface all; |
import from LibSip_PIXITS all; |
import from LibSip_XMLTypes all; |
import from LibSip_SimpleMsgSummaryTypes all; |
import from LibSip_MessageBodyTypes all; |
import from NoTargetNamespace language "XSD" all |
with { |
extension "File:../xsd/Ims3gpp.xsd" |
extension "File:../xsd/Ims3gpp.xsd"; |
} |
import from urn_ietf_params_xml_ns_conference_info language "XSD" all |
with { |
extension "File:../xsd/CONF.xsd" |
extension "File:../xsd/CONF.xsd"; |
} |
import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all |
with { |
extension "File:../xsd/PSTN.xsd" |
extension "File:../xsd/PSTN.xsd"; |
} |
import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all |
with { |
extension "File:../xsd/SupplementaryServices.xsd" |
extension "File:../xsd/SupplementaryServices.xsd"; |
} |
import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all |
with { |
extension "File:../xsd/MCID.xsd" |
extension "File:../xsd/MCID.xsd"; |
} |
import from urn_ietf_params_xml_ns_resource_lists language "XSD" all |
with { |
extension "File:../xsd/ResourceList.xsd" |
extension "File:../xsd/ResourceList.xsd"; |
} |
import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all |
with { |
extension "File:../xsd/CDIVN.xsd" |
extension "File:../xsd/CDIVN.xsd"; |
} |
import from urn_3gpp_ns_cw_1_0 language "XSD" all |
with { |
extension "File:../xsd/cw.xsd" |
with { |
extension "File:../xsd/cw.xsd"; |
} |
group ModuleParameters { |
modulepar boolean MB_LENGTH_FROM_ENCVAL:=false; //* to get length of message body from ecoded value |
modulepar boolean USE_FX_FOR_XML_LENGTH:=false; //* To use external functions for calculation of XML message/body length |
}//* group ModuleParameters |
group SubFields |
{ |
template Addr_Union m_AddrUnion_NameAddr(template NameAddr p_nameAddr) := |
{ |
nameAddr := p_nameAddr |
} |
group SubFields { |
template Addr_Union m_AddrUnion_DisplayAndSipUrl(template charstring p_displayName, template SipUrl p_addrSpec) := |
{ |
nameAddr := m_CallingAddr(p_displayName, p_addrSpec) |
} |
template NameAddr m_CallingAddr(template charstring p_displayName, template SipUrl p_addrSpec) := |
{ |
displayName := p_displayName, |
addrSpec := p_addrSpec |
} |
template(value) Addr_Union m_AddrUnion_NameAddr(template(value) NameAddr p_nameAddr) := {nameAddr := p_nameAddr} |
template CommaParam_List mw_digestResponse(template GenericParam p_genericParam) := |
superset(p_genericParam); //* c_Integrity_protected_yes |
template(value) Addr_Union m_AddrUnion_DisplayAndSipUrl( |
template(value) charstring p_displayName, |
template(value) SipUrl p_addrSpec |
) := { |
nameAddr := m_CallingAddr(p_displayName, p_addrSpec) |
} |
template SemicolonParam_List m_cpc := |
{{"cpc",PX_SIP_ISUP_CPC_VALUE}}; |
template(value) NameAddr m_NameAddr( |
template(omit) charstring p_displayName := omit, |
template(value) SipUrl p_addrSpec |
) := { |
displayName := p_displayName, |
addrSpec := p_addrSpec |
} |
template SemicolonParam_List m_ReasonParams |
(template charstring p_cause, template charstring p_text) := |
{m_Cause(p_cause),m_Text(p_text)}; |
template ReasonValue m_ReasonValue |
(template charstring p_cause, template charstring p_text) := |
{ |
token := "Q.850", |
reasonParams := m_ReasonParams(p_cause,p_text) |
}; |
template(value) NameAddr m_CallingAddr( |
template(value) charstring p_displayName, |
template(value) SipUrl p_addrSpec |
) := m_NameAddr(p_displayName, p_addrSpec); |
template ReasonValue m_ReasonValueSIP |
(template charstring p_cause, template charstring p_text) := |
{ |
token := "SIP", |
reasonParams := m_ReasonParams(p_cause,p_text) |
}; |
template RouteBody mw_routeBody (template SipUrl p_sipurl):= |
{ |
nameAddr := |
{ |
displayName := *, |
addrSpec := p_sipurl |
}, |
rrParam := * |
} |
template(present) NameAddr mw_NameAddr( |
template charstring p_displayName, |
template(present) SipUrl p_addrSpec := ? |
) := { |
displayName := p_displayName, |
addrSpec := p_addrSpec |
} |
template SentProtocol m_SentProtocol (charstring p_protocol) := |
{protocolName := c_sipName, |
protocolVersion:= c_sipVersion, |
transport:= p_protocol}; |
template(present) CommaParam_List mw_digestResponse( |
template(present) GenericParam p_genericParam := ? |
) := superset(p_genericParam); |
//* c_Integrity_protected_yes |
/** |
* @desc send template for parameter list with CPC set to a specific value |
* @param p_ISUP_CPC_value CPC parameter value |
* former PX_SIP_ISUP_CPC_VALUE |
*/ |
template(value) SemicolonParam_List m_cpc( |
template(value) charstring p_ISUP_CPC_value := "prison" |
) := { |
{ |
"cpc", |
{tokenOrHost := p_ISUP_CPC_value} |
} |
} |
template SipUrl m_SipUrl_currDomain(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo := //* optional |
{ |
userOrTelephoneSubscriber := p_userprofile.publUsername,//* charstring |
password := omit //* optional charstring |
}, |
hostPort := |
{ |
host := p_userprofile.homeDomain, //* hostname, IPv4 or IPv6 as a charstring |
portField := omit //* p_userprofile.currPort //* optional integer |
}}}, |
urlParameters := omit, |
headers := omit |
} |
template(value) SemicolonParam_List m_ReasonParams( |
template(omit) GenValue p_cause := omit, |
template(value) GenValue p_text |
) := { |
m_Cause(p_cause), m_Text(p_text) |
} |
template SipUrl m_SipUrl_contactIpaddr(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo := //* optional |
{ |
userOrTelephoneSubscriber := p_userprofile.publUsername,//* charstring |
password := omit //* optional charstring |
}, |
hostPort := |
{ |
host := p_userprofile.contactIpaddr, //* hostname, IPv4 or IPv6 as a charstring |
portField := p_userprofile.contactPort //* optional integer |
}}}, |
urlParameters := omit, |
headers := omit |
} |
template(present) SemicolonParam_List mw_ReasonParams( |
template GenValue p_cause, |
template GenValue p_text |
) := { |
mw_Cause_base(p_cause), mw_Text(p_text) |
} |
template SipUrl m_SipUrl_contactIpaddrAndCpc(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo := //* optional |
{ |
userOrTelephoneSubscriber := p_userprofile.publUsername & "; cpc=" & PX_SIP_ISUP_CPC_VALUE,//* charstring |
password := omit //* optional charstring |
}, |
hostPort := |
{ |
host := p_userprofile.contactIpaddr, //* hostname, IPv4 or IPv6 as a charstring |
portField := p_userprofile.contactPort //* optional integer |
}}}, |
urlParameters := omit, |
headers := omit |
} |
template(value) ReasonValue m_ReasonValue_Base := { |
token := "", |
reasonParams := omit |
} |
template SipUrl m_SipUrl_currIpaddr(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo := //* optional |
{ |
userOrTelephoneSubscriber := p_userprofile.publUsername,//* charstring |
password := omit //* optional charstring |
}, |
hostPort := |
{ |
host := p_userprofile.currIpaddr, //* hostname, IPv4 or IPv6 as a charstring |
portField := p_userprofile.currPort //* optional integer |
}}}, |
urlParameters := omit, |
headers := omit |
} |
template SipUrl m_SipUrl_Anonymous := //* SIP-URL with a calles party number |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo := //* optional |
{ |
userOrTelephoneSubscriber := "Anonymous",//* charstring |
password := omit //* optional charstring |
}, |
hostPort := |
{ |
host := "Anonymous.invalid", //* hostname, IPv4 or IPv6 as a charstring |
portField := omit //* optional integer |
}}}, |
urlParameters := omit, |
headers := omit |
}; |
template SipUrl m_TelUrl_publUser(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side |
{ |
scheme := c_telScheme, //* contains "tel" |
components := {tel:={ |
subscriber := p_userprofile.publUsername//* charstring |
}}, |
urlParameters := omit, |
headers := omit |
} |
template SipUrl mw_TelUrl := |
{ |
scheme := c_telScheme, |
components := {tel:={ |
subscriber := ?}}, |
urlParameters := *, |
headers := * |
}; |
template SipUrl mw_SipUrl := |
{ |
scheme := c_sipScheme, |
components := {sip:={ |
userInfo := *, |
hostPort := ?}}, |
urlParameters := *, |
headers := * |
}; |
template SipUrl mw_TelSip_unavailableInvalidUri := (mw_TelSip_unavailableInvalidUri1,mw_TelSip_unavailableInvalidUri2); |
template(present) ReasonValue mw_ReasonValue_Base := { |
token := ?, |
reasonParams := * |
} |
template SipUrl mw_TelSip_unavailableInvalidUri1 := |
{ |
scheme := c_sipScheme, |
components := {sip:={ |
userInfo := {userOrTelephoneSubscriber:="unavailable", password:=omit}, |
hostPort := {host:="anonymous.invalid", portField:=c_defaultSipPort} |
}}, |
urlParameters := omit, |
headers := omit |
}; |
template SipUrl mw_TelSip_unavailableInvalidUri2 := |
{ |
scheme := c_telScheme, |
components := {tel:={ |
subscriber := "unavailable" |
}}, |
urlParameters := omit, |
headers := omit |
}; |
template SipUrl mw_TelSip_unavailableUri (charstring p_host):= (mw_TelSip_unavailableUri1 (p_host),mw_TelSip_unavailableUri2 (p_host)); |
template(value) ReasonValue m_ReasonValue_param( |
template(value) GenValue p_cause, |
template(value) GenValue p_text |
) modifies m_ReasonValue_Base := { |
reasonParams := m_ReasonParams(p_cause, p_text) |
} |
template SipUrl mw_TelSip_unavailableUri1 (charstring p_host):= |
{ |
scheme := (c_telScheme), |
components := {tel:={ |
subscriber := "unavailable"}}, |
urlParameters := omit, |
headers := omit |
}; |
template SipUrl mw_TelSip_unavailableUri2 (charstring p_host):= |
{ |
scheme := (c_sipScheme), |
components := {sip:={ |
userInfo := {userOrTelephoneSubscriber:="unavailable", password:=omit}, |
hostPort := {host:=p_host, portField:=c_defaultSipPort}}}, |
urlParameters := omit, |
headers := omit |
}; |
template(present) ReasonValue mw_ReasonValue_param( |
template GenValue p_cause, |
template GenValue p_text |
) modifies mw_ReasonValue_Base := { |
reasonParams := mw_ReasonParams(p_cause, p_text) |
} |
template SipUrl mw_SipUrl_Number(charstring p_number) := //* SIP-URL with a calling party number |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, |
hostPort := ?}}, |
urlParameters := *, |
headers := * |
}; |
template(value) ReasonValue m_ReasonValue( |
template(value) GenValue p_cause, |
template(value) GenValue p_text |
) modifies m_ReasonValue_param := { |
token := "Q.850" |
} |
template SipUrl mw_TelSipUrl_Number(template charstring p_number) := (mw_TelSipUrl_Number1(p_number),mw_TelSipUrl_Number2(p_number)); |
template SipUrl mw_TelSipUrl_Number1(template charstring p_number) := //* SIP-URL with a calling party number |
{ |
scheme := (c_sipScheme), //* contains "sip" or "tel" |
components := { |
sip:={ |
userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, //* nat or int format |
hostPort := ?} |
}, |
urlParameters := *, |
headers := * |
}; |
template SipUrl mw_TelSipUrl_Number2(template charstring p_number) := //* SIP-URL with a calling party number |
{ |
scheme := (c_telScheme), //* contains "sip" or "tel" |
components := { |
tel:={ |
subscriber:= p_number} |
}, |
urlParameters := *, |
headers := * |
}; |
template SipUrl mw_SipUrl_Host(template charstring p_host) := //* SIP-URL with a calling party number |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo:= *, |
hostPort := {host:=p_host, portField:=*}}}, |
urlParameters := *, |
headers := * |
}; |
template(present) ReasonValue mw_ReasonValue( |
template GenValue p_cause, |
template GenValue p_text |
) modifies mw_ReasonValue_param := { |
token := "Q.850" |
} |
template SipUrl mw_SipUrl_NumberHost(charstring p_number, charstring p_host) := //* SIP-URL with a calling party number |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, |
hostPort := {host:=p_host, portField:=*}}}, |
template(value) ReasonValue m_ReasonValueSIP( |
template(value) GenValue p_cause, |
template(value) GenValue p_text |
) modifies m_ReasonValue_param := { |
token := "SIP" |
} |
template(present) ReasonValue mw_ReasonValueSIP( |
template GenValue p_cause, |
template GenValue p_text |
) modifies mw_ReasonValue_param := { |
token := "SIP" |
} |
template(present) RouteBody mw_routeBody( |
template(present) SipUrl p_sipurl := ? |
) := { |
nameAddr := mw_NameAddr(*, p_sipurl), |
rrParam := * |
} |
template(value) SentProtocol m_SentProtocol( |
template(value) charstring p_protocol |
) := { |
protocolName := c_sipName, |
protocolVersion := c_sipVersion, |
transport := p_protocol |
} |
template(value) SipUrl m_BasicSipUrl := { |
scheme := (c_sipScheme), |
components := { |
sip := { |
userInfo := { |
userOrTelephoneSubscriber := "", //* charstring |
password := |
omit //* optional charstring |
}, |
hostPort := { |
host := omit, //* hostname, IPv4 or IPv6 as a charstring |
portField := |
omit //* p_userprofile.currPort - optional integer |
} |
} |
}, |
urlParameters := omit, |
headers := omit |
} |
template(value) SipUrl m_SipUrl_currDomain_Base( |
template(value) SipUserProfile p_userprofile |
) modifies m_BasicSipUrl := { |
components := { |
sip := { |
userInfo := { |
userOrTelephoneSubscriber := p_userprofile.publUsername |
} |
} |
} |
} |
template(value) SipUrl m_SipUrl_currDomain( |
template(value) SipUserProfile p_userprofile |
) modifies m_SipUrl_currDomain_Base := { |
components := { |
sip := { |
hostPort := { |
host := |
p_userprofile |
.homeDomain //* hostname, IPv4 or IPv6 as a charstring |
} |
} |
} |
} |
template(value) SipUrl m_SipUrl_contactIpaddr( |
template(value) SipUserProfile p_userprofile |
) modifies m_SipUrl_currDomain_Base := { |
components := { |
sip := { |
hostPort := { |
host := p_userprofile.contactIpaddr, //* hostname, IPv4 or IPv6 as a charstring |
portField := |
p_userprofile |
.contactPort //* optional integer |
} |
} |
} |
} |
/** |
* @desc send template with SIP userinfo |
* @param p_userprofile SIP user profile values |
* @param p_ISUP_CPC_value CPC parameter value |
* former PX_SIP_ISUP_CPC_VALUE |
*/ |
template(value) SipUrl m_SipUrl_contactIpaddrAndCpc( |
template(value) SipUserProfile p_userprofile, |
template(value) charstring p_ISUP_CPC_value := "prison" |
) modifies m_SipUrl_contactIpaddr := { |
components := { |
sip := { |
userInfo := { |
userOrTelephoneSubscriber := |
p_userprofile.publUsername & "; cpc=" & |
p_ISUP_CPC_value |
} |
} |
} |
} |
template(value) SipUrl m_SipUrl_currIpaddr( |
template(value) SipUserProfile p_userprofile |
) modifies m_SipUrl_currDomain_Base := { |
components := { |
sip := { |
hostPort := { |
host := p_userprofile.currIpaddr, //* hostname, IPv4 or IPv6 as a charstring |
portField := |
p_userprofile |
.currPort //* optional integer |
} |
} |
} |
} |
template(value) SipUrl m_SipUrl_Anonymous modifies m_BasicSipUrl := { |
components := { |
sip := { |
userInfo := { |
userOrTelephoneSubscriber := |
"Anonymous" //* charstring |
}, |
hostPort := { |
host := |
"Anonymous.invalid" //* hostname, IPv4 or IPv6 as a charstring |
} |
} |
} |
} |
template(value) SipUrl m_SipUrl_NumberHostHeader( |
template(value) charstring p_number, |
template(value) charstring p_host, |
template(omit) AmpersandParam_List p_urlParameters := omit |
) modifies m_BasicSipUrl := { |
components := { |
sip := { |
userInfo := {userOrTelephoneSubscriber := p_number}, |
hostPort := {host := p_host} |
} |
}, |
urlParameters := p_urlParameters |
} |
template(value) SipUrl m_SipUrl_NumberHostParam( |
template(value) charstring p_number, |
template(value) charstring p_host, |
template(omit) AmpersandParam_List p_urlParameters := omit |
) modifies m_SipUrl_NumberHostHeader := { |
components := {sip := {hostPort := {portField := c_defaultSipPort}}} |
} |
template(value) SipUrl m_SipUrl_NumberHostParam_woPort( |
template(value) charstring p_number, |
template(value) charstring p_host, |
template(omit) AmpersandParam_List p_urlParameters := omit |
) modifies m_SipUrl_NumberHostParam := { |
components := {sip := {hostPort := {portField := omit}}} |
} |
template(present) SipUrl m_BasicTelUrl := { |
scheme := (c_telScheme), |
components := {tel := {subscriber := ""}}, |
urlParameters := omit, |
headers := omit |
} |
template(value) SipUrl m_TelUrl_publUser( |
template(value) SipUserProfile p_userprofile |
) modifies m_BasicTelUrl := { |
components := { |
tel := { |
subscriber := |
p_userprofile |
.publUsername //* charstring |
} |
} |
} |
template(present) SipUrl mw_TelUrl := { |
scheme := c_telScheme, |
components := {tel := {subscriber := ?}}, |
urlParameters := *, |
headers := * |
}; |
template SipUrl mw_SipUrl_NumberHostParam(charstring p_number, charstring p_host, template SemicolonParam_List p_urlParameters) := //* SIP-URL with a calling party number |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, |
hostPort := {host:=p_host, portField:=*}}}, |
urlParameters := p_urlParameters, |
headers := * |
}; |
template SipUrl m_SipUrl_NumberHostHeader(charstring p_number, charstring p_host, template AmpersandParam_List p_urlParameters) := //* SIP-URL with a calling party number |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo:= {userOrTelephoneSubscriber:=p_number, password:=omit}, |
hostPort := {host:=p_host, portField:=omit}}}, |
urlParameters := omit, |
headers := p_urlParameters |
}; |
template SipUrl mw_SipUrl_NumberHostHeader(charstring p_number, charstring p_host, template AmpersandParam_List p_urlParameters) := //* SIP-URL with a calling party number |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, |
hostPort := {host:=p_host, portField:=*}}}, |
urlParameters := *, |
headers := p_urlParameters |
}; |
template SipUrl m_SipUrl_NumberHostParam(charstring p_number, charstring p_host, template SemicolonParam_List p_urlParameters) := //* SIP-URL with a calling party number |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo:= {userOrTelephoneSubscriber:=p_number, password:=omit}, |
hostPort := {host:=p_host, portField:=c_defaultSipPort}}}, |
urlParameters := p_urlParameters, |
headers := omit |
}; |
template SipUrl m_SipUrl_NumberHostParam_woPort(charstring p_number, charstring p_host, template SemicolonParam_List p_urlParameters) := //* SIP-URL with a calling party number |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo:= {userOrTelephoneSubscriber:=p_number, password:=omit}, |
hostPort := {host:=p_host, portField:=omit}}}, |
urlParameters := p_urlParameters, |
headers := omit |
}; |
template SipUrl mw_SipUrl_Anonymous := //* SIP-URL with a calles party number |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo := //* optional |
{ |
userOrTelephoneSubscriber := pattern "[a,A][n,N][o,O][n,N][y,Y][m,M][o,O][u,U][s,s]",//* charstring |
password := omit //* optional charstring |
}, |
hostPort := |
{ |
host := pattern "[a,A]nonymous.invalid", //* hostname, IPv4 or IPv6 as a charstring |
portField := * //* optional integer |
}}}, |
urlParameters := *, |
headers := * |
}; |
} |
template SipUrl mw_SipUrl_urlParam(template SemicolonParam_List p_urlParameters) := //* SIP-URL with a calling party number |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo:= *, |
hostPort := ?}}, |
urlParameters := p_urlParameters, |
headers := * |
}; |
template ContactAddress mw_ContactAddress := |
{ |
addressField := ?, |
contactParams := * |
}; |
template(present) SipUrl mw_SipUrl := { |
scheme := c_sipScheme, |
components := { |
sip := { |
userInfo := { |
userOrTelephoneSubscriber := ?, |
password := * |
}, |
hostPort := { |
host := *, |
portField := * |
} |
} |
}, |
urlParameters := *, |
headers := * |
} |
template HostPort mw_hostPort(template charstring p_host, template integer p_portField) := |
{ |
host := p_host, |
portField := p_portField |
}; |
template StatusLine mw_statusLine1xx := {sipVersion := c_sipNameVersion, statusCode := (100..199), reasonPhrase := ?}; |
template StatusLine mw_statusLine4xx := {sipVersion := c_sipNameVersion, statusCode := (400..499), reasonPhrase := ?}; |
template StatusLine mw_statusLine5xx := {sipVersion := c_sipNameVersion, statusCode := (500..599), reasonPhrase := ?}; |
template StatusLine mw_statusLineFinal := {sipVersion := c_sipNameVersion, statusCode := (200..699), reasonPhrase := ?}; |
template(present) SipUrl mw_TelSip_unavailableInvalidUri := (mw_TelSip_unavailableInvalidUri1, mw_TelSip_unavailableInvalidUri2); |
template NameAddr mw_NameAddr_DispName_User_Host(template charstring p_dn, template charstring p_user, template charstring p_host) := |
{ |
displayName := p_dn, |
addrSpec := |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := { sip := { |
userInfo := {userOrTelephoneSubscriber :=p_user, password := *}, |
hostPort := |
{ |
host := p_host, //* hostname, IPv4 or IPv6 as a charstring |
portField := * //* optional integer |
}} |
template(present) SipUrl mw_TelSip_unavailableInvalidUri1 modifies mw_SipUrl := { |
components := { |
sip := { |
userInfo := { |
userOrTelephoneSubscriber := "unavailable" |
}, |
hostPort := { |
host := "anonymous.invalid", |
portField := c_defaultSipPort |
} |
} |
} |
} |
template(present) SipUrl mw_TelSip_unavailableInvalidUri2 modifies mw_TelUrl := { |
components := {tel := {subscriber := "unavailable"}} |
} |
template(present) SipUrl mw_TelSip_unavailableUri( |
template(value) charstring p_host |
) := (mw_TelSip_unavailableUri1, mw_TelSip_unavailableUri2(p_host)); |
template(present) SipUrl mw_TelSip_unavailableUri1 modifies mw_TelUrl := { |
components := {tel := {subscriber := "unavailable"}} |
} |
template(present) SipUrl mw_TelSip_unavailableUri2( |
template(value) charstring p_host |
) modifies mw_SipUrl := { |
components := { |
sip := { |
userInfo := { |
userOrTelephoneSubscriber := "unavailable" |
}, |
hostPort := { |
host := p_host, |
portField := c_defaultSipPort |
} |
} |
} |
} |
template(present) SipUrl mw_SipUrl_Number( |
template(present) charstring p_number := ? |
) modifies mw_SipUrl := { |
components := { |
sip := { |
userInfo := {userOrTelephoneSubscriber := p_number}, |
hostPort := ? |
} |
} |
} |
template(present) SipUrl mw_TelSipUrl_Number( |
template(present) charstring p_number := ? |
) := (mw_SipUrl_Number(p_number), mw_TelSipUrl_Number2(p_number)); |
template(present) SipUrl mw_TelSipUrl_Number1( |
template(present) charstring p_number := ? |
) := mw_SipUrl_Number(p_number); |
template(present) SipUrl mw_TelSipUrl_Number2( |
template(present) charstring p_number := ? |
) modifies mw_TelUrl := { |
components := { |
tel := { |
subscriber := p_number |
} |
} |
} |
template(present) SipUrl mw_SipUrl_Host( |
template charstring p_host |
) modifies mw_SipUrl := { |
components := { |
sip := { |
userInfo := *, |
hostPort := {host := p_host} |
} |
} |
} |
template(present) SipUrl mw_SipUrl_User_Host( |
template(present) charstring p_user := ?, |
template charstring p_host |
) modifies mw_SipUrl := { |
components := { |
sip := { |
userInfo := {userOrTelephoneSubscriber := p_user}, |
hostPort := { |
host := |
p_host //* hostname, IPv4 or IPv6 as a charstring |
} |
} |
}, |
urlParameters := {m_UserPhone} |
} |
template(present) SipUrl mw_SipUrl_Anonymous modifies mw_SipUrl := { |
components := { |
sip := { |
userInfo := { |
userOrTelephoneSubscriber := pattern "[a,A][n,N][o,O][n,N][y,Y][m,M][o,O][u,U][s,s]" //* charstring |
}, |
hostPort := { |
host := |
pattern |
"[a,A]nonymous.invalid" //* hostname, IPv4 or IPv6 as a charstring |
} |
} |
} |
} |
template(present) SipUrl mw_SipUrl_urlParam( |
template SemicolonParam_List p_urlParameters |
) modifies mw_SipUrl := { |
urlParameters := p_urlParameters |
} |
template(present) ContactAddress mw_ContactAddress := { |
addressField := ?, |
contactParams := * |
} |
template(present) HostPort mw_hostPort( |
template charstring p_host, |
template integer p_portField |
) := { |
host := p_host, |
portField := p_portField |
} |
template(present) StatusLine mw_statusLine_any := { |
sipVersion := c_sipNameVersion, |
statusCode := ?, |
reasonPhrase := ? |
} |
template(present) StatusLine mw_statusLine( |
in template(present) integer p_statusCode := ?, |
in template(present) charstring p_reasonPhrase := ? |
) modifies mw_statusLine_any := { |
statusCode := p_statusCode, |
reasonPhrase := p_reasonPhrase |
} |
template(present) StatusLine mw_statusLine1xx modifies mw_statusLine_any := {statusCode := (100 .. 199)} |
template(present) StatusLine mw_statusLine2xx modifies mw_statusLine_any := {statusCode := (200 .. 299)} |
template(present) StatusLine mw_statusLine3xx modifies mw_statusLine_any := {statusCode := (300 .. 399)} |
template(present) StatusLine mw_statusLine4xx modifies mw_statusLine_any := {statusCode := (400 .. 499)} |
template(present) StatusLine mw_statusLine5xx modifies mw_statusLine_any := {statusCode := (500 .. 599)} |
template(present) StatusLine mw_statusLine6xx modifies mw_statusLine_any := {statusCode := (600 .. 699)} |
template(present) StatusLine mw_statusLineFinal modifies mw_statusLine_any := {statusCode := (200 .. 699)} |
template(present) NameAddr mw_NameAddr_DispName_User_Host( |
template charstring p_dn, |
template(present) charstring p_user := ?, |
template charstring p_host |
) := { |
displayName := p_dn, |
addrSpec := { |
scheme := c_sipScheme, //* contains "sip" |
components := { |
sip := { |
userInfo := { |
userOrTelephoneSubscriber := p_user, |
password := * |
}, |
hostPort := { |
host := p_host, //* hostname, IPv4 or IPv6 as a charstring |
portField := |
* //* optional integer |
} |
} |
}, |
urlParameters := {m_UserPhone}, |
headers := * |
} |
} |
template Addr_Union mw_AddrUnion_Nameaddr(template charstring p_dn, template charstring p_user, template charstring p_host):= |
{ |
nameAddr:=mw_NameAddr_DispName_User_Host(p_dn,p_user,p_host) |
} |
template SipUrl mw_SipUrl_User_Host(template charstring p_user, template charstring p_host) := |
{ |
scheme := c_sipScheme, //* contains "sip" |
components := {sip:={ |
userInfo := {userOrTelephoneSubscriber :=p_user, password := *}, |
hostPort := |
{ |
host := p_host, //* hostname, IPv4 or IPv6 as a charstring |
portField := * //* optional integer |
}}}, |
urlParameters := {m_UserPhone}, |
headers := * |
} |
template Addr_Union mw_AddrUnion_SipUrl(template charstring p_user, template charstring p_host):= |
{ |
addrSpecUnion:=mw_SipUrl_User_Host(p_user,p_host) |
} |
urlParameters := {m_UserPhone}, |
headers := * |
} |
} |
} //* end group Subfields |
template(present) Addr_Union mw_AddrUnion_Nameaddr( |
template charstring p_dn, |
template(present) charstring p_user := ?, |
template charstring p_host |
) := { |
nameAddr := mw_NameAddr_DispName_User_Host(p_dn, p_user, p_host) |
} |
template(present) Addr_Union mw_AddrUnion_SipUrl( |
template(present) charstring p_user := ?, |
template charstring p_host |
) := { |
addrSpecUnion := mw_SipUrl_User_Host(p_user, p_host) |
} |
} //* end group Subfields |
group HeaderFieldTemplates { |
template(value) LibSip_SIPTypesAndValues.Allow m_Allow( |
template(value) Method_List p_methods |
) := { |
fieldName := ALLOW_E, |
methods := p_methods |
} |
group HeaderFieldTemplates { |
template LibSip_SIPTypesAndValues.Allow m_Allow (template Method_List p_methods) := { |
fieldName := ALLOW_E, |
methods := p_methods |
} |
template LibSip_SIPTypesAndValues.Allow mw_Allow (charstring p_method) := { |
fieldName := ALLOW_E, |
methods := superset(p_method) |
} |
template(present) LibSip_SIPTypesAndValues.Allow mw_Allow( |
template(value) charstring p_method |
) := { |
fieldName := ALLOW_E, |
methods := superset(p_method) |
} |
template GenericParam m_Cause (template charstring p_cause):= |
{id:="cause", paramValue:=p_cause} |
template GenericParam mw_Cause (template charstring p_cause):= |
// {id:=?, paramValue:= p_cause} |
{id:=?, paramValue:= pattern "*{p_cause}*"} // TODO - Expression does not work for all TTCN tools |
template(value) GenericParam m_Cause( |
template(omit) GenValue p_cause := omit |
) := { |
id := "cause", |
paramValue := p_cause |
} |
template Authorization m_Authorization (template Credentials p_Credentials):= |
{ |
fieldName := AUTHORIZATION_E, |
body := {p_Credentials} |
} |
template Authorization m_Authorization_digest (template CommaParam_List p_CommaParam_List):= |
{ |
fieldName := AUTHORIZATION_E, |
body := {{digestResponse := p_CommaParam_List}} |
} |
template(present) GenericParam mw_Cause_base( |
template GenValue p_cause |
) := { |
id := "cause", |
paramValue := p_cause |
} |
template Authorization m_add_Authorization_digest (in Authorization p_auth, template CommaParam_List p_CommaParam_List):= |
{ |
fieldName := AUTHORIZATION_E, |
body := {{digestResponse := f_merge_CommaParam_List(p_auth.body[0].digestResponse,valueof(p_CommaParam_List))}} |
} |
template(present) GenericParam mw_Cause( |
template(value) charstring p_cause |
) := { |
id := ?, |
paramValue := { tokenOrHost := pattern "*{p_cause}*" } |
} |
template Authorization m_Authorization_other := |
{ |
fieldName := AUTHORIZATION_E, |
body := {{otherResponse := ?}} |
} |
template(value) Authorization m_Authorization( |
template(value) Credentials p_credentials |
) := { |
fieldName := AUTHORIZATION_E, |
body := {p_credentials} |
} |
template Contact m_Contact(template SipUrl p_sipUrl) := |
{ |
fieldName := CONTACT_E, |
contactBody := |
{ |
contactAddresses := |
{ |
{ |
addressField := { addrSpecUnion := p_sipUrl}, |
contactParams := omit |
} |
} |
} //* end contactBody |
}//* end m_Contact |
template(value) Authorization m_Authorization_digest( |
template(value) CommaParam_List p_commaParam_List |
) := { |
fieldName := AUTHORIZATION_E, |
body := {{digestResponse := p_commaParam_List}} |
} |
template Contact m_Contact_profile(in SipUserProfile p_userprofile) := |
{ |
fieldName := CONTACT_E, |
contactBody := |
{ |
contactAddresses := |
{ |
{ |
addressField := { addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, |
contactParams := omit |
} |
} |
} //* end contactBody |
}//* end m_Contact |
template(present) Authorization mw_Authorization_digest( |
template(present) CommaParam_List p_commaParam_List := ? |
) := { |
fieldName := AUTHORIZATION_E, |
body := {{digestResponse := p_commaParam_List}} |
} |
template(value) Authorization m_add_Authorization_digest( |
template(value) Authorization p_auth, |
template(value) CommaParam_List p_commaParam_List |
) := { |
fieldName := AUTHORIZATION_E, |
body := {{digestResponse := f_merge_CommaParam_List(p_auth.body[0].digestResponse, p_commaParam_List)}} |
} |
template Contact m_Contact_profile_expires(in SipUserProfile p_userprofile, in charstring p_expires) := |
{ |
fieldName := CONTACT_E, |
contactBody := |
{ |
contactAddresses := |
{ |
{ |
addressField := { addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, |
contactParams := {{"expires",p_expires}} |
} |
} |
} //* end contactBody |
}//* end m_Contact |
template From m_From(template NameAddr p_nameAddr, charstring p_tag_str) := |
{ |
fieldName := FROM_E, |
addressField := |
{nameAddr := p_nameAddr},//* end addressField |
fromParams := {{id := c_tagId, paramValue := p_tag_str}} |
}; |
template From m_From_Anonymous(charstring p_tag_str) := |
{ |
fieldName := FROM_E, |
addressField := |
{nameAddr := { |
displayName := "Anonymous", //* optional charstring |
addrSpec := m_SipUrl_Anonymous //* SipUrl |
}},//* end addressField |
fromParams := {{id := c_tagId, paramValue := p_tag_str}} |
}; |
template From m_From_SipUrl(template SipUrl p_sipUrl) := |
{ |
fieldName := FROM_E, |
addressField := |
{nameAddr := { |
displayName := omit, //* optional charstring |
addrSpec := p_sipUrl //* SipUrl |
}},//* end addressField |
fromParams := omit |
}; |
template Event m_Event_refer := |
{ |
fieldName := EVENT_E, |
eventType := "refer", |
eventParams := omit |
}; |
template(present) Authorization mw_Authorization_other := { |
fieldName := AUTHORIZATION_E, |
body := {{otherResponse := ?}} |
} |
template Event m_Event_conference := |
{ |
fieldName := EVENT_E, |
eventType := "conference", |
eventParams := omit |
}; |
template(value) Contact m_Contact( |
template(value) SipUrl p_sipUrl |
) := { |
fieldName := CONTACT_E, |
contactBody := { |
contactAddresses := { |
{ |
addressField := {addrSpecUnion := p_sipUrl}, |
contactParams := omit |
} |
} |
} //* end contactBody |
} //* end m_Contact |
template Event m_Event_presence := |
{ |
fieldName := EVENT_E, |
eventType := "presence", |
eventParams := omit |
}; |
template(value) Contact m_Contact_profile( |
template(value) SipUserProfile p_userprofile |
) := { |
fieldName := CONTACT_E, |
contactBody := { |
contactAddresses := { |
{ |
addressField := {addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, |
contactParams := omit |
} |
} |
} //* end |
//* contactBody |
} //* end m_Contact |
template Event m_Event_reg := |
{ |
fieldName := EVENT_E, |
eventType := "reg", |
eventParams := omit |
}; |
template Event m_Event_cdiv := |
{ |
template(value) Contact m_Contact_profile_expires( |
template(value) SipUserProfile p_userprofile, |
template(value) GenValue p_expires |
) := { |
fieldName := CONTACT_E, |
contactBody := { |
contactAddresses := { |
{ |
addressField := {addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, |
contactParams := { |
{ |
"expires", |
p_expires |
} |
} |
} |
} |
} //* end contactBody |
} //* end m_Contact |
template(value) From m_From( |
template(value) NameAddr p_nameAddr, |
template(value) GenValue p_tag_str |
) := { |
fieldName := FROM_E, |
addressField := {nameAddr := p_nameAddr}, //* end addressField |
fromParams := { |
{ |
id := c_tagId, |
paramValue := p_tag_str |
} |
} |
} |
template(value) From m_From_Anonymous( |
template(value) GenValue p_tag_str |
) := { |
fieldName := FROM_E, |
addressField := { |
nameAddr := |
m_NameAddr( |
"Anonymous", |
//* optional charstring |
m_SipUrl_Anonymous //* SipUrl |
) |
}, //* end addressField |
fromParams := { |
{ |
id := c_tagId, |
paramValue := p_tag_str |
} |
} |
} |
template(value) From m_From_SipUrl( |
template(value) SipUrl p_sipUrl |
) := { |
fieldName := FROM_E, |
addressField := { |
nameAddr := |
m_NameAddr( |
omit, |
//* optional charstring |
p_sipUrl //* SipUrl |
) |
}, //* end addressField |
fromParams := omit |
} |
template(value) Event m_Event_base := { |
fieldName := EVENT_E, |
eventType := "comm-div-info", |
eventType := "", |
eventParams := omit |
}; |
template Event m_Event_mcid := |
{ |
fieldName := EVENT_E, |
eventType := "comm-div-info", |
eventParams := omit |
}; |
} |
template Expires m_Expires_600000 := |
{ |
fieldName := EXPIRES_E, |
deltaSec := "600000" |
}; |
template(value) Event m_Event_refer modifies m_Event_base := {eventType := "refer"} |
template Expires m_Expires (charstring p_deltaSec):= |
{ |
fieldName := EXPIRES_E, |
deltaSec := p_deltaSec |
}; |
template(value) Event m_Event_conference modifies m_Event_base := {eventType := "conference"} |
template(value) Event m_Event_presence modifies m_Event_base := {eventType := "presence"} |
template PAssertedID m_PAssertedID(template Addr_Union p_pAssertedIDValue) := |
{ |
fieldName := P_ASSERTED_ID_E, |
pAssertedIDValueList := {p_pAssertedIDValue} |
}; |
template(value) Event m_Event_reg modifies m_Event_base := {eventType := "reg"} |
template HistoryInfo mw_HistoryInfo(template HistoryInfo_List p_HistoryInfo_List) := |
{ |
fieldName := HISTORY_INFO_E, |
historyInfoList := p_HistoryInfo_List |
}; |
template(value) Event m_Event_cdiv modifies m_Event_base := {eventType := "comm-div-info"} |
template HistoryInfoEntry mw_HistoryInfoEntry(template SipUrl p_Url, template StringList p_index, template SemicolonParam_List p_paramlist) := |
{ |
nameAddr := {displayName:=*, addrSpec:= p_Url}, |
hiIndex := p_index, |
hiExtention := p_paramlist |
} |
template HistoryInfo m_HistoryInfo(template HistoryInfo_List p_HistoryInfo_List) := |
{ |
fieldName := HISTORY_INFO_E, |
historyInfoList := p_HistoryInfo_List |
}; |
template HistoryInfoEntry m_HistoryInfoEntry(template SipUrl p_Url, template StringList p_index, template SemicolonParam_List p_paramlist) := |
{ |
nameAddr := {displayName:=omit, addrSpec:= p_Url}, |
hiIndex := p_index, |
hiExtention := p_paramlist |
} |
template PAssertedID m_PAssertedID_2x(template Addr_Union p_pAssertedIDValue1, template Addr_Union p_pAssertedIDValue2) := |
{ |
fieldName := P_ASSERTED_ID_E, |
pAssertedIDValueList := {p_pAssertedIDValue1, p_pAssertedIDValue2} |
}; |
template PAssertedID mw_PAssertedID(template PAssertedIDValue p_pAssertedIDValue) := |
{ |
fieldName := P_ASSERTED_ID_E, |
pAssertedIDValueList := {p_pAssertedIDValue} |
}; |
template(value) Event m_Event_mcid := m_Event_cdiv; |
template PAssertedIDValue mw_PAssertedIDValue(template SipUrl p_SipUrl) := |
{ |
nameAddr :={displayName := *, addrSpec:=p_SipUrl} |
}; |
template PPreferredID m_PPreferredID(template Addr_Union p_pPreferredIDValue) := |
{ |
fieldName := P_PREFERRED_ID_E, |
pPreferredIDValueList := {p_pPreferredIDValue} |
}; |
template(value) Expires m_Expires_base := { |
fieldName := EXPIRES_E, |
deltaSec := "" |
} |
template Privacy m_Privacy(PrivacyValue p_privacy) := |
{ |
fieldName := PRIVACY_E, |
privValueList := {p_privacy} |
}; |
template RAck m_RAck(integer p_responseNum, integer p_seqNumber, charstring p_method) := |
{ |
fieldName := RACK_E, |
responseNum := p_responseNum, |
seqNumber := p_seqNumber, |
method := p_method |
}; |
template(value) Expires m_Expires_600000 modifies m_Expires_base := {deltaSec := "600000"} |
template Reason m_Reason(integer p_cause) := |
{ |
fieldName := REASON_E, |
reasonValues := {m_ReasonValue(int2str(p_cause),"dummy")} |
}; |
template(value) Expires m_Expires( |
template(value) charstring p_deltaSec |
) modifies m_Expires_base := { |
deltaSec := p_deltaSec |
} |
template Reason m_Reason21 := |
{ |
fieldName := REASON_E, |
reasonValues := {m_ReasonValue(int2str(21),"call reject")} |
}; |
template(present) Expires mw_Expires( |
template(present) charstring p_deltaSec := ? |
) := { |
fieldName := EXPIRES_E, |
deltaSec := p_deltaSec |
} |
template RecordRoute m_recordRoute_currIpAddr (in SipUserProfile p_userprofile):= |
{ |
fieldName := RECORD_ROUTE_E, |
routeBody := {{nameAddr := {displayName := omit, |
addrSpec := {scheme := c_sipScheme, //* contains "sip" |
components := { sip := { |
userInfo := omit, |
hostPort := {host:=p_userprofile.currIpaddr, portField:= p_userprofile.currPort}}}, |
urlParameters := {{id:="lr", paramValue := omit}}, |
headers := omit} |
}, |
rrParam := omit} |
}}; |
template(value) HistoryInfo m_HistoryInfo( |
template(value) HistoryInfo_List p_HistoryInfo_List |
) := { |
fieldName := HISTORY_INFO_E, |
historyInfoList := p_HistoryInfo_List |
} |
template RouteBody m_routeBody_currIpAddr (in SipUserProfile p_userprofile):= |
{ |
template(present) HistoryInfo mw_HistoryInfo( |
template(present) HistoryInfo_List p_HistoryInfo_List := ? |
) := { |
fieldName := HISTORY_INFO_E, |
historyInfoList := p_HistoryInfo_List |
} |
template(value) HistoryInfoEntry m_HistoryInfoEntry( |
template(value) SipUrl p_Url, |
template(omit) IntegerList p_index := omit, |
template(omit) SemicolonParam_List p_paramlist := omit |
) := { |
nameAddr := m_NameAddr(omit, p_Url), |
hiIndex := p_index, |
hiExtention := p_paramlist |
} |
template(present) HistoryInfoEntry mw_HistoryInfoEntry( |
template(present) SipUrl p_Url := ?, |
template IntegerList p_index, |
template SemicolonParam_List p_paramlist |
) := { |
nameAddr := mw_NameAddr(*, p_Url), |
hiIndex := p_index, |
hiExtention := p_paramlist |
} |
template(value) PAssertedID m_PAssertedID( |
template(value) Addr_Union p_pAssertedIDValue |
) := { |
fieldName := P_ASSERTED_ID_E, |
pAssertedIDValueList := {p_pAssertedIDValue} |
} |
template(value) PAssertedID m_PAssertedID_2x( |
template(value) Addr_Union p_pAssertedIDValue, |
template(value) Addr_Union p_pAssertedIDValue2 |
) modifies m_PAssertedID := { |
pAssertedIDValueList := {p_pAssertedIDValue, p_pAssertedIDValue2} |
} |
template(present) PAssertedID mw_PAssertedID( |
template(present) PAssertedIDValue p_pAssertedIDValue := ? |
) := { |
fieldName := P_ASSERTED_ID_E, |
pAssertedIDValueList := {p_pAssertedIDValue} |
} |
template(present) PAssertedIDValue mw_PAssertedIDValue( |
template(present) SipUrl p_SipUrl := ? |
) := { |
nameAddr := { |
displayName := omit, |
addrSpec := { |
scheme := c_sipScheme, //* contains "sip" |
components := { |
displayName := *, |
addrSpec := p_SipUrl |
} |
} |
template(value) PPreferredID m_PPreferredID( |
template(value) Addr_Union p_pPreferredIDValue |
) := { |
fieldName := P_PREFERRED_ID_E, |
pPreferredIDValueList := {p_pPreferredIDValue} |
} |
template(value) Privacy m_Privacy( |
template(value) PrivacyValue p_privacy |
) := { |
fieldName := PRIVACY_E, |
privValueList := {p_privacy} |
} |
template(present) Privacy mw_Privacy_Base( |
template(present) charstring p_value := ? |
) := { |
fieldName := PRIVACY_E, |
privValueList := {*, p_value, *} |
} |
template(present) Privacy mw_Privacy_id := mw_Privacy_Base("id"); |
template(present) Privacy mw_Privacy_user := mw_Privacy_Base("user"); |
template(value) RAck m_RAck( |
integer p_responseNum, |
integer p_seqNumber, |
charstring p_method |
) := { |
fieldName := RACK_E, |
responseNum := p_responseNum, |
seqNumber := p_seqNumber, |
method := p_method |
} |
template(value) Reason m_Reason( |
template(value) integer p_cause |
) := { |
fieldName := REASON_E, |
reasonValues := {m_ReasonValue({tokenOrHost := int2str(valueof(p_cause))}, { tokenOrHost := "dummy"})} |
} |
template(value) Reason m_Reason21 := { |
fieldName := REASON_E, |
reasonValues := {m_ReasonValue({tokenOrHost := int2str(21)}, { tokenOrHost := "call reject"})} |
} |
template(present) Reason mw_Reason_Base := { |
fieldName := REASON_E, |
reasonValues := {} |
} |
template(present) Reason mw_Reason( |
template(value) GenValue p_cause |
) modifies mw_Reason_Base := { |
reasonValues := {mw_ReasonValue(p_cause, ?)} |
} |
template(present) Reason mw_ReasonSIP( |
template(value) GenValue p_cause |
) modifies mw_Reason_Base := { |
reasonValues := {mw_ReasonValueSIP(p_cause, ?)} |
} |
template(value) RecordRoute m_recordRoute_currIpAddr( |
template(value) SipUserProfile p_userprofile |
) := { |
fieldName := RECORD_ROUTE_E, |
routeBody := { |
{ |
nameAddr := { |
displayName := omit, |
addrSpec := { |
scheme := c_sipScheme, //* contains "sip" |
components := { |
sip := { |
userInfo := omit, |
hostPort := { |
host := p_userprofile.currIpaddr, |
portField := p_userprofile.currPort |
} |
} |
}, |
urlParameters := omit, |
headers := omit |
} |
}, |
rrParam := omit |
} |
} |
} |
template(value) RecordRoute m_recordRoute_currIpAddr_params( |
template(value) SipUserProfile p_userprofile, |
template(value) SemicolonParam_List p_urlParameters |
) := { |
fieldName := RECORD_ROUTE_E, |
routeBody := { |
{ |
nameAddr := { |
displayName := omit, |
addrSpec := { |
scheme := c_sipScheme, //* contains "sip" |
components := { |
sip := { |
userInfo := omit, |
hostPort := { |
host := p_userprofile.currIpaddr, |
portField := p_userprofile.currPort |
} |
} |
}, |
urlParameters := p_urlParameters, |
headers := omit |
} |
}, |
rrParam := omit |
} |
} |
} |
template(value) RouteBody m_routeBody_currIpAddr( |
template(value) SipUserProfile p_userprofile |
) := { |
nameAddr := { |
displayName := omit, |
addrSpec := { |
scheme := c_sipScheme, //* contains "sip" |
components := { |
sip := { |
userInfo := omit, |
hostPort := {host:=p_userprofile.homeDomain, portField:= p_userprofile.currPort} |
hostPort := { |
host := p_userprofile.homeDomain, |
portField := p_userprofile.currPort |
} |
} |
}, |
urlParameters := {{id:="lr", paramValue := omit}}, |
urlParameters := omit, |
headers := omit |
} |
}, |
rrParam := omit |
}; |
template ReferredBy m_ReferredBy_SipUrl(template SipUrl p_sipUrl) := |
{ |
fieldName := REFERRED_BY_E, |
nameAddr :={displayName := omit, addrSpec:=p_sipUrl}, |
referredbyIdParams := omit |
} |
} |
template ReferTo m_ReferTo_SipUrl(template SipUrl p_sipUrl, charstring p_method) := |
{ |
fieldName := REFER_TO_E, |
nameAddr :={displayName := omit, addrSpec:=p_sipUrl}, |
referToParams := {{id:="method",paramValue :=p_method}} |
} |
template(value) ReferredBy m_ReferredBy_SipUrl( |
template(value) SipUrl p_sipUrl |
) := { |
fieldName := REFERRED_BY_E, |
nameAddr := |
m_NameAddr( |
// STF471 {displayName |
omit, |
// := omit, |
p_sipUrl // addrSpec:=p_sipUrl} |
), |
referredbyIdParams := omit |
} |
template ReferSub m_ReferSub(in boolean p_value) := |
{ |
fieldName := REFER_SUB_E, |
referSubValue :=p_value, |
referSubParams := omit |
} |
template(value) ReferTo m_ReferTo_SipUrl( |
template(value) SipUrl p_sipUrl, |
template(value) GenValue p_method |
) := { |
fieldName := REFER_TO_E, |
nameAddr := |
m_NameAddr( |
// STF471 {displayName |
omit, |
// := omit, |
p_sipUrl // addrSpec:=p_sipUrl} |
), |
referToParams := { |
{ |
id := "method", |
paramValue := p_method |
} |
} |
} |
template Replaces m_Replaces( |
charstring p_callId, |
charstring p_toTag, |
charstring p_fromTag |
) := { |
fieldName := REPLACES_E, |
replacesParams := { |
{id := p_callId, paramValue := omit}, |
{id := "to-tag", paramValue := p_toTag}, |
{id := "from-tag", paramValue := p_fromTag} |
} |
} |
template(value) ReferSub m_ReferSub( |
template(value) boolean p_value |
) := { |
fieldName := REFER_SUB_E, |
referSubValue := p_value, |
referSubParams := omit |
} |
template Require m_Require_replaces := |
{ |
fieldName := REQUIRE_E, |
optionsTags := {c_replaces} |
}; |
template(value) Replaces m_Replaces( |
template(value) charstring p_callId, |
template(value) GenValue p_toTag, |
template(value) GenValue p_fromTag |
) := { |
fieldName := REPLACES_E, |
callid := p_callId, |
replacesParams := { |
{ |
id := "to-tag", |
paramValue := p_toTag |
}, |
{ |
id := "from-tag", |
paramValue := p_fromTag |
} |
} |
} |
template Require m_Require_empty := |
{ |
fieldName := REQUIRE_E, |
optionsTags := {""} |
}; |
template Require m_Require_100rel := |
{ |
fieldName := REQUIRE_E, |
optionsTags := {c_tag100rel} |
}; |
template Require m_Require_prec := |
{ |
fieldName := REQUIRE_E, |
optionsTags := {c_tagPrecond} |
} |
template SubscriptionState m_SubscriptionState_active := |
{ |
fieldName := SUBSCRIPTION_STATE_E, |
subState := "active", |
substateParams := {{id:="expires",paramValue:="60000"}} |
} |
template Supported m_Supported_fromChange := |
{ |
fieldName:=SUPPORTED_E, |
optionsTags:={c_tagFromChange} |
} |
template Supported m_Supported_prec := |
{ |
fieldName:=SUPPORTED_E, |
optionsTags:={c_tagPrecond} |
} |
template Supported m_Supported_100rel := |
{ |
fieldName:=SUPPORTED_E, |
optionsTags:={c_tag100rel} |
} |
template Supported m_Supported_100rel_prec := |
{ |
fieldName:=SUPPORTED_E, |
optionsTags:={c_tag100rel, c_tagPrecond} |
} |
template(value) Require m_Require_empty := { |
fieldName := REQUIRE_E, |
optionsTags := {""} |
} |
template GenericParam m_Text (template charstring p_text):= |
{id:="text", paramValue:=p_text} |
template GenericParam m_UserPhone := |
{ |
id := "user", |
paramValue := "phone" |
} |
template GenericParam m_UserToUserEncodingHex := |
{ |
id := "encoding", |
paramValue := "hex" |
template(value) Require m_Require_replaces modifies m_Require_empty := {optionsTags := {c_replaces}} |
template(value) Require m_Require_100rel modifies m_Require_empty := {optionsTags := {c_tag100rel}} |
template(value) Require m_Require_prec modifies m_Require_empty := {optionsTags := {c_tagPrecond}} |
template(value) SubscriptionState m_SubscriptionState_active := { |
fieldName := SUBSCRIPTION_STATE_E, |
subState := "active", |
substateParams := { |
{ |
id := "expires", |
paramValue := {tokenOrHost := "60000"} |
} |
} |
} |
template UserToUser m_UserToUserData(template charstring p_U2UData):= |
{ |
fieldName := USER_TO_USER_E, |
uuiData := p_U2UData, |
uuiParam := m_UserToUserEncodingHex |
template(value) Supported m_Supported_empty := { |
fieldName := SUPPORTED_E, |
optionsTags := {""} |
} |
template To m_To(template SipUrl p_sipUrl) := |
{ |
fieldName := TO_E, |
addressField := |
{nameAddr := { |
displayName := "ETSI Tester", //* optional charstring |
addrSpec := p_sipUrl //* SipUrl |
}},//* end addressField |
toParams := omit |
}; |
template To m_To_SipUrl(SipUrl p_sipUrl) := |
{ |
fieldName := TO_E, |
addressField := |
{nameAddr := { |
displayName := omit, //* optional charstring |
addrSpec := p_sipUrl //* SipUrl |
}},//* end addressField |
toParams := omit |
}; |
template(value) Supported m_Supported_fromChange modifies m_Supported_empty := {optionsTags := {c_tagFromChange}} |
template To mw_To_NameAddr_SipUrl(template charstring p_dn, template charstring p_user, template charstring p_host) := |
{ |
fieldName := TO_E, |
addressField := (mw_AddrUnion_Nameaddr(p_dn,p_user,p_host),mw_AddrUnion_SipUrl(p_user,p_host)), |
toParams := * |
} |
template(value) Supported m_Supported_prec modifies m_Supported_empty := {optionsTags := {c_tagPrecond}} |
template To mw_To(template SipUrl p_sipUrl) := { |
fieldName := TO_E, |
addressField := { nameAddr := {displayName := *, addrSpec := p_sipUrl}}, |
toParams:= * |
} |
template(value) Supported m_Supported_100rel modifies m_Supported_empty := {optionsTags := {c_tag100rel}} |
template From mw_From(template SipUrl p_sipUrl) := { |
fieldName := FROM_E, |
addressField := { nameAddr := {displayName := *, addrSpec := p_sipUrl}}, |
fromParams:= * |
} |
template(value) Supported m_Supported_100rel_prec modifies m_Supported_empty := {optionsTags := {c_tag100rel, c_tagPrecond}} |
template From mw_From_NameAddr_SipUrl(template charstring p_dn, template charstring p_user, template charstring p_host) := |
{ |
fieldName := FROM_E, |
addressField := (mw_AddrUnion_Nameaddr(p_dn,p_user,p_host),mw_AddrUnion_SipUrl(p_user,p_host)), |
fromParams := * |
} |
template ViaBody m_ViaBody_currIpaddr(charstring branch_val,in SipUserProfile p_userprofile) := |
{ |
sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), |
sentBy:={host:=p_userprofile.currIpaddr, portField:= p_userprofile.currPort}, |
viaParams:={{id :=c_branchId,paramValue :=branch_val}} |
} |
template ViaBody mw_ViaBody_interface(template HostPort p_hostport) := |
{ |
sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), |
sentBy:={host:=p_hostport.host, portField:= p_hostport.portField}, |
viaParams:=* |
} |
template(value) GenericParam m_Text( |
template(value) GenValue p_text |
) := { |
id := "text", |
paramValue := p_text |
} |
template Via mw_Via(template ViaBody p_viabody) := |
{ |
fieldName := VIA_E, |
viaBody:= superset(p_viabody) |
} |
template CallId mw_CallId_any := |
{ |
fieldName := CALL_ID_E, |
callid := ? |
} |
template(present) GenericParam mw_Text( |
template GenValue p_text |
) := { |
id := "text", |
paramValue := p_text |
} |
template Privacy mw_Privacy_id := |
{ |
fieldName := PRIVACY_E, |
privValueList := {*,"id",*} |
}; |
template(value) GenericParam m_UserPhone := { |
id := "user", |
paramValue := { quotedString := "phone" } |
} |
template Privacy mw_Privacy(template charstring p_value) := |
{ |
fieldName := PRIVACY_E, |
privValueList := {*,p_value,*} |
}; |
template(value) GenericParam m_UserToUserEncodingHex := { |
id := "encoding", |
paramValue := { quotedString := "hex" } |
} |
template Privacy mw_Privacy_user := |
{ |
fieldName := PRIVACY_E, |
privValueList := {*,"user",*} |
}; |
template Reason mw_Reason(template charstring p_cause) := |
{ |
fieldName := REASON_E, |
reasonValues := {m_ReasonValue(p_cause,?)} |
}; |
template(value) UserToUser m_UserToUserData( |
template(value) UserToUser.uuiData p_U2UData |
) := { |
fieldName := USER_TO_USER_E, |
uuiData := p_U2UData, |
uuiParam := m_UserToUserEncodingHex |
} |
template Reason mw_ReasonSIP(template charstring p_cause) := |
{ |
fieldName := REASON_E, |
reasonValues := {m_ReasonValueSIP(p_cause,?)} |
}; |
template Require mw_Require_not_100rel := |
{ |
fieldName := REQUIRE_E, |
optionsTags := superset(complement(c_tag100rel)) |
}; |
template Require mw_require_100rel := |
{ |
fieldName := REQUIRE_E, |
optionsTags := superset(c_tag100rel) |
}; |
template(value) To m_To( |
template(value) SipUrl p_sipUrl |
) := { |
fieldName := TO_E, |
addressField := { |
nameAddr := |
m_NameAddr( |
"ETSI Tester", |
//* optional charstring |
p_sipUrl //* SipUrl |
) |
}, //* end addressField |
toParams := omit |
} |
template RecordRoute mw_recordroute (template RouteBody p_routeBody):= |
{ |
fieldName := RECORD_ROUTE_E, |
routeBody := superset(p_routeBody) |
}; |
template Route mw_route (template RouteBody_List p_routeBody):= |
{ |
fieldName := ROUTE_E, |
routeBody := p_routeBody |
}; |
template StatusLine mw_statusLine(template integer p_statusCode) := |
{ |
sipVersion:=c_sipNameVersion, |
statusCode:=p_statusCode, |
reasonPhrase:=? |
}; |
template Supported mw_Supported_100rel_prec := |
{ |
fieldName:=SUPPORTED_E, |
optionsTags:= superset(c_tag100rel, c_tagPrecond) |
} |
template Supported mw_Supported_100rel := |
{ |
fieldName:=SUPPORTED_E, |
optionsTags:= superset(c_tag100rel) |
} |
template(value) To m_To_SipUrl( |
template(value) SipUrl p_sipUrl |
) modifies m_To := { |
addressField := { |
nameAddr := { |
displayName := |
omit //* optional charstring |
} |
} //* end addressField |
} |
template Supported mw_Supported_fromChange := |
{ |
fieldName:=SUPPORTED_E, |
optionsTags:= superset(c_tagFromChange) |
} |
template UserToUser mw_UserToUserData(template charstring p_U2UData):= |
{ |
fieldName := USER_TO_USER_E, |
uuiData := p_U2UData, |
uuiParam := ? |
} |
template Contact mw_Contact_conference := |
{ |
fieldName := CONTACT_E, |
contactBody := |
{ |
contactAddresses := |
{ |
{ |
addressField := { |
nameAddr := { |
displayName := *, |
addrSpec := { |
scheme := ?, |
components := ?, |
urlParameters := {{"isfocus",*},*}, |
headers := * |
} |
template(present) To mw_To_NameAddr_SipUrl( |
template charstring p_dn, |
template(present) charstring p_user := ?, |
template charstring p_host |
) := { |
fieldName := TO_E, |
addressField := (mw_AddrUnion_Nameaddr(p_dn, p_user, p_host), mw_AddrUnion_SipUrl(p_user, p_host)), |
toParams := * |
} |
template(present) To mw_To( |
template(present) SipUrl p_sipUrl := ? |
) := { |
fieldName := TO_E, |
addressField := {nameAddr := mw_NameAddr(*, p_sipUrl)}, |
toParams := * |
} |
template(present) From mw_From( |
template(present) SipUrl p_sipUrl := ? |
) := { |
fieldName := FROM_E, |
addressField := {nameAddr := mw_NameAddr(*, p_sipUrl)}, |
fromParams := * |
} |
template(present) From mw_From_NameAddr_SipUrl( |
template charstring p_dn, |
template(present) charstring p_user := ?, |
template charstring p_host |
) := { |
fieldName := FROM_E, |
addressField := (mw_AddrUnion_Nameaddr(p_dn, p_user, p_host), mw_AddrUnion_SipUrl(p_user, p_host)), |
fromParams := * |
} |
template(value) ViaBody m_ViaBody_currIpaddr( |
template(value) charstring p_branch_val, |
template(value) SipUserProfile p_userprofile |
) := { |
sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), |
sentBy := { |
host := p_userprofile.currIpaddr, |
portField := p_userprofile.currPort |
}, |
viaParams := { |
{ |
id := c_branchId, |
paramValue := { |
tokenOrHost := p_branch_val |
} |
}, |
contactParams := * |
} |
} |
} |
} |
template AlertInfo m_AlertInfo(charstring p_urn) := { |
fieldName := ALERT_INFO_E, |
alertInfoBody := {{p_urn, omit}} |
} |
template AlertInfo mw_AlertInfo(template charstring p_urn) := { |
fieldName := ALERT_INFO_E, |
alertInfoBody := superset({p_urn, omit}) |
} |
} //* end of group HeaderFieldTemplates |
} |
} |
} |
template(present) ViaBody mw_ViaBody_interface( |
template(present) HostPort p_hostport := ? |
) := { |
sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), |
sentBy := { |
host := p_hostport.host, |
portField := p_hostport.portField |
}, |
viaParams := * |
} |
group MessageTemplates { |
group dummy_templates { |
group dummy_parameter_send { |
template(present) Via mw_Via( |
template(present) ViaBody p_viabody := ? |
) := { |
fieldName := VIA_E, |
viaBody := {*, p_viabody, *} // superset(p_viabody) |
} |
template RequestLine m_requestLine_dummy(Method p_method) := |
{ |
method := p_method, |
requestUri := c_unavailableUri, |
sipVersion := c_sipNameVersion |
} |
template(present) CallId mw_CallId_any := { |
fieldName := CALL_ID_E, |
callid := ? |
} |
template MessageHeader m_msgHeader_dummy := |
{ |
accept := omit, |
acceptContact := omit, |
acceptEncoding := omit, |
acceptLanguage := omit, |
alertInfo := omit, |
allow := omit, |
allowEvents := omit, //* RFC3265 |
authenticationInfo := omit, |
authorization := omit, |
callId := c_empty_CallId, |
callInfo := omit, |
contact := omit, |
contentDisposition := omit, |
contentEncoding := omit, |
contentLanguage := omit, |
contentLength := {fieldName := CONTENT_LENGTH_E, len:= 0}, |
contentType := omit, //* if message body present m, else not present |
cSeq := c_empty_cSeq, |
date := omit, |
errorInfo := omit, |
event := omit, //* RFC3265 |
expires := omit, |
fromField := c_empty_From, |
geolocation := omit, |
geolocationRouting := omit, |
historyInfo := omit, //* RFC4244 |
inReplyTo := omit, |
maxForwards := c_maxForwards70, |
mimeVersion := omit, |
minExpires := omit, |
minSE := omit, //* RFC4028 |
organization := omit, |
pAccessNetworkInfo := omit, //* RFC3455 |
pAssertedID := omit, |
pAssertedService := omit, |
pAssociatedURI := omit, |
path := omit, //* RFC3327 |
pCalledPartyID := omit, //* RFC3455 |
pChargingFunctionAddresses := omit, //* RFC3455 |
pChargingVector := omit, //* RFC3455 |
pEarlyMedia := omit, //* RFC5009 |
pMediaAuthorization := omit, //* RFC3313 |
pPreferredID := omit, |
pPreferredService := omit, |
priority := omit, |
privacy := omit, |
proxyAuthenticate := omit, |
proxyAuthorization := omit, |
proxyRequire := omit, |
pVisitedNetworkID := omit, //* RFC3455 |
rAck := omit, |
rSeq := omit, |
reason := omit, |
recordRoute := omit, |
requestDisposition := omit, |
referredBy := omit, //* RFC3892 - REFER method |
referTo := omit, //* RFC3515 - REFER method |
referSub := omit, //* RFC4488 - REFER method |
replaces := omit, //* RFC3891 |
replyTo := omit, |
require := omit, |
retryAfter := omit, |
route := omit, |
securityClient := omit, //* RFC3329 |
securityServer := omit, //* RFC3329 |
securityVerify := omit, //* RFC3329 |
server := omit, |
serviceRoute := omit, //* RFC3608 |
sessionExpires := omit, //* RFC4028 |
sessionId := omit, |
sipETag := omit, |
sipIfMatch := omit, |
subject := omit, |
subscriptionState := omit, //* RFC3265 |
supported := omit, |
timestamp := omit, |
toField := c_empty_To, |
unsupported := omit, |
userToUser := omit, |
userAgent := omit, |
via := c_empty_Via, |
warning := omit, |
wwwAuthenticate := omit, |
undefinedHeader_List := omit |
} |
} //* group dummy_parameter_send |
group dummy_parameter_receive { |
template(present) Require mw_Require_Base := { |
fieldName := REQUIRE_E, |
optionsTags := {} |
} |
template RequestLine mw_requestLine_dummy(Method p_method) := |
{ |
method := p_method, |
requestUri := ?, |
sipVersion := c_sipNameVersion |
} |
template(present) Require mw_Require_not_100rel modifies mw_Require_Base := {optionsTags := superset(complement(c_tag100rel))} |
template MessageHeader mw_msgHeader_dummy := |
{ |
accept := *, |
acceptContact := *, |
acceptEncoding := *, |
acceptLanguage := *, |
alertInfo := *, |
allow := *, |
allowEvents := *, //* RFC3265 |
authenticationInfo := *, |
authorization := *, |
callId := ?, |
callInfo := *, |
contact := *, |
contentDisposition := *, |
contentEncoding := *, |
contentLanguage := *, |
contentLength := ?, |
contentType := *, |
cSeq := ?, |
date := *, |
errorInfo := *, |
event := *, //* RFC3265 |
expires := *, |
fromField := ?, |
geolocation := *, |
geolocationRouting := *, |
historyInfo := *, //* RFC4244 |
inReplyTo := *, |
maxForwards := *, |
mimeVersion := *, |
minExpires := *, |
minSE := *, //* RFC4028 |
organization := *, |
pAccessNetworkInfo := *, //* RFC3455 |
pAssertedID := *, |
pAssertedService := *, |
pAssociatedURI := *, |
path := *, //* RFC3327 |
pCalledPartyID := *, //* RFC3455 |
pChargingFunctionAddresses := *, //* RFC3455 |
pChargingVector := *, //* RFC3455 |
pEarlyMedia := *, //* RFC5009 |
pMediaAuthorization := *, //* RFC3313 |
pPreferredID := *, |
pPreferredService := *, |
priority := *, |
privacy := *, |
proxyAuthenticate := *, |
proxyAuthorization := *, |
proxyRequire := *, |
pVisitedNetworkID := *, //* RFC3455 |
rAck := *, |
rSeq := *, |
reason := *, |
recordRoute := *, |
requestDisposition := *, |
referredBy := *, //* RFC3892 - REFER method |
referTo := *, //* RFC3515 - REFER method |
referSub := *, //* RFC4488 - REFER method |
replaces := *, //* RFC 3891 |
replyTo := *, |
require := *, |
retryAfter := *, |
route := *, |
securityClient := *, //* RFC3329 |
securityServer := *, //* RFC3329 |
securityVerify := *, //* RFC3329 |
server := *, |
serviceRoute := *, //* RFC3608 |
sessionExpires := *, //* RFC4028 |
sessionId := *, |
sipETag := *, |
sipIfMatch := *, |
subject := *, |
subscriptionState := *, //* RFC3265 |
supported := *, |
timestamp := *, |
toField := ?, |
unsupported := *, |
userToUser := *, |
userAgent := *, |
via := ?, |
warning := *, |
wwwAuthenticate := *, |
undefinedHeader_List := * |
} |
}//* end group dummy_parameter_receive |
group dummy_request_templates_send { |
template(present) Require mw_require_100rel modifies mw_Require_Base := {optionsTags := superset(c_tag100rel)} |
template ACK_Request m_ACK_Dummy := |
{ |
requestLine := m_requestLine_dummy(ACK_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(present) RecordRoute mw_recordroute( |
template(present) RouteBody p_routeBody := ? |
) := { |
fieldName := RECORD_ROUTE_E, |
routeBody := {*, p_routeBody, *} // superset(p_routeBody) |
} |
template BYE_Request m_BYE_Dummy := |
{ |
requestLine := m_requestLine_dummy(BYE_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(present) Route mw_route( |
template(present) RouteBody_List p_routeBody := ? |
) := { |
fieldName := ROUTE_E, |
routeBody := p_routeBody |
} |
template CANCEL_Request m_CANCEL_Dummy := |
{ |
requestLine := m_requestLine_dummy(CANCEL_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(present) Supported mw_Supported_Base := { |
fieldName := SUPPORTED_E, |
optionsTags := {} |
} |
template INFO_Request m_INFO_Dummy := |
{ |
requestLine := m_requestLine_dummy(INFO_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(present) Supported mw_Supported_100rel_prec modifies mw_Supported_Base := {optionsTags := superset(c_tag100rel, c_tagPrecond)} |
template INVITE_Request m_INVITE_Dummy := |
{ |
requestLine := m_requestLine_dummy(INVITE_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(present) Supported mw_Supported_100rel modifies mw_Supported_Base := {optionsTags := superset(c_tag100rel)} |
template MESSAGE_Request m_MESSAGE_Dummy := |
{ |
requestLine := m_requestLine_dummy(MESSAGE_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(present) Supported mw_Supported_fromChange modifies mw_Supported_Base := {optionsTags := superset(c_tagFromChange)} |
template NOTIFY_Request m_NOTIFY_Dummy := |
{ |
requestLine := m_requestLine_dummy(NOTIFY_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template OPTIONS_Request m_OPTIONS_Dummy := |
{ |
requestLine := m_requestLine_dummy(OPTIONS_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(present) UserToUser mw_UserToUserData( |
template(present) UserToUser.uuiData p_U2UData := ? |
) := { |
fieldName := USER_TO_USER_E, |
uuiData := p_U2UData, |
uuiParam := ? |
} |
template PRACK_Request m_PRACK_Dummy := |
{ |
requestLine := m_requestLine_dummy(PRACK_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(present) Contact mw_Contact_conference := { |
fieldName := CONTACT_E, |
contactBody := { |
contactAddresses := { |
{ |
addressField := { |
nameAddr := { |
displayName := *, |
addrSpec := { |
scheme := ?, |
components := ?, |
urlParameters := { |
{ |
"isfocus", |
* |
}, |
* |
}, |
headers := * |
} |
} |
}, |
contactParams := * |
} |
} |
} |
} |
template PUBLISH_Request m_PUBLISH_Dummy := |
{ |
requestLine := m_requestLine_dummy(PUBLISH_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(value) AlertInfo m_AlertInfo_Base := { |
fieldName := ALERT_INFO_E, |
alertInfoBody := {} |
} |
template REGISTER_Request m_REGISTER_Dummy := |
{ |
requestLine := m_requestLine_dummy(REGISTER_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(value) AlertInfo m_AlertInfo( |
template(value) charstring p_urn |
) modifies m_AlertInfo_Base := { |
alertInfoBody := { |
{ |
p_urn, |
omit |
} |
} |
} |
template REFER_Request m_REFER_Dummy := |
{ |
requestLine := m_requestLine_dummy(REFER_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(present) AlertInfo mw_AlertInfo( |
template(present) charstring p_urn := ? |
) modifies m_AlertInfo_Base := { |
alertInfoBody := |
superset( |
{ |
p_urn, |
omit |
} |
) |
} |
template SUBSCRIBE_Request m_SUBSCRIBE_Dummy := |
{ |
requestLine := m_requestLine_dummy(SUBSCRIBE_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template UPDATE_Request m_UPDATE_Dummy := |
{ |
requestLine := m_requestLine_dummy(UPDATE_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
}//* end group dummy_request_templates_send |
group dummy_request_templates_receive{ |
} //* end of group HeaderFieldTemplates |
template ACK_Request mw_ACK_Dummy := |
{ |
requestLine := mw_requestLine_dummy(ACK_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template BYE_Request mw_BYE_Dummy := |
{ |
requestLine := mw_requestLine_dummy(BYE_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
group MessageTemplates { |
template CANCEL_Request mw_CANCEL_Dummy := |
{ |
requestLine := mw_requestLine_dummy(CANCEL_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
group dummy_templates { |
template INFO_Request mw_INFO_Dummy := |
{ |
requestLine := mw_requestLine_dummy(INFO_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
group dummy_parameter_send { |
template INVITE_Request mw_INVITE_Dummy := |
{ |
requestLine := mw_requestLine_dummy(INVITE_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(value) RequestLine m_requestLine_dummy( |
template(value) Method p_method |
) := { |
method := p_method, |
requestUri := c_unavailableUri, |
sipVersion := c_sipNameVersion |
} |
template MESSAGE_Request mw_MESSAGE_Dummy := |
{ |
requestLine := mw_requestLine_dummy(MESSAGE_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template OPTIONS_Request mw_OPTIONS_Dummy := |
{ |
requestLine := mw_requestLine_dummy(OPTIONS_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(value) MessageHeader m_msgHeader_dummy := { |
accept := omit, |
acceptContact := omit, |
acceptEncoding := omit, |
acceptLanguage := omit, |
alertInfo := omit, |
allow := omit, |
allowEvents := omit, //* RFC3265 |
authenticationInfo := omit, |
authorization := omit, |
callId := c_empty_CallId, |
callInfo := omit, |
contact := omit, |
contentDisposition := omit, |
contentEncoding := omit, |
contentLanguage := omit, |
contentLength := { |
fieldName := CONTENT_LENGTH_E, |
len := 0 |
}, |
contentType := omit, //* if message body present m, |
//* else not present |
cSeq := c_empty_cSeq, |
date := omit, |
errorInfo := omit, |
event := omit, //* RFC3265 |
expires := omit, |
fromField := c_empty_From, |
geolocation := omit, |
geolocationRouting := omit, |
historyInfo := omit, //* RFC4244 |
inReplyTo := omit, |
maxForwards := c_maxForwards70, |
mimeVersion := omit, |
minExpires := omit, |
minSE := omit, //* RFC4028 |
organization := omit, |
pAccessNetworkInfo := omit, //* RFC3455 |
pAssertedID := omit, |
pAssertedService := omit, |
pAssociatedURI := omit, |
path := omit, //* RFC3327 |
pCalledPartyID := omit, //* RFC3455 |
pChargingFunctionAddresses := omit, //* RFC3455 |
pChargingVector := omit, //* RFC3455 |
pEarlyMedia := omit, //* RFC5009 |
pMediaAuthorization := omit, //* RFC3313 |
pPreferredID := omit, |
pPreferredService := omit, |
priority := omit, |
privacy := omit, |
proxyAuthenticate := omit, |
proxyAuthorization := omit, |
proxyRequire := omit, |
pVisitedNetworkID := omit, //* RFC3455 |
rAck := omit, |
rSeq := omit, |
reason := omit, |
recordRoute := omit, |
requestDisposition := omit, |
referredBy := omit, //* RFC3892 - REFER method |
referTo := omit, //* RFC3515 - REFER method |
referSub := omit, //* RFC4488 - REFER method |
replaces := omit, //* RFC3891 |
replyTo := omit, |
require := omit, |
retryAfter := omit, |
route := omit, |
securityClient := omit, //* RFC3329 |
securityServer := omit, //* RFC3329 |
securityVerify := omit, //* RFC3329 |
server := omit, |
serviceRoute := omit, //* RFC3608 |
sessionExpires := omit, //* RFC4028 |
sessionId := omit, |
sipETag := omit, |
sipIfMatch := omit, |
subject := omit, |
subscriptionState := omit, //* RFC3265 |
supported := omit, |
timestamp := omit, |
toField := c_empty_To, |
unsupported := omit, |
userToUser := omit, |
userAgent := omit, |
via := c_empty_Via, |
warning := omit, |
wwwAuthenticate := omit, |
undefinedHeader_List := omit |
} |
template NOTIFY_Request mw_NOTIFY_Dummy := |
{ |
requestLine := mw_requestLine_dummy(NOTIFY_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template PRACK_Request mw_PRACK_Dummy := |
{ |
requestLine := mw_requestLine_dummy(PRACK_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
} //* group dummy_parameter_send |
template PUBLISH_Request mw_PUBLISH_Dummy := |
{ |
requestLine := mw_requestLine_dummy(PUBLISH_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
group dummy_parameter_receive { |
template REFER_Request mw_REFER_Dummy := |
{ |
requestLine := mw_requestLine_dummy(REFER_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) RequestLine mw_requestLine_dummy( |
Method p_method |
) := { |
method := p_method, |
requestUri := ?, |
sipVersion := c_sipNameVersion |
} |
template REGISTER_Request mw_REGISTER_Dummy := |
{ |
requestLine := mw_requestLine_dummy(REGISTER_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) MessageHeader mw_msgHeader_dummy := { |
accept := *, |
acceptContact := *, |
acceptEncoding := *, |
acceptLanguage := *, |
alertInfo := *, |
allow := *, |
allowEvents := *, //* RFC3265 |
authenticationInfo := *, |
authorization := *, |
callId := ?, |
callInfo := *, |
contact := *, |
contentDisposition := *, |
contentEncoding := *, |
contentLanguage := *, |
contentLength := ?, |
contentType := *, |
cSeq := ?, |
date := *, |
errorInfo := *, |
event := *, //* RFC3265 |
expires := *, |
fromField := ?, |
geolocation := *, |
geolocationRouting := *, |
historyInfo := *, //* RFC4244 |
inReplyTo := *, |
maxForwards := *, |
mimeVersion := *, |
minExpires := *, |
minSE := *, //* RFC4028 |
organization := *, |
pAccessNetworkInfo := *, //* RFC3455 |
pAssertedID := *, |
pAssertedService := *, |
pAssociatedURI := *, |
path := *, //* RFC3327 |
pCalledPartyID := *, //* RFC3455 |
pChargingFunctionAddresses := *, //* RFC3455 |
pChargingVector := *, //* RFC3455 |
pEarlyMedia := *, //* RFC5009 |
pMediaAuthorization := *, //* RFC3313 |
pPreferredID := *, |
pPreferredService := *, |
priority := *, |
privacy := *, |
proxyAuthenticate := *, |
proxyAuthorization := *, |
proxyRequire := *, |
pVisitedNetworkID := *, //* RFC3455 |
rAck := *, |
rSeq := *, |
reason := *, |
recordRoute := *, |
requestDisposition := *, |
referredBy := *, //* RFC3892 - REFER method |
referTo := *, //* RFC3515 - REFER method |
referSub := *, //* RFC4488 - REFER method |
replaces := *, //* RFC 3891 |
replyTo := *, |
require := *, |
retryAfter := *, |
route := *, |
securityClient := *, //* RFC3329 |
securityServer := *, //* RFC3329 |
securityVerify := *, //* RFC3329 |
server := *, |
serviceRoute := *, //* RFC3608 |
sessionExpires := *, //* RFC4028 |
sessionId := *, |
sipETag := *, |
sipIfMatch := *, |
subject := *, |
subscriptionState := *, //* RFC3265 |
supported := *, |
timestamp := *, |
toField := ?, |
unsupported := *, |
userToUser := *, |
userAgent := *, |
via := ?, |
warning := *, |
wwwAuthenticate := *, |
undefinedHeader_List := * |
} |
template SUBSCRIBE_Request mw_SUBSCRIBE_Dummy := |
{ |
requestLine := mw_requestLine_dummy(SUBSCRIBE_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template UPDATE_Request mw_UPDATE_Dummy := |
{ |
requestLine := mw_requestLine_dummy(UPDATE_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
}//* end group dummy_request_templates_receive |
group dummy_response_templates_send{ |
template Response m_Response_Dummy := |
{ |
statusLine := c_statusLine100, |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
} //* group dummy_response_templates_send |
group dummy_response_templates_receive{ |
template Response mw_Response_Dummy := |
{ |
statusLine := ?, |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
} //* group dummy_response_templates_receive |
} |
} //* end group dummy_parameter_receive |
group base_templates{ |
group request_send { |
template ACK_Request m_ACK_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via) modifies m_ACK_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "ACK"}, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template BYE_Request m_BYE_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, |
Via p_via) modifies m_BYE_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
cSeq := p_cSeq, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template CANCEL_Request m_CANCEL_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, |
Via p_via) modifies m_CANCEL_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
group dummy_request_templates_send { |
}, |
msgHeader := |
{ |
callId := p_callId, |
cSeq := p_cSeq, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template INFO_Request m_INFO_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, |
Via p_via) modifies m_INFO_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
cSeq := p_cSeq, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template INVITE_Request m_INVITE_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via, Contact p_contact) modifies m_INVITE_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
contact := p_contact, |
cSeq := p_cSeq, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template(value) ACK_Request m_ACK_Dummy := { |
requestLine := m_requestLine_dummy(ACK_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template MESSAGE_Request m_MESSAGE_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, Via p_via) modifies m_MESSAGE_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
cSeq := p_cSeq, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template(value) BYE_Request m_BYE_Dummy := { |
requestLine := m_requestLine_dummy(BYE_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template NOTIFY_Request m_NOTIFY_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via) modifies m_NOTIFY_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "NOTIFY"}, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template(value) CANCEL_Request m_CANCEL_Dummy := { |
requestLine := m_requestLine_dummy(CANCEL_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template OPTIONS_Request m_OPTIONS_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via) modifies m_OPTIONS_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "OPTIONS"}, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template PRACK_Request m_PRACK_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via, RAck p_RAck) |
modifies m_PRACK_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "PRACK"}, |
fromField := p_from, |
rAck := p_RAck, |
toField := p_to, |
via := p_via |
}, |
messageBody := omit |
} |
template PUBLISH_Request m_PUBLISH_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via, template Event p_event, template RAck p_RAck, template MessageBody p_mb) |
modifies m_PUBLISH_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, |
contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_plainText/*c_sdpAplication*/}, |
cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "PUBLISH"}, |
event := p_event, |
fromField := p_from, |
toField := p_to, |
via := p_via |
}, |
messageBody := p_mb |
} |
template(value) INFO_Request m_INFO_Dummy := { |
requestLine := m_requestLine_dummy(INFO_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template REFER_Request m_REFER_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, Contact p_contact, |
From p_from, template To p_to, Via p_via, template ReferTo p_referTo, template ReferredBy p_referredBy) |
modifies m_REFER_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
contact := p_contact, |
cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "REFER"}, |
fromField := p_from, |
referTo := p_referTo, |
referredBy := p_referredBy, |
toField := p_to, |
via := p_via |
} |
} |
template REFER_Request m_REFER_Request_replaces ( |
SipUrl p_requestUri, |
CallId p_callId, |
CSeq p_cSeq, |
Contact p_contact, |
From p_from, |
template To p_to, |
Via p_via, |
template ReferTo p_referTo, |
template ReferredBy p_referredBy, |
template Replaces p_replaces, |
template Require p_require |
) modifies m_REFER_Request_Base := { |
msgHeader := |
{ |
replaces := p_replaces, |
require := p_require |
} |
} |
template REGISTER_Request m_REGISTER_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via, Contact p_contact, template Authorization p_authorization) modifies m_REGISTER_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
authorization := p_authorization, |
callId := p_callId, |
contact := p_contact, |
cSeq := p_cSeq, |
fromField := p_from, |
toField := p_to, |
supported := { |
fieldName := SUPPORTED_E, optionsTags := {"path"} |
}, |
via := p_via |
} |
} |
template(value) INVITE_Request m_INVITE_Dummy := { |
requestLine := m_requestLine_dummy(INVITE_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template SUBSCRIBE_Request m_SUBSCRIBE_Request_Base (SipUrl p_requestUri, CallId p_callId, |
CSeq p_cSeq, From p_from, To p_to, Via p_via) modifies m_SUBSCRIBE_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "SUBSCRIBE"}, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template(value) MESSAGE_Request m_MESSAGE_Dummy := { |
requestLine := m_requestLine_dummy(MESSAGE_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template UPDATE_Request m_UPDATE_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via, Contact p_contact, template MessageBody p_mb) modifies m_UPDATE_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
contact := p_contact, |
contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, |
contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, |
cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "UPDATE"}, |
fromField := p_from, |
toField := p_to, |
via := p_via |
}, |
messageBody := p_mb |
} |
} //* end of group message_send |
template(value) NOTIFY_Request m_NOTIFY_Dummy := { |
requestLine := m_requestLine_dummy(NOTIFY_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
group request_receive { |
template ACK_Request mw_ACK_Request_Base (template CallId p_callId) modifies mw_ACK_Dummy := |
{ |
msgHeader := |
{ |
callId := p_callId |
} |
} |
template BYE_Request mw_BYE_Request_Base(template CallId p_callId) modifies mw_BYE_Dummy := |
{ |
msgHeader := |
{ |
callId := p_callId |
} |
} |
template CANCEL_Request mw_CANCEL_Request_Base (template CallId p_callId) modifies mw_CANCEL_Dummy := |
{ |
msgHeader := |
{ |
callId := p_callId |
} |
} |
template INFO_Request mw_INFO_Request_Base(template CallId p_callId) modifies mw_INFO_Dummy := |
{ |
msgHeader := |
{ |
callId := p_callId |
} |
} |
template(value) OPTIONS_Request m_OPTIONS_Dummy := { |
requestLine := m_requestLine_dummy(OPTIONS_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template INVITE_Request mw_INVITE_Request_Base modifies mw_INVITE_Dummy := |
{ |
requestLine := |
{ |
method := INVITE_E |
} |
} |
template(value) PRACK_Request m_PRACK_Dummy := { |
requestLine := m_requestLine_dummy(PRACK_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template MESSAGE_Request mw_MESSAGE_Request_Base modifies mw_MESSAGE_Dummy := |
{ |
msgHeader := |
{ |
contact := * |
} |
} |
template(value) PUBLISH_Request m_PUBLISH_Dummy := { |
requestLine := m_requestLine_dummy(PUBLISH_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template NOTIFY_Request mw_NOTIFY_Request_Base (template CallId p_callId) modifies mw_NOTIFY_Dummy := |
{ |
msgHeader := |
{ |
callId := p_callId |
} |
} |
template OPTIONS_Request mw_OPTIONS_Request_Base (template CallId p_callId) modifies mw_OPTIONS_Dummy := |
{ |
msgHeader := |
{ |
callId := p_callId |
} |
template(value) REGISTER_Request m_REGISTER_Dummy := { |
requestLine := m_requestLine_dummy(REGISTER_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(value) REFER_Request m_REFER_Dummy := { |
requestLine := m_requestLine_dummy(REFER_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(value) SUBSCRIBE_Request m_SUBSCRIBE_Dummy := { |
requestLine := m_requestLine_dummy(SUBSCRIBE_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
template(value) UPDATE_Request m_UPDATE_Dummy := { |
requestLine := m_requestLine_dummy(UPDATE_E), |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
} //* end group dummy_request_templates_send |
group dummy_request_templates_receive { |
template(present) ACK_Request mw_ACK_Dummy := { |
requestLine := mw_requestLine_dummy(ACK_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) BYE_Request mw_BYE_Dummy := { |
requestLine := mw_requestLine_dummy(BYE_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) CANCEL_Request mw_CANCEL_Dummy := { |
requestLine := mw_requestLine_dummy(CANCEL_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) INFO_Request mw_INFO_Dummy := { |
requestLine := mw_requestLine_dummy(INFO_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) INVITE_Request mw_INVITE_Dummy := { |
requestLine := mw_requestLine_dummy(INVITE_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) MESSAGE_Request mw_MESSAGE_Dummy := { |
requestLine := mw_requestLine_dummy(MESSAGE_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) OPTIONS_Request mw_OPTIONS_Dummy := { |
requestLine := mw_requestLine_dummy(OPTIONS_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) NOTIFY_Request mw_NOTIFY_Dummy := { |
requestLine := mw_requestLine_dummy(NOTIFY_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) PRACK_Request mw_PRACK_Dummy := { |
requestLine := mw_requestLine_dummy(PRACK_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) PUBLISH_Request mw_PUBLISH_Dummy := { |
requestLine := mw_requestLine_dummy(PUBLISH_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) REFER_Request mw_REFER_Dummy := { |
requestLine := mw_requestLine_dummy(REFER_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) REGISTER_Request mw_REGISTER_Dummy := { |
requestLine := mw_requestLine_dummy(REGISTER_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) SUBSCRIBE_Request mw_SUBSCRIBE_Dummy := { |
requestLine := mw_requestLine_dummy(SUBSCRIBE_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
template(present) UPDATE_Request mw_UPDATE_Dummy := { |
requestLine := mw_requestLine_dummy(UPDATE_E), |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
} //* end group dummy_request_templates_receive |
group dummy_response_templates_send { |
template(value) Response m_Response_Dummy := { |
statusLine := c_statusLine100, |
msgHeader := m_msgHeader_dummy, |
messageBody := omit, |
payload := omit |
} |
} //* group dummy_response_templates_send |
group dummy_response_templates_receive { |
template(present) Response mw_Response_Dummy := { |
statusLine := ?, |
msgHeader := mw_msgHeader_dummy, |
messageBody := *, |
payload := * |
} |
} //* group dummy_response_templates_receive |
} |
template PRACK_Request mw_PRACK_Request_Base(template CallId p_callId) modifies mw_PRACK_Dummy := |
{ |
msgHeader := |
{ |
callId := p_callId |
} |
} |
template PUBLISH_Request mw_PUBLISH_Request_Base(template CallId p_callId) modifies mw_PUBLISH_Dummy := |
{ |
msgHeader := |
{ |
callId := p_callId |
} |
} |
template REFER_Request mw_REFER_Request_Base (template CallId p_callId) modifies mw_REFER_Dummy := |
{ |
msgHeader := |
{ |
callId := p_callId |
} |
} |
template REFER_Request |
mw_REFER_Request(template CallId p_callId, SipUrl p_requestUri, |
SipUrl p_referredBy) |
modifies mw_REFER_Request_Base := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
referredBy := { |
fieldName := REFERRED_BY_E, |
nameAddr := {displayName := *, addrSpec := p_referredBy}, |
referredbyIdParams := * |
} |
} |
} |
template INVITE_Request mw_INVITE_Request(template Require p_require, |
SipUrl p_referredBy) modifies mw_INVITE_Request_Base := { |
msgHeader := { |
require := p_require, |
referredBy := { |
fieldName := REFERRED_BY_E, |
nameAddr := {displayName := *, addrSpec := p_referredBy}, |
referredbyIdParams := * |
} |
} |
} |
template REGISTER_Request mw_REGISTER_Request_Base modifies mw_REGISTER_Dummy := |
{ |
requestLine := |
{ |
method := REGISTER_E |
} |
} |
group base_templates { |
template SUBSCRIBE_Request mw_SUBSCRIBE_Request_Base modifies mw_SUBSCRIBE_Dummy := |
{ |
requestLine := |
{ |
method := SUBSCRIBE_E |
} |
} |
template(value) CSeq m_cSeq( |
template(value) integer p_seqNumber, |
template(value) charstring p_method |
) := { |
fieldName := CSEQ_E, |
seqNumber := p_seqNumber, |
method := p_method |
} |
template UPDATE_Request mw_UPDATE_Request_Base(template CallId p_callId) modifies mw_UPDATE_Dummy := |
{ |
msgHeader := |
{ |
callId := p_callId |
} |
} |
template(value) ContentLength m_contentLength( |
template(value) integer p_len |
) := { |
fieldName := CONTENT_LENGTH_E, |
len := p_len |
} |
} //* end group request_receive |
group response_send { |
template(value) ContentType m_contentType( |
template(value) charstring p_mediaType |
) := { |
fieldName := CONTENT_TYPE_E, |
mediaType := p_mediaType |
} |
template Response m_Response_Base (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via) modifies m_Response_Dummy:= |
{ |
statusLine := p_statusLine, |
msgHeader := |
{ |
callId := p_callId, |
cSeq := p_cSeq, |
fromField := p_from, |
maxForwards := omit, |
toField := p_to, |
via := p_via |
}, |
messageBody := omit, |
payload := omit |
} |
template(present) ContentType mw_contentType( |
in template(present) charstring p_mediaType := ? |
) := { |
fieldName := CONTENT_TYPE_E, |
mediaType := p_mediaType |
} |
group request_send { |
} //* end group response_send |
template(value) ACK_Request m_ACK_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via |
) modifies m_ACK_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
cSeq := m_cSeq(p_cSeq.seqNumber, "ACK"), // STF471 |
// {fieldName:=CSEQ_E, |
// seqNumber:= |
// p_cSeq.seqNumber, |
// method:= |
// "ACK"}, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
group response_receive { |
template(value) ACK_Request m_ACK_Request_withRecordRoute( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) Route p_route |
) modifies m_ACK_Request_Base := { |
msgHeader := { |
route := p_route, |
contentLength := m_contentLength(0) |
} |
} |
template Response mw_Response_Base (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq) modifies mw_Response_Dummy:= |
{ |
statusLine := p_statusLine, |
msgHeader := |
{ |
callId := p_callId, |
contentLength := *, |
cSeq := p_cSeq, |
fromField := ?, |
maxForwards := *, |
toField := ?, |
via := ? |
} |
} |
} //* end group message_receive |
template(value) BYE_Request m_BYE_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via |
) modifies m_BYE_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
cSeq := p_cSeq, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
} //* end group full_templates |
template(value) CANCEL_Request m_CANCEL_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via |
) modifies m_CANCEL_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
cSeq := p_cSeq, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
group modified_templates { |
group request_send { |
template ACK_Request m_ACK_Request_route (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via, template Route p_route) |
modifies m_ACK_Request_Base |
:= |
{ |
msgHeader := |
{ |
route := p_route |
} |
} |
template(value) INFO_Request m_INFO_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via |
) modifies m_INFO_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
cSeq := p_cSeq, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template ACK_Request m_ACK_Request_sdp (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via,template MessageBody p_mb) |
modifies m_ACK_Request_Base |
:= |
{ |
msgHeader := |
{ |
contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, |
contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication} |
}, |
messageBody := p_mb |
} |
template BYE_Request m_BYE_Request_cause |
(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, Via p_via, integer p_cause) |
modifies m_BYE_Request_Base |
:= |
{ |
msgHeader := |
{ |
reason := m_Reason(p_cause) //* PIXIT value |
} |
} |
template INVITE_Request m_INVITE_Request_sdp |
(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, |
Via p_via, Contact p_contact, template MessageBody p_mb) |
modifies m_INVITE_Request_Base |
:= |
{ |
msgHeader := |
{ |
contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, |
contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication} |
}, |
messageBody := p_mb |
} |
template INVITE_Request m_INVITE_Request_ResourceList |
(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, |
Via p_via, Contact p_contact, template MessageBody p_mb) |
modifies m_INVITE_Request_Base |
:= |
{ |
msgHeader := |
{ |
contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, |
contentType := {fieldName := CONTENT_TYPE_E, mediaType := "application/resource-lists+xml"}, |
contentDisposition := { |
fieldName := CONTENT_DISPOSITION_E, |
dispositionType := "recipient-list", |
dispositionParams := omit |
}, |
require := { |
fieldName := REQUIRE_E, |
optionsTags := {"recipient-list-invite"} |
} |
}, |
messageBody := p_mb |
} |
template(value) INVITE_Request m_INVITE_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) Contact p_contact |
) modifies m_INVITE_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
contact := p_contact, |
cSeq := p_cSeq, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template REGISTER_Request m_REGISTER_Request_expires |
(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via, Contact p_contact, |
template Authorization p_authorization, charstring p_expires) |
modifies m_REGISTER_Request_Base |
:= |
{ |
msgHeader := |
{ |
authorization := p_authorization, |
expires := { |
fieldName := EXPIRES_E, |
deltaSec := p_expires } |
} |
} |
template NOTIFY_Request m_NOTIFY_Request_contact ( |
SipUrl p_requestUri, |
CallId p_callId, |
CSeq p_cSeq, |
From p_from, |
To p_to, |
Via p_via, |
Contact p_contact |
) modifies m_NOTIFY_Request_Base |
:= |
{ |
msgHeader := |
{ |
contact := p_contact, |
event := m_Event_reg, |
subscriptionState := m_SubscriptionState_active |
} |
} |
template NOTIFY_Request m_NOTIFY_Request_sipfrag ( |
SipUrl p_requestUri, |
CallId p_callId, |
CSeq p_cSeq, |
From p_from, |
To p_to, |
Via p_via, |
charstring p_state, |
charstring p_sipfrag |
) modifies m_NOTIFY_Request_Base := { |
requestLine := |
{ |
method := NOTIFY_E, |
requestUri := |
{ scheme := ?, |
components := {sip:={userInfo := *, |
hostPort:= p_requestUri.components.sip.hostPort}} |
} |
}, |
msgHeader := |
{ |
contentLength := {fieldName := CONTENT_LENGTH_E, len:= lengthof(p_sipfrag)}, |
contentType := {fieldName := CONTENT_TYPE_E, mediaType := "message/sipfrag"}, |
subscriptionState := { |
fieldName := SUBSCRIPTION_STATE_E, |
subState := p_state, |
substateParams := omit |
}, |
event := m_Event_refer |
}, |
messageBody := { |
sipfrag := p_sipfrag |
} |
} |
template(value) MESSAGE_Request m_MESSAGE_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via |
) modifies m_MESSAGE_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
cSeq := p_cSeq, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
} //* end group request_send |
template(value) NOTIFY_Request m_NOTIFY_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via |
) modifies m_NOTIFY_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
cSeq := m_cSeq(p_cSeq.seqNumber, "NOTIFY"), // STF471 |
// {fieldName:=CSEQ_E, |
// seqNumber:= |
// p_cSeq.seqNumber, |
// method:= |
// "NOTIFY"}, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template(value) OPTIONS_Request m_OPTIONS_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via |
) modifies m_OPTIONS_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
cSeq := m_cSeq(p_cSeq.seqNumber, "OPTIONS"), // STF471 |
// {fieldName:=CSEQ_E, |
// seqNumber:= |
// p_cSeq.seqNumber, |
// method:= |
// "OPTIONS"}, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
group request_receive { |
template BYE_Request mw_BYE_Request_Reason(template CallId p_callId, template charstring p_cause) modifies mw_BYE_Request_Base := |
{ |
msgHeader := |
{ |
reason := mw_Reason(p_cause) |
} |
} |
template(value) PRACK_Request m_PRACK_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) RAck p_RAck |
) modifies m_PRACK_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
cSeq := m_cSeq(p_cSeq.seqNumber, "PRACK"), // STF471 |
// {fieldName:=CSEQ_E, |
// seqNumber:= |
// p_cSeq.seqNumber, |
// method:= |
// "PRACK"}, |
fromField := p_from, |
rAck := p_RAck, |
toField := p_to, |
via := p_via |
}, |
messageBody := omit |
} |
template BYE_Request mw_BYE_Request_ReasonSIP(template CallId p_callId, template charstring p_cause) modifies mw_BYE_Request_Base := |
{ |
msgHeader := |
{ |
reason := mw_ReasonSIP(p_cause) |
} |
} |
template(value) PUBLISH_Request m_PUBLISH_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(omit) Event p_event := omit, |
template(omit) RAck p_RAck := omit, |
template(value) MessageBody p_mb |
) modifies m_PUBLISH_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 |
// {fieldName |
// := |
// CONTENT_LENGTH_E, |
// len:= |
// f_MessageBodyLength(valueof(p_mb))}, |
contentType := m_contentType(c_plainText), // STF471 |
// {fieldName |
// := |
// CONTENT_TYPE_E, |
// mediaType |
// := |
// c_plainText/*c_sdp*/}, |
cSeq := m_cSeq(p_cSeq.seqNumber, "PUBLISH"), // STF471 |
// {fieldName:=CSEQ_E, |
// seqNumber:= |
// p_cSeq.seqNumber, |
// method:= |
// "PUBLISH"}, |
event := p_event, |
rAck := p_RAck, |
fromField := p_from, |
toField := p_to, |
via := p_via |
}, |
messageBody := p_mb |
} |
template BYE_Request mw_BYE_Request_headerfieldlist |
( |
template CallId p_callId, |
template SipUrl p_requestUri, |
template To p_to, |
template From p_from, |
template CSeq p_cSeq, |
template Route p_route, |
template RecordRoute p_recordRoute, |
template Reason p_reason |
) modifies mw_BYE_Request_Base := |
{ requestLine := |
{ |
requestUri := p_requestUri |
}, |
msgHeader := |
{ |
callId := p_callId, |
toField := p_to, |
fromField := p_from, |
cSeq := p_cSeq, |
route := p_route, |
recordRoute := p_recordRoute, |
reason := p_reason |
} |
} |
template BYE_Request mw_BYE_Request_UserToUser(template CallId p_callId) modifies mw_BYE_Request_Base := |
{ |
msgHeader := |
{ |
userToUser := ? |
} |
} |
template(value) REFER_Request m_REFER_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(omit) Contact p_contact := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(omit) ReferTo p_referTo := omit, |
template(omit) ReferredBy p_referredBy := omit |
) modifies m_REFER_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
contact := p_contact, |
cSeq := m_cSeq(p_cSeq.seqNumber, "REFER"), // STF471 |
// {fieldName:=CSEQ_E, |
// seqNumber:= |
// p_cSeq.seqNumber, |
// method:= |
// "REFER"}, |
fromField := p_from, |
referTo := p_referTo, |
referredBy := p_referredBy, |
toField := p_to, |
via := p_via |
} |
} |
template(value) REFER_Request m_REFER_Request_replaces( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(omit) Contact p_contact := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) ReferTo p_referTo, |
template(value) ReferredBy p_referredBy, |
template(value) Replaces p_replaces, |
template(omit) Require p_require := omit |
) modifies m_REFER_Request_Base := { |
msgHeader := { |
replaces := p_replaces, |
require := p_require |
} |
} |
template INVITE_Request mw_INVITE_Request_RequestURI (template SipUrl p_sipUrl) modifies mw_INVITE_Dummy := |
{ |
requestLine := |
{ |
requestUri := p_sipUrl, |
sipVersion := c_sipNameVersion |
} |
} |
template(value) REGISTER_Request m_REGISTER_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(omit) Contact p_contact := omit, |
template(omit) Authorization p_authorization := omit |
) modifies m_REGISTER_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
authorization := p_authorization, |
callId := p_callId, |
contact := p_contact, |
cSeq := p_cSeq, |
fromField := p_from, |
toField := p_to, |
supported := { |
fieldName := SUPPORTED_E, |
optionsTags := {"path"} |
}, |
via := p_via |
} |
} |
template INFO_Request mw_INFO_Request_MB (template CallId p_callId, template MessageBody p_mb) modifies mw_INFO_Request_Base := |
{ |
messageBody := p_mb |
} |
template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via |
) modifies m_SUBSCRIBE_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), // STF471 |
// {fieldName:=CSEQ_E, |
// seqNumber:= |
// p_cSeq.seqNumber, |
// method:= |
// "SUBSCRIBE"}, |
fromField := p_from, |
toField := p_to, |
via := p_via |
} |
} |
template INVITE_Request mw_INVITE_Request_expires modifies mw_INVITE_Request_Base |
:= |
{ |
msgHeader := {expires := ?} |
} |
template INVITE_Request mw_INVITE_Request_callid(CallId p_callid) modifies mw_INVITE_Request_Base |
:= |
{ |
msgHeader := {callId := p_callid} |
} |
template INVITE_Request mw_INVITE_Request_MB (template CallId p_callId, template MessageBody p_mb) modifies mw_INVITE_Request_Base := |
{ |
msgHeader := {callId := p_callId}, |
messageBody := p_mb |
} |
template(value) UPDATE_Request m_UPDATE_Request_Base( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(omit) Contact p_contact := omit, |
template(value) MessageBody p_mb |
) modifies m_UPDATE_Dummy := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
contact := p_contact, |
contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 |
// {fieldName |
// := |
// CONTENT_LENGTH_E, |
// len:= |
// f_MessageBodyLength(valueof(p_mb))}, |
contentType := m_contentType(c_sdpApplication), // STF471 |
// {fieldName |
// := |
// CONTENT_TYPE_E, |
// mediaType |
// := |
// c_sdp}, |
cSeq := m_cSeq(p_cSeq.seqNumber, "UPDATE"), // STF471 |
// {fieldName:=CSEQ_E, |
// seqNumber:= |
// p_cSeq.seqNumber, |
// method:= |
// "UPDATE"}, |
fromField := p_from, |
toField := p_to, |
via := p_via |
}, |
messageBody := p_mb |
} |
template INVITE_Request mw_INVITE_Request_noPaccessNetworkInfo (template CallId p_callId) |
modifies mw_INVITE_Request_Base |
:= |
{ |
msgHeader := { pAccessNetworkInfo := omit} |
} |
template INVITE_Request mw_INVITE_Request_PaccessNetworkInfo (template CallId p_callId) |
modifies mw_INVITE_Request_Base |
:= |
{ |
msgHeader := { pAccessNetworkInfo := ?} |
} |
template INVITE_Request mw_INVITE_MSRP_Session( |
in template SDP_media_field p_media_MSRP |
) modifies mw_INVITE_Request_Base := { |
messageBody := { |
sdpMessageBody := { |
protocol_version := ?, |
origin := ?, |
session_name := ?, |
information := *, |
uri := *, |
emails := *, |
phone_numbers := *, |
connection := *, |
bandwidth := *, |
times := ?, |
timezone_adjustments := *, |
key := *, |
attributes := *, |
media_list := { |
{ |
media_field := p_media_MSRP, |
information := *, |
connections := *, |
bandwidth := *, |
key := *, |
attributes := { |
{ |
msrp := { |
attr_value := pattern "path:msrp://*" // FIXME Shall parse msrp and msrps for secured msrp |
} |
} |
} //* end of group message_send |
group request_receive { |
template(present) ACK_Request mw_ACK_Request_Base( |
template CallId p_callId |
) modifies mw_ACK_Dummy := { |
msgHeader := {callId := p_callId} |
} |
template(present) BYE_Request mw_BYE_Request_Base( |
template CallId p_callId |
) modifies mw_BYE_Dummy := { |
msgHeader := {callId := p_callId} |
} |
template(present) CANCEL_Request mw_CANCEL_Request_Base( |
template CallId p_callId |
) modifies mw_CANCEL_Dummy := { |
msgHeader := {callId := p_callId} |
} |
template(present) INFO_Request mw_INFO_Request_Base( |
template CallId p_callId |
) modifies mw_INFO_Dummy := { |
msgHeader := {callId := p_callId} |
} |
template(present) INVITE_Request mw_INVITE_Request_Base modifies mw_INVITE_Dummy := {requestLine := {method := INVITE_E}} |
template(present) MESSAGE_Request mw_MESSAGE_Request_Base modifies mw_MESSAGE_Dummy := {msgHeader := {contact := *}} |
template(present) NOTIFY_Request mw_NOTIFY_Request_Base( |
template CallId p_callId |
) modifies mw_NOTIFY_Dummy := { |
msgHeader := {callId := p_callId} |
} |
template(present) OPTIONS_Request mw_OPTIONS_Request_Base( |
template CallId p_callId |
) modifies mw_OPTIONS_Dummy := { |
msgHeader := {callId := p_callId} |
} |
template(present) PRACK_Request mw_PRACK_Request_Base( |
template CallId p_callId |
) modifies mw_PRACK_Dummy := { |
msgHeader := {callId := p_callId} |
} |
template(present) PUBLISH_Request mw_PUBLISH_Request_Base( |
template CallId p_callId |
) modifies mw_PUBLISH_Dummy := { |
msgHeader := {callId := p_callId} |
} |
template(present) REFER_Request mw_REFER_Request_Base( |
template CallId p_callId |
) modifies mw_REFER_Dummy := { |
msgHeader := {callId := p_callId} |
} |
template(present) REFER_Request mw_REFER_Request( |
template CallId p_callId, |
template(value) SipUrl p_requestUri, |
template(value) SipUrl p_referredBy |
) modifies mw_REFER_Request_Base := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
referredBy := { |
fieldName := REFERRED_BY_E, |
nameAddr := mw_NameAddr(*, p_referredBy), // STF471 |
// {displayName |
// := |
// *, |
// addrSpec |
// := |
// p_referredBy}, |
referredbyIdParams := * |
} |
} |
} |
} |
} |
} |
template UPDATE_Request mw_UPDATE_Request_SDP(template CallId p_callId, template MessageBody p_mb) modifies mw_UPDATE_Dummy := |
{ |
messageBody := p_mb |
} |
template NOTIFY_Request mw_NOTIFY_Request_MB (template CallId p_callId, template MessageBody p_mb) modifies mw_NOTIFY_Request_Base := |
{ |
messageBody := p_mb |
} |
} //* end group request_receive |
template(present) INVITE_Request mw_INVITE_Request( |
template Require p_require, |
template(value) SipUrl p_referredBy |
) modifies mw_INVITE_Request_Base := { |
msgHeader := { |
require := p_require, |
referredBy := { |
fieldName := REFERRED_BY_E, |
nameAddr := mw_NameAddr(*, p_referredBy), // STF471 |
// {displayName |
// := |
// *, |
// addrSpec |
// := |
// p_referredBy}, |
referredbyIdParams := * |
} |
} |
} |
group response_send { |
template Response m_Response_AlertInfo ( |
StatusLine p_statusLine, |
CallId p_callId, |
CSeq p_cSeq, |
From p_from, |
To p_to, |
Via p_via, |
Contact p_contact, |
template AlertInfo p_alertInfo |
) modifies m_Response_Base:= { |
msgHeader := { |
alertInfo := p_alertInfo, |
contact := p_contact |
} |
} |
template Response m_Response_Contact ( |
StatusLine p_statusLine, |
CallId p_callId, |
CSeq p_cSeq, |
From p_from, |
To p_to, |
Via p_via, |
Contact p_contact |
) modifies m_Response_Base:= { |
msgHeader := { |
contact := p_contact |
} |
} |
template(present) REGISTER_Request mw_REGISTER_Request_Base modifies mw_REGISTER_Dummy := {requestLine := {method := REGISTER_E}} |
template Response m_Response_ext (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via, template Route p_route, template RecordRoute p_recordroute) modifies m_Response_Base:= |
{ |
msgHeader :={ |
route := p_route, //f_route(), |
recordRoute := p_recordroute //f_recordroute() |
} |
} |
template Response m_Response_mbody (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via, template Route p_route, template RecordRoute p_recordroute, template MessageBody p_mb) modifies m_Response_ext:= |
{ |
msgHeader := |
{ |
contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, |
contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication} |
}, |
messageBody := p_mb |
} |
template Response m_Response_mbody_contact (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via, template Route p_route, template RecordRoute p_recordroute, template MessageBody p_mb, template Contact p_contact) modifies m_Response_mbody:= |
{ |
msgHeader := |
{ |
contact := p_contact |
} |
} |
template Response m_Response_PAsserted_Privacy (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via, template Route p_route, template RecordRoute p_recordroute, template PAssertedID p_pAssertedID, template Privacy p_privacy) modifies m_Response_ext:= |
{ |
msgHeader := |
{ |
pAssertedID := p_pAssertedID, |
privacy := p_privacy |
} |
} |
template Response mw_Response_PAsserted_Privacy_Supported (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq, template PAssertedID p_pAssertedID, template Privacy p_privacy, template Supported p_supported) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
pAssertedID := p_pAssertedID, |
privacy := p_privacy, |
supported := p_supported |
} |
} |
template Response m_Response_PAsserted_Privacy_mbody (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq, |
From p_from, To p_to, Via p_via, template Route p_route, template RecordRoute p_recordroute, template PAssertedID p_pAssertedID, template Privacy p_privacy, MessageBody p_mb) modifies m_Response_ext:= |
{ |
msgHeader := |
{ |
contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, |
contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_sdpAplication}, |
pAssertedID := p_pAssertedID, |
privacy := p_privacy |
}, |
messageBody := p_mb |
} |
template(present) SUBSCRIBE_Request mw_SUBSCRIBE_Request_Base modifies mw_SUBSCRIBE_Dummy := {requestLine := {method := SUBSCRIBE_E}} |
} //* end group response_send |
template(present) UPDATE_Request mw_UPDATE_Request_Base(template CallId p_callId) modifies mw_UPDATE_Dummy := {msgHeader := {callId := p_callId}} |
group response_receive { |
} //* end group request_receive |
template Response mw_Response_Expires (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq, template DeltaSec p_deltaSec) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
expires := {fieldName := EXPIRES_E, deltaSec := p_deltaSec} |
} |
} |
group response_send { |
template Response mw_Response_PAsserted_Privacy (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq, template PAssertedID p_pAssertedID, template Privacy p_privacy) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
pAssertedID := p_pAssertedID, |
privacy := p_privacy |
} |
} |
template(value) Response m_Response_Base( |
template(value) StatusLine p_statusLine, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via |
) modifies m_Response_Dummy := { |
statusLine := p_statusLine, |
msgHeader := { |
callId := p_callId, |
cSeq := p_cSeq, |
fromField := p_from, |
maxForwards := omit, |
toField := p_to, |
via := p_via |
}, |
messageBody := omit, |
payload := omit |
} |
template Response mw_Response_Reason (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq, template charstring p_cause) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
reason := mw_Reason(p_cause) |
} |
} |
template Response mw_Response_RecordRoute (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq, template RecordRoute p_recordRoute) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
recordRoute := p_recordRoute |
} |
} |
} //* end group response_send |
template Response mw_Response_Via (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq, template Via p_via) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
via := p_via |
} |
} |
template Response mw_Response_Contact (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq, template Contact p_contact) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
contact := p_contact |
} |
} |
template Response mw_Response_AlertInfo ( |
template StatusLine p_statusLine, |
template CallId p_callId, |
template CSeq p_cSeq, |
template AlertInfo p_alertInfo |
) modifies mw_Response_Base:= { |
statusLine := { |
sipVersion := c_sipNameVersion, |
statusCode := p_statusLine.statusCode, |
reasonPhrase := ? |
}, |
msgHeader := |
{ |
alertInfo := p_alertInfo |
} |
} |
template Response mw_Response_HistoryInfo (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq, template HistoryInfo p_historyInfo) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
historyInfo:=p_historyInfo |
} |
} |
template Response mw_Response_messageBody ( |
template StatusLine p_statusLine, |
template CallId p_callId, |
template CSeq p_cSeq, |
template Require p_require, |
template MessageBody p_mb |
) modifies mw_Response_Base:= { |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
require := p_require |
}, |
messageBody := p_mb |
} |
template Response mw_Response_Require (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq, template Require p_require) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
require := p_require |
} |
} |
template Response mw_Response_Require_ifpresent (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq, template Require p_require) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
require := p_require ifpresent |
} |
} |
template Response mw_Response_Supported (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq, template Supported p_supported) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
supported := p_supported |
} |
} |
template Response mw_Response_UserToUser (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
userToUser := ? |
} |
} |
template Response mw_Response_Algorithm (template StatusLine p_statusLine, template CallId p_callId, |
template CSeq p_cSeq, template CredentialsList p_credentialsList) modifies mw_Response_Base:= |
{ |
statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
msgHeader := |
{ |
authorization:= {fieldName := AUTHORIZATION_E, body := p_credentialsList } |
} |
} |
} //* end group response_receive |
group response_receive { |
} //* end group modified_templates |
template(present) Response mw_Response_Base( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq |
) modifies mw_Response_Dummy := { |
statusLine := p_statusLine, |
msgHeader := { |
callId := p_callId, |
contentLength := *, |
cSeq := p_cSeq, |
fromField := ?, |
maxForwards := *, |
toField := ?, |
via := ? |
} |
} |
} //* end group MessageTemplates |
template(present) Response mw_Response_StatusCode_Base( |
template(present) StatusLine.statusCode p_statusCode := ?, |
template CallId p_callId, |
template CSeq p_cSeq |
) modifies mw_Response_Dummy := { |
statusLine := mw_statusLine(p_statusCode, ?), |
msgHeader := { |
callId := p_callId, |
contentLength := *, |
cSeq := p_cSeq, |
fromField := ?, |
maxForwards := *, |
toField := ?, |
via := ? |
} |
} |
group SDP_Templates { |
group SDP_Messages { |
template(present) Response mw_Response_1xx_Base( |
template CallId p_callId, |
template CSeq p_cSeq |
) modifies mw_Response_Dummy := { |
statusLine := mw_statusLine1xx, |
msgHeader := { |
callId := p_callId, |
contentLength := *, |
cSeq := p_cSeq, |
fromField := ?, |
maxForwards := *, |
toField := ?, |
via := ? |
} |
} |
group base_templates { |
template SDP_Message m_SDP(SDP_media_desc p_media, in SipUserProfile p_userprofile) := { |
protocol_version := 0, //* v=0 |
origin := { |
user_name := "voicesession", |
session_id := "30000", |
session_version := "0", |
net_type := c_in, |
addr_type := c_ip4, |
addr := p_userprofile.contactIpaddr }, |
//* o=voicesession 12345 12345 IN IP4 172.27.1.219 |
session_name := "Voice Session", //* s=Voice Session |
information := omit, |
uri := omit, |
emails := omit, |
phone_numbers := omit, |
connection := { |
net_type := c_in, |
addr_type := c_ip4, |
conn_addr := { addr:= p_userprofile.bearerIpaddr, ttl:=omit, num_of_addr:=omit } |
}, //* c=IN IP4 172.27.1.219 |
bandwidth := omit, |
times := { { time_field := { "0", "0" }, time_repeat:=omit |
} |
}, //* t=0 0 |
timezone_adjustments := omit, |
key := omit, |
attributes := omit, |
media_list := {p_media} |
}; |
template SDP_Message m_SDP_mediaList(SDP_media_desc_list p_media_list, in SipUserProfile p_userprofile) |
:= { |
protocol_version := 0, //* v=0 |
origin := { |
user_name := "voicesession", |
session_id := "30000", |
session_version := "0", |
net_type := c_in, |
addr_type := c_ip4, |
addr := p_userprofile.contactIpaddr }, |
//* o=voicesession 12345 12345 IN IP4 172.27.1.219 |
session_name := "Voice Session", //* s=Voice Session |
information := omit, |
uri := omit, |
emails := omit, |
phone_numbers := omit, |
connection := { |
net_type := c_in, |
addr_type := c_ip4, |
conn_addr := { addr:= p_userprofile.bearerIpaddr, ttl:=omit, num_of_addr:=omit } |
}, //* c=IN IP4 172.27.1.219 |
bandwidth := omit, |
times := { { time_field := { "0", "0" }, time_repeat:=omit |
} |
}, //* t=0 0 |
timezone_adjustments := omit, |
key := omit, |
attributes := omit, |
media_list := p_media_list |
}; |
template(present) Response mw_Response_2xx_Base( |
template CallId p_callId, |
template CSeq p_cSeq |
) modifies mw_Response_1xx_Base := { |
statusLine := mw_statusLine2xx |
} |
template SDP_Message m_SDP_media_attr_preconditions(SDP_media_desc p_media, in SipUserProfile p_userprofile, SDP_attribute_list p_attribute_list) |
modifies m_SDP |
:= { |
media_list := { |
{ |
media_field := { |
media := c_audio, |
ports := { port_number := 8500, num_of_ports:=omit }, |
transport := c_rtpAvp, |
fmts := { "0" } |
}, //* m=audio 8500 RTP/AVP 0 |
information := omit, |
connections := omit, |
bandwidth := omit, |
key := omit, |
attributes := p_attribute_list |
}} |
} |
template SDP_Message m_SDP_attribute(SDP_media_desc p_media, in SipUserProfile p_userprofile, SDP_attribute loc_attribute) |
modifies m_SDP |
:= { |
attributes := {loc_attribute} |
}; |
template(present) Response mw_Response_3xx_Base( |
template CallId p_callId, |
template CSeq p_cSeq |
) modifies mw_Response_1xx_Base := { |
statusLine := mw_statusLine3xx |
} |
template SDP_Message mw_SDP := { |
protocol_version := 0, //* v=0 |
origin := ?, |
session_name := ?, |
information := omit, |
uri := omit, |
emails := omit, |
phone_numbers := omit, |
connection := ?, |
bandwidth := omit, |
times := { { time_field := { "0", "0" }, time_repeat:=omit |
} |
}, //* t=0 0 |
timezone_adjustments := omit, |
key := omit, |
attributes := omit, |
media_list := ? |
}; |
}//* end group base_templates |
template(present) Response mw_Response_4xx_Base( |
template CallId p_callId, |
template CSeq p_cSeq |
) modifies mw_Response_1xx_Base := { |
statusLine := mw_statusLine4xx |
} |
group modified_templates{ |
template SDP_Message m_SDP_bandwidth(SDP_media_desc p_media, in SipUserProfile p_userprofile) |
modifies m_SDP |
:= { |
bandwidth := {{PX_SIP_SDP_b_modifier, PX_SIP_SDP_b_bandwidth}} |
}; |
template(present) Response mw_Response_5xx_Base( |
template CallId p_callId, |
template CSeq p_cSeq |
) modifies mw_Response_1xx_Base := { |
statusLine := mw_statusLine5xx |
} |
template(present) Response mw_Response_6xx_Base( |
template CallId p_callId, |
template CSeq p_cSeq |
) modifies mw_Response_1xx_Base := { |
statusLine := mw_statusLine6xx |
} |
template(present) Response mw_Response_Algorithm( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template(present) CredentialsList p_credentialsList |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := { |
authorization := { |
fieldName := AUTHORIZATION_E, |
body := p_credentialsList |
} |
} |
} |
} //* end group message_receive |
} //* end group full_templates |
group modified_templates { |
group request_send { |
template(value) ACK_Request m_ACK_Request_route( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(omit) Route p_route := omit |
) modifies m_ACK_Request_Base := { |
msgHeader := {route := p_route} |
} |
template(value) ACK_Request m_ACK_Request_sdp( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) MessageBody p_mb |
) modifies m_ACK_Request_Base := { |
msgHeader := { |
contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 |
// {fieldName |
// := |
// CONTENT_LENGTH_E, |
// len:= |
// f_MessageBodyLength(valueof(p_mb))}, |
contentType := m_contentType(c_sdpApplication) |
}, |
messageBody := p_mb |
} |
template(value) BYE_Request m_BYE_Request_cause( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) integer p_cause |
) modifies m_BYE_Request_Base := { |
msgHeader := {reason := m_Reason(p_cause)} |
} |
template(value) INVITE_Request m_INVITE_Request_sdp( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) Contact p_contact, |
template(value) MessageBody p_mb |
) modifies m_INVITE_Request_Base := { |
msgHeader := { |
contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 |
// {fieldName |
// := |
// CONTENT_LENGTH_E, |
// len:= |
// f_MessageBodyLength(valueof(p_mb))}, |
contentType := m_contentType(c_sdpApplication) |
}, |
messageBody := p_mb |
} |
template(value) INVITE_Request m_INVITE_Request_ResourceList( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) Contact p_contact, |
template(value) MessageBody p_mb |
) modifies m_INVITE_Request_Base := { |
msgHeader := { |
contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 |
// {fieldName |
// := |
// CONTENT_LENGTH_E, |
// len:= |
// f_MessageBodyLength(p_mb)}, |
contentType := m_contentType(c_xmlresourcelistApplication), // STF471 |
// {fieldName |
// := |
// CONTENT_TYPE_E, |
// mediaType |
// := |
// "application/resource-lists+xml"}, |
contentDisposition := { |
fieldName := CONTENT_DISPOSITION_E, |
dispositionType := "recipient-list", |
dispositionParams := omit |
}, |
require := { |
fieldName := REQUIRE_E, |
optionsTags := {"recipient-list-invite"} |
} |
}, |
messageBody := p_mb |
} |
template(value) REFER_Request m_REFER_Request_route( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(omit) Contact p_contact := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) ReferTo p_referTo, |
template(value) ReferredBy p_referredBy, |
template(value) Route p_route |
) modifies m_REFER_Request_Base := { |
msgHeader := {route := p_route} |
} |
template(value) REGISTER_Request m_REGISTER_Request_expires( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(omit) Contact p_contact := omit, |
template(omit) Authorization p_authorization := omit, |
template(value) charstring p_expires |
) modifies m_REGISTER_Request_Base := { |
msgHeader := { |
authorization := p_authorization, |
expires := m_Expires(p_expires) |
} |
} |
template(value) NOTIFY_Request m_NOTIFY_Request_contact( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(omit) Contact p_contact := omit |
) modifies m_NOTIFY_Request_Base := { |
msgHeader := { |
contact := p_contact, |
event := m_Event_reg, |
subscriptionState := m_SubscriptionState_active |
} |
} |
template(value) NOTIFY_Request m_NOTIFY_Request_sipfrag( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) charstring p_state, |
template(value) charstring p_sipfrag |
) modifies m_NOTIFY_Request_Base := { |
requestLine := { |
method := NOTIFY_E, |
requestUri := { |
scheme := ?, |
components := { |
sip := { |
userInfo := *, |
hostPort := p_requestUri.components.sip.hostPort |
} |
} |
} |
}, |
msgHeader := { |
contentLength := m_contentLength(lengthof(p_sipfrag)), // STF471 |
// {fieldName |
// := |
// CONTENT_LENGTH_E, |
// len:= |
// lengthof(p_sipfrag)}, |
contentType := m_contentType(c_sipfragMessage), // STF471 |
// {fieldName |
// := |
// CONTENT_TYPE_E, |
// mediaType |
// := |
// "message/sipfrag"}, |
subscriptionState := { |
fieldName := SUBSCRIPTION_STATE_E, |
subState := p_state, |
substateParams := omit |
}, |
event := m_Event_refer |
}, |
messageBody := {sipfrag := p_sipfrag} |
} |
template(value) UPDATE_Request m_UPDATE_Request_route( |
template(value) SipUrl p_requestUri, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(omit) Contact p_contact := omit, |
template(value) MessageBody p_mb, |
template(value) Route p_route |
) modifies m_UPDATE_Request_Base := { |
msgHeader := {route := p_route} |
} |
} //* end group request_send |
group request_receive { |
template(present) BYE_Request mw_BYE_Request_Reason( |
template CallId p_callId, |
template(value) GenValue p_cause |
) modifies mw_BYE_Request_Base := { |
msgHeader := {reason := mw_Reason(p_cause)} |
} |
template(present) BYE_Request mw_BYE_Request_ReasonSIP( |
template CallId p_callId, |
template(value) GenValue p_cause |
) modifies mw_BYE_Request_Base := { |
msgHeader := {reason := mw_ReasonSIP(p_cause)} |
} |
template(present) BYE_Request mw_BYE_Request_headerfieldlist( |
template CallId p_callId, |
template(present) SipUrl p_requestUri, |
template(present) To p_to := ?, |
template(present) From p_from := ?, |
template CSeq p_cSeq, |
template Route p_route, |
template RecordRoute p_recordRoute, |
template Reason p_reason |
) modifies mw_BYE_Request_Base := { |
requestLine := {requestUri := p_requestUri}, |
msgHeader := { |
callId := p_callId, |
toField := p_to, |
fromField := p_from, |
cSeq := p_cSeq, |
route := p_route, |
recordRoute := p_recordRoute, |
reason := p_reason |
} |
} |
template(present) BYE_Request mw_BYE_Request_UserToUser( |
template CallId p_callId |
) modifies mw_BYE_Request_Base := { |
msgHeader := {userToUser := ?} |
} |
template(present) INVITE_Request mw_INVITE_Request_RequestURI( |
template(present) SipUrl p_sipUrl := ? |
) modifies mw_INVITE_Dummy := { |
requestLine := { |
requestUri := p_sipUrl, |
sipVersion := c_sipNameVersion |
} |
} |
template(present) INFO_Request mw_INFO_Request_MB( |
template CallId p_callId, |
template MessageBody p_mb |
) modifies mw_INFO_Request_Base := { |
messageBody := p_mb |
} |
template(present) INVITE_Request mw_INVITE_Request_expires modifies mw_INVITE_Request_Base := {msgHeader := {expires := ?}} |
template(present) INVITE_Request mw_INVITE_Request_callid( |
template CallId p_callId |
) modifies mw_INVITE_Request_Base := { |
msgHeader := {callId := p_callId} |
} |
template(present) INVITE_Request mw_INVITE_Request_MB( |
template CallId p_callId, |
template MessageBody p_mb |
) modifies mw_INVITE_Request_callid := { |
messageBody := p_mb |
} |
template(present) INVITE_Request mw_INVITE_Request_noPaccessNetworkInfo( |
template CallId p_callId |
) modifies mw_INVITE_Request_callid := { |
msgHeader := {pAccessNetworkInfo := omit} |
} |
template(present) INVITE_Request mw_INVITE_Request_PaccessNetworkInfo( |
template CallId p_callId |
) modifies mw_INVITE_Request_callid := { |
msgHeader := {pAccessNetworkInfo := ?} |
} |
template(present) INVITE_Request mw_INVITE_MSRP_Session( |
template(present) SDP_media_field p_media_MSRP := ? |
) modifies mw_INVITE_Request_Base := { |
messageBody := { |
sdpMessageBody := { |
protocol_version := ?, |
origin := ?, |
session_name := ?, |
information := *, |
uri := *, |
emails := *, |
phone_numbers := *, |
connection := *, |
bandwidth := *, |
times := ?, |
timezone_adjustments := *, |
key := *, |
attributes := *, |
media_list := { |
{ |
media_field := p_media_MSRP, |
information := *, |
connections := *, |
bandwidth := *, |
key := *, |
attributes := { |
{ |
msrp := { |
attr_value := |
pattern |
"path:msrp://*" |
} |
} |
} |
} |
} |
} |
} |
} |
template(present) REGISTER_Request mw_REGISTER_Request_ISC( |
template PAccessNetworkInfo p_access, |
template PVisitedNetworkID p_visited |
) modifies mw_REGISTER_Request_Base := { |
msgHeader := { |
pAccessNetworkInfo := p_access, |
pVisitedNetworkID := p_visited |
} |
} |
template(present) UPDATE_Request mw_UPDATE_Request_SDP( |
template CallId p_callId, |
template MessageBody p_mb |
) modifies mw_UPDATE_Request_Base := { |
messageBody := p_mb |
} |
template(present) NOTIFY_Request mw_NOTIFY_Request_MB( |
template CallId p_callId, |
template MessageBody p_mb |
) modifies mw_NOTIFY_Request_Base := { |
messageBody := p_mb |
} |
} //* end group request_receive |
group response_send { |
template(value) Response m_Response_AlertInfo( |
template(value) StatusLine p_statusLine, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) Contact p_contact, |
template(value) AlertInfo p_alertInfo |
) modifies m_Response_Contact := { |
msgHeader := {alertInfo := p_alertInfo} |
} |
template(value) Response m_Response_Contact( |
template(value) StatusLine p_statusLine, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(omit) Contact p_contact := omit |
) modifies m_Response_Base := { |
msgHeader := {contact := p_contact} |
} |
template(value) Response m_Response_ext( |
template(value) StatusLine p_statusLine, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(omit) Route p_route := omit, |
template(omit) RecordRoute p_recordroute := omit |
) modifies m_Response_Base := { |
msgHeader := { |
route := p_route, // f_route(), |
recordRoute := |
p_recordroute // f_recordroute() |
} |
} |
template(value) Response m_Response_mbody( |
template(value) StatusLine p_statusLine, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(omit) Route p_route := omit, |
template(omit) RecordRoute p_recordroute := omit, |
template(value) MessageBody p_mb |
) modifies m_Response_ext := { |
msgHeader := { |
contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 |
// {fieldName |
// := |
// CONTENT_LENGTH_E, |
// len:= |
// f_MessageBodyLength(valueof(p_mb))}, |
contentType := m_contentType(c_sdpApplication) |
}, |
messageBody := p_mb |
} |
template(value) Response m_Response_mbody_contact ( |
template(value) StatusLine p_statusLine, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(omit) Route p_route := omit, |
template(omit) RecordRoute p_recordroute := omit, |
template(value) MessageBody p_mb, |
template(value) Contact p_contact |
) modifies m_Response_mbody := { |
msgHeader := { |
contact := p_contact |
} |
} |
template(value) Response m_Response_PAsserted_Privacy( |
template(value) StatusLine p_statusLine, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) Route p_route, |
template(value) RecordRoute p_recordroute, |
template(value) PAssertedID p_pAssertedID, |
template(value) Privacy p_privacy |
) modifies m_Response_ext := { |
msgHeader := { |
pAssertedID := p_pAssertedID, |
privacy := p_privacy |
} |
} |
template(present) Response mw_Response_PAsserted_Privacy_Supported( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template PAssertedID p_pAssertedID, |
template Privacy p_privacy, |
template Supported p_supported |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := { |
pAssertedID := p_pAssertedID, |
privacy := p_privacy, |
supported := p_supported |
} |
} |
template(value) Response m_Response_PAsserted_Privacy_mbody( |
template(value) StatusLine p_statusLine, |
template(omit) CallId p_callId := omit, |
template(omit) CSeq p_cSeq := omit, |
template(value) From p_from, |
template(value) To p_to, |
template(value) Via p_via, |
template(value) Route p_route, |
template(value) RecordRoute p_recordroute, |
template(value) PAssertedID p_pAssertedID, |
template(value) Privacy p_privacy, |
template(value) MessageBody p_mb |
) modifies m_Response_ext := { |
msgHeader := { |
contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 |
// {fieldName |
// := |
// CONTENT_LENGTH_E, |
// len:= |
// f_MessageBodyLength(valueof(p_mb))}, |
contentType := m_contentType(c_sdpApplication), // STF471 |
// {fieldName |
// := |
// CONTENT_TYPE_E, |
// mediaType |
// := |
// c_sdpApplication |
// }, |
pAssertedID := p_pAssertedID, |
privacy := p_privacy |
}, |
messageBody := p_mb |
} |
} //* end group response_send |
group response_receive { |
template(present) Response mw_Response_Expires( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template(present) DeltaSec p_deltaSec := ? |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := {expires := mw_Expires(p_deltaSec)} |
} |
template(present) Response mw_Response_PAsserted_Privacy( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template PAssertedID p_pAssertedID, |
template Privacy p_privacy |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := { |
pAssertedID := p_pAssertedID, |
privacy := p_privacy |
} |
} |
template(present) Response mw_Response_Reason( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template(value) GenValue p_cause |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := {reason := mw_Reason(p_cause)} |
} |
template(present) Response mw_Response_RecordRoute( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template RecordRoute p_recordRoute |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := {recordRoute := p_recordRoute} |
} |
template(present) Response mw_Response_Via( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template(present) Via p_via := ? |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := {via := p_via} |
} |
template(present) Response mw_Response_Contact( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template Contact p_contact |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := {contact := p_contact} |
} |
template(present) Response mw_Response_AlertInfo( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template AlertInfo p_alertInfo |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := {alertInfo := p_alertInfo} |
} |
template(present) Response mw_Response_HistoryInfo( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template HistoryInfo p_historyInfo |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := {historyInfo := p_historyInfo} |
} |
template(present) Response mw_Response_messageBody( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template Require p_require, |
template MessageBody p_mb |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := {require := p_require}, |
messageBody := p_mb |
} |
template(present) Response mw_Response_Require( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template Require p_require |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := {require := p_require} |
} |
template(present) Response mw_Response_Require_ifpresent( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template(present) Require p_require |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := {require := p_require ifpresent} |
} |
template(present) Response mw_Response_Supported( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq, |
template Supported p_supported |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := {supported := p_supported} |
} |
template(present) Response mw_Response_UserToUser( |
template(present) StatusLine p_statusLine := ?, |
template CallId p_callId, |
template CSeq p_cSeq |
) modifies mw_Response_Base := { |
statusLine := mw_statusLine(p_statusLine.statusCode, ?), |
msgHeader := {userToUser := ?} |
} |
} //* end group response_receive |
} //* end group modified_templates |
template SDP_Message m_SDP_unacceptable(SDP_media_desc p_media, in SipUserProfile p_userprofile) |
modifies m_SDP |
:= { |
protocol_version := 1, //* v=1 unacceptable version of SDP |
bandwidth := {{PX_SIP_SDP_b_modifier, PX_SIP_SDP_b_bandwidth}} |
}; |
template SDP_Message m_SDP_encrypted(SDP_media_desc p_media, in SipUserProfile p_userprofile) |
modifies m_SDP |
:= { |
protocol_version := 0, |
bandwidth := {{PX_SIP_SDP_b_modifier, PX_SIP_SDP_b_bandwidth}}, |
key := { |
method := "base64", //prompt |
key := "blablabla" |
} |
}; |
}//* end group modified_templates |
} //* end group SDP_Messages |
group SDP_Fields { |
} //* end group MessageTemplates |
template SDP_media_desc m_media(template SDP_media_field p_mf) := { |
media_field := p_mf, |
information := omit, |
connections := omit, |
bandwidth := omit, |
key := omit, |
attributes := omit |
}; |
//TODO - delete old |
// template SDP_media_desc m_mediaFieldBandwdthAttributes(template SDP_media_field p_mf, template SDP_bandwidth p_bw, template SDP_attribute_list p_attributes) := { |
// media_field := p_mf, |
// information := omit, |
// connections := omit, |
// bandwidth := {p_bw}, |
// key := omit, |
// attributes := p_attributes |
// }; |
template SDP_media_desc m_mediaFieldBandwdthAttributes(template SDP_media_field p_mf, template SDP_bandwidth_list p_bw_l, template SDP_attribute_list p_attributes) := { |
media_field := p_mf, |
group SDP_Templates { |
group SDP_Messages { |
group base_templates { |
template(value) SDP_Message m_SDP_base := { |
protocol_version := 0, //* v=0 |
origin := { |
user_name := PX_SIP_SDP_USER_NAME, |
session_id := PX_SIP_SDP_SESSION_ID, |
session_version := "0", |
net_type := c_in, |
addr_type := c_ip4, |
addr := "" |
}, |
//* o=voicesession 12345 12345 IN IP4 172.27.1.219 |
session_name := "Voice Session", //* s=Voice Session |
information := omit, |
uri := omit, |
emails := omit, |
phone_numbers := omit, |
connection := omit, |
bandwidth := omit, |
times := { |
{ |
time_field := {"0", "0"}, |
time_repeat := omit |
} |
}, //* t=0 0 |
timezone_adjustments := omit, |
key := omit, |
attributes := omit, |
media_list := omit |
} |
template(value) SDP_Message m_SDP( |
template(value) SDP_media_desc p_media, |
template(value) SipUserProfile p_userprofile |
) modifies m_SDP_base := { |
origin := { |
addr := p_userprofile.contactIpaddr |
}, |
//* o=voicesession 12345 12345 IN IP4 172.27.1.219 |
connection := { |
net_type := c_in, |
addr_type := c_ip4, |
conn_addr := { |
addr := p_userprofile.bearerIpaddr, |
ttl := omit, |
num_of_addr := omit |
} |
}, //* c=IN |
//* IP4 |
//* 172.27.1.219 |
media_list := {p_media} |
} |
template(value) SDP_Message m_SDP_mediaList( |
template(value) SDP_media_desc_list p_media_list, |
template(value) SipUserProfile p_userprofile |
) modifies m_SDP_base := { |
origin := { |
addr := p_userprofile.contactIpaddr |
}, |
//* o=voicesession 12345 12345 IN IP4 172.27.1.219 |
connection := { |
net_type := c_in, |
addr_type := c_ip4, |
conn_addr := { |
addr := p_userprofile.bearerIpaddr, |
ttl := omit, |
num_of_addr := omit |
} |
}, //* c=IN |
//* IP4 |
//* 172.27.1.219 |
media_list := p_media_list |
} |
template(value) SDP_Message m_SDP_media_attr_preconditions( |
template(value) SDP_media_desc p_media, |
template(value) SipUserProfile p_userprofile, |
template(value) SDP_attribute_list p_attribute_list |
) modifies m_SDP := { |
media_list := { |
{ |
media_field := { |
media := c_audio, |
ports := { |
port_number := 8500, |
num_of_ports := omit |
}, |
transport := c_rtpAvp, |
fmts := {"0"} |
}, //* m=audio |
//* 8500 |
//* RTP/AVP |
//* 0 |
information := omit, |
connections := omit, |
bandwidth := omit, |
key := omit, |
attributes := p_attribute_list |
} |
} |
} |
template(value) SDP_Message m_SDP_attribute( |
template(value) SDP_media_desc p_media, |
template(value) SipUserProfile p_userprofile, |
template(value) SDP_attribute p_loc_attribute |
) modifies m_SDP := { |
attributes := {p_loc_attribute} |
} |
template(present) SDP_Message mw_SDP := { |
protocol_version := 0, //* v=0 |
origin := ?, |
session_name := ?, |
information := omit, |
uri := omit, |
emails := omit, |
phone_numbers := omit, |
connection := ?, |
bandwidth := omit, |
times := { |
{ |
time_field := {"0", "0"}, |
time_repeat := omit |
} |
}, //* t=0 0 |
timezone_adjustments := omit, |
key := omit, |
attributes := omit, |
media_list := ? |
} |
} //* end group base_templates |
group modified_templates { |
template(value) SDP_Message m_SDP_bandwidth( |
template(value) SDP_media_desc p_media, |
template(value) SipUserProfile p_userprofile |
) modifies m_SDP := { |
bandwidth := { |
{ |
PX_SIP_SDP_B_MODIFIER, |
PX_SIP_SDP_B_BANDWIDTH |
} |
} |
} |
template(value) SDP_Message m_SDP_unacceptable( |
template(value) SDP_media_desc p_media, |
template(value) SipUserProfile p_userprofile |
) modifies m_SDP := { |
protocol_version := 1, //* v=1 unacceptable version of |
//* SDP |
bandwidth := { |
{ |
PX_SIP_SDP_B_MODIFIER, |
PX_SIP_SDP_B_BANDWIDTH |
} |
} |
} |
template(value) SDP_Message m_SDP_encrypted( |
template(value) SDP_media_desc p_media, |
template(value) SipUserProfile p_userprofile |
) modifies m_SDP := { |
bandwidth := { |
{ |
PX_SIP_SDP_B_MODIFIER, |
PX_SIP_SDP_B_BANDWIDTH |
} |
}, |
key := { |
method := "base64", // prompt |
key := "blablabla" |
} |
} |
} //* end group modified_templates |
} //* end group SDP_Messages |
group SDP_Fields { |
template(value) SDP_media_desc m_media(template(value) SDP_media_field p_mf) := { |
media_field := p_mf, |
information := omit, |
connections := omit, |
bandwidth := omit, |
key := omit, |
attributes := omit |
} |
template(value) SDP_media_desc m_mediaFieldBandwdthAttributes( |
template(value) SDP_media_field p_mf, |
template(omit) SDP_bandwidth_list p_bw_l := omit, |
template(omit) SDP_attribute_list p_attributes := omit |
) := { |
media_field := p_mf, |
information := omit, |
connections := omit, |
bandwidth := p_bw_l, |
key := omit, |
key := omit, |
attributes := p_attributes |
}; |
template SDP_media_desc m_media_dynPT(charstring p_PT, charstring p_encod, template SDP_key p_sdpKey:= omit) := { |
media_field := { |
media := c_audio,//* "audio", |
ports := { port_number := 8500, num_of_ports:=omit }, |
transport := c_rtpAvp,//* "RTP/AVP", |
fmts := { p_PT } |
}, //* m=audio 8500 RTP/AVP 8 |
information := omit, |
connections := omit, |
bandwidth := omit, |
key := p_sdpKey, |
attributes := { { rtpmap := { attr_value := p_PT & " " & p_encod } |
} |
} //* a=rtpmap:8 PCMA/8000 |
}; |
template SDP_media_desc m_media_unsupported := { |
media_field := { |
media := "video", |
ports := { port_number := 11500, num_of_ports:=omit }, |
transport := "RTP/AVP", |
fmts := { "99" } |
}, //* m=audio 8500 RTP/AVP 0 |
information := omit, |
connections := omit, |
bandwidth := omit, |
key := omit, |
attributes := { { |
rtpmap := { attr_value := "99 X-Experimental/180000"} |
}} |
}; |
} |
template SDP_bandwidth m_bandwidth(template charstring loc_m, template integer loc_b) := { |
modifier:=loc_m, |
bandwidth:=loc_b |
}; |
template(value) SDP_media_desc m_media_dynPT( |
template(value) charstring p_payloadType, |
template(value) charstring p_encoding, |
template(value) charstring p_clockrate, |
template(omit) charstring p_parameters := omit, |
template(omit) SDP_key p_sdpKey := omit |
) := { |
media_field := { |
media := c_audio, //* "audio", |
ports := { |
port_number := 8500, |
num_of_ports := omit |
}, |
transport := c_rtpAvp, //* "RTP/AVP", |
fmts := { p_payloadType } |
}, //* m=audio 8500 RTP/AVP 8 |
information := omit, |
connections := omit, |
bandwidth := omit, |
key := p_sdpKey, |
attributes := {{rtpmap := { |
payload_type := p_payloadType, |
codec := { |
encoding := p_encoding, |
clockrate := p_clockrate, |
parameters := p_parameters |
} |
} |
}} //* a=rtpmap:8 PCMA/8000 |
} |
template SDP_bandwidth m_bandwidth_as_64:= |
{ |
modifier:="AS", |
bandwidth:=64 |
} |
template SDP_bandwidth mw_bandwidth_rs:= |
{ |
modifier:="RS", |
bandwidth:=? |
} |
template SDP_bandwidth mw_bandwidth_rr:= |
{ |
modifier:="RR", |
bandwidth:=? |
} |
/** |
* @desc send template with specific media transport and attribute values |
* @param p_mediaAttribute parameter for SDP media transport supported by the IUT |
* former PX_SIP_SDP_media_transport |
* @param p_mediaAttribute parameter for SDP media attribute supported by the IUT, |
* former PX_SIP_SDP_media_attribute_Exp & PX_SIP_SDP_media_transport_Exp |
* @param p_mediaType parameter for SDP media type supported by the IUT, |
* former PX_SIP_SDP_MEDIA_VIDEO |
*/ |
template(value) SDP_media_desc m_media_unsupported( |
template(value) charstring p_mediaTransport, |
template(value) SDP_attribute_rtpmap p_mediaAttribute, |
template(value) charstring p_mediaType := "video" |
) := { |
media_field := { |
media := p_mediaType, |
ports := { |
port_number := 11500, |
num_of_ports := omit |
}, |
transport := p_mediaTransport, |
fmts := {"99"} |
}, //* m=audio 8500 RTP/AVP 0 |
information := omit, |
connections := omit, |
bandwidth := omit, |
key := omit, |
attributes := {{rtpmap := p_mediaAttribute}} |
} |
template SDP_media_field m_media_field(charstring p_media, integer p_portNum, charstring p_transport, charstring p_fmts) := |
{ |
media := p_media, |
ports := { port_number := p_portNum, num_of_ports:=omit }, |
transport := p_transport, |
fmts := { p_fmts } |
} |
template(value) SDP_bandwidth m_bandwidth( |
template(value) charstring p_loc_m, |
template(value) integer p_loc_b |
) := { |
modifier := p_loc_m, |
bandwidth := p_loc_b |
} |
template SDP_media_field mw_media_PCMU := |
{ |
media := c_audio, |
ports := { port_number := ?, num_of_ports:=* }, |
transport := c_rtpAvp, |
fmts := { "0" } |
} |
template(value) SDP_bandwidth m_bandwidth_as_64 := { |
modifier := "AS", |
bandwidth := 64 |
} |
template SDP_media_field mw_media_PCMA := |
{ |
media := c_audio, |
ports := { port_number := 8500, num_of_ports:=omit }, |
transport := c_rtpAvp, |
fmts := { "8" } |
} |
template SDP_media_field mw_media_PCMA_U_DPT := |
{ |
media := c_audio, |
ports := { port_number := ?, num_of_ports:=* }, |
transport := c_rtpAvp, |
fmts := { * } |
} |
template SDP_media_field mw_media_T38 := |
{ |
media := c_image, |
ports := { port_number := ?, num_of_ports:=* }, |
transport := pattern "*ptl", //* udptl,tcptl |
fmts := { "t38" } |
} |
template(present) SDP_bandwidth mw_bandwidth_rs := { |
modifier := "RS", |
bandwidth := ? |
} |
template SDP_media_field mw_media_G722 := |
{ |
media := c_audio, |
ports := { port_number := ?, num_of_ports:=* }, |
transport := "RTP/AVP", |
fmts := { "9" } |
} |
template(present) SDP_bandwidth mw_bandwidth_rr := { |
modifier := "RR", |
bandwidth := ? |
} |
template SDP_media_field mw_media_AMR_DPT := |
{ |
media := c_audio, |
ports := { port_number := ?, num_of_ports:=* }, |
transport := c_rtpAvp, |
fmts := { * } |
} |
template SDP_media_field mw_media_MSRP := |
{ |
media := c_msrp, |
ports := { port_number := ?, num_of_ports:=omit }, |
transport := c_msrpTcp, |
fmts := { * } |
} |
template(value) SDP_media_field m_media_field( |
template(value) charstring p_media, |
template(value) integer p_portNum, |
template(value) charstring p_transport, |
template(value) charstring p_fmts |
) := { |
media := p_media, |
ports := { |
port_number := p_portNum, |
num_of_ports := omit |
}, |
transport := p_transport, |
fmts := {p_fmts} |
} |
template SDP_attribute m_attribute_sendonly := {sendonly:={}}; |
template SDP_attribute mw_attribute_sendonly := {sendonly:={}};//MRO |
template SDP_attribute m_attribute_recvonly := {recvonly:={}}; |
template SDP_attribute mw_attribute_recvonly := {recvonly:={}};//MRO |
template SDP_attribute m_attribute_sendrecv := {sendrecv:={}}; |
template SDP_attribute mw_attribute_sendrecv := {sendrecv:={}};//MRO |
template SDP_attribute m_attribute_inactive := {inactive:={}}; |
template SDP_attribute mw_attribute_inactive := {inactive:={}};//MRO |
template SDP_attribute mw_attribute_sendonly_inactive := (mw_attribute_sendonly,mw_attribute_inactive); |
template SDP_attribute mw_attribute_sendrecv_recvonly_omit := (mw_attribute_sendrecv,mw_attribute_recvonly,omit); |
template SDP_attribute m_attribute_AMR_DPT := { rtpmap := { attr_value := /*pattern "**/PX_SIP_SDP_dyn & " AMR" }}; |
template SDP_attribute m_attribute_CLEARMODE_DPT := {rtpmap := { attr_value := /*pattern "**/PX_SIP_SDP_dyn & " CLEARMODE/8000" }}; |
template SDP_attribute m_attribute_G722 := { rtpmap := { attr_value := "9 G722/8000" }}; |
template SDP_attribute m_attribute_PCMU := { rtpmap := { attr_value := "0 PCMU/8000" }}; |
template SDP_attribute m_attribute_PCMU_DPT := { rtpmap := { attr_value := /*pattern "**/PX_SIP_SDP_dyn & " PCMU/8000" }}; |
template SDP_attribute m_attribute_PCMA := { rtpmap := { attr_value := "8 PCMA/8000" }}; |
template SDP_attribute m_attribute_PCMA_DPT := { rtpmap := { attr_value := /*pattern "**/PX_SIP_SDP_dyn & " PCMA/8000" }}; |
template SDP_attribute m_attribute_T38 := { unknown := { name:=?, attr_value := pattern "*t38*" }}; |
template SDP_attribute m_attribute_curr (charstring p_preconditionType, charstring p_statusType, charstring p_direction):= |
{ |
curr:={preconditionType := p_preconditionType, |
statusType := p_statusType, |
direction := p_direction} |
}; |
template SDP_attribute mw_attribute_curr := |
{ |
curr := ? |
}; |
template SDP_attribute m_attribute_des (charstring p_preconditionType, charstring p_strength, charstring p_statusType, charstring p_direction):= |
{ |
des:={preconditionType := p_preconditionType, |
strength := p_strength, |
statusType := p_statusType, |
direction := p_direction} |
}; |
template SDP_attribute mw_attribute_des := |
{ |
des := ? |
}; |
template SDP_attribute m_attribute_conf (charstring p_preconditionType, charstring p_statusType, charstring p_direction):= |
{ |
conf:={preconditionType := p_preconditionType, |
statusType := p_statusType, |
direction := p_direction} |
}; |
} //* end group SDP_Fields |
template(present) SDP_media_field mw_media_PCMU := { |
media := c_audio, |
ports := { |
port_number := ?, |
num_of_ports := * |
}, |
transport := c_rtpAvp, |
fmts := {"0"} |
} |
} //* end group SDP_Templates |
template(present) SDP_media_field mw_media_PCMA := { |
media := c_audio, |
ports := { |
port_number := 8500, |
num_of_ports := omit |
}, |
transport := c_rtpAvp, |
fmts := {"8"} |
} |
group SimpleMsgSummary_Templates { |
template SimpleMsgSummary m_SMS(template Msg_summary_line_list p_summaryLineList, template charstring p_uri) := |
{ |
msg_status_line := m_msgStatusLine_yes, |
msg_account := m_msgAccount(p_uri), |
msg_summary_line_list :=p_summaryLineList, |
opt_msg_headers := omit |
} |
template SimpleMsgSummary mw_SMS := |
{ |
msg_status_line := ?, |
msg_account := *, |
msg_summary_line_list := *, |
opt_msg_headers := * |
} |
template SimpleMsgSummary mw_SMS_yes := |
{ |
msg_status_line := mw_msgStatusLine_yes, |
msg_account := *, |
msg_summary_line_list := *, |
opt_msg_headers := * |
} |
template SimpleMsgSummary mw_SMS_yesUri := |
{ |
msg_status_line := mw_msgStatusLine_yes, |
msg_account := mw_msgAccount, |
msg_summary_line_list := *, |
opt_msg_headers := * |
} |
template SimpleMsgSummary mw_SMS_yesVoice := |
{ |
msg_status_line := mw_msgStatusLine_yes, |
msg_account := *, |
msg_summary_line_list := {mw_msgSummaryLine(c_voiceMessage)}, |
opt_msg_headers := * |
} |
template SimpleMsgSummary mw_SMS_yesUriVoice := |
{ |
msg_status_line := mw_msgStatusLine_yes, |
msg_account := mw_msgAccount, |
msg_summary_line_list := {mw_msgSummaryLine(c_voiceMessage)}, |
opt_msg_headers := * |
} |
template Msg_status_line m_msgStatusLine_yes:= |
{ |
msg_type := c_messageWaiting, |
msg_status := "yes" |
} |
template Msg_status_line mw_msgStatusLine_yes:= |
{ |
msg_type := c_messageWaiting, |
msg_status := "yes" |
} |
template(present) SDP_media_field mw_media_PCMA_U_DPT := { |
media := c_audio, |
ports := { |
port_number := ?, |
num_of_ports := * |
}, |
transport := c_rtpAvp, |
fmts := {*} |
} |
template Msg_account m_msgAccount(template charstring p_uri) := |
{ |
msg_type_account := c_messageAccount, |
account_URI := p_uri//m_SipUrl_NumberHostParam(PX_IMS_SUT_UE2_PUBLIC_USER,PX_IMS_SUT_UE2_HOME_DOMAIN,omit) |
} |
template(present) SDP_media_field mw_media_T38 := { |
media := c_image, |
ports := { |
port_number := ?, |
num_of_ports := * |
}, |
transport := pattern "*ptl", //* udptl,tcptl |
fmts := {"t38"} |
} |
template Msg_account mw_msgAccount := |
{ |
msg_type_account := c_messageAccount, |
account_URI := ? |
} |
template(present) SDP_media_field mw_media_G722 := { |
media := c_audio, |
ports := { |
port_number := ?, |
num_of_ports := * |
}, |
transport := "RTP/AVP", |
fmts := {"9"} |
} |
template(present) SDP_media_field mw_media_AMR_DPT := { |
media := c_audio, |
ports := { |
port_number := ?, |
num_of_ports := * |
}, |
transport := c_rtpAvp, |
fmts := {*} |
} |
template(present) SDP_media_field mw_media_MSRP := { |
media := c_msrp, |
ports := { |
port_number := ?, |
num_of_ports := omit |
}, |
transport := c_msrpTcp, |
fmts := {*} |
} |
template(value) SDP_attribute m_attribute_sendonly := {sendonly := {}} |
template(present) SDP_attribute mw_attribute_sendonly := {sendonly := {}} |
// MRO |
template(value) SDP_attribute m_attribute_recvonly := {recvonly := {}} |
template(present) SDP_attribute mw_attribute_recvonly := {recvonly := {}} |
// MRO |
template(value) SDP_attribute m_attribute_sendrecv := {sendrecv := {}} |
template(present) SDP_attribute mw_attribute_sendrecv := {sendrecv := {}} |
// MRO |
template(value) SDP_attribute m_attribute_inactive := {inactive := {}} |
template(present) SDP_attribute mw_attribute_inactive := {inactive := {}} |
// MRO |
template(present) SDP_attribute mw_attribute_sendonly_inactive := (mw_attribute_sendonly, mw_attribute_inactive); |
template SDP_attribute mw_attribute_sendrecv_recvonly_omit := (mw_attribute_sendrecv, mw_attribute_recvonly, omit); |
template(value) SDP_attribute m_attribute_base( |
template(value) SDP_attribute_rtpmap p_attr_value |
) := { |
rtpmap := p_attr_value |
} |
/** |
* @desc send template for a specific media attribute |
* @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_AMR |
*/ |
template(value) SDP_attribute m_attribute_AMR_DPT(//"0 AMR" |
template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"AMR", "8000", omit}} |
) := m_attribute_base(p_attr_value); |
/** |
* @desc send template for a specific media attribute |
* @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_CLE |
*/ |
template(value) SDP_attribute m_attribute_CLEARMODE_DPT(//"0 CLEARMODE/8000" |
template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"CLEARMODE", "8000", omit}} |
) := m_attribute_base(p_attr_value); |
/** |
* @desc send template for a specific media attribute |
* @param attribte value, former PX_SIP_SDP_ENCODING_ATTRIBUTE_G222 |
*/ |
template(value) SDP_attribute m_attribute_G722(//"9 G722/8000" |
template(value) SDP_attribute_rtpmap p_attr_value := {"9", {"G722", "8000", omit}} |
) := m_attribute_base(p_attr_value); |
/** |
* @desc send template for a specific media attribute |
* @param attribte value, former PX_SIP_SDP_ENCODING_ATTRIBUTE_PCMU |
*/ |
template(value) SDP_attribute m_attribute_PCMU(//"0 PCMU/8000" |
template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"PCMU", "8000", omit}} |
) := m_attribute_base(p_attr_value); |
/** |
* @desc send template for a specific media attribute |
* @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_PCMU |
*/ |
template(value) SDP_attribute m_attribute_PCMU_DPT(//"0 PCMU/8000" |
template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"PCMU", "8000", omit}} |
) := m_attribute_base(p_attr_value); |
/** |
* @desc send template for a specific media attribute |
* @param attribte value, former PX_SIP_SDP_ENCODING_ATTRIBUTE_PCMA |
*/ |
template(value) SDP_attribute m_attribute_PCMA(//"8 PCMA/8000" |
template(value) SDP_attribute_rtpmap p_attr_value := {"8", {"PCMA", "8000", omit}} |
) := m_attribute_base(p_attr_value); |
/** |
* @desc send template for a specific media attribute |
* @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_PCMA |
*/ |
template(value) SDP_attribute m_attribute_PCMA_DPT(//"0 PCMA/8000" |
template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"PCMA", "8000", omit}} |
) := m_attribute_base(p_attr_value); |
template(present) SDP_attribute mw_attribute_T38 := { |
unknown := { |
name := ?, |
attr_value := pattern "*t38*" |
} |
} |
template(value) SDP_attribute m_attribute_curr( |
template(value) charstring p_preconditionType, |
template(value) charstring p_statusType, |
template(value) charstring p_direction |
) := { |
curr := { |
preconditionType := p_preconditionType, |
statusType := p_statusType, |
direction := p_direction |
} |
} |
template(present) SDP_attribute mw_attribute_curr := {curr := ?} |
template(value) SDP_attribute m_attribute_des( |
template(value) charstring p_preconditionType, |
template(value) charstring p_strength, |
template(value) charstring p_statusType, |
template(value) charstring p_direction |
) := { |
des := { |
preconditionType := p_preconditionType, |
strength := p_strength, |
statusType := p_statusType, |
direction := p_direction |
} |
} |
template(present) SDP_attribute mw_attribute_des := {des := ?} |
template(value) SDP_attribute m_attribute_conf( |
template(value) charstring p_preconditionType, |
template(value) charstring p_statusType, |
template(value) charstring p_direction |
) := { |
conf := { |
preconditionType := p_preconditionType, |
statusType := p_statusType, |
direction := p_direction |
} |
} |
} //* end group SDP_Fields |
template Msg_summary_line m_msgSummaryLine(template charstring p_msgContexClass,template charstring p_msgs,template charstring p_urgent_msgs) := |
{ |
msg_context_class := p_msgContexClass, |
msgs := p_msgs, |
urgent_msgs := p_urgent_msgs |
} |
template Msg_summary_line mw_msgSummaryLine(template charstring p_msgContexClass) := |
{ |
msg_context_class := p_msgContexClass, |
msgs := ?, |
urgent_msgs :=* |
} |
} //end group Templates_SMS |
} //* end group SDP_Templates |
group MessageBodies { |
template MessageBody m_MBody_SDP(template SDP_Message p_SDP):= |
{ |
sdpMessageBody := p_SDP |
}; |
template MessageBody m_MBody_XML(template XmlBody p_xmlBody):= |
{ |
xmlBody := p_xmlBody |
}; |
template MessageBody m_mBody_SMS(template SimpleMsgSummary p_SMS):= |
{ |
simpleMsgSummary := p_SMS |
}; |
template MessageBody m_MBody_longPlainText:= |
{ |
textplain := c_longMessageContent_1300Bytes |
}; |
group SimpleMsgSummary_Templates { |
template MessageBody m_mBody_plainText(charstring p_plaitext):= |
{ |
textplain := p_plaitext |
}; |
template MessageBody m_MBody_sipfrag(charstring p_sipfrag) := { |
sipfrag := p_sipfrag |
} |
template MessageBody m_MBody_MIMESdpXml(template SDP_Message p_sdp, template XmlBody p_xmlBody):= |
{ |
mimeMessageBody := {boundary:="--boundary1", //"PX_SIP_MIME_Boundary", |
mimeEncapsulatedList:= { |
{content_type:="application/sdp",//"PX_SIP_SDP_ContentType", |
content_disposition:=omit, |
mime_encapsulated_part:={sdpMessageBody := p_sdp}}, |
{content_type:="application/vnd.3gpp.cw+xml",//"PX_SIP_ISUP_ContentType", |
content_disposition:=omit, |
mime_encapsulated_part:={xmlBody := p_xmlBody}} |
} |
} |
} |
template(value) SimpleMsgSummary m_SMS( |
template(value) Msg_summary_line_list p_summaryLineList, |
template(value) charstring p_uri |
) := { |
msg_status_line := m_msgStatusLine_yes, |
msg_account := m_msgAccount(p_uri), |
msg_summary_line_list := p_summaryLineList, |
opt_msg_headers := omit |
} |
template MessageBody m_MBody_MIMESdpEncrypted(template SDP_Message p_sdp):= |
{ |
mimeMessageBody := {boundary:="--boundary1", //"PX_SIP_MIME_Boundary", |
mimeEncapsulatedList:= { |
{content_type:="application/sdp",//"PX_SIP_SDP_ContentType", |
//TODO add "Content-Transfer-Encoding:base64" |
content_disposition:="attachment;handling=required;filename=smime.p7", //TODO use PIXIT |
mime_encapsulated_part:={sdpMessageBody := p_sdp}} |
template(present) SimpleMsgSummary mw_SMS := { |
msg_status_line := ?, |
msg_account := *, |
msg_summary_line_list := *, |
opt_msg_headers := * |
} |
template(present) SimpleMsgSummary mw_SMS_yes modifies mw_SMS := { |
msg_status_line := mw_msgStatusLine_yes |
} |
template(present) SimpleMsgSummary mw_SMS_yesUri modifies mw_SMS_yes := { |
msg_account := mw_msgAccount |
} |
template(present) SimpleMsgSummary mw_SMS_yesVoice modifies mw_SMS_yes := { |
msg_summary_line_list := {mw_msgSummaryLine(c_voiceMessage)} |
} |
template(present) SimpleMsgSummary mw_SMS_yesUriVoice modifies mw_SMS_yesUri := { |
msg_summary_line_list := {mw_msgSummaryLine(c_voiceMessage)} |
} |
template(value) Msg_status_line m_msgStatusLine_yes := { |
msg_type := c_messageWaiting, |
msg_status := "yes" |
} |
template(present) Msg_status_line mw_msgStatusLine_yes := { |
msg_type := c_messageWaiting, |
msg_status := "yes" |
} |
template(value) Msg_account m_msgAccount( |
template(value) charstring p_uri |
) := { |
msg_type_account := c_messageAccount, |
account_URI := |
p_uri // m_SipUrl_NumberHostParam(PX_IMS_SUT_UE2_PUBLIC_USER,PX_IMS_SUT_UE2_HOME_DOMAIN,omit) |
} |
template(present) Msg_account mw_msgAccount := { |
msg_type_account := c_messageAccount, |
account_URI := ? |
} |
template(value) Msg_summary_line m_msgSummaryLine( |
template(value) charstring p_msgContexClass, |
template(value) charstring p_msgs, |
template(value) charstring p_urgent_msgs |
) := { |
msg_context_class := p_msgContexClass, |
msgs := p_msgs, |
urgent_msgs := p_urgent_msgs |
} |
template(present) Msg_summary_line mw_msgSummaryLine( |
template(present) charstring p_msgContexClass := ? |
) := { |
msg_context_class := p_msgContexClass, |
msgs := ?, |
urgent_msgs := * |
} |
} // end group Templates_SMS |
group MessageBodies { |
template(value) MessageBody m_MBody_SDP( |
template(value) SDP_Message p_SDP |
) := { |
sdpMessageBody := p_SDP |
} |
template(value) MessageBody m_MBody_XML( |
template(value) XmlBody p_xmlBody |
) := { |
xmlBody := p_xmlBody |
} |
template(value) MessageBody m_mBody_SMS( |
template(value) SimpleMsgSummary p_SMS |
) := { |
simpleMsgSummary := p_SMS |
} |
template(value) MessageBody m_MBody_longPlainText := {textplain := c_longMessageContent_1300Bytes} |
template(value) MessageBody m_mBody_plainText( |
template(value) charstring p_plaitext |
) := { |
textplain := p_plaitext |
} |
template(value) MessageBody m_MBody_sipfrag( |
template(value) charstring p_sipfrag |
) := { |
sipfrag := p_sipfrag |
} |
template(value) MessageBody m_MBody_MIMESdpXml( |
template(value) SDP_Message p_sdp, |
template(value) XmlBody p_xmlBody |
) := { |
mimeMessageBody := { |
boundary := "--" & PX_SIP_MIME_BOUNDARY, |
mimeEncapsulatedList := { |
{ |
content_type := c_sdpApplication, |
content_disposition := omit, |
mime_encapsulated_part := {sdpMessageBody := p_sdp} |
}, |
{ |
content_type := c_ims3gppCwApplication, |
content_disposition := omit, |
mime_encapsulated_part := {xmlBody := p_xmlBody} |
} |
} |
} |
} |
template(value) MessageBody m_MBody_MIMESdpEncrypted( |
template(value) SDP_Message p_sdp |
) := { |
mimeMessageBody := { |
boundary := "--" & PX_SIP_MIME_BOUNDARY, |
mimeEncapsulatedList := { |
{ |
content_type := "application/sdp", |
content_disposition := "attachment;handling=required;filename=smime.p7", |
mime_encapsulated_part := {sdpMessageBody := p_sdp} |
} |
} |
} |
} |
template(present) MessageBody mw_MBody_SDP( |
template(present) SDP_Message p_SDP := ? |
) := { |
sdpMessageBody := p_SDP |
} |
template(present) MessageBody mw_MBody_XML( |
template(present) XmlBody p_xmlBody := ? |
) := { |
xmlBody := p_xmlBody |
} |
template(present) MessageBody mw_mBody_SMS( |
template(present) SimpleMsgSummary p_SMS := ? |
) := { |
simpleMsgSummary := p_SMS |
} |
template(present) MessageBody mw_MBody_MIMESdpXml( |
template(present) SDP_Message p_sdp := ?, |
template(present) XmlBody p_xmlBody := ? |
) := { |
mimeMessageBody := { |
boundary := ?, |
mimeEncapsulatedList := { |
{ |
content_type := ?, |
content_disposition := *, |
mime_encapsulated_part := {sdpMessageBody := p_sdp} |
}, |
{ |
content_type := ?, |
content_disposition := *, |
mime_encapsulated_part := {xmlBody := p_xmlBody} |
} |
} |
} |
} |
template(present) MessageBody mw_MBody_MIME_Ims3gpp( |
template charstring p_disposition, |
template(present) Ims_3gpp p_ims3gpp := ? |
) := { |
mimeMessageBody := { |
boundary := ?, |
mimeEncapsulatedList := { |
*, |
{ |
content_type := c_ims3gppApplication, |
content_disposition := p_disposition, |
mime_encapsulated_part := {xmlBody := {ims3gpp := p_ims3gpp}} |
}, |
* |
} |
} |
} |
template(present) MessageBody mw_MBody_MIME_Ims3gppCW( |
template charstring p_disposition, |
template(present) Ims_3gpp p_ims3gpp := ? |
) := { |
mimeMessageBody := { |
boundary := ?, |
mimeEncapsulatedList := { |
*, |
{ |
content_type := c_ims3gppCwApplication, |
content_disposition := p_disposition, |
mime_encapsulated_part := {xmlBody := {ims3gpp := p_ims3gpp}} |
}, |
* |
} |
} |
} |
} |
template MessageBody mw_MBody_SDP(template SDP_Message p_SDP):= |
{ |
sdpMessageBody := p_SDP |
}; |
template MessageBody mw_MBody_XML(template XmlBody p_xmlBody):= |
{ |
xmlBody := p_xmlBody |
}; |
template MessageBody mw_mBody_SMS(template SimpleMsgSummary p_SMS):= |
{ |
simpleMsgSummary := p_SMS |
}; |
template MessageBody mw_MBody_MIMESdpXml(template SDP_Message p_sdp, template XmlBody p_xmlBody):= |
{ |
mimeMessageBody := {boundary:=?, |
mimeEncapsulatedList:= { |
{content_type:=?, |
content_disposition:=*, |
mime_encapsulated_part:={sdpMessageBody := p_sdp}}, |
{content_type:=?, |
content_disposition:=*, |
mime_encapsulated_part:={xmlBody := p_xmlBody}} |
} |
} |
} |
template MessageBody mw_MBody_MIME_Ims3gpp( |
template charstring p_disposition, |
template Ims_3gpp p_ims3gpp |
):= { |
mimeMessageBody := {boundary:=?, |
mimeEncapsulatedList:= { |
*, |
{ |
content_type:= c_ims3gppAplication, |
content_disposition:= p_disposition, |
mime_encapsulated_part :={ |
xmlBody := { |
ims3gpp := p_ims3gpp |
} |
} |
}, |
* |
} |
} |
} |
template MessageBody mw_MBody_MIME_Ims3gppCW( |
template charstring p_disposition, |
template Ims_3gpp p_ims3gpp |
):= { |
mimeMessageBody := {boundary:=?, |
mimeEncapsulatedList:= { |
*, |
{ |
content_type:= c_ims3gppCwApplication, |
content_disposition:= p_disposition, |
mime_encapsulated_part :={ |
xmlBody := { |
ims3gpp := p_ims3gpp |
} |
} |
}, |
* |
} |
} |
} |
} |
/* |
* |
* @desc group TemplatePreparationFunctions contain functions which are used for templates |
*/ |
group TemplatePreparationFunctions { |
/* |
* |
* @desc group TemplatePreparationFunctions contain functions which are used for templates |
*/ |
group TemplatePreparationFunctions { |
group MessageBody_Calculation{ |
/** |
* |
* @desc Calculation of Message Body length |
* @param p_mb_par contain message body part |
* @return message body length |
*/ |
function f_MessageBodyLength(MessageBody p_mb_par) return integer { |
group MessageBody_Calculation { |
var integer v_result:=0; |
if (MB_LENGTH_FROM_ENCVAL){ //by default it is set to true |
v_result:= lengthof(encvalue(p_mb_par))/8; // length in bypes, let get length of encoded value |
} |
else{ |
// assume SDP_Message ONLY in the message body |
if (ischosen(p_mb_par.sdpMessageBody)) |
{ |
v_result := f_SDPlength(p_mb_par.sdpMessageBody); |
}; |
// assume XML_Body ONLY in the message body |
if (ischosen(p_mb_par.xmlBody)) |
{ |
v_result := f_XMLBody_Length(p_mb_par.xmlBody, USE_FX_FOR_XML_LENGTH ); |
}; |
// assume simpleMsgSummary_Body ONLY in the message body |
if (ischosen(p_mb_par.simpleMsgSummary)) |
{ |
v_result := f_simpleMsgSummaryBody_Length(p_mb_par.simpleMsgSummary ); |
}; |
// assume MIME_Message in the message body |
if (ischosen(p_mb_par.mimeMessageBody)) |
{ |
v_result := f_MIMElength(p_mb_par.mimeMessageBody); |
}; |
//assume sipfrag in the message body |
if (ischosen(p_mb_par.sipfrag)) |
{ |
v_result := f_TextPlainLength(p_mb_par); //same function due to same type with textplain |
}; |
//assume textplain in the message body |
if (ischosen(p_mb_par.textplain)) |
{ |
v_result := f_TextPlainLength(p_mb_par); |
}; |
} |
/** |
* @desc Calculation of Message Body length |
* @param p_mb_par contain message body part |
* @return message body length |
*/ |
function f_MessageBodyLength( |
template(value) MessageBody p_mb_par |
) return integer { |
return v_result |
} |
group SDP_Len_calculation { |
/** |
* |
* @desc Calculation of SDP length |
* @param p_mb contain sdp message |
* @return sdp_lenght |
*/ |
function f_SDPlength(SDP_Message p_mb) return integer |
{ |
var integer v_result:=2; //* due to empty line beginning of message body |
var charstring v_auxstring; |
v_result := 2 + c_CRlen + lengthof(int2str(p_mb.protocol_version)); //* "v=" |
v_auxstring := p_mb.origin.user_name & " " & p_mb.origin.session_id & " " & p_mb.origin.session_version & " " & p_mb.origin.net_type & " " & p_mb.origin.addr_type & " " & p_mb.origin.addr; |
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "o=" |
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.session_name); //* "s=" |
if (ispresent(p_mb.information)) |
{v_auxstring:=p_mb.information; v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring);}; //* "i= " |
if (ispresent(p_mb.uri)) |
{v_auxstring:=p_mb.uri; v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring);}; //* "u=" |
if (ispresent(p_mb.emails)) { |
for (var integer i:=0; i<sizeof(p_mb.emails); i:=i+1) |
{v_result := v_result + 2 + c_CRlen + lengthof(p_mb.emails[i].addr_or_phone); //* "e=" |
if (ispresent(p_mb.emails[i].disp_name)) |
{v_auxstring:=p_mb.emails[i].disp_name; v_result := v_result + 1 + lengthof(v_auxstring);}; |
}; |
}; |
if (ispresent(p_mb.phone_numbers)) { |
for (var integer i:=0; i<sizeof(p_mb.phone_numbers); i:=i+1) |
{v_result := v_result + 2 + c_CRlen + lengthof(p_mb.phone_numbers[i].addr_or_phone); //* "p= " |
if (ispresent(p_mb.phone_numbers[i].disp_name)) |
{v_auxstring:=p_mb.phone_numbers[i].disp_name; v_result := v_result + 1 + lengthof(v_auxstring);}; |
}; |
}; |
if (ispresent(p_mb.connection)) |
{ |
var integer v_len_con0 := f_SDPlength_connection(p_mb.connection); |
v_result := v_result + v_len_con0; |
}; //* "c=" |
if (ispresent(p_mb.bandwidth)) |
{ |
for (var integer i:=0; i<sizeof(p_mb.bandwidth); i:=i+1) { //* "b= " |
v_auxstring:= p_mb.bandwidth[i].modifier & " "; |
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring) + |
lengthof(int2str(p_mb.bandwidth[i].bandwidth)); |
}; |
}; |
for (var integer i:=0; i<sizeof(p_mb.times); i:=i+1) { |
v_auxstring:= p_mb.times[i].time_field.start_time & " " & p_mb.times[i].time_field.stop_time; |
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring);//* "t=" |
if (ispresent(p_mb.times[i].time_repeat)) |
{ |
for (var integer j:=0; j<sizeof(p_mb.times[i].time_repeat); j:=j+1) |
{ |
v_result := v_result + 2 + c_CRlen + lengthof(int2str(p_mb.times[i].time_repeat[j].repeat_interval.time)); //* "r=" |
if (ispresent(p_mb.times[i].time_repeat[j].repeat_interval.unit)) |
{ |
v_auxstring:=p_mb.times[i].time_repeat[j].repeat_interval.unit; |
v_result := v_result + 1 + lengthof(v_auxstring); |
}; |
v_result := v_result + 1 + lengthof(int2str(p_mb.times[i].time_repeat[j].active.time)); |
if (ispresent(p_mb.times[i].time_repeat[j].active.unit)) |
{ |
v_auxstring:=p_mb.times[i].time_repeat[j].active.unit; |
v_result := v_result + 1 + lengthof(v_auxstring); |
}; |
for (var integer k:=0; k<sizeof(p_mb.times[i].time_repeat[j].offsets); k:=k+1) |
{ |
v_result := v_result + 1 + lengthof(int2str(p_mb.times[i].time_repeat[j].offsets[k].time)); |
if (ispresent(p_mb.times[i].time_repeat[j].offsets[k].unit)) |
{ |
v_auxstring:=p_mb.times[i].time_repeat[j].offsets[k].unit; |
v_result := v_result + 1 + lengthof(v_auxstring); |
}; |
} |
} |
}; |
}; |
var integer v_result := 0; |
if (PX_MB_LENGTH_FROM_ENCVAL) { |
// by default it is set to true |
// in case the codec encodes the variant selector, this |
// needs to be changed to ischosen... |
v_result := lengthof(encvalue(p_mb_par)) / 8; // length |
// in |
// bytes, |
// let get |
// length |
// of |
// encoded |
// value |
} |
else { |
if (ispresent(p_mb.timezone_adjustments)) |
{log("timezone adjustments have not been considered in SDP length calculation yet"); |
}; //* "z=" |
if (ispresent(p_mb.key)) { |
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.key.method); //* "k= " |
if (ispresent(p_mb.key.key)) |
{v_auxstring:=p_mb.key.key; v_result := v_result + 1 + lengthof(v_auxstring);}; |
}; |
if (ispresent(p_mb.attributes)) { |
for (var integer i:=0; i<sizeof(p_mb.attributes); i:=i+1){ //* "a= " |
var integer v_len_con1 := f_SDPlength_attribute(p_mb.attributes[i]); |
v_result := v_result + v_len_con1; |
}; |
}; //* "a=" |
// assume SDP_Message ONLY in the message body |
if (ischosen(p_mb_par.sdpMessageBody)) { |
v_result := f_SDPlength(valueof(p_mb_par.sdpMessageBody)); |
} |
if (ispresent(p_mb.media_list)) |
{ |
for (var integer i:=0; i<sizeof(p_mb.media_list); i:=i+1){ //* "m= " |
//* for each media_field |
//* log("p_mb.media_list[i] ",p_mb.media_list[i]); |
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.media_list[i].media_field.media) |
+ 1 + lengthof(int2str(p_mb.media_list[i].media_field.ports.port_number)); |
// assume XML_Body ONLY in the message body |
if (ischosen(p_mb_par.xmlBody)) { |
v_result := f_XMLBody_Length(valueof(p_mb_par.xmlBody), PX_USE_FX_FOR_XML_LENGTH); |
} |
// assume simpleMsgSummary_Body ONLY in the message body |
if (ischosen(p_mb_par.simpleMsgSummary)) { |
v_result := f_simpleMsgSummaryBody_Length(valueof(p_mb_par.simpleMsgSummary)); |
} |
if (ispresent(p_mb.media_list[i].media_field.ports.num_of_ports)) |
{v_result := v_result + 1 + lengthof(int2str(p_mb.media_list[i].media_field.ports.num_of_ports));}; |
v_result := v_result + 1 + lengthof(p_mb.media_list[i].media_field.transport); |
for (var integer j:=0; j<sizeof(p_mb.media_list[i].media_field.fmts); j:=j+1){ |
v_result := v_result + 1 + lengthof(valueof(p_mb.media_list[i].media_field.fmts[j])); |
} |
if (ispresent(p_mb.media_list[i].information)) { |
v_auxstring:=p_mb.media_list[i].information; |
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "i= " |
}; |
if (ispresent(p_mb.media_list[i].connections)) { |
for (var integer j:=0; j<sizeof(p_mb.media_list[i].connections); j:=j+1){ |
var integer v_len_con2 := f_SDPlength_connection(p_mb.media_list[i].connections[j]); |
v_result := v_result + v_len_con2; |
}; //* end for |
}; |
if (ispresent(p_mb.media_list[i].bandwidth)) { //* "b= " |
for (var integer j:=0; j<sizeof(p_mb.media_list[i].bandwidth); j:=j+1){ |
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.media_list[i].bandwidth[j].modifier) |
+ 1 + lengthof(int2str(p_mb.media_list[i].bandwidth[j].bandwidth)); |
}; //* end for |
}; |
if (ispresent(p_mb.media_list[i].key)) { //* "k= " |
v_result := v_result + 1 + lengthof(p_mb.media_list[i].key.method); |
if (ispresent(p_mb.media_list[i].key.key)) { |
v_auxstring := p_mb.media_list[i].key.key; |
v_result := v_result + 1 + lengthof(v_auxstring); |
}; |
}; |
if (ispresent(p_mb.media_list[i].attributes)) { |
for (var integer j:=0; j<sizeof(p_mb.media_list[i].attributes); j:=j+1){ //* "a= " |
var integer v_len_attr := f_SDPlength_attribute(p_mb.media_list[i].attributes[j]); |
v_result := v_result + v_len_attr; |
} //* end for j |
}; |
}; //* end for i |
}; //* end if media_list |
// assume MIME_Message in the message body |
if (ischosen(p_mb_par.mimeMessageBody)) { |
v_result := f_MIMElength(valueof(p_mb_par.mimeMessageBody)); |
} |
return v_result; |
};//* end function f_SDPlength |
// assume sipfrag in the message body |
if (ischosen(p_mb_par.sipfrag)) { |
v_result := f_TextPlainLength(p_mb_par); // same |
// function |
// due to |
// same |
// type |
// with |
// textplain |
} |
function f_SDPlength_connection(SDP_connection p_element) return integer //* "c=" |
{ |
var integer v_result:=0; |
var charstring v_auxstring; |
v_result := v_result + 2 + c_CRlen + lengthof(p_element.net_type & " " & |
p_element.addr_type & " " & |
p_element.conn_addr.addr); |
if (ispresent(p_element.conn_addr.ttl) and p_element.conn_addr.ttl>0) |
{v_result := v_result + 1 + lengthof(int2str(p_element.conn_addr.ttl));}; |
if (ispresent(p_element.conn_addr.num_of_addr) and p_element.conn_addr.num_of_addr>0) |
{v_result := v_result + 1 + lengthof(int2str(p_element.conn_addr.num_of_addr));}; |
return v_result |
} //* f_SDPlength_connection |
// assume textplain in the message body |
if (ischosen(p_mb_par.textplain)) { |
v_result := f_TextPlainLength(p_mb_par); |
} |
} |
function f_SDPlength_attribute(SDP_attribute p_element) return integer //* "a=" |
{ |
var integer v_result:=0; |
var charstring v_auxstring; |
if (ischosen(p_element.cat)) {v_result := v_result + 2 + c_CRlen + lengthof("cat:" & p_element.cat.attr_value)}; |
if (ischosen(p_element.keywds)) {v_result := v_result + 2 + c_CRlen + lengthof("keywds:" & p_element.keywds.attr_value)}; |
if (ischosen(p_element.tool)) {v_result := v_result + 2 + c_CRlen + lengthof("tool:" & p_element.tool.attr_value)}; |
if (ischosen(p_element.ptime)) {v_result := v_result + 2 + c_CRlen + lengthof("ptime:" & p_element.ptime.attr_value)}; |
if (ischosen(p_element.recvonly)) {v_result := v_result +c_CRlen + lengthof("recvonly")}; |
if (ischosen(p_element.sendrecv)) {v_result := v_result +c_CRlen + lengthof("sendrecv")}; |
if (ischosen(p_element.sendonly)) {v_result := v_result +c_CRlen + lengthof("sendonly")}; |
if (ischosen(p_element.inactive)) {v_result := v_result +c_CRlen + lengthof("inactive")}; |
if (ischosen(p_element.orient)) {v_result := v_result + 2 + c_CRlen + lengthof("orient:" & p_element.orient.attr_value)}; |
if (ischosen(p_element.sdp_type)) {v_result := v_result + 2 + c_CRlen + lengthof("type:" & p_element.sdp_type.attr_value)}; |
if (ischosen(p_element.charset)) {v_result := v_result + 2 + c_CRlen + lengthof("charset" & p_element.charset.attr_value)}; |
if (ischosen(p_element.sdplang)) {v_result := v_result + 2 + c_CRlen + lengthof("sdplang:" & p_element.sdplang.attr_value)}; |
if (ischosen(p_element.lang)) {v_result := v_result + 2 + c_CRlen + lengthof("lang:" & p_element.lang.attr_value)}; |
if (ischosen(p_element.framerate)) {v_result := v_result + 2 + c_CRlen + lengthof("framerate:" & p_element.framerate.attr_value)}; |
if (ischosen(p_element.quality)) {v_result := v_result + 2 + c_CRlen + lengthof("quality:" & p_element.quality.attr_value)}; |
if (ischosen(p_element.fmtp)) {v_result := v_result + 2 + c_CRlen + lengthof("fmtp:" & p_element.fmtp.attr_value)}; |
if (ischosen(p_element.curr)) {v_result := v_result + 2 + c_CRlen + lengthof("curr:" & p_element.curr.preconditionType & " " |
& p_element.curr.statusType & " " & p_element.curr.direction)}; |
if (ischosen(p_element.des)) {v_result := v_result + 2 + c_CRlen + lengthof("des:" & p_element.des.preconditionType & " " |
& p_element.des.strength & " " & p_element.des.statusType & " " & p_element.des.direction)}; |
if (ischosen(p_element.conf)) {v_result := v_result + 2 + c_CRlen + lengthof("conf:" & p_element.conf.preconditionType & " " |
& p_element.des.statusType & " " & p_element.des.direction)}; |
if (ischosen(p_element.rtpmap)) {v_result := v_result + 2 + c_CRlen + lengthof("rtpmap:" & p_element.rtpmap.attr_value)}; |
if (ischosen(p_element.rtcp)) {v_result := v_result + 2 + c_CRlen + lengthof("rtcp:" & p_element.rtcp.attr_value)}; |
if (ischosen(p_element.unknown)) |
{v_result := v_result + 2 + c_CRlen + lengthof(p_element.unknown.name); |
if (ispresent(p_element.unknown.attr_value)) |
{var charstring aux := p_element.unknown.attr_value; |
v_result := v_result + lengthof(":" & p_element.unknown.attr_value); |
}; |
}; |
//* log("axr: length attribute=", v_result); |
return v_result |
} //* f_SDPlength_attribute |
} //* group SDPlen_calculation |
return v_result; |
} |
group XML_Len_calculation{ |
/** |
* @desc Declaration of external functions to calculate length of message bodies |
* switching of internal or external functions are made by boolean module parameter/PIXIT |
* USE_FX_FOR_XML_LENGTH declared at top of this module |
*/ |
external function fx_calculateXMLBodyLen(XmlBody p_mb) return integer; |
/** |
* |
* @desc Calculation of XML body length |
* @param p_mb contain XML body |
* @return xml_length |
*/ |
function f_XMLBody_Length(XmlBody p_mb, boolean p_ext_func) return integer |
{ |
var integer v_result:=0; |
if ( p_ext_func){ |
v_result := fx_calculateXMLBodyLen(p_mb); |
}else{ |
// assume ConferenceInfo ONLY in the XML message body |
if (ischosen(p_mb.conference)) |
{ |
v_result := f_XMLBody_ConferenceInfo_Length(p_mb.conference); |
}; |
// assume CUG ONLY in the XML message body |
if (ischosen(p_mb.cug)) |
{ |
v_result := f_XMLBody_Cug_Length(p_mb.cug); |
}; |
// assume MCID ONLY in the XML message body |
if (ischosen(p_mb.mcid)) |
{ |
v_result := f_XMLBody_Mcid_Length(p_mb.mcid); |
}; |
// assume CW ONLY in the XML message body |
if (ischosen(p_mb.cw)) |
{ |
v_result := f_XMLBody_Cw_Length(p_mb.cw); |
}; |
// assume CDIV ONLY in the XML message body |
if (ischosen(p_mb.cdivn)) |
{ |
v_result := f_XMLBody_Cdivn_Length(p_mb.cdivn); |
}; |
// assume PSTNTransit ONLY in the XML message body |
if (ischosen(p_mb.pstnTransit)) |
{ |
v_result := f_XMLBody_PSTNTransit_Length(p_mb.pstnTransit); |
}; |
// assume Simservs ONLY in the XML message body |
if (ischosen(p_mb.simservs)) |
{ |
v_result := f_XMLBody_Simservs_Length(p_mb.simservs); |
}; |
// assume ResourceLists ONLY in the XML message body |
if (ischosen(p_mb.resourceLists)) |
{ |
v_result := f_XMLBody_ResourceList_Length(p_mb.resourceLists); |
}; |
// assume Ims3GPP ONLY in the XML message body |
if (ischosen(p_mb.ims3gpp)) |
{ |
v_result := f_XMLBody_Ims3GPP_Length(p_mb.ims3gpp); |
}; |
/** Add aditional checks regarding to new variants, |
* also implement appropriate function for calculation |
*/ |
} |
return v_result |
} //* f_XMLBodyLength |
group XMLBodies_calculation{ |
/** |
* |
* @desc Calculation of XML ConferenceInfo element length |
* @param p_mb contain XML ConfInfo body |
* @return xml_length |
*/ |
function f_XMLBody_ConferenceInfo_Length(Conference_type p_mb) return integer |
{ |
var integer v_result:= lengthof(encvalue(p_mb))/8; |
return v_result |
} //* f_XMLBody_ConferenceInfo_Length |
/** |
* |
* @desc Calculation of XML CUG element length |
* @param p_mb contain XML CUG body |
* @return xml_length |
*/ |
function f_XMLBody_Cug_Length(Cug p_mb) return integer |
{ |
var integer v_result:= lengthof(encvalue(p_mb))/8; |
return v_result |
} //* f_XMLBody_Cug_Length |
/** |
* |
* @desc Calculation of XML MCID element length |
* @param p_mb contain XML MCID body |
* @return xml_length |
*/ |
function f_XMLBody_Mcid_Length(Mcid p_mb) return integer |
{ |
var integer v_result:= lengthof(encvalue(p_mb))/8; |
return v_result |
} //* f_XMLBody_Mcid_Length |
/** |
* |
* @desc Calculation of XML CW element length |
* @param p_mb contain XML CW body |
* @return xml_length |
*/ |
function f_XMLBody_Cw_Length(Ims_cw p_mb) return integer |
{ |
var integer v_result:= lengthof(encvalue(p_mb))/8; |
return v_result |
} //* f_XMLBody_Cw_Length |
/** |
* |
* @desc Calculation of XML CDIVN element length |
* @param p_mb contain XML CDIVN body |
* @return xml_length |
*/ |
function f_XMLBody_Cdivn_Length(Comm_div_info_type p_mb) return integer |
{ |
var integer v_result:= lengthof(encvalue(p_mb))/8; |
return v_result |
} //* f_XMLBody_Cdivn_Length |
/** |
* |
* @desc Calculation of XML PSTNTransit element length |
* @param p_mb contain XML PSTNTransit body |
* @return xml_length |
*/ |
function f_XMLBody_PSTNTransit_Length(PSTN_transit p_mb) return integer |
{ |
var integer v_result:= lengthof(encvalue(p_mb))/8; |
return v_result |
} //* f_XMLBody_PSTNTransit_Length |
/** @desc Calculation of XML Simservs element length |
* @param p_mb contain XML Simservs body |
* @return xml_length |
*/ |
function f_XMLBody_Simservs_Length(Simservs p_mb) return integer |
{ |
var integer v_result:= lengthof(encvalue(p_mb))/8; |
return v_result |
} //* f_XMLBody_Simservs_Length |
/** @desc Calculation of XML ResourceList length |
* @param p_mb contain XML ResourceList body |
* @return xml_length |
*/ |
function f_XMLBody_ResourceList_Length(Resource_lists p_mb) return integer |
{ |
var integer v_result:= lengthof(encvalue(p_mb))/8; |
return v_result |
} //* f_XMLBody_ResourceList_Length |
/** @desc Calculation of XML Ims3GPP length |
* @param p_mb contain XML Ims3GPP body |
* @return xml_length |
*/ |
function f_XMLBody_Ims3GPP_Length(TIMS3GPP p_mb) return integer |
{ |
var integer v_result:= lengthof(encvalue(p_mb))/8; |
return v_result |
} //* f_XMLBody_Ims3GPP_Length |
} //* XMLBodies_calculation |
}//* group XMLlen_calculation |
group simpleMsgSummaryBody_Length{ |
function f_simpleMsgSummaryBody_Length(SimpleMsgSummary p_mb) return integer |
{ |
var integer v_result:=2; //* due to empty line beginning of message body |
var charstring v_auxstring; |
v_result := 2+lengthof(p_mb.msg_status_line.msg_type) + 2 + lengthof(p_mb.msg_status_line.msg_status)+c_CRlen; //* "Message-Waiting: yes" |
group SDP_Len_calculation { |
/** |
* @desc Calculation of SDP length |
* @param p_mb contain sdp message |
* @return sdp_lenght |
*/ |
function f_SDPlength( |
SDP_Message p_mb |
) return integer { |
var integer i, j, k, v_len_con0, v_len_con1, v_len_con2, v_len_attr; |
var integer v_result := 2; |
//* due to empty line beginning of message body |
var charstring v_auxstring; |
if (ispresent(p_mb.msg_account)) //* "Message-Account" |
{v_result := v_result + 2 + lengthof(p_mb.msg_account.msg_type_account)+2+lengthof(p_mb.msg_account.account_URI)+c_CRlen;}; |
if (ispresent(p_mb.msg_summary_line_list)) { |
for (var integer i:=0; i<sizeof(p_mb.msg_summary_line_list); i:=i+1) |
{v_result := v_result + 2 + c_CRlen + lengthof(p_mb.msg_summary_line_list[i].msg_context_class)+2+lengthof(p_mb.msg_summary_line_list[i].msgs); |
if (ispresent(p_mb.msg_summary_line_list[i].urgent_msgs)) |
{v_auxstring:=p_mb.msg_summary_line_list[i].urgent_msgs; v_result := v_result + 1 + lengthof(v_auxstring);}; |
}; |
}; |
if (ispresent(p_mb.opt_msg_headers)) { |
for (var integer i:=0; i<sizeof(p_mb.opt_msg_headers); i:=i+1) |
{v_result := v_result + 2 + c_CRlen + lengthof(p_mb.opt_msg_headers[i]); |
}; |
}; |
return v_result |
} |
} |
v_result := 2 + c_CRlen + lengthof(int2str(p_mb.protocol_version)); //* "v=" |
v_auxstring := p_mb.origin.user_name & " " & p_mb.origin.session_id & " " & p_mb.origin.session_version & " " & p_mb.origin.net_type & " " & p_mb.origin.addr_type & " " & p_mb.origin.addr; |
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "o=" |
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.session_name); //* "s=" |
if (isvalue(p_mb.information)) { |
v_auxstring := valueof(p_mb.information); |
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); |
} //* "i= " |
if (isvalue(p_mb.uri)) { |
v_auxstring := valueof(p_mb.uri); |
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); |
} //* "u=" |
if (isvalue(p_mb.emails)) { |
for (i := 0; i < lengthof(p_mb.emails); i := i + 1) { |
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.emails[i].addr_or_phone); //* "e=" |
if (isvalue(p_mb.emails[i].disp_name)) { |
v_auxstring := valueof(p_mb.emails[i].disp_name); |
v_result := v_result + 1 + lengthof(v_auxstring); |
} |
} |
} |
group MIME_Len_calculation{ |
/** |
* |
* @desc Calculation of MIME length |
* @param p_mb contain MIME message |
* @return xml_length |
*/ |
function f_MIMElength(MIME_Message p_mb) return integer |
{ |
var integer v_result:=2; //0d0a |
v_result := v_result + lengthof(p_mb.boundary) + 2/*0d0a*/; |
for (var integer i:=0; i<sizeof(p_mb.mimeEncapsulatedList); i:=i+1){ |
v_result := v_result + lengthof("Content-Type: ")+ lengthof(p_mb.mimeEncapsulatedList[i].content_type) + 2/*0d0a*/ ; |
if (ispresent(p_mb.mimeEncapsulatedList[i].content_disposition)){ |
v_result := v_result + lengthof("Content-Disposition: ")+ lengthof(p_mb.mimeEncapsulatedList[i].content_disposition) + 2/*0d0a*/ ; |
} |
//v_result := v_result +2/*0d0a*/; ??? to check |
// assume SDP_Message ONLY in the message body |
if (ischosen(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.sdpMessageBody)) |
{ |
v_result := v_result + f_SDPlength(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.sdpMessageBody); |
}; |
// assume XML_Body ONLY in the message body |
if (ischosen(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.xmlBody)) |
{ |
v_result := v_result + f_XMLBody_Length(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.xmlBody, USE_FX_FOR_XML_LENGTH ); |
}; |
// //assume XML_Message ONLY in the message body |
// if (ischosen(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.xmlMessage)) |
// { |
// v_result := v_result + f_XMLlength(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.xmlMessage, USE_FX_FOR_XML_LENGTH ); |
// }; |
//v_result := v_result +2/*0d0a*/; ??? to check |
} |
//v_result := v_result +2/*0d0a*/; ??? to check |
return v_result |
} //* f_MIMElength |
}//* group MIMElen_calculation |
group TextPlain_Len_calculation{ |
/** |
* |
* @desc Calculation of messagebody-textplain type length |
* @param p_mb contain textplain message |
* @return lenght |
*/ |
function f_TextPlainLength(MessageBody p_mb) return integer |
{ |
var integer v_result:=0; |
if (isvalue(p_mb.phone_numbers)) { |
for (i := 0; i < lengthof(p_mb.phone_numbers); i := i + 1) { |
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.phone_numbers[i].addr_or_phone); //* "p= |
//* " |
if (isvalue(p_mb.phone_numbers[i].disp_name)) { |
v_auxstring := valueof(p_mb.phone_numbers[i].disp_name); |
v_result := v_result + 1 + lengthof(v_auxstring); |
} |
} |
} |
v_result:=v_result+lengthof(p_mb.textplain); |
return v_result; |
}//* end function f_TextPlainLength |
}//*end group TextPlainLen_calculation |
if (isvalue(p_mb.connection)) { |
v_len_con0 := f_SDPlength_connection(valueof(p_mb.connection)); |
v_result := v_result + v_len_con0; |
} //* "c=" |
if (isvalue(p_mb.bandwidth)) { |
for (i := 0; i < lengthof(p_mb.bandwidth); i := i + 1) { |
//* "b= " |
v_auxstring := p_mb.bandwidth[i].modifier & " "; |
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring) + lengthof(int2str(p_mb.bandwidth[i].bandwidth)); |
} |
} |
}//*group MessageBody_Calculation |
for (i := 0; i < lengthof(p_mb.times); i := i + 1) { |
v_auxstring := p_mb.times[i].time_field.start_time & " " & p_mb.times[i].time_field.stop_time; |
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "t=" |
if (isvalue(p_mb.times[i].time_repeat)) { |
for (j := 0; j < lengthof(p_mb.times[i].time_repeat); j := j + 1) { |
v_result := v_result + 2 + c_CRlen + lengthof(int2str(p_mb.times[i].time_repeat[j].repeat_interval.time)); //* "r=" |
if (isvalue(p_mb.times[i].time_repeat[j].repeat_interval.unit)) { |
v_auxstring := valueof(p_mb.times[i].time_repeat[j].repeat_interval.unit); |
v_result := v_result + 1 + lengthof(v_auxstring); |
} |
v_result := v_result + 1 + lengthof(int2str(p_mb.times[i].time_repeat[j].active.time)); |
if (isvalue(p_mb.times[i].time_repeat[j].active.unit)) { |
v_auxstring := valueof(p_mb.times[i].time_repeat[j].active.unit); |
v_result := v_result + 1 + lengthof(v_auxstring); |
} |
group GiveHeaders { |
/** |
* |
* @desc Return component variable of recordRoute header if vc_boo_recordRoute is true |
* @return component variable of recordRoute header |
*/ |
for (k := 0; k < lengthof(p_mb.times[i].time_repeat[j].offsets); k := k + 1) { |
v_result := v_result + 1 + lengthof(int2str(p_mb.times[i].time_repeat[j].offsets[k].time)); |
if (isvalue(p_mb.times[i].time_repeat[j].offsets[k].unit)) { |
v_auxstring := valueof(p_mb.times[i].time_repeat[j].offsets[k].unit); |
v_result := v_result + 1 + lengthof(v_auxstring); |
} |
} |
} |
} |
} |
function f_recordroute() runs on SipComponent return template RecordRoute |
{ |
template RecordRoute v_recordRoute := omit; |
if (vc_boo_recordRoute) |
{return vc_recordRoute} |
else {return(v_recordRoute)} //* TODO: RecordRoute is not OPTIONAL!!! Check IT! |
} |
/** |
* |
* @desc Return component variable of Route header if vc_boo_route is true |
* @return component variable of recordRoute header |
*/ |
function f_route() runs on SipComponent return template Route |
{ |
template Route v_route := omit; |
if (vc_boo_route) |
{return vc_route} //* TODO: Route header need to be in reverse order than RecordRoute, question of return value - RecordRoute |
else {return(v_route)} //* TODO: Route is not OPTIONAL!!! Check IT! |
} |
} //* end group GiveHeaders |
group others { |
if (isvalue(p_mb.timezone_adjustments)) { |
log("*** " & __SCOPE__ & ": INFO: timezone adjustments have not been considered in SDP length calculation yet ***"); |
} //* "z=" |
if (isvalue(p_mb.key)) { |
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.key.method); //* "k= |
//* " |
if (isvalue(p_mb.key.key)) { |
v_auxstring := valueof(p_mb.key.key); |
v_result := v_result + 1 + lengthof(v_auxstring); |
} |
} |
if (isvalue(p_mb.attributes)) { |
for (i := 0; i < lengthof(p_mb.attributes); i := i + 1) { |
/* |
* |
* @desc function combines two comma parameter lists |
* @param p_list1 first list |
* @param p_list2 second list |
* @return comma parameter list that contains parameters from both input lists |
* @verdict |
*/ |
function f_merge_CommaParam_List(CommaParam_List p_list1, CommaParam_List p_list2) return template CommaParam_List |
{ var template CommaParam_List p_result; |
var integer limit1 := sizeof(p_list1); |
for (var integer i:=0; i<limit1; i:=i+1) { |
p_result[i] := p_list1[i] |
}; |
for (var integer i:=0; i<sizeof(p_list2); i:=i+1) { |
p_result[i+limit1] := p_list2[i] |
}; |
return p_result |
} |
} //* end group others |
//* "a= " |
v_len_con1 := f_SDPlength_attribute(p_mb.attributes[i]); |
v_result := v_result + v_len_con1; |
} |
} //* "a=" |
if (isvalue(p_mb.media_list)) { |
for (i := 0; i < lengthof(p_mb.media_list); i := i + 1) { |
//* "m= " |
//* for each media_field |
//* log("p_mb.media_list[i ] ",p_mb.media_list[i |
//* ] ); |
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.media_list[i].media_field.media) + 1 + lengthof(int2str(p_mb.media_list[i].media_field.ports.port_number)); |
} //* group TemplatePreparationFunctions |
} //* end module LibSip_Templates |
if (isvalue(p_mb.media_list[i].media_field.ports.num_of_ports)) { |
v_result := v_result + 1 + lengthof(int2str(valueof(p_mb.media_list[i].media_field.ports.num_of_ports))); |
} |
v_result := v_result + 1 + lengthof(p_mb.media_list[i].media_field.transport); |
for (j := 0; j < lengthof(p_mb.media_list[i].media_field.fmts); j := j + 1) { |
v_result := v_result + 1 + lengthof(p_mb.media_list[i].media_field.fmts[j]); |
} |
if (isvalue(p_mb.media_list[i].information)) { |
v_auxstring := valueof(p_mb.media_list[i].information); |
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "i= " |
} |
if (isvalue(p_mb.media_list[i].connections)) { |
for (j := 0; j < lengthof(p_mb.media_list[i].connections); j := j + 1) { |
v_len_con2 := f_SDPlength_connection(p_mb.media_list[i].connections[j]); |
v_result := v_result + v_len_con2; |
} //* end for |
} |
if (isvalue(p_mb.media_list[i].bandwidth)) { |
//* "b= " |
for (j := 0; j < lengthof(p_mb.media_list[i].bandwidth); j := j + 1) { |
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.media_list[i].bandwidth[j].modifier) + 1 + lengthof(int2str(p_mb.media_list[i].bandwidth[j].bandwidth)); |
} //* end for |
} |
if (isvalue(p_mb.media_list[i].key)) { |
//* "k= " |
v_result := v_result + 1 + lengthof(p_mb.media_list[i].key.method); |
if (isvalue(p_mb.media_list[i].key.key)) { |
v_auxstring := valueof(p_mb.media_list[i].key.key); |
v_result := v_result + 1 + lengthof(v_auxstring); |
} |
} |
if (isvalue(p_mb.media_list[i].attributes)) { |
for (j := 0; j < lengthof(p_mb.media_list[i].attributes); j := j + 1) { |
//* "a= " |
v_len_attr := f_SDPlength_attribute(p_mb.media_list[i].attributes[j]); |
v_result := v_result + v_len_attr; |
} //* end for j |
} |
} //* end for i |
} //* end if media_list |
return v_result; |
} |
//* end function f_SDPlength |
function f_SDPlength_connection( |
SDP_connection p_element |
) return integer { |
//* "c=" |
var integer v_result := 0; |
v_result := v_result + 2 + c_CRlen + lengthof(p_element.net_type & " " & p_element.addr_type & " " & p_element.conn_addr.addr); |
if (isvalue(p_element.conn_addr.ttl) and p_element.conn_addr.ttl > 0) { |
v_result := v_result + 1 + lengthof(int2str(valueof(p_element.conn_addr.ttl))); |
} |
if (isvalue(p_element.conn_addr.num_of_addr) and p_element.conn_addr.num_of_addr > 0) { |
v_result := v_result + 1 + lengthof(int2str(valueof(p_element.conn_addr.num_of_addr))); |
} |
return v_result; |
} //* f_SDPlength_connection |
function f_SDPlength_attribute( |
SDP_attribute p_element |
) return integer { |
//* "a=" |
var integer v_result := 0; |
if (ischosen(p_element.cat)) { |
v_result := v_result + 2 + c_CRlen + lengthof("cat:" & p_element.cat.attr_value); |
} |
if (ischosen(p_element.keywds)) { |
v_result := v_result + 2 + c_CRlen + lengthof("keywds:" & p_element.keywds.attr_value); |
} |
if (ischosen(p_element.tool)) { |
v_result := v_result + 2 + c_CRlen + lengthof("tool:" & p_element.tool.attr_value); |
} |
if (ischosen(p_element.ptime)) { |
v_result := v_result + 2 + c_CRlen + lengthof("ptime:" & p_element.ptime.attr_value); |
} |
if (ischosen(p_element.recvonly)) { |
v_result := v_result + c_CRlen + lengthof("recvonly"); |
} |
if (ischosen(p_element.sendrecv)) { |
v_result := v_result + c_CRlen + lengthof("sendrecv"); |
} |
if (ischosen(p_element.sendonly)) { |
v_result := v_result + c_CRlen + lengthof("sendonly"); |
} |
if (ischosen(p_element.inactive)) { |
v_result := v_result + c_CRlen + lengthof("inactive"); |
} |
if (ischosen(p_element.orient)) { |
v_result := v_result + 2 + c_CRlen + lengthof("orient:" & p_element.orient.attr_value); |
} |
if (ischosen(p_element.sdp_type)) { |
v_result := v_result + 2 + c_CRlen + lengthof("type:" & p_element.sdp_type.attr_value); |
} |
if (ischosen(p_element.charset)) { |
v_result := v_result + 2 + c_CRlen + lengthof("charset" & p_element.charset.attr_value); |
} |
if (ischosen(p_element.sdplang)) { |
v_result := v_result + 2 + c_CRlen + lengthof("sdplang:" & p_element.sdplang.attr_value); |
} |
if (ischosen(p_element.lang)) { |
v_result := v_result + 2 + c_CRlen + lengthof("lang:" & p_element.lang.attr_value); |
} |
if (ischosen(p_element.framerate)) { |
v_result := v_result + 2 + c_CRlen + lengthof("framerate:" & p_element.framerate.attr_value); |
} |
if (ischosen(p_element.quality)) { |
v_result := v_result + 2 + c_CRlen + lengthof("quality:" & p_element.quality.attr_value); |
} |
if (ischosen(p_element.fmtp)) { |
v_result := v_result + 2 + c_CRlen + lengthof("fmtp:" & p_element.fmtp.format & " " & f_fmtpparams_to_charstring(p_element.fmtp.params)); |
} |
if (ischosen(p_element.curr)) { |
v_result := v_result + 2 + c_CRlen + lengthof("curr:" & p_element.curr.preconditionType & " " & p_element.curr.statusType & " " & p_element.curr.direction); |
} |
if (ischosen(p_element.des)) { |
v_result := v_result + 2 + c_CRlen + lengthof("des:" & p_element.des.preconditionType & " " & p_element.des.strength & " " & p_element.des.statusType & " " & p_element.des.direction); |
} |
if (ischosen(p_element.conf)) { |
v_result := v_result + 2 + c_CRlen + lengthof("conf:" & p_element.conf.preconditionType & " " & p_element.conf.statusType & " " & p_element.conf.direction); |
} |
if (ischosen(p_element.rtpmap)) { |
v_result := v_result + 2 + c_CRlen + lengthof("rtpmap:" & f_rtpmap_to_charstring(p_element.rtpmap)); |
} |
if (ischosen(p_element.rtcp)) { |
v_result := v_result + 2 + c_CRlen + lengthof("rtcp:" & f_rtcp_to_charstring(p_element.rtcp)); |
} |
if (ischosen(p_element.unknown)) { |
v_result := v_result + 2 + c_CRlen + lengthof(p_element.unknown.name); |
if (isvalue(p_element.unknown.attr_value)) { |
v_result := v_result + lengthof(":" & p_element.unknown.attr_value); |
} |
} |
//* log("axr: length attribute=", v_result); |
return v_result; |
} //* f_SDPlength_attribute |
function f_fmtpparams_to_charstring( |
SDP_attribute_fmtp_format_specific_params p_params |
) return charstring { |
var charstring v_result := ""; |
if(ischosen(p_params.unstructured)){ |
v_result := p_params.unstructured; |
} |
else |
{ |
for(var integer v_idx := 0; v_idx < lengthof(p_params.paramList); v_idx := v_idx + 1) { |
if(v_idx != 0) |
{ |
v_result := v_result & "; " |
} |
v_result := v_result & p_params.paramList[v_idx].id; |
if(ispresent(p_params.paramList[v_idx].paramValue)){ |
if(ischosen(p_params.paramList[v_idx].paramValue.tokenOrHost)) |
{ |
v_result := v_result & "=" & p_params.paramList[v_idx].paramValue.tokenOrHost; |
} |
else |
{ |
v_result := v_result & "=""" & p_params.paramList[v_idx].paramValue.quotedString & """"; |
} |
} |
} |
} |
return v_result; |
} |
function f_rtpmap_to_charstring( |
SDP_attribute_rtpmap p_rtpmap |
) return charstring { |
var charstring v_result := ""; |
v_result := p_rtpmap.payload_type & " " & p_rtpmap.codec.encoding & "/" & p_rtpmap.codec.clockrate; |
if(ispresent(p_rtpmap.codec.parameters)) |
{ |
v_result := v_result & "/" & p_rtpmap.codec.parameters; |
} |
return v_result; |
} |
function f_rtcp_to_charstring( |
SDP_attribute_rtcp p_rtcp |
) return charstring { |
var charstring v_result := int2str(p_rtcp.portnumber); |
if(ispresent(p_rtcp.connection)) |
{ |
v_result := v_result & " " & p_rtcp.connection.net_type & " " & p_rtcp.connection.addr_type & " " & p_rtcp.connection.conn_addr.addr; |
if(ispresent(p_rtcp.connection.conn_addr.ttl)) |
{ |
v_result := v_result & "/" & int2str(p_rtcp.connection.conn_addr.ttl); |
if(ispresent(p_rtcp.connection.conn_addr.num_of_addr)) |
{ |
v_result := v_result & "/" & int2str(p_rtcp.connection.conn_addr.num_of_addr); |
} |
} |
} |
return v_result; |
} |
} //* group SDPlen_calculation |
group XML_Len_calculation { |
/** |
* @desc Declaration of external functions to calculate length of message bodies switching of internal or external functions are made by boolean module parameter/PIXIT USE_FX_FOR_XML_LENGTH declared at top of this module |
*/ |
external function fx_calculateXMLBodyLen( |
XmlBody p_mb |
) return integer; |
/** |
* @desc Calculation of XML body length |
* @param p_mb contain XML body |
* @return xml_length |
*/ |
function f_XMLBody_Length( |
XmlBody p_mb, |
boolean p_ext_func |
) return integer { |
var integer v_result := 0; |
if (p_ext_func) { |
v_result := fx_calculateXMLBodyLen(p_mb); |
} |
else { |
// assume ConferenceInfo ONLY in the XML message |
// body |
if (ischosen(p_mb.conference)) { |
v_result := f_XMLBody_ConferenceInfo_Length(p_mb.conference); |
} |
// assume CUG ONLY in the XML message body |
if (ischosen(p_mb.cug)) { |
v_result := f_XMLBody_Cug_Length(p_mb.cug); |
} |
// assume MCID ONLY in the XML message body |
if (ischosen(p_mb.mcid)) { |
v_result := f_XMLBody_Mcid_Length(p_mb.mcid); |
} |
// assume CW ONLY in the XML message body |
if (ischosen(p_mb.cw)) { |
v_result := f_XMLBody_Cw_Length(p_mb.cw); |
} |
// assume CDIV ONLY in the XML message body |
if (ischosen(p_mb.cdivn)) { |
v_result := f_XMLBody_Cdivn_Length(p_mb.cdivn); |
} |
// assume PSTNTransit ONLY in the XML message body |
if (ischosen(p_mb.pstnTransit)) { |
v_result := f_XMLBody_PSTNTransit_Length(p_mb.pstnTransit); |
} |
// assume Simservs ONLY in the XML message body |
if (ischosen(p_mb.simservs)) { |
v_result := f_XMLBody_Simservs_Length(p_mb.simservs); |
} |
// assume ResourceLists ONLY in the XML message body |
if (ischosen(p_mb.resourceLists)) { |
v_result := f_XMLBody_ResourceList_Length(p_mb.resourceLists); |
} |
// assume Ims3GPP ONLY in the XML message body |
if (ischosen(p_mb.ims3gpp)) { |
v_result := f_XMLBody_Ims3GPP_Length(p_mb.ims3gpp); |
} |
/** |
* Add aditional checks regarding to new variants, also implement appropriate function for calculation |
*/ |
} |
return v_result; |
} //* f_XMLBodyLength |
group XMLBodies_calculation { |
/** |
* @desc Calculation of XML ConferenceInfo element length |
* @param p_mb contain XML ConfInfo body |
* @return xml_length |
*/ |
function f_XMLBody_ConferenceInfo_Length( |
template(value) Conference_type p_mb |
) return integer { |
var integer v_result := lengthof(encvalue(p_mb)) / 8; |
return v_result; |
} //* f_XMLBody_ConferenceInfo_Length |
/** |
* @desc Calculation of XML CUG element length |
* @param p_mb contain XML CUG body |
* @return xml_length |
*/ |
function f_XMLBody_Cug_Length( |
template(value) Cug p_mb |
) return integer { |
var integer v_result := lengthof(encvalue(p_mb)) / 8; |
return v_result; |
} //* f_XMLBody_Cug_Length |
/** |
* @desc Calculation of XML MCID element length |
* @param p_mb contain XML MCID body |
* @return xml_length |
*/ |
function f_XMLBody_Mcid_Length( |
template(value) Mcid p_mb |
) return integer { |
var integer v_result := lengthof(encvalue(p_mb)) / 8; |
return v_result; |
} //* f_XMLBody_Mcid_Length |
/** |
* @desc Calculation of XML CW element length |
* @param p_mb contain XML CW body |
* @return xml_length |
*/ |
function f_XMLBody_Cw_Length( |
template(value) Ims_cw p_mb |
) return integer { |
var integer v_result := lengthof(encvalue(p_mb)) / 8; |
return v_result; |
} //* f_XMLBody_Cw_Length |
/** |
* @desc Calculation of XML CDIVN element length |
* @param p_mb contain XML CDIVN body |
* @return xml_length |
*/ |
function f_XMLBody_Cdivn_Length( |
template(value) Comm_div_info_type p_mb |
) return integer { |
var integer v_result := lengthof(encvalue(p_mb)) / 8; |
return v_result; |
} //* f_XMLBody_Cdivn_Length |
/** |
* @desc Calculation of XML PSTNTransit element length |
* @param p_mb contain XML PSTNTransit body |
* @return xml_length |
*/ |
function f_XMLBody_PSTNTransit_Length( |
template(value) PSTN_transit p_mb |
) return integer { |
var integer v_result := lengthof(encvalue(p_mb)) / 8; |
return v_result; |
} //* f_XMLBody_PSTNTransit_Length |
/** |
* @desc Calculation of XML Simservs element length |
* @param p_mb contain XML Simservs body |
* @return xml_length |
*/ |
function f_XMLBody_Simservs_Length( |
template(value) Simservs p_mb |
) return integer { |
var integer v_result := lengthof(encvalue(p_mb)) / 8; |
return v_result; |
} //* f_XMLBody_Simservs_Length |
/** |
* @desc Calculation of XML ResourceList length |
* @param p_mb contain XML ResourceList body |
* @return xml_length |
*/ |
function f_XMLBody_ResourceList_Length( |
template(value) Resource_lists p_mb |
) return integer { |
var integer v_result := lengthof(encvalue(p_mb)) / 8; |
return v_result; |
} //* f_XMLBody_ResourceList_Length |
/** |
* @desc Calculation of XML Ims3GPP length |
* @param p_mb contain XML Ims3GPP body |
* @return xml_length |
*/ |
function f_XMLBody_Ims3GPP_Length( |
template(value) TIMS3GPP p_mb |
) return integer { |
var integer v_result := lengthof(encvalue(p_mb)) / 8; |
return v_result; |
} //* f_XMLBody_Ims3GPP_Length |
} //* XMLBodies_calculation |
} //* group XMLlen_calculation |
group simpleMsgSummaryBody_Length { |
function f_simpleMsgSummaryBody_Length( |
SimpleMsgSummary p_mb |
) return integer { |
var integer i; |
var integer v_result := 2; |
//* due to empty line beginning of message body |
var charstring v_auxstring; |
v_result := 2 + lengthof(p_mb.msg_status_line.msg_type) + 2 + lengthof(p_mb.msg_status_line.msg_status) + c_CRlen; //* "Message-Waiting: |
//* yes" |
if (isvalue(p_mb.msg_account)) |
//* "Message-Account" |
{ |
v_result := v_result + 2 + lengthof(p_mb.msg_account.msg_type_account) + 2 + lengthof(p_mb.msg_account.account_URI) + c_CRlen; |
} |
if (isvalue(p_mb.msg_summary_line_list)) { |
for (i := 0; i < lengthof(p_mb.msg_summary_line_list); i := i + 1) { |
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.msg_summary_line_list[i].msg_context_class) + 2 + lengthof(p_mb.msg_summary_line_list[i].msgs); |
if (isvalue(p_mb.msg_summary_line_list[i].urgent_msgs)) { |
v_auxstring := valueof(p_mb.msg_summary_line_list[i].urgent_msgs); |
v_result := v_result + 1 + lengthof(v_auxstring); |
} |
} |
} |
if (isvalue(p_mb.opt_msg_headers)) { |
for (i := 0; i < lengthof(p_mb.opt_msg_headers); i := i + 1) { |
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.opt_msg_headers[i]); |
} |
} |
return v_result; |
} |
} |
group MIME_Len_calculation { |
/** |
* @desc Calculation of MIME length |
* @param p_mb contain MIME message |
* @return xml_length |
*/ |
function f_MIMElength( |
MIME_Message p_mb |
) return integer { |
var integer i; |
var integer v_result := 2; |
// 0d0a |
v_result := v_result + lengthof(p_mb.boundary) + 2 /*0d0a*/; |
for (i := 0; i < lengthof(p_mb.mimeEncapsulatedList); i := i + 1) { |
v_result := v_result + lengthof("Content-Type: ") + lengthof(p_mb.mimeEncapsulatedList[i].content_type) + 2 /*0d0a*/; |
if (isvalue(p_mb.mimeEncapsulatedList[i].content_disposition)) { |
v_result := v_result + lengthof("Content-Disposition: ") + lengthof(p_mb.mimeEncapsulatedList[i].content_disposition) + 2 /*0d0a*/; |
} |
// v_result := v_result +2/*0d0a*/; ??? to check |
// assume SDP_Message ONLY in the message body |
if (ischosen(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.sdpMessageBody)) { |
v_result := v_result + f_SDPlength(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.sdpMessageBody); |
} |
// assume XML_Body ONLY in the message body |
if (ischosen(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.xmlBody)) { |
v_result := v_result + f_XMLBody_Length(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.xmlBody, PX_USE_FX_FOR_XML_LENGTH); |
} |
// //assume XML_Message ONLY in the message body |
// if (ischosen(p_mb.mimeEncapsulatedList[i ] |
// .mime_encapsulated_part.xmlMessage)) |
// { |
// v_result := v_result + |
// f_XMLlength(p_mb.mimeEncapsulatedList[i ] |
// .mime_encapsulated_part.xmlMessage, |
// USE_FX_FOR_XML_LENGTH ); |
// }; |
// v_result := v_result +2/*0d0a*/; ??? to check |
} |
// v_result := v_result +2/*0d0a*/; ??? to check |
return v_result; |
} //* f_MIMElength |
} //* group MIMElen_calculation |
group TextPlain_Len_calculation { |
/** |
* @desc Calculation of messagebody-textplain type length |
* @param p_mb contain textplain message |
* @return lenght |
*/ |
function f_TextPlainLength( |
template(value) MessageBody p_mb |
) return integer { |
var integer v_result := 0; |
v_result := v_result + lengthof(p_mb.textplain); |
return v_result; |
} //* end function f_TextPlainLength |
} //* end group TextPlainLen_calculation |
} //* group MessageBody_Calculation |
group GiveHeaders { |
/** |
* @desc Return component variable of recordRoute header if vc_boo_recordRoute is true |
* @return component variable of recordRoute header |
*/ |
function f_recordroute( |
) runs on SipComponent |
return template(omit) RecordRoute { |
var template(omit) RecordRoute v_recordRoute := omit; |
if (vc_boo_recordRoute) { |
return vc_recordRoute; |
} |
else { |
return (v_recordRoute); |
} |
} |
/** |
* @desc Return component variable of Route header if vc_boo_route is true |
* @return component variable of recordRoute header |
*/ |
function f_route( |
) runs on SipComponent |
return template(omit) Route { |
var template(omit) Route v_route := omit; |
if (vc_boo_route) { |
return vc_route; |
} |
else { |
return (v_route); |
} |
} |
} //* end group GiveHeaders |
group others { |
/* |
* |
* @desc function combines two comma parameter lists |
* @param p_list1 first list |
* @param p_list2 second list |
* @return comma parameter list that contains parameters from both input lists |
* @verdict |
*/ |
function f_merge_CommaParam_List( |
template(value) CommaParam_List p_list1, |
template(value) CommaParam_List p_list2 |
) return template(value) CommaParam_List { |
var template(value) CommaParam_List p_result; |
var integer i, v_limit1 := lengthof(p_list1); |
for (i := 0; i < v_limit1; i := i + 1) { |
p_result[i] := p_list1[i]; |
} |
for (i := 0; i < lengthof(p_list2); i := i + 1) { |
p_result[i + v_limit1] := p_list2[i]; |
} |
return p_result; |
} |
} //* end group others |
} //* group TemplatePreparationFunctions |
} //* end module LibSip_Templates |
/trunk/ttcn/LibSip_XMLTypes.ttcn |
---|
1,124 → 1,112 |
/** |
* @author STF 346, STF366, STF368, STF369 |
* @version $Id$ |
* @desc This module provides the XML type system for SIP tests. |
* The types have been generated automatically, followed by manual modifications: |
* - bitType substituted by OneBitType |
* - twobitType substituted by TwoBitType |
* - addition of pattern for: OneBitType, TwoBitType, ThreeBitType, FourBitType, FourBitType, SixBitType |
* - application of enumerated for: State_type, Endpoint_status_type, Joining_type, Disconnection_type, Media_status_type, |
* Originating_identity_presentation_restriction, Terminating_identity_presentation_restriction |
* - addition of length value: NetworkIdentityType, SixteenbitType |
* - addition of value restriction: CugIndexType |
* - substitution of "content" by "choice": Call_type, Mcid |
* - additional type renaming (upper first letter): AbsService, Anonymous, Busy, |
* Communication_diverted, Conference_description_type, Conference_info, |
* Conference_media_type, Conference_medium_type, Conference_state_type, |
* Conference_type, Cug, CugRequestType, Empty_element_type, Endpoint_type, |
* Execution_type, Host_type, Keywords_type, Media, Media_type, No_answer, |
* Not_reachable, Not_registered, Originating_identity_presentation, Presence_status, |
* Presence_status_activity_type, RequestType, ResponseType, Roaming, |
* Rule_deactivated, Sidebars_by_val_type, Simservs, SimservType, |
* Terminating_identity_presentation, Uri_type, Uris_type, User_roles_type, |
* User_languages_type, User_type, Users_type |
* |
* - new group CDIV added by STF369 |
* - new group ACR_CD added by STF38 |
* - new types RegInfo and Pidf_Lo added by STF160 |
* |
* This module is part of LibSipV2. |
* @author STF 346, STF366, STF368, STF369, STF471 |
* @version $Id$ |
* @desc |
* This module provides the XML type system for SIP tests. The types have been generated automatically, followed by manual modifications: - bitType substituted by OneBitType - twobitType substituted by TwoBitType - addition of pattern for: OneBitType, TwoBitType, ThreeBitType, FourBitType, FourBitType, SixBitType - application of enumerated for: State_type, Endpoint_status_type, Joining_type, Disconnection_type, Media_status_type, Originating_identity_presentation_restriction, Terminating_identity_presentation_restriction - addition of length value: NetworkIdentityType, SixteenbitType - addition of value restriction: CugIndexType - substitution of "content" by "choice": Call_type, Mcid - additional type renaming (upper first letter): AbsService, Anonymous, Busy, Communication_diverted, |
* Conference_description_type, Conference_info, Conference_media_type, Conference_medium_type, Conference_state_type, Conference_type, Cug, CugRequestType, Empty_element_type, Endpoint_type, Execution_type, Host_type, Keywords_type, Media, Media_type, No_answer, Not_reachable, Not_registered, Originating_identity_presentation, Presence_status, Presence_status_activity_type, RequestType, ResponseType, Roaming, Rule_deactivated, Sidebars_by_val_type, Simservs, SimservType, Terminating_identity_presentation, Uri_type, Uris_type, User_roles_type, User_languages_type, User_type, Users_type - new group CDIV added by STF369 - new group ACR_CD added by STF38 - new types RegInfo and Pidf_Lo added by STF160. |
* This module is part of LibSipV3. |
*/ |
module LibSip_XMLTypes { |
import from http_www_w3_org_XML_1998_namespace language "XSD" all |
with { |
extension "File:../xsd/xml.xsd" |
extension "File:../xsd/xml.xsd"; |
} |
import from urn_ietf_params_xml_ns_common_policy language "XSD" all |
with { |
extension "File:../xsd/common-policy.xsd" |
extension "File:../xsd/common-policy.xsd"; |
} |
import from urn_ietf_params_xml_ns_resource_lists language "XSD" all |
with { |
extension "File:../xsd/ResourceList.xsd" |
extension "File:../xsd/ResourceList.xsd"; |
} |
import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all |
with { |
extension "File:../xsd/SupplementaryServices.xsd" |
extension "File:../xsd/SupplementaryServices.xsd"; |
} |
import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all |
with { |
extension "File:../xsd/MCID.xsd" |
extension "File:../xsd/MCID.xsd"; |
} |
import from NoTargetNamespace language "XSD" all |
with { |
extension "File:../xsd/Ims3gpp.xsd" |
extension "File:../xsd/Ims3gpp.xsd"; |
} |
import from urn_3gpp_ns_cw_1_0 language "XSD" all |
with { |
extension "File:../xsd/cw.xsd" |
with { |
extension "File:../xsd/cw.xsd"; |
} |
import from urn_ietf_params_xml_ns_conference_info language "XSD" all |
with { |
extension "File:../xsd/CONF.xsd" |
extension "File:../xsd/CONF.xsd"; |
} |
import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all |
with { |
extension "File:../xsd/PSTN.xsd" |
extension "File:../xsd/PSTN.xsd"; |
} |
import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all |
with { |
extension "File:../xsd/CDIVN.xsd" |
extension "File:../xsd/CDIVN.xsd"; |
} |
import from urn_oma_xml_xdm_common_policy language "XSD" all |
with { |
extension "File:../xsd/xdm_commonPolicy-v1_0.xsd" |
extension "File:../xsd/xdm_commonPolicy-v1_0.xsd"; |
} |
// RFC 3680 Registration Info |
import from urn_ietf_params_xml_ns_reginfo language "XSD" all |
with { |
extension "File:../xsd/regInfo.xsd" |
extension "File:../xsd/regInfo.xsd"; |
} |
// RFC 3863 Presence Information Data Format |
import from urn_ietf_params_xml_ns_pidf language "XSD" all |
with { |
extension "File:../xsd/pidf.xsd" |
extension "File:../xsd/pidf.xsd"; |
} |
// RFC 4119 Presence Information Data Format, Location Object extension |
// RFC 4119 Presence Information Data Format, Location Object extension |
import from urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy language "XSD" all |
with { |
extension "File:../xsd/geopriv10basic.xsd" |
extension "File:../xsd/geopriv10basic.xsd"; |
} |
// RFC 4119 Presence Information Data Format, Location Object extension |
// RFC 4119 Presence Information Data Format, Location Object extension |
import from urn_ietf_params_xml_ns_pidf_geopriv10 language "XSD" all |
with { |
extension "File:../xsd/pidf_lo.xsd" |
extension "File:../xsd/pidf_lo.xsd"; |
} |
group XmlTypes { |
type union XmlBody { |
Mcid mcid, // if there is XML Mcid |
Comm_div_info_type cdivn, // if there is XML cdivn |
Simservs simservs, // if there is XML simservs (Oip/r, Tip/r, Call Diversion, ICB, OCB ...) |
Conference_type conference, // if there is XML conf |
Ims_cw cw, // if there is XML cw (defined in X_3gpp_ns_cw_1_0.ttcn3view) |
Cug cug, // if there is XML cug (defined in org_etsi_uri__ngn_params_xml_simservs_xcap.ttcn3view) |
TIMS3GPP ims3gpp, // if there is XML IMS 3GPP |
PSTN_transit pstnTransit, // if there is XML PSTN_transit |
Resource_lists resourceLists, // if there is XML Resource List data |
Reginfo regInfo, // if it is a registration event |
Geopriv geopriv // if it is a Presence Information Data Format Location Object |
Mcid mcid, |
// if there is XML Mcid |
Comm_div_info_type cdivn, |
// if there is XML cdivn |
Simservs simservs, |
// if there is XML simservs (Oip/r, Tip/r, Call Diversion, ICB, OCB ...) |
Conference_type conference, |
// if there is XML conf |
Ims_cw cw, |
// if there is XML cw (defined in X_3gpp_ns_cw_1_0.ttcn3view) |
Cug cug, |
// if there is XML cug (defined in org_etsi_uri__ngn_params_xml_simservs_xcap.ttcn3view) |
TIMS3GPP ims3gpp, |
// if there is XML IMS 3GPP |
PSTN_transit pstnTransit, |
// if there is XML PSTN_transit |
Resource_lists resourceLists, |
// if there is XML Resource List data |
Reginfo regInfo, |
// if it is a registration event |
Geopriv |
geopriv // if it is a Presence Information Data Format Location Object |
} |
} |
} |
/trunk/xsd/ttcn3view/urn_ietf_params_xml_ns_common_policy.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/urn_3gpp_ns_cw_1_0.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/urn_ietf_params_xml_ns_reginfo.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/http_www_w3_org_XML_1998_namespace.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/urn_ietf_params_xml_ns_pidf_geopriv10.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/urn_oma_xml_xdm_common_policy.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/urn_ietf_params_xml_ns_pidf.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/NoTargetNamespace.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/urn_ietf_params_xml_ns_conference_info.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/urn_ietf_params_xml_ns_resource_lists.ttcn3view |
---|
File deleted |
/trunk/xsd/ttcn3view/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn3view |
---|
File deleted |
/trunk/xsd/ACR_CB.xsd |
---|
1,54 → 1,66 |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" |
xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" |
xmlns:ocp="urn:oma:xml:xdm:common-policy" |
targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<!-- import common policy definitions --> |
<xs:import namespace="urn:ietf:params:xml:ns:common-policy" schemaLocation="common-policy.xsd"/> |
<!-- import OMA common policy extensions --> |
<xs:import namespace="urn:oma:xml:xdm:common-policy" schemaLocation="xdm_commonPolicy-v1_0.xsd"/> |
<!-- incoming communication barring rule set based on the common policy rule set.--> |
<xs:element name="incoming-communication-barring" substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>This is the incoming communication barring configuration |
document.</xs:documentation> |
</xs:annotation> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="ss:simservType"> |
<xs:sequence> |
<!-- add service specific elements here--> |
<xs:element ref="cp:ruleset" minOccurs="0"/> |
</xs:sequence> |
</xs:extension> |
<!-- service specific attributes can be defined here --> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<!-- outgoing communication barring rule set based on the common policy rule set.--> |
<xs:element name="outgoing-communication-barring" substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>This is the outgoing communication barring configuration |
document.</xs:documentation> |
</xs:annotation> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="ss:simservType"> |
<xs:sequence> |
<!-- add service specific elements here--> |
<xs:element ref="cp:ruleset" minOccurs="0"/> |
</xs:sequence> |
</xs:extension> |
<!-- service specific attributes can be defined here --> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<!-- communication barring specific extensions to IETF common policy actions--> |
<xs:element name="allow" type="ss:allow-action-type"/> |
<!-- communication barring specific type declarations --> |
<!-- <xs:simpleType name="allow-action-type" final="list restriction"> --> |
<xs:simpleType name="allow-action-type"> |
<xs:restriction base="xs:boolean"/> |
</xs:simpleType> |
xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy" |
targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<!-- import common policy definitions --> |
<xs:import namespace="urn:ietf:params:xml:ns:common-policy" |
schemaLocation="common-policy.xsd" /> |
<!-- import OMA common policy extensions --> |
<xs:import namespace="urn:oma:xml:xdm:common-policy" |
schemaLocation="xdm_commonPolicy-v1_0.xsd" /> |
<!-- incoming communication barring rule set based on the common policy |
rule set. --> |
<xs:element name="incoming-communication-barring" |
substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>This is the incoming communication barring |
configuration document. |
</xs:documentation> |
</xs:annotation> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="ss:simservType"> |
<xs:sequence> |
<!-- add service specific elements here --> |
<xs:element ref="cp:ruleset" |
minOccurs="0" /> |
</xs:sequence> |
</xs:extension> |
<!-- service specific attributes can be defined here --> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<!-- outgoing communication barring rule set based on the common policy |
rule set. --> |
<xs:element name="outgoing-communication-barring" |
substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>This is the outgoing communication barring |
configuration |
document. |
</xs:documentation> |
</xs:annotation> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="ss:simservType"> |
<xs:sequence> |
<!-- add service specific elements here --> |
<xs:element ref="cp:ruleset" |
minOccurs="0" /> |
</xs:sequence> |
</xs:extension> |
<!-- service specific attributes can be defined here --> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<!-- communication barring specific extensions to IETF common policy |
actions --> |
<xs:element name="allow" type="ss:allow-action-type" /> |
<!-- communication barring specific type declarations --> |
<!-- <xs:simpleType name="allow-action-type" final="list restriction"> --> |
<xs:simpleType name="allow-action-type"> |
<xs:restriction base="xs:boolean" /> |
</xs:simpleType> |
</xs:schema> |
/trunk/xsd/CDIV.xsd |
---|
1,67 → 1,80 |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" |
xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
xmlns:cp="urn:ietf:params:xml:ns:common-policy" |
xmlns:ocp="urn:oma:xml:xdm:common-policy" |
targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<!-- import common policy definitions --> |
<xs:import namespace="urn:ietf:params:xml:ns:common-policy" schemaLocation="common-policy.xsd"/> |
<!-- import OMA common policy extensions --> |
<xs:import namespace="urn:oma:xml:xdm:common-policy" schemaLocation="xdm_commonPolicy-v1_0.xsd"/> |
<!-- communication diversion specific extensions to IETF common policy conditions. The |
cp:conditionsType is expanded with the elements: ss:not-registered, ss:busy, ss:no-answer, ss:notreachable, |
ss:media as optional elements --> |
<!-- communication diversion rule set based on the common policy rule set.--> |
<xs:element name="communication-diversion" substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>This is the communication diversion configuration |
document.</xs:documentation> |
</xs:annotation> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="ss:simservType"> |
<xs:sequence> |
<!-- add service specific elements here--> |
<xs:element ref="cp:ruleset" minOccurs="0"/> |
</xs:sequence> |
</xs:extension> |
<!-- service specific attributes can be defined here --> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<!-- communication diversion specific extensions to IETF common policy actions--> |
<xs:element name="forward-to" type="ss:forward-to-type"/> <xs:simpleType name="reveal-URIoptions-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="false"/> |
<xs:enumeration value="not-reveal-GRUU"/> |
<xs:enumeration value="true"/> |
</xs:restriction> |
</xs:simpleType> |
<!-- communication diversion specific type declarations --> |
<xs:complexType name="forward-to-type"> |
<xs:sequence> |
<xs:element name="target" type="xs:anyURI" minOccurs="1" maxOccurs="1"/> |
<xs:element name="notify-caller" type="xs:boolean" default="true" minOccurs="0"/> |
<xs:element name="reveal-identity-to-caller" type="ss:reveal-URIoptions-type" |
default="true" minOccurs="0"/> |
<xs:element name="reveal-served-user-identity-to-caller" type="ss:reveal-URIoptions-type" |
default="true" minOccurs="0"/> |
<xs:element name="notify-served-user" type="xs:boolean" default="false" minOccurs="0"/> |
<xs:element name="notify-served-user-on-outbound-call" type="xs:boolean" default="false" |
minOccurs="0"/> |
<xs:element name="reveal-identity-to-target" type="ss:reveal-URIoptions-type" |
default="true" minOccurs="0"/> |
<xs:element ref="ss:NoReplyTimer" minOccurs="0"/> |
</xs:sequence> |
</xs:complexType> |
<xs:element name="NoReplyTimer"> |
<xs:simpleType> |
<xs:restriction base="xs:positiveInteger"> |
<xs:minInclusive value="5"/> |
<xs:maxInclusive value="180"/> |
</xs:restriction> |
</xs:simpleType> |
</xs:element> |
xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy" |
targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<!-- import common policy definitions --> |
<xs:import namespace="urn:ietf:params:xml:ns:common-policy" |
schemaLocation="common-policy.xsd" /> |
<!-- import OMA common policy extensions --> |
<xs:import namespace="urn:oma:xml:xdm:common-policy" |
schemaLocation="xdm_commonPolicy-v1_0.xsd" /> |
<!-- communication diversion specific extensions to IETF common policy |
conditions. The cp:conditionsType is expanded with the elements: ss:not-registered, |
ss:busy, ss:no-answer, ss:notreachable, ss:media as optional elements --> |
<!-- communication diversion rule set based on the common policy rule |
set. --> |
<xs:element name="communication-diversion" |
substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>This is the communication diversion |
configuration |
document. |
</xs:documentation> |
</xs:annotation> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="ss:simservType"> |
<xs:sequence> |
<!-- add service specific elements here --> |
<xs:element ref="cp:ruleset" |
minOccurs="0" /> |
</xs:sequence> |
</xs:extension> |
<!-- service specific attributes can be defined here --> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<!-- communication diversion specific extensions to IETF common policy |
actions --> |
<xs:element name="forward-to" type="ss:forward-to-type" /> |
<xs:simpleType name="reveal-URIoptions-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="false" /> |
<xs:enumeration value="not-reveal-GRUU" /> |
<xs:enumeration value="true" /> |
</xs:restriction> |
</xs:simpleType> |
<!-- communication diversion specific type declarations --> |
<xs:complexType name="forward-to-type"> |
<xs:sequence> |
<xs:element name="target" type="xs:anyURI" |
minOccurs="1" maxOccurs="1" /> |
<xs:element name="notify-caller" type="xs:boolean" |
default="true" minOccurs="0" /> |
<xs:element name="reveal-identity-to-caller" |
type="ss:reveal-URIoptions-type" default="true" |
minOccurs="0" /> |
<xs:element name="reveal-served-user-identity-to-caller" |
type="ss:reveal-URIoptions-type" default="true" |
minOccurs="0" /> |
<xs:element name="notify-served-user" type="xs:boolean" |
default="false" minOccurs="0" /> |
<xs:element name="notify-served-user-on-outbound-call" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:element name="reveal-identity-to-target" |
type="ss:reveal-URIoptions-type" default="true" |
minOccurs="0" /> |
<xs:element ref="ss:NoReplyTimer" minOccurs="0" /> |
</xs:sequence> |
</xs:complexType> |
<xs:element name="NoReplyTimer"> |
<xs:simpleType> |
<xs:restriction base="xs:positiveInteger"> |
<xs:minInclusive value="5" /> |
<xs:maxInclusive value="180" /> |
</xs:restriction> |
</xs:simpleType> |
</xs:element> |
</xs:schema> |
/trunk/xsd/CDIVN.xsd |
---|
1,249 → 1,226 |
<?xml version="1.0" encoding="UTF-8" ?> |
<xs:schema targetNamespace="http://uri.etsi.org/ngn/params/xml/comm-div-info" |
xmlns:tns="http://uri.etsi.org/ngn/params/xml/comm-div-info" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://uri.etsi.org/ngn/params/xml/comm-div-info" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<!-- This import brings in the XML language definition --> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd" /> |
<!-- Communication Diversion Information. This is the top-level XML element --> |
<xs:element name="comm-div-info" type="comm-div-info-type" /> |
<!-- Communication Diversion Information Type. This is the top-level |
XML element --> |
<xs:complexType name="comm-div-info-type"> |
<xs:sequence> |
<xs:element name="comm-div-subs-info" type="comm-div-subs-info-type" |
minOccurs="0" /> |
<xs:element name="comm-div-ntfy-info" type="comm-div-ntfy-info-type" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="entity" type="xs:anyURI" use="required" /> |
</xs:complexType> |
<!--- Communication Diversion Subscription Type. Used at Subscription |
time to select Communication Diversions for notification, when to notify |
them and what to notify. --> |
<xs:complexType name="comm-div-subs-info-type"> |
<xs:sequence> |
<xs:element name="comm-div-selection-criteria" |
type="comm-div-selection-criteria-type" minOccurs="0" /> |
<xs:element name="comm-div-ntfy-trigger-criteria" |
type="comm-div-ntfy-trigger-criteria-type" minOccurs="0" /> |
<xs:element name="comm-div-info-selection-criteria" |
type="comm-div-info-selection-criteria-type" minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!--- Communication Diversion Notification Information Type Used while |
notifying the User about the Communication Diversion --> |
<xs:complexType name="comm-div-ntfy-info-type"> |
<xs:sequence> |
<xs:element name="originating-user-info" type="user-info-type" |
minOccurs="0" /> |
<xs:element name="diverting-user-info" type="xs:anyURI" |
minOccurs="0" /> |
<xs:element name="diverted-to-user-info" type="xs:anyURI" |
minOccurs="0" /> |
<xs:element name="diversion-time-info" type="xs:dateTime" |
minOccurs="0" /> |
<xs:element name="diversion-reason-info" type="diversion-reason-info-type" |
minOccurs="0" /> |
<xs:element name="diversion-rule-info" type="diversion-rule-info-type" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
<xs:element name="previous-cdivn-state" type="cdivn-states-types" |
minOccurs="0" maxOccurs="1" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- COMMUNICATION DIVERSION SELECTION CRITERIA --> |
<xs:complexType name="comm-div-selection-criteria-type"> |
<xs:sequence> |
<xs:element name="originating-user-selection-criteria" |
type="user-selection-criteria-type" minOccurs="0" /> |
<xs:element name="diverting-user-selection-criteria" |
type="xs:anyURI" minOccurs="0" /> |
<xs:element name="diverted-to-user-selection-criteria" |
type="xs:anyURI" minOccurs="0" /> |
<xs:element name="diversion-time-selection-criteria" |
type="time-range-selection-criteria-type" minOccurs="0" /> |
<xs:element name="diversion-reason-selection-criteria" |
type="diversion-reason-selection-criteria-type" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- COMMUNICATION DIVERSION NOTIFICATION TRIGGER CRITERIA --> |
<xs:complexType name="comm-div-ntfy-trigger-criteria-type"> |
<xs:sequence> |
<xs:element name="notification-time-selection-criteria" |
type="time-range-selection-criteria-type" minOccurs="0" /> |
<xs:element name="presence-status-selection-criteria" |
type="presence-status-selection-criteria-type" |
minOccurs="0" /> |
<xs:element name="notification-buffer-interval" |
minOccurs="0" default="86400"> |
<xs:simpleType> |
<xs:restriction base="xs:integer"> |
<xs:maxInclusive value="86400" /> |
</xs:restriction> |
</xs:simpleType> |
</xs:element> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- COMMUNICATION DIVERSION INFORMATION SELECTION CRITERIA --> |
<xs:complexType name="comm-div-info-selection-criteria-type"> |
<xs:sequence> |
<xs:element name="disable-originating-user-info" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:element name="disable-diverting-user-info" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:element name="disable-diverted-to-user-info" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:element name="disable-diversion-time-info" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:element name="disable-diversion-reason-info" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:element name="disable-diversion-rule-info" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<xs:schema |
targetNamespace="http://uri.etsi.org/ngn/params/xml/comm-div-info" |
xmlns:tns="http://uri.etsi.org/ngn/params/xml/comm-div-info" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
xmlns="http://uri.etsi.org/ngn/params/xml/comm-div-info" |
elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<!-- |
This import brings in the XML language definition |
--> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd"/> |
<!-- |
Communication Diversion Information. This is the top-level XML element |
--> |
<xs:element name="comm-div-info" |
type="comm-div-info-type" /> |
<!-- |
Communication Diversion Information Type. This is the top-level XML element |
--> |
<xs:complexType name="comm-div-info-type"> |
<xs:sequence> |
<xs:element name="comm-div-subs-info" |
type="comm-div-subs-info-type" minOccurs="0" /> |
<xs:element name="comm-div-ntfy-info" |
type="comm-div-ntfy-info-type" minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="entity" type="xs:anyURI" |
use="required"/> |
</xs:complexType> |
<!--- |
Communication Diversion Subscription Type. |
Used at Subscription time to |
select Communication Diversions for notification, |
when to notify them and |
what to notify. |
--> |
<xs:complexType name="comm-div-subs-info-type"> |
<xs:sequence> |
<xs:element name="comm-div-selection-criteria" |
type="comm-div-selection-criteria-type" |
minOccurs="0" /> |
<xs:element name="comm-div-ntfy-trigger-criteria" |
type="comm-div-ntfy-trigger-criteria-type" |
minOccurs="0" /> |
<xs:element name="comm-div-info-selection-criteria" |
type="comm-div-info-selection-criteria-type" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!--- |
Communication Diversion Notification Information Type |
Used while notifying the User about the Communication Diversion |
--> |
<xs:complexType name="comm-div-ntfy-info-type"> |
<xs:sequence> |
<xs:element name="originating-user-info" |
type="user-info-type" minOccurs="0" /> |
<xs:element name="diverting-user-info" |
type="xs:anyURI" minOccurs="0" /> |
<xs:element name="diverted-to-user-info" |
type="xs:anyURI" minOccurs="0" /> |
<xs:element name="diversion-time-info" |
type="xs:dateTime" minOccurs="0" /> |
<xs:element name="diversion-reason-info" |
type="diversion-reason-info-type" minOccurs="0" /> |
<xs:element name="diversion-rule-info" |
type="diversion-rule-info-type" minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
COMMUNICATION DIVERSION SELECTION CRITERIA |
--> |
<xs:complexType name="comm-div-selection-criteria-type"> |
<xs:sequence> |
<xs:element name="originating-user-selection-criteria" |
type="user-selection-criteria-type" |
minOccurs="0" /> |
<xs:element name="diverting-user-selection-criteria" |
type="xs:anyURI" |
minOccurs="0" /> |
<xs:element name="diverted-to-user-selection-criteria" |
type="xs:anyURI" |
minOccurs="0" /> |
<xs:element name="diversion-time-selection-criteria" |
type="time-range-selection-criteria-type" |
minOccurs="0" /> |
<xs:element name="diversion-reason-selection-criteria" |
type="diversion-reason-selection-criteria-type" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
COMMUNICATION DIVERSION NOTIFICATION TRIGGER CRITERIA |
--> |
<xs:complexType name="comm-div-ntfy-trigger-criteria-type"> |
<xs:sequence> |
<xs:element name="notification-time-selection-criteria" |
type="time-range-selection-criteria-type" |
minOccurs="0" /> |
<xs:element name="presence-status-selection-criteria" |
type="presence-status-selection-criteria-type" |
minOccurs="0" /> |
<xs:element name="notification-buffer-interval" minOccurs="0" default="86400"> |
<xs:simpleType> |
<xs:restriction base="xs:integer"> |
<xs:maxInclusive value="86400"/> |
</xs:restriction> |
</xs:simpleType> |
</xs:element> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
COMMUNICATION DIVERSION INFORMATION SELECTION CRITERIA |
--> |
<xs:complexType name="comm-div-info-selection-criteria-type"> |
<xs:sequence> |
<xs:element name="disable-originating-user-info" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:element name="disable-diverting-user-info" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:element name="disable-diverted-to-user-info" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:element name="disable-diversion-time-info" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:element name="disable-diversion-reason-info" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:element name="disable-diversion-rule-info" |
type="xs:boolean" default="false" minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- User Info Type --> |
<xs:complexType name="user-info-type"> |
<xs:sequence> |
<xs:element name="user-name" type="xs:string" |
minOccurs="0" maxOccurs="1" /> |
<xs:element name="user-URI" type="xs:anyURI" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- CDIVN FSM STATES --> |
<xs:simpleType name="cdivn-states-types"> |
<xs:list itemType="cdivn-states-type" /> |
</xs:simpleType> |
<xs:simpleType name="cdivn-states-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="IDLE" /> |
<xs:enumeration value="DIVERSION_NOTIFIED" /> |
<xs:enumeration value="DIVERSION_NOT_NOTIFIED" /> |
</xs:restriction> |
</xs:simpleType> |
<!-- DIVERSION REASON INFO --> |
<!-- User Info Type --> |
<xs:complexType name="user-info-type"> |
<xs:sequence> |
<xs:element name="user-name" type="xs:string" minOccurs="0" maxOccurs="1"/> |
<xs:element name="user-URI" type="xs:anyURI"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
DIVERSION REASON INFO |
--> |
<xs:simpleType name="diversion-reason-info-types"> |
<xs:list itemType="diversion-reason-info-type"/> |
<xs:list itemType="diversion-reason-info-type" /> |
</xs:simpleType> |
<xs:simpleType name="diversion-reason-info-type"> |
<xs:simpleType name="diversion-reason-info-type"> |
<xs:restriction base="xs:integer"> |
<xs:enumeration value="404"/> |
<xs:enumeration value="486"/> |
<xs:enumeration value="408"/> |
<xs:enumeration value="302"/> |
<xs:enumeration value="487"/> |
<xs:enumeration value="480"/> |
<xs:enumeration value="503"/> |
<xs:enumeration value="404" /> |
<xs:enumeration value="486" /> |
<xs:enumeration value="408" /> |
<xs:enumeration value="302" /> |
<xs:enumeration value="487" /> |
<xs:enumeration value="480" /> |
<xs:enumeration value="503" /> |
</xs:restriction> |
</xs:simpleType> |
<!-- |
DIVERSION RULE INFO |
--> |
<xs:complexType name="diversion-rule-info-type"> |
<xs:sequence> |
<xs:element name="diversion-rule" type="xs:string"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
ORIGINATING USER SELECTION CRITERIA |
--> |
<xs:complexType name="user-selection-criteria-type"> |
<xs:sequence> |
<xs:element name="user-info" |
type="user-info-type" minOccurs="0" |
maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
DIVERSION REASON SELECTION CRITERIA |
--> |
<xs:complexType name="diversion-reason-selection-criteria-type"> |
<xs:sequence> |
<xs:element name="diversion-reason-info" |
type="diversion-reason-info-types"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
TIME RANGE SELECTION CRITERIA |
--> |
<xs:complexType name="time-range-selection-criteria-type"> |
<xs:sequence> |
<xs:element name="time-range" |
type="time-range-type" minOccurs="0" |
maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
TIME RANGE INFO |
--> |
<xs:complexType name="time-range-type"> |
<xs:sequence> |
<xs:element name="start-time" type="xs:dateTime" /> |
<xs:element name="end-time" type="xs:dateTime" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
PRESENCE STATUS SELECTION CRITERIA |
--> |
<xs:complexType name="presence-status-selection-criteria-type"> |
<xs:sequence> |
<xs:element name="presence-status-info" |
type="presence-status-info-type" minOccurs="0" |
maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
PRESENCE STATUS INFo |
--> |
<xs:complexType name="presence-status-info-type"> |
<xs:sequence> |
<xs:element name="presence-status" type="xs:string" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
</xs:schema> |
</xs:simpleType> |
<!-- DIVERSION RULE INFO --> |
<xs:complexType name="diversion-rule-info-type"> |
<xs:sequence> |
<xs:element name="diversion-rule" type="xs:string" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- ORIGINATING USER SELECTION CRITERIA --> |
<xs:complexType name="user-selection-criteria-type"> |
<xs:sequence> |
<xs:element name="user-info" type="user-info-type" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- DIVERSION REASON SELECTION CRITERIA --> |
<xs:complexType name="diversion-reason-selection-criteria-type"> |
<xs:sequence> |
<xs:element name="diversion-reason-info" type="diversion-reason-info-types" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- TIME RANGE SELECTION CRITERIA --> |
<xs:complexType name="time-range-selection-criteria-type"> |
<xs:sequence> |
<xs:element name="time-range" type="time-range-type" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- TIME RANGE INFO --> |
<xs:complexType name="time-range-type"> |
<xs:sequence> |
<xs:element name="start-time" type="xs:dateTime" /> |
<xs:element name="end-time" type="xs:dateTime" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- PRESENCE STATUS SELECTION CRITERIA --> |
<xs:complexType name="presence-status-selection-criteria-type"> |
<xs:sequence> |
<xs:element name="presence-status-info" type="presence-status-info-type" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- PRESENCE STATUS INFo --> |
<xs:complexType name="presence-status-info-type"> |
<xs:sequence> |
<xs:element name="presence-status" type="xs:string" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
</xs:schema> |
/trunk/xsd/CONF.xsd |
---|
1,387 → 1,342 |
<?xml version="1.0" encoding="UTF-8" ?> |
<xs:schema |
targetNamespace="urn:ietf:params:xml:ns:conference-info" |
xmlns:tns="urn:ietf:params:xml:ns:conference-info" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
xmlns="urn:ietf:params:xml:ns:conference-info" |
elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<!-- |
This imports the xml:language definition |
--> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd"/> |
<!-- |
CONFERENCE ELEMENT |
--> |
<xs:element name="conference-info" type="conference-type"/> |
<!-- |
CONFERENCE TYPE |
--> |
<xs:complexType name="conference-type"> |
<xs:sequence> |
<xs:element name="conference-description" |
type="conference-description-type" minOccurs="0"/> |
<xs:element name="host-info" |
type="host-type" minOccurs="0"/> |
<xs:element name="conference-state" |
type="conference-state-type" minOccurs="0"/> |
<xs:element name="users" |
type="users-type" minOccurs="0"/> |
<xs:element name="sidebars-by-ref" |
type="uris-type" minOccurs="0"/> |
<xs:element name="sidebars-by-val" |
type="sidebars-by-val-type" minOccurs="0"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="entity" |
type="xs:anyURI" use="required"/> |
<xs:attribute name="state" |
type="state-type" use="optional" default="full"/> |
<xs:attribute name="version" |
type="xs:unsignedInt" use="optional"/> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
STATE TYPE |
--> |
<xs:simpleType name="state-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="full"/> |
<xs:enumeration value="partial"/> |
<xs:enumeration value="deleted"/> |
</xs:restriction> |
</xs:simpleType> |
<!-- |
CONFERENCE DESCRIPTION TYPE |
--> |
<xs:complexType name="conference-description-type"> |
<xs:sequence> |
<xs:element name="display-text" |
type="xs:string" minOccurs="0"/> |
<xs:element name="subject" |
type="xs:string" minOccurs="0"/> |
<xs:element name="free-text" |
type="xs:string" minOccurs="0"/> |
<xs:element name="keywords" |
type="keywords-type" minOccurs="0"/> |
<xs:element name="conf-uris" |
type="uris-type" minOccurs="0"/> |
<xs:element name="service-uris" |
type="uris-type" minOccurs="0"/> |
<xs:element name="maximum-user-count" |
type="xs:unsignedInt" minOccurs="0"/> |
<xs:element name="available-media" |
type="conference-media-type" minOccurs="0"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
HOST TYPE |
--> |
<xs:complexType name="host-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0"/> |
<xs:element name="web-page" type="xs:anyURI" |
minOccurs="0"/> |
<xs:element name="uris" type="uris-type" |
minOccurs="0"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
CONFERENCE STATE TYPE |
--> |
<xs:complexType name="conference-state-type"> |
<xs:sequence> |
<xs:element name="user-count" type="xs:unsignedInt" |
minOccurs="0"/> |
<xs:element name="active" type="xs:boolean" |
minOccurs="0"/> |
<xs:element name="locked" type="xs:boolean" |
minOccurs="0"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
CONFERENCE MEDIA TYPE |
--> |
<xs:complexType name="conference-media-type"> |
<xs:sequence> |
<xs:element name="entry" type="conference-medium-type" |
maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
CONFERENCE MEDIUM TYPE |
--> |
<xs:complexType name="conference-medium-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0"/> |
<xs:element name="type" type="xs:string"/> |
<xs:element name="status" type="media-status-type" |
minOccurs="0"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="label" type="xs:string" |
use="required"/> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
URIs TYPE |
--> |
<xs:complexType name="uris-type"> |
<xs:sequence> |
<xs:element name="entry" type="uri-type" |
maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="state" type="state-type" |
use="optional" default="full"/> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
URI TYPE |
--> |
<xs:complexType name="uri-type"> |
<xs:sequence> |
<xs:element name="uri" type="xs:anyURI"/> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0"/> |
<xs:element name="purpose" type="xs:string" |
minOccurs="0"/> |
<xs:element name="modified" type="execution-type" |
minOccurs="0"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
KEYWORDS TYPE |
--> |
<xs:simpleType name="keywords-type"> |
<xs:list itemType="xs:string"/> |
</xs:simpleType> |
<!-- |
USERS TYPE |
--> |
<xs:complexType name="users-type"> |
<xs:sequence> |
<xs:element name="user" type="user-type" |
minOccurs="0" maxOccurs="unbounded"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="state" type="state-type" |
use="optional" default="full"/> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
USER TYPE |
--> |
<xs:complexType name="user-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0"/> |
<xs:element name="associated-aors" type="uris-type" |
minOccurs="0"/> |
<xs:element name="roles" type="user-roles-type" |
minOccurs="0"/> |
<xs:element name="languages" type="user-languages-type" |
minOccurs="0"/> |
<xs:element name="cascaded-focus" type="xs:anyURI" |
minOccurs="0"/> |
<xs:element name="endpoint" type="endpoint-type" |
minOccurs="0" maxOccurs="unbounded"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="entity" type="xs:anyURI"/> |
<xs:attribute name="state" type="state-type" |
use="optional" default="full"/> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
USER ROLES TYPE |
--> |
<xs:complexType name="user-roles-type"> |
<xs:sequence> |
<xs:element name="entry" type="xs:string" |
maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
USER LANGUAGES TYPE |
--> |
<xs:simpleType name="user-languages-type"> |
<xs:list itemType="xs:language"/> |
</xs:simpleType> |
<!-- |
ENDPOINT TYPE |
--> |
<xs:complexType name="endpoint-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0"/> |
<xs:element name="referred" type="execution-type" |
minOccurs="0"/> |
<xs:element name="status" type="endpoint-status-type" |
minOccurs="0"/> |
<xs:element name="joining-method" type="joining-type" |
minOccurs="0"/> |
<xs:element name="joining-info" |
type="execution-type" |
minOccurs="0"/> |
<xs:element name="disconnection-method" |
type="disconnection-type" |
minOccurs="0"/> |
<xs:element name="disconnection-info" |
type="execution-type" |
minOccurs="0"/> |
<xs:element name="media" type="media-type" |
minOccurs="0" maxOccurs="unbounded"/> |
<xs:element name="call-info" type="call-type" |
minOccurs="0"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="entity" type="xs:string"/> |
<xs:attribute name="state" type="state-type" |
use="optional" default="full"/> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
ENDPOINT STATUS TYPE |
--> |
<xs:simpleType name="endpoint-status-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="pending"/> |
<xs:enumeration value="dialing-out"/> |
<xs:enumeration value="dialing-in"/> |
<xs:enumeration value="alerting"/> |
<xs:enumeration value="on-hold"/> |
<xs:enumeration value="connected"/> |
<xs:enumeration value="muted-via-focus"/> |
<xs:enumeration value="disconnecting"/> |
<xs:enumeration value="disconnected"/> |
</xs:restriction> |
</xs:simpleType> |
<!-- |
JOINING TYPE |
--> |
<xs:simpleType name="joining-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="dialed-in"/> |
<xs:enumeration value="dialed-out"/> |
<xs:enumeration value="focus-owner"/> |
</xs:restriction> |
</xs:simpleType> |
<!-- |
DISCONNECTION TYPE |
--> |
<xs:simpleType name="disconnection-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="departed"/> |
<xs:enumeration value="booted"/> |
<xs:enumeration value="failed"/> |
<xs:enumeration value="busy"/> |
</xs:restriction> |
</xs:simpleType> |
<!-- |
EXECUTION TYPE |
--> |
<xs:complexType name="execution-type"> |
<xs:sequence> |
<xs:element name="when" type="xs:dateTime" |
minOccurs="0"/> |
<xs:element name="reason" type="xs:string" |
minOccurs="0"/> |
<xs:element name="by" type="xs:anyURI" |
minOccurs="0"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
CALL TYPE |
--> |
<xs:complexType name="call-type"> |
<xs:choice> |
<xs:element name="sip" type="sip-dialog-id-type"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:choice> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
SIP DIALOG ID TYPE |
--> |
<xs:complexType name="sip-dialog-id-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0"/> |
<xs:element name="call-id" type="xs:string"/> |
<xs:element name="from-tag" type="xs:string"/> |
<xs:element name="to-tag" type="xs:string"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
MEDIA TYPE |
--> |
<xs:complexType name="media-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0"/> |
<xs:element name="type" type="xs:string" |
minOccurs="0"/> |
<xs:element name="label" type="xs:string" |
minOccurs="0"/> |
<xs:element name="src-id" type="xs:string" |
minOccurs="0"/> |
<xs:element name="status" type="media-status-type" |
minOccurs="0"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="id" type="xs:string" |
use="required"/> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
<!-- |
MEDIA STATUS TYPE |
--> |
<xs:simpleType name="media-status-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="recvonly"/> |
<xs:enumeration value="sendonly"/> |
<xs:enumeration value="sendrecv"/> |
<xs:enumeration value="inactive"/> |
</xs:restriction> |
</xs:simpleType> |
<!-- |
SIDEBARS BY VAL TYPE |
--> |
<xs:complexType name="sidebars-by-val-type"> |
<xs:schema targetNamespace="urn:ietf:params:xml:ns:conference-info" |
xmlns:tns="urn:ietf:params:xml:ns:conference-info" xmlns:xs="http://www.w3.org/2001/XMLSchema" |
xmlns="urn:ietf:params:xml:ns:conference-info" elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<!-- This imports the xml:language definition --> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd" /> |
<!-- CONFERENCE ELEMENT --> |
<xs:element name="conference-info" type="conference-type" /> |
<!-- CONFERENCE TYPE --> |
<xs:complexType name="conference-type"> |
<xs:sequence> |
<xs:element name="entry" type="conference-type" |
minOccurs="0" maxOccurs="unbounded"/> |
<xs:element name="conference-description" type="conference-description-type" |
minOccurs="0" /> |
<xs:element name="host-info" type="host-type" |
minOccurs="0" /> |
<xs:element name="conference-state" type="conference-state-type" |
minOccurs="0" /> |
<xs:element name="users" type="users-type" |
minOccurs="0" /> |
<xs:element name="sidebars-by-ref" type="uris-type" |
minOccurs="0" /> |
<xs:element name="sidebars-by-val" type="sidebars-by-val-type" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="state" type="state-type" |
use="optional" default="full"/> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
</xs:complexType> |
</xs:schema> |
<xs:attribute name="entity" type="xs:anyURI" use="required" /> |
<xs:attribute name="state" type="state-type" use="optional" |
default="full" /> |
<xs:attribute name="version" type="xs:unsignedInt" |
use="optional" /> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- STATE TYPE --> |
<xs:simpleType name="state-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="full" /> |
<xs:enumeration value="partial" /> |
<xs:enumeration value="deleted" /> |
</xs:restriction> |
</xs:simpleType> |
<!-- CONFERENCE DESCRIPTION TYPE --> |
<xs:complexType name="conference-description-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0" /> |
<xs:element name="subject" type="xs:string" |
minOccurs="0" /> |
<xs:element name="free-text" type="xs:string" |
minOccurs="0" /> |
<xs:element name="keywords" type="keywords-type" |
minOccurs="0" /> |
<xs:element name="conf-uris" type="uris-type" |
minOccurs="0" /> |
<xs:element name="service-uris" type="uris-type" |
minOccurs="0" /> |
<xs:element name="maximum-user-count" type="xs:unsignedInt" |
minOccurs="0" /> |
<xs:element name="available-media" type="conference-media-type" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- HOST TYPE --> |
<xs:complexType name="host-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0" /> |
<xs:element name="web-page" type="xs:anyURI" |
minOccurs="0" /> |
<xs:element name="uris" type="uris-type" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- CONFERENCE STATE TYPE --> |
<xs:complexType name="conference-state-type"> |
<xs:sequence> |
<xs:element name="user-count" type="xs:unsignedInt" |
minOccurs="0" /> |
<xs:element name="active" type="xs:boolean" |
minOccurs="0" /> |
<xs:element name="locked" type="xs:boolean" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- CONFERENCE MEDIA TYPE --> |
<xs:complexType name="conference-media-type"> |
<xs:sequence> |
<xs:element name="entry" type="conference-medium-type" |
maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- CONFERENCE MEDIUM TYPE --> |
<xs:complexType name="conference-medium-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0" /> |
<xs:element name="type" type="xs:string" /> |
<xs:element name="status" type="media-status-type" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="label" type="xs:string" use="required" /> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- URIs TYPE --> |
<xs:complexType name="uris-type"> |
<xs:sequence> |
<xs:element name="entry" type="uri-type" |
maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="state" type="state-type" use="optional" |
default="full" /> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- URI TYPE --> |
<xs:complexType name="uri-type"> |
<xs:sequence> |
<xs:element name="uri" type="xs:anyURI" /> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0" /> |
<xs:element name="purpose" type="xs:string" |
minOccurs="0" /> |
<xs:element name="modified" type="execution-type" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- KEYWORDS TYPE --> |
<xs:simpleType name="keywords-type"> |
<xs:list itemType="xs:string" /> |
</xs:simpleType> |
<!-- USERS TYPE --> |
<xs:complexType name="users-type"> |
<xs:sequence> |
<xs:element name="user" type="user-type" |
minOccurs="0" maxOccurs="unbounded" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="state" type="state-type" use="optional" |
default="full" /> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- USER TYPE --> |
<xs:complexType name="user-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0" /> |
<xs:element name="associated-aors" type="uris-type" |
minOccurs="0" /> |
<xs:element name="roles" type="user-roles-type" |
minOccurs="0" /> |
<xs:element name="languages" type="user-languages-type" |
minOccurs="0" /> |
<xs:element name="cascaded-focus" type="xs:anyURI" |
minOccurs="0" /> |
<xs:element name="endpoint" type="endpoint-type" |
minOccurs="0" maxOccurs="unbounded" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="entity" type="xs:anyURI" /> |
<xs:attribute name="state" type="state-type" use="optional" |
default="full" /> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- USER ROLES TYPE --> |
<xs:complexType name="user-roles-type"> |
<xs:sequence> |
<xs:element name="entry" type="xs:string" |
maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- USER LANGUAGES TYPE --> |
<xs:simpleType name="user-languages-type"> |
<xs:list itemType="xs:language" /> |
</xs:simpleType> |
<!-- ENDPOINT TYPE --> |
<xs:complexType name="endpoint-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0" /> |
<xs:element name="referred" type="execution-type" |
minOccurs="0" /> |
<xs:element name="status" type="endpoint-status-type" |
minOccurs="0" /> |
<xs:element name="joining-method" type="joining-type" |
minOccurs="0" /> |
<xs:element name="joining-info" type="execution-type" |
minOccurs="0" /> |
<xs:element name="disconnection-method" type="disconnection-type" |
minOccurs="0" /> |
<xs:element name="disconnection-info" type="execution-type" |
minOccurs="0" /> |
<xs:element name="media" type="media-type" |
minOccurs="0" maxOccurs="unbounded" /> |
<xs:element name="call-info" type="call-type" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="entity" type="xs:string" /> |
<xs:attribute name="state" type="state-type" use="optional" |
default="full" /> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- ENDPOINT STATUS TYPE --> |
<xs:simpleType name="endpoint-status-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="pending" /> |
<xs:enumeration value="dialing-out" /> |
<xs:enumeration value="dialing-in" /> |
<xs:enumeration value="alerting" /> |
<xs:enumeration value="on-hold" /> |
<xs:enumeration value="connected" /> |
<xs:enumeration value="muted-via-focus" /> |
<xs:enumeration value="disconnecting" /> |
<xs:enumeration value="disconnected" /> |
</xs:restriction> |
</xs:simpleType> |
<!-- JOINING TYPE --> |
<xs:simpleType name="joining-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="dialed-in" /> |
<xs:enumeration value="dialed-out" /> |
<xs:enumeration value="focus-owner" /> |
</xs:restriction> |
</xs:simpleType> |
<!-- DISCONNECTION TYPE --> |
<xs:simpleType name="disconnection-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="departed" /> |
<xs:enumeration value="booted" /> |
<xs:enumeration value="failed" /> |
<xs:enumeration value="busy" /> |
</xs:restriction> |
</xs:simpleType> |
<!-- EXECUTION TYPE --> |
<xs:complexType name="execution-type"> |
<xs:sequence> |
<xs:element name="when" type="xs:dateTime" |
minOccurs="0" /> |
<xs:element name="reason" type="xs:string" |
minOccurs="0" /> |
<xs:element name="by" type="xs:anyURI" minOccurs="0" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- CALL TYPE --> |
<xs:complexType name="call-type"> |
<xs:choice> |
<xs:element name="sip" type="sip-dialog-id-type" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:choice> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- SIP DIALOG ID TYPE --> |
<xs:complexType name="sip-dialog-id-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0" /> |
<xs:element name="call-id" type="xs:string" /> |
<xs:element name="from-tag" type="xs:string" /> |
<xs:element name="to-tag" type="xs:string" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- MEDIA TYPE --> |
<xs:complexType name="media-type"> |
<xs:sequence> |
<xs:element name="display-text" type="xs:string" |
minOccurs="0" /> |
<xs:element name="type" type="xs:string" |
minOccurs="0" /> |
<xs:element name="label" type="xs:string" |
minOccurs="0" /> |
<xs:element name="src-id" type="xs:string" |
minOccurs="0" /> |
<xs:element name="status" type="media-status-type" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="id" type="xs:string" use="required" /> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<!-- MEDIA STATUS TYPE --> |
<xs:simpleType name="media-status-type"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="recvonly" /> |
<xs:enumeration value="sendonly" /> |
<xs:enumeration value="sendrecv" /> |
<xs:enumeration value="inactive" /> |
</xs:restriction> |
</xs:simpleType> |
<!-- SIDEBARS BY VAL TYPE --> |
<xs:complexType name="sidebars-by-val-type"> |
<xs:sequence> |
<xs:element name="entry" type="conference-type" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="state" type="state-type" use="optional" |
default="full" /> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
</xs:schema> |
/trunk/xsd/Ims3gpp.xsd |
---|
1,60 → 1,66 |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1"> |
<xs:complexType name="tIMS3GPP"> |
<xs:sequence> |
<xs:choice> |
<xs:element name="alternative-service" type="tAlternativeService"/> |
<xs:element name="service-info" type="xs:string"/> |
</xs:choice> |
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="version" type="xs:decimal" use="required"/> |
<xs:anyAttribute/> |
</xs:complexType> |
<xs:complexType name="tAlternativeService"> |
<xs:sequence> |
<xs:element name="type" type="tType"/> |
<xs:element name="reason" type="xs:string"/> |
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute/> |
</xs:complexType> |
<xs:complexType name="tType"> |
<xs:sequence> |
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute/> |
</xs:complexType> |
<xs:complexType name="tAction"> |
<xs:sequence> |
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:anyAttribute/> |
</xs:complexType> |
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" attributeFormDefault="unqualified" |
version="1"> |
<xs:complexType name="tIMS3GPP"> |
<xs:sequence> |
<xs:choice> |
<xs:element name="alternative-service" type="tAlternativeService" /> |
<xs:element name="service-info" type="xs:string" /> |
</xs:choice> |
<xs:any namespace="##any" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="version" type="xs:decimal" use="required" /> |
<xs:anyAttribute /> |
</xs:complexType> |
<xs:complexType name="tAlternativeService"> |
<xs:sequence> |
<xs:element name="type" type="tType" /> |
<xs:element name="reason" type="xs:string" /> |
<xs:any namespace="##any" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute /> |
</xs:complexType> |
<xs:complexType name="tType"> |
<xs:sequence> |
<xs:any namespace="##any" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute /> |
</xs:complexType> |
<xs:complexType name="tAction"> |
<xs:sequence> |
<xs:any namespace="##any" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute /> |
</xs:complexType> |
<!-- root element --> |
<xs:element name="ims-3gpp" type="tIMS3GPP"/> |
<!-- root element --> |
<xs:element name="ims-3gpp" type="tIMS3GPP" /> |
<!-- emergency element for //ims-3gpp//alternative-service//type --> |
<xs:element name="emergency"> |
<xs:complexType/> |
</xs:element> |
<!-- emergency element for //ims-3gpp//alternative-service//type --> |
<xs:element name="emergency"> |
<xs:complexType /> |
</xs:element> |
<!-- restoration element for //ims-3gpp//alternative-service//type --> |
<xs:element name="restoration"> |
<xs:complexType/> |
</xs:element> |
<!-- restoration element for //ims-3gpp//alternative-service//type --> |
<xs:element name="restoration"> |
<xs:complexType /> |
</xs:element> |
<!-- action element for //ims-3gpp//alternative-service --> |
<xs:element name="action" type="tAction"/> |
<!-- action element for //ims-3gpp//alternative-service --> |
<xs:element name="action" type="tAction" /> |
<!-- emergency-registration element for //ims-3gpp//alternative-service//action --> |
<xs:element name="emergency-registration"> |
<xs:complexType/> |
</xs:element> |
<!-- emergency-registration element for //ims-3gpp//alternative-service//action --> |
<xs:element name="emergency-registration"> |
<xs:complexType /> |
</xs:element> |
<!-- initial-registration element for //ims-3gpp//alternative-service//action --> |
<xs:element name="initial-registration"> |
<xs:complexType/> |
</xs:element> |
<!-- initial-registration element for //ims-3gpp//alternative-service//action --> |
<xs:element name="initial-registration"> |
<xs:complexType /> |
</xs:element> |
</xs:schema> |
/trunk/xsd/MCID.xsd |
---|
1,37 → 1,41 |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" |
xmlns="http://uri.etsi.org/ngn/params/xml/simservs/mcid" |
targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/mcid" elementFormDefault="qualified"> |
<xs:annotation> |
<xs:documentation>XML Schema Definition to the mcid request-response to the Malicious Communication |
Identification simulation service</xs:documentation> |
</xs:annotation> |
<!--Definition of simple types--> |
<xs:simpleType name="bitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1]"/> |
</xs:restriction> |
</xs:simpleType> |
<!--Definition of complex types--> |
<xs:complexType name="requestType"> |
<xs:sequence> |
<xs:element name="McidRequestIndicator" type="bitType"/> |
<xs:element name="HoldingIndicator" type="bitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="responseType"> |
<xs:sequence> |
<xs:element name="McidResponseIndicator" type="bitType"/> |
<xs:element name="HoldingProvidedIndicator" type="bitType"/> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of document structure--> |
<xs:element name="mcid"> |
<xs:complexType> |
<xs:choice> |
<xs:element name="request" type="requestType"/> |
<xs:element name="response" type="responseType"/> |
</xs:choice> |
</xs:complexType> |
</xs:element> |
xmlns="http://uri.etsi.org/ngn/params/xml/simservs/mcid" |
targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/mcid" |
elementFormDefault="qualified"> |
<xs:annotation> |
<xs:documentation>XML Schema Definition to the mcid |
request-response |
to the Malicious Communication |
Identification simulation service |
</xs:documentation> |
</xs:annotation> |
<!--Definition of simple types --> |
<xs:simpleType name="bitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1]" /> |
</xs:restriction> |
</xs:simpleType> |
<!--Definition of complex types --> |
<xs:complexType name="requestType"> |
<xs:sequence> |
<xs:element name="McidRequestIndicator" type="bitType" /> |
<xs:element name="HoldingIndicator" type="bitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="responseType"> |
<xs:sequence> |
<xs:element name="McidResponseIndicator" type="bitType" /> |
<xs:element name="HoldingProvidedIndicator" type="bitType" /> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of document structure --> |
<xs:element name="mcid"> |
<xs:complexType> |
<xs:choice> |
<xs:element name="request" type="requestType" /> |
<xs:element name="response" type="responseType" /> |
</xs:choice> |
</xs:complexType> |
</xs:element> |
</xs:schema> |
/trunk/xsd/OIP-OIR.xsd |
---|
1,37 → 1,40 |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<xs:element name="originating--identity--presentation--restriction" |
substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>Originating Identity presentation Restriction |
</xs:documentation> |
</xs:annotation> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="ss:simservType"> |
<xs:sequence> |
<xs:element name="default--behaviour" default="presentation--restricted" |
minOccurs="0"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="presentation--restricted"/> |
<xs:enumeration value="presentation--not--restricted"/> |
</xs:restriction> |
</xs:simpleType> |
</xs:element> |
</xs:sequence> |
</xs:extension> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<xs:element name="originating--identity--presentation" type="ss:simservType" |
substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>Originating Identity Presentation |
</xs:documentation> |
</xs:annotation> |
</xs:element> |
xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<xs:element name="originating--identity--presentation--restriction" |
substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>Originating Identity presentation |
Restriction |
</xs:documentation> |
</xs:annotation> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="ss:simservType"> |
<xs:sequence> |
<xs:element name="default--behaviour" |
default="presentation--restricted" |
minOccurs="0"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration |
value="presentation--restricted" /> |
<xs:enumeration |
value="presentation--not--restricted" /> |
</xs:restriction> |
</xs:simpleType> |
</xs:element> |
</xs:sequence> |
</xs:extension> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<xs:element name="originating--identity--presentation" |
type="ss:simservType" substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>Originating Identity Presentation |
</xs:documentation> |
</xs:annotation> |
</xs:element> |
</xs:schema> |
/trunk/xsd/PSTN.xsd |
---|
1,367 → 1,418 |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://uri.etsi.org/ngn/params/xml/simservs/pstn" xmlns:ns1="http://uri.etsi.org/ngn/params/xml/simservs/pstn" targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/pstn" elementFormDefault="qualified"> |
<xs:annotation> |
<xs:documentation>XML Schema definition for mapping of some PSTN into SIP MIME Bodies</xs:documentation> |
</xs:annotation> |
<!--Definition of simple types--> |
<xs:simpleType name="OneBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1]"/> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="TwoBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1]"/> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="ThreeBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1][0-1]"/> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="FourBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1][0-1][0-1]"/> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="FiveBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1][0-1][0-1][0-1]"/> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="SixBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1][0-1][0-1][0-1][0-1]"/> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="SevenBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1][0-1][0-1][0-1][0-1][0-1]"/> |
</xs:restriction> |
</xs:simpleType> |
<!--Definition of complex types--> |
<!--Definition of BearerCapability Octets--> |
<xs:complexType name="BCOctet3Type"> |
<xs:sequence> |
<xs:element name="CodingStandard" type="TwoBitType"/> |
<xs:element name="InformationTransferCabability" type="FiveBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet4Type"> |
<xs:sequence> |
<xs:element name="TransferMode" type="TwoBitType"/> |
<xs:element name="InformationTransferRate" type="FiveBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet4-1Type"> |
<xs:sequence> |
<xs:element name="RateMultiplier" type="SevenBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet5Type"> |
<xs:sequence> |
<xs:element name="Layer1Identification" type="TwoBitType"/> |
<xs:element name="UserInfoLayer1Protocol" type="FiveBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet5aType"> |
<xs:sequence> |
<xs:element name="SynchronousAsynchronous" type="OneBitType"/> |
<xs:element name="Negotiation" type="OneBitType"/> |
<xs:element name="UserRate" type="FiveBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet5bV110Type"> |
<xs:sequence> |
<xs:element name="IntermediateRate" type="TwoBitType"/> |
<xs:element name="NIConTX" type="OneBitType"/> |
<xs:element name="NIConRX" type="OneBitType"/> |
<xs:element name="FlowControlOnTX" type="OneBitType"/> |
<xs:element name="FlowControlOnRX" type="OneBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet5bV120Type"> |
<xs:sequence> |
<xs:element name="RateAdaptionHeader" type="OneBitType"/> |
<xs:element name="MultipleFrameEstablishmentSupport" type="OneBitType"/> |
<xs:element name="ModeOfOperation" type="OneBitType"/> |
<xs:element name="LogicalLinkIdentifier" type="OneBitType"/> |
<xs:element name="Assignor" type="OneBitType"/> |
<xs:element name="InbandOutbandNegotiation" type="OneBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet5cType"> |
<xs:sequence> |
<xs:element name="NumberOfStopBits" type="TwoBitType"/> |
<xs:element name="NumberOfDataBits" type="TwoBitType"/> |
<xs:element name="Parity" type="ThreeBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet5dType"> |
<xs:sequence> |
<xs:element name="DuplexMode" type="OneBitType"/> |
<xs:element name="ModemType" type="SixBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet6Type"> |
<xs:sequence> |
<xs:element name="Layer2Identification" type="TwoBitType"/> |
<xs:element name="UserInfoLayer2Protocol" type="FiveBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet7Type"> |
<xs:sequence> |
<xs:element name="Layer3Identification" type="TwoBitType"/> |
<xs:element name="UserInfoLayer3Protocol" type="FiveBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet7aType"> |
<xs:sequence> |
<xs:element name="AdditionalLayer3Info" type="FourBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet7bType"> |
<xs:sequence> |
<xs:element name="AdditionalLayer3Info" type="FourBitType"/> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of High Layer Compatibility Octets--> |
<xs:complexType name="HLOctet3Type"> |
<xs:sequence> |
<xs:element name="CodingStandard" type="TwoBitType"/> |
<xs:element name="Interpretation" type="ThreeBitType"/> |
<xs:element name="PresentationMethod" type="TwoBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="HLOctet4Type"> |
<xs:sequence> |
<xs:element name="HighLayerCharacteristics" type="SevenBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="HLOctet4aMaintenanceType"> |
<xs:sequence> |
<xs:element name="HighLayerCharacteristics" type="SevenBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="HLOctet4aAudioType"> |
<xs:sequence> |
<xs:element name="VideoTelephonyCharacteristics" type="SevenBitType"/> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of Low Layer Compatibility Octets--> |
<xs:complexType name="LLOctet3Type"> |
<xs:sequence> |
<xs:element name="CodingStandard" type="TwoBitType"/> |
<xs:element name="InformationTransferCapability" type="FiveBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet3aType"> |
<xs:sequence> |
<xs:element name="NegotiationIndicator" type="OneBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet4Type"> |
<xs:sequence> |
<xs:element name="TransferMode" type="TwoBitType"/> |
<xs:element name="InformationTransferRate" type="FiveBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet4-1Type"> |
<xs:sequence> |
<xs:element name="RateMultiplier" type="SevenBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet5Type"> |
<xs:sequence> |
<xs:element name="Layer1Identification" type="TwoBitType"/> |
<xs:element name="UserInfoLayer1Protocol" type="FiveBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet5aType"> |
<xs:sequence> |
<xs:element name="SynchronousAsynchronous" type="OneBitType"/> |
<xs:element name="Negotiation" type="OneBitType"/> |
<xs:element name="UserRate" type="FiveBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet5bV110Type"> |
<xs:sequence> |
<xs:element name="IntermediateRate" type="TwoBitType"/> |
<xs:element name="NIConTX" type="OneBitType"/> |
<xs:element name="NIConRX" type="OneBitType"/> |
<xs:element name="FlowControlOnTX" type="OneBitType"/> |
<xs:element name="FlowControlOnRX" type="OneBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet5bV120Type"> |
<xs:sequence> |
<xs:element name="RateAdaptionHeader" type="OneBitType"/> |
<xs:element name="MultipleFrameEstablishmentSupport" type="OneBitType"/> |
<xs:element name="ModeOfOperation" type="OneBitType"/> |
<xs:element name="LogicalLinkIdentifier" type="OneBitType"/> |
<xs:element name="Assignor" type="OneBitType"/> |
<xs:element name="InbandOutbandNegotiation" type="OneBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet5cType"> |
<xs:sequence> |
<xs:element name="NumberOfStopBits" type="TwoBitType"/> |
<xs:element name="NumberOfDataBits" type="TwoBitType"/> |
<xs:element name="Parity" type="ThreeBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet5dType"> |
<xs:sequence> |
<xs:element name="DuplexMode" type="OneBitType"/> |
<xs:element name="ModemType" type="SixBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet6Type"> |
<xs:sequence> |
<xs:element name="Layer2Identification" type="TwoBitType"/> |
<xs:element name="UserInfoLayer2Protocol" type="FiveBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet6aHDLCType"> |
<xs:sequence> |
<xs:element name="Mode" type="TwoBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet6aUserSpecificType"> |
<xs:sequence> |
<xs:element name="UserSpecificLayer2Information" type="SevenBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet6bType"> |
<xs:sequence> |
<xs:element name="WindowSize" type="SevenBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7Type"> |
<xs:sequence> |
<xs:element name="Layer3Identification" type="TwoBitType"/> |
<xs:element name="UserInfoLayer3Protocol" type="FiveBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7aUserSpecificType"> |
<xs:sequence> |
<xs:element name="OptionalLayer3Information" type="SevenBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7aX25Type"> |
<xs:sequence> |
<xs:element name="Mode" type="TwoBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7bX25Type"> |
<xs:sequence> |
<xs:element name="DefaultPacketSize" type="FourBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7cType"> |
<xs:sequence> |
<xs:element name="PacketWindowSize" type="SevenBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7aTR9577Type"> |
<xs:sequence> |
<xs:element name="AdditionalLayer3Info" type="FourBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7bTR9577Type"> |
<xs:sequence> |
<xs:element name="AdditionalLayer3Info" type="FourBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="DispOctet3Type"> |
<xs:sequence> |
<xs:element name="DisplayInformation" type="SevenBitType"/> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of the information elements--> |
<xs:complexType name="BearerCapabilityType"> |
<xs:sequence> |
<xs:element name="BCoctet3" type="BCOctet3Type"/> |
<xs:element name="BCoctet4" type="BCOctet4Type"/> |
<xs:element name="BCoctet4-1" type="BCOctet4-1Type" minOccurs="0"/> |
<xs:element name="BCoctet5" type="BCOctet5Type" minOccurs="0"/> |
<xs:element name="BCoctet5a" type="BCOctet5aType" minOccurs="0"/> |
<xs:element name="BCoctet5bV110" type="BCOctet5bV110Type" minOccurs="0"/> |
<xs:element name="BCoctet5bV120" type="BCOctet5bV120Type" minOccurs="0"/> |
<xs:element name="BCoctet5c" type="BCOctet5cType" minOccurs="0"/> |
<xs:element name="BCoctet5d" type="BCOctet5dType" minOccurs="0"/> |
<xs:element name="BCoctet6" type="BCOctet6Type" minOccurs="0"/> |
<xs:element name="BCoctet7" type="BCOctet7Type" minOccurs="0"/> |
<xs:element name="BCoctet7a" type="BCOctet7aType" minOccurs="0"/> |
<xs:element name="BCoctet7b" type="BCOctet7bType" minOccurs="0"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="HighLayerCompatibilityType"> |
<xs:sequence> |
<xs:element name="HLOctet3" type="HLOctet3Type"/> |
<xs:element name="HLOctet4" type="HLOctet4Type"/> |
<xs:element name="HLOctet4aMaintenance" type="HLOctet4aMaintenanceType" minOccurs="0"/> |
<xs:element name="HLOctet4Audio" type="HLOctet4aAudioType" minOccurs="0"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LowLayerCompatibilityType"> |
<xs:sequence> |
<xs:element name="LLOctet3" type="LLOctet3Type"/> |
<xs:element name="LLOctet3a" type="LLOctet3aType" minOccurs="0"/> |
<xs:element name="LLOctet4" type="LLOctet4Type"/> |
<xs:element name="LLOctet4-1" type="LLOctet4-1Type" minOccurs="0"/> |
<xs:element name="LLOctet5" type="LLOctet5Type" minOccurs="0"/> |
<xs:element name="LLOctet5a" type="LLOctet5aType" minOccurs="0"/> |
<xs:element name="LLOctet5bV110" type="LLOctet5bV110Type" minOccurs="0"/> |
<xs:element name="LLOctet5bV120" type="LLOctet5bV120Type" minOccurs="0"/> |
<xs:element name="LLOctet5c" type="LLOctet5cType" minOccurs="0"/> |
<xs:element name="LLOctet5d" type="LLOctet5dType" minOccurs="0"/> |
<xs:element name="LLOctet6" type="LLOctet6Type" minOccurs="0"/> |
<xs:element name="LLOctet6aHDLC" type="LLOctet6aHDLCType" minOccurs="0"/> |
<xs:element name="LLOctet6aUserSpecific" type="LLOctet6aUserSpecificType" minOccurs="0"/> |
<xs:element name="LLOctet6b" type="LLOctet6bType" minOccurs="0"/> |
<xs:element name="LLOctet7" type="LLOctet7Type"/> |
<xs:element name="LLOctet7aUserSpecific" type="LLOctet7aUserSpecificType" minOccurs="0"/> |
<xs:element name="LLOctet7aX25" type="LLOctet7aX25Type" minOccurs="0"/> |
<xs:element name="LLOctet7bX25" type="LLOctet7bX25Type" minOccurs="0"/> |
<xs:element name="LLOctet7c" type="LLOctet7cType" minOccurs="0"/> |
<xs:element name="LLOctet7aTR9577" type="LLOctet7aTR9577Type" minOccurs="0"/> |
<xs:element name="LLOctet7bTR9577" type="LLOctet7bTR9577Type" minOccurs="0"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="DisplayType"> |
<xs:sequence> |
<xs:element name="DispOctet3" type="DispOctet3Type"/> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of progress indicator--> |
<xs:complexType name="ProgressOctet3Type"> |
<xs:sequence> |
<xs:element name="CodingStandard" type="TwoBitType"/> |
<xs:element name="Location" type="FourBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="ProgressOctet4Type"> |
<xs:sequence> |
<xs:element name="ProgressDescription" type="SevenBitType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="ProgressIndicatorType"> |
<xs:sequence> |
<xs:element name="ProgressOctet3" type="ProgressOctet3Type"/> |
<xs:element name="ProgressOctet4" type="ProgressOctet4Type"/> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of document structure--> |
<xs:element name="PSTN-transit"> |
<xs:complexType> |
<xs:sequence> |
<xs:element name="BearerInfomationElement" type="BearerCapabilityType" maxOccurs="2"/> |
<xs:element name="HighLayerCompatibility" type="HighLayerCompatibilityType" minOccurs="0" maxOccurs="2"/> |
<xs:element name="LowLayerCompatibility" type="LowLayerCompatibilityType" minOccurs="0"/> |
<xs:element name="ProgressIndicator" type="ProgressIndicatorType" minOccurs="0" maxOccurs="unbounded"/> |
<xs:element name="Display" type="DisplayType" minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
</xs:complexType> |
</xs:element> |
</xs:schema> |
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" |
xmlns="http://uri.etsi.org/ngn/params/xml/simservs/pstn" xmlns:ns1="http://uri.etsi.org/ngn/params/xml/simservs/pstn" |
targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/pstn" |
elementFormDefault="qualified"> |
<xs:annotation> |
<xs:documentation>XML Schema definition for mappingof some PSTN |
into |
SIP MIME Bodies |
</xs:documentation> |
</xs:annotation> |
<!--Definition of simple types --> |
<xs:simpleType name="OneBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1]" /> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="TwoBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1]" /> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="ThreeBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1][0-1]" /> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="FourBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1][0-1][0-1]" /> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="FiveBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1][0-1][0-1][0-1]" /> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="SixBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1][0-1][0-1][0-1][0-1]" /> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="SevenBitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1][0-1][0-1][0-1][0-1][0-1]" /> |
</xs:restriction> |
</xs:simpleType> |
<!--Definition of complex types --> |
<!--Definition of BearerCapability Octets --> |
<xs:complexType name="BCOctet3Type"> |
<xs:sequence> |
<xs:element name="CodingStandard" type="TwoBitType" /> |
<xs:element name="InformationTransferCabability" |
type="FiveBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet4Type"> |
<xs:sequence> |
<xs:element name="TransferMode" type="TwoBitType" /> |
<xs:element name="InformationTransferRate" type="FiveBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet4-1Type"> |
<xs:sequence> |
<xs:element name="RateMultiplier" type="SevenBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet5Type"> |
<xs:sequence> |
<xs:element name="Layer1Identification" type="TwoBitType" /> |
<xs:element name="UserInfoLayer1Protocol" type="FiveBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet5aType"> |
<xs:sequence> |
<xs:element name="SynchronousAsynchronous" type="OneBitType" /> |
<xs:element name="Negotiation" type="OneBitType" /> |
<xs:element name="UserRate" type="FiveBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet5bV110Type"> |
<xs:sequence> |
<xs:element name="IntermediateRate" type="TwoBitType" /> |
<xs:element name="NIConTX" type="OneBitType" /> |
<xs:element name="NIConRX" type="OneBitType" /> |
<xs:element name="FlowControlOnTX" type="OneBitType" /> |
<xs:element name="FlowControlOnRX" type="OneBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet5bV120Type"> |
<xs:sequence> |
<xs:element name="RateAdaptionHeader" type="OneBitType" /> |
<xs:element name="MultipleFrameEstablishmentSupport" |
type="OneBitType" /> |
<xs:element name="ModeOfOperation" type="OneBitType" /> |
<xs:element name="LogicalLinkIdentifier" type="OneBitType" /> |
<xs:element name="Assignor" type="OneBitType" /> |
<xs:element name="InbandOutbandNegotiation" type="OneBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet5cType"> |
<xs:sequence> |
<xs:element name="NumberOfStopBits" type="TwoBitType" /> |
<xs:element name="NumberOfDataBits" type="TwoBitType" /> |
<xs:element name="Parity" type="ThreeBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet5dType"> |
<xs:sequence> |
<xs:element name="DuplexMode" type="OneBitType" /> |
<xs:element name="ModemType" type="SixBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet6Type"> |
<xs:sequence> |
<xs:element name="Layer2Identification" type="TwoBitType" /> |
<xs:element name="UserInfoLayer2Protocol" type="FiveBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet7Type"> |
<xs:sequence> |
<xs:element name="Layer3Identification" type="TwoBitType" /> |
<xs:element name="UserInfoLayer3Protocol" type="FiveBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet7aType"> |
<xs:sequence> |
<xs:element name="AdditionalLayer3Info" type="FourBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="BCOctet7bType"> |
<xs:sequence> |
<xs:element name="AdditionalLayer3Info" type="FourBitType" /> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of High Layer Compatibility Octets --> |
<xs:complexType name="HLOctet3Type"> |
<xs:sequence> |
<xs:element name="CodingStandard" type="TwoBitType" /> |
<xs:element name="Interpretation" type="ThreeBitType" /> |
<xs:element name="PresentationMethod" type="TwoBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="HLOctet4Type"> |
<xs:sequence> |
<xs:element name="HighLayerCharacteristics" type="SevenBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="HLOctet4aMaintenanceType"> |
<xs:sequence> |
<xs:element name="HighLayerCharacteristics" type="SevenBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="HLOctet4aAudioType"> |
<xs:sequence> |
<xs:element name="VideoTelephonyCharacteristics" |
type="SevenBitType" /> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of Low Layer Compatibility Octets --> |
<xs:complexType name="LLOctet3Type"> |
<xs:sequence> |
<xs:element name="CodingStandard" type="TwoBitType" /> |
<xs:element name="InformationTransferCapability" |
type="FiveBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet3aType"> |
<xs:sequence> |
<xs:element name="NegotiationIndicator" type="OneBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet4Type"> |
<xs:sequence> |
<xs:element name="TransferMode" type="TwoBitType" /> |
<xs:element name="InformationTransferRate" type="FiveBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet4-1Type"> |
<xs:sequence> |
<xs:element name="RateMultiplier" type="SevenBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet5Type"> |
<xs:sequence> |
<xs:element name="Layer1Identification" type="TwoBitType" /> |
<xs:element name="UserInfoLayer1Protocol" type="FiveBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet5aType"> |
<xs:sequence> |
<xs:element name="SynchronousAsynchronous" type="OneBitType" /> |
<xs:element name="Negotiation" type="OneBitType" /> |
<xs:element name="UserRate" type="FiveBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet5bV110Type"> |
<xs:sequence> |
<xs:element name="IntermediateRate" type="TwoBitType" /> |
<xs:element name="NIConTX" type="OneBitType" /> |
<xs:element name="NIConRX" type="OneBitType" /> |
<xs:element name="FlowControlOnTX" type="OneBitType" /> |
<xs:element name="FlowControlOnRX" type="OneBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet5bV120Type"> |
<xs:sequence> |
<xs:element name="RateAdaptionHeader" type="OneBitType" /> |
<xs:element name="MultipleFrameEstablishmentSupport" |
type="OneBitType" /> |
<xs:element name="ModeOfOperation" type="OneBitType" /> |
<xs:element name="LogicalLinkIdentifier" type="OneBitType" /> |
<xs:element name="Assignor" type="OneBitType" /> |
<xs:element name="InbandOutbandNegotiation" type="OneBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet5cType"> |
<xs:sequence> |
<xs:element name="NumberOfStopBits" type="TwoBitType" /> |
<xs:element name="NumberOfDataBits" type="TwoBitType" /> |
<xs:element name="Parity" type="ThreeBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet5dType"> |
<xs:sequence> |
<xs:element name="DuplexMode" type="OneBitType" /> |
<xs:element name="ModemType" type="SixBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet6Type"> |
<xs:sequence> |
<xs:element name="Layer2Identification" type="TwoBitType" /> |
<xs:element name="UserInfoLayer2Protocol" type="FiveBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet6aHDLCType"> |
<xs:sequence> |
<xs:element name="Mode" type="TwoBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet6aUserSpecificType"> |
<xs:sequence> |
<xs:element name="UserSpecificLayer2Information" |
type="SevenBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet6bType"> |
<xs:sequence> |
<xs:element name="WindowSize" type="SevenBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7Type"> |
<xs:sequence> |
<xs:element name="Layer3Identification" type="TwoBitType" /> |
<xs:element name="UserInfoLayer3Protocol" type="FiveBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7aUserSpecificType"> |
<xs:sequence> |
<xs:element name="OptionalLayer3Information" |
type="SevenBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7aX25Type"> |
<xs:sequence> |
<xs:element name="Mode" type="TwoBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7bX25Type"> |
<xs:sequence> |
<xs:element name="DefaultPacketSize" type="FourBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7cType"> |
<xs:sequence> |
<xs:element name="PacketWindowSize" type="SevenBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7aTR9577Type"> |
<xs:sequence> |
<xs:element name="AdditionalLayer3Info" type="FourBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LLOctet7bTR9577Type"> |
<xs:sequence> |
<xs:element name="AdditionalLayer3Info" type="FourBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="DispOctet3Type"> |
<xs:sequence> |
<xs:element name="DisplayInformation" type="SevenBitType" /> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of the information elements --> |
<xs:complexType name="BearerCapabilityType"> |
<xs:sequence> |
<xs:element name="BCoctet3" type="BCOctet3Type" /> |
<xs:element name="BCoctet4" type="BCOctet4Type" /> |
<xs:element name="BCoctet4-1" type="BCOctet4-1Type" |
minOccurs="0" /> |
<xs:element name="BCoctet5" type="BCOctet5Type" |
minOccurs="0" /> |
<xs:element name="BCoctet5a" type="BCOctet5aType" |
minOccurs="0" /> |
<xs:element name="BCoctet5bV110" type="BCOctet5bV110Type" |
minOccurs="0" /> |
<xs:element name="BCoctet5bV120" type="BCOctet5bV120Type" |
minOccurs="0" /> |
<xs:element name="BCoctet5c" type="BCOctet5cType" |
minOccurs="0" /> |
<xs:element name="BCoctet5d" type="BCOctet5dType" |
minOccurs="0" /> |
<xs:element name="BCoctet6" type="BCOctet6Type" |
minOccurs="0" /> |
<xs:element name="BCoctet7" type="BCOctet7Type" |
minOccurs="0" /> |
<xs:element name="BCoctet7a" type="BCOctet7aType" |
minOccurs="0" /> |
<xs:element name="BCoctet7b" type="BCOctet7bType" |
minOccurs="0" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="HighLayerCompatibilityType"> |
<xs:sequence> |
<xs:element name="HLOctet3" type="HLOctet3Type" /> |
<xs:element name="HLOctet4" type="HLOctet4Type" /> |
<xs:element name="HLOctet4aMaintenance" type="HLOctet4aMaintenanceType" |
minOccurs="0" /> |
<xs:element name="HLOctet4Audio" type="HLOctet4aAudioType" |
minOccurs="0" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="LowLayerCompatibilityType"> |
<xs:sequence> |
<xs:element name="LLOctet3" type="LLOctet3Type" /> |
<xs:element name="LLOctet3a" type="LLOctet3aType" |
minOccurs="0" /> |
<xs:element name="LLOctet4" type="LLOctet4Type" /> |
<xs:element name="LLOctet4-1" type="LLOctet4-1Type" |
minOccurs="0" /> |
<xs:element name="LLOctet5" type="LLOctet5Type" |
minOccurs="0" /> |
<xs:element name="LLOctet5a" type="LLOctet5aType" |
minOccurs="0" /> |
<xs:element name="LLOctet5bV110" type="LLOctet5bV110Type" |
minOccurs="0" /> |
<xs:element name="LLOctet5bV120" type="LLOctet5bV120Type" |
minOccurs="0" /> |
<xs:element name="LLOctet5c" type="LLOctet5cType" |
minOccurs="0" /> |
<xs:element name="LLOctet5d" type="LLOctet5dType" |
minOccurs="0" /> |
<xs:element name="LLOctet6" type="LLOctet6Type" |
minOccurs="0" /> |
<xs:element name="LLOctet6aHDLC" type="LLOctet6aHDLCType" |
minOccurs="0" /> |
<xs:element name="LLOctet6aUserSpecific" type="LLOctet6aUserSpecificType" |
minOccurs="0" /> |
<xs:element name="LLOctet6b" type="LLOctet6bType" |
minOccurs="0" /> |
<xs:element name="LLOctet7" type="LLOctet7Type" /> |
<xs:element name="LLOctet7aUserSpecific" type="LLOctet7aUserSpecificType" |
minOccurs="0" /> |
<xs:element name="LLOctet7aX25" type="LLOctet7aX25Type" |
minOccurs="0" /> |
<xs:element name="LLOctet7bX25" type="LLOctet7bX25Type" |
minOccurs="0" /> |
<xs:element name="LLOctet7c" type="LLOctet7cType" |
minOccurs="0" /> |
<xs:element name="LLOctet7aTR9577" type="LLOctet7aTR9577Type" |
minOccurs="0" /> |
<xs:element name="LLOctet7bTR9577" type="LLOctet7bTR9577Type" |
minOccurs="0" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="DisplayType"> |
<xs:sequence> |
<xs:element name="DispOctet3" type="DispOctet3Type" /> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of progress indicator --> |
<xs:complexType name="ProgressOctet3Type"> |
<xs:sequence> |
<xs:element name="CodingStandard" type="TwoBitType" /> |
<xs:element name="Location" type="FourBitType" /> |
</xs:sequence> |
<!--ETSI ETSI TS 124 503 V8.15.0 (2013-07) 323 Release 7 --> |
</xs:complexType> |
<xs:complexType name="ProgressOctet4Type"> |
<xs:sequence> |
<xs:element name="ProgressDescription" type="SevenBitType" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="ProgressIndicatorType"> |
<xs:sequence> |
<xs:element name="ProgressOctet3" type="ProgressOctet3Type" /> |
<xs:element name="ProgressOctet4" type="ProgressOctet4Type" /> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of document structure --> |
<xs:element name="PSTN-transit"> |
<xs:complexType> |
<xs:sequence> |
<xs:element name="BearerInfomationElement" |
type="BearerCapabilityType" maxOccurs="2" /> |
<xs:element name="HighLayerCompatibility" |
type="HighLayerCompatibilityType" minOccurs="0" |
maxOccurs="2" /> |
<xs:element name="LowLayerCompatibility" |
type="LowLayerCompatibilityType" minOccurs="0" /> |
<xs:element name="ProgressIndicator" type="ProgressIndicatorType" |
minOccurs="0" maxOccurs="unbounded" /> |
<xs:element name="Display" type="DisplayType" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
</xs:complexType> |
</xs:element> |
</xs:schema> |
/trunk/xsd/ResourceList.xsd |
---|
1,70 → 1,84 |
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
<xs:schema xmlns="urn:ietf:params:xml:ns:resource-lists" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:ietf:params:xml:ns:resource-lists"> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/> |
<xs:schema xmlns="urn:ietf:params:xml:ns:resource-lists" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" |
elementFormDefault="qualified" targetNamespace="urn:ietf:params:xml:ns:resource-lists"> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd" /> |
<xs:complexType name="listType"> |
<xs:sequence> |
<xs:element minOccurs="0" name="display-name" type="display-nameType"/> |
<xs:sequence maxOccurs="unbounded" minOccurs="0"> |
<xs:choice> |
<xs:element name="list"> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="listType"/> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<xs:element name="external" type="externalType"/> |
<xs:element name="entry" type="entryType"/> |
<xs:element name="entry-ref" type="entry-refType"/> |
</xs:choice> |
</xs:sequence> |
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/> |
</xs:sequence> |
<xs:attribute name="name" type="xs:string" use="optional"/> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
<xs:sequence> |
<xs:element minOccurs="0" name="display-name" |
type="display-nameType" /> |
<xs:sequence maxOccurs="unbounded" minOccurs="0"> |
<xs:choice> |
<xs:element name="list"> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="listType" /> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<xs:element name="external" type="externalType" /> |
<xs:element name="entry" type="entryType" /> |
<xs:element name="entry-ref" type="entry-refType" /> |
</xs:choice> |
</xs:sequence> |
<xs:any maxOccurs="unbounded" minOccurs="0" |
namespace="##other" processContents="lax" /> |
</xs:sequence> |
<xs:attribute name="name" type="xs:string" use="optional" /> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<xs:complexType name="entryType"> |
<xs:sequence> |
<xs:element minOccurs="0" name="display-name"> |
<xs:complexType> |
<xs:simpleContent> |
<xs:extension base="display-nameType"/> |
</xs:simpleContent> |
</xs:complexType> |
</xs:element> |
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/> |
</xs:sequence> |
<xs:attribute name="uri" type="xs:anyURI" use="required"/> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
<xs:sequence> |
<xs:element minOccurs="0" name="display-name"> |
<xs:complexType> |
<xs:simpleContent> |
<xs:extension base="display-nameType" /> |
</xs:simpleContent> |
</xs:complexType> |
</xs:element> |
<xs:any maxOccurs="unbounded" minOccurs="0" |
namespace="##other" processContents="lax" /> |
</xs:sequence> |
<xs:attribute name="uri" type="xs:anyURI" use="required" /> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<xs:complexType name="entry-refType"> |
<xs:sequence> |
<xs:element minOccurs="0" name="display-name" type="display-nameType"/> |
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/> |
</xs:sequence> |
<xs:attribute name="ref" type="xs:anyURI" use="required"/> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
<xs:complexType name="entry-refType"> |
<xs:sequence> |
<xs:element minOccurs="0" name="display-name" |
type="display-nameType" /> |
<xs:any maxOccurs="unbounded" minOccurs="0" |
namespace="##other" processContents="lax" /> |
</xs:sequence> |
<xs:attribute name="ref" type="xs:anyURI" use="required" /> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<xs:complexType name="externalType"> |
<xs:sequence> |
<xs:element minOccurs="0" name="display-name" type="display-nameType"/> |
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/> |
</xs:sequence> |
<xs:attribute name="anchor" type="xs:anyURI"/> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
<xs:sequence> |
<xs:element minOccurs="0" name="display-name" |
type="display-nameType" /> |
<xs:any maxOccurs="unbounded" minOccurs="0" |
namespace="##other" processContents="lax" /> |
</xs:sequence> |
<xs:attribute name="anchor" type="xs:anyURI" /> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<xs:element name="resource-lists"> |
<xs:complexType> |
<xs:sequence maxOccurs="unbounded" minOccurs="0"> |
<xs:element name="list" type="listType"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType> |
<xs:sequence maxOccurs="unbounded" minOccurs="0"> |
<xs:element name="list" type="listType" /> |
</xs:sequence> |
</xs:complexType> |
</xs:element> |
<xs:complexType name="display-nameType"> |
<xs:simpleContent> |
<xs:extension base="xs:string"> |
<xs:attribute ref="xml:lang"/> |
</xs:extension> |
</xs:simpleContent> |
<xs:simpleContent> |
<xs:extension base="xs:string"> |
<xs:attribute ref="xml:lang" /> |
</xs:extension> |
</xs:simpleContent> |
</xs:complexType> |
</xs:schema> |
</xs:schema> |
/trunk/xsd/SupplementaryServices.xsd |
---|
1,15 → 1,14 |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<xs:include schemaLocation="simservs.xsd"/> |
<xs:include schemaLocation="TIP-TIR.xsd"/> |
<xs:include schemaLocation="OIP-OIR.xsd"/> |
<xs:include schemaLocation="CDIV.xsd"/> |
<xs:include schemaLocation="ACR_CB.xsd"/> |
<xs:include schemaLocation="cug.xsd"/> |
<xs:include schemaLocation="simservs.xsd" /> |
<xs:include schemaLocation="TIP-TIR.xsd" /> |
<xs:include schemaLocation="OIP-OIR.xsd" /> |
<xs:include schemaLocation="CDIV.xsd" /> |
<xs:include schemaLocation="ACR_CB.xsd" /> |
<xs:include schemaLocation="cug.xsd" /> |
</xs:schema> |
/trunk/xsd/TIP-TIR.xsd |
---|
1,37 → 1,39 |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<xs:element name="terminating-identity-presentation-restriction" |
substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>Terminating Identity presentation Restriction |
</xs:documentation> |
</xs:annotation> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="ss:simservType"> |
<xs:sequence> |
<xs:element name="default-behaviour" default="presentation-restricted" |
minOccurs="0"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="presentation-restricted"/> |
<xs:enumeration value="presentation-not-restricted"/> |
</xs:restriction> |
</xs:simpleType> |
</xs:element> |
</xs:sequence> |
</xs:extension> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<xs:element name="terminating-identity-presentation" type="ss:simservType" |
substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>Terminating Identity Presentation |
</xs:documentation> |
</xs:annotation> |
</xs:element> |
xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<xs:element name="terminating-identity-presentation-restriction" |
substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>Terminating Identity presentation |
Restriction |
</xs:documentation> |
</xs:annotation> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="ss:simservType"> |
<xs:sequence> |
<xs:element name="default-behaviour" |
default="presentation-restricted" minOccurs="0"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration |
value="presentation-restricted" /> |
<xs:enumeration |
value="presentation-not-restricted" /> |
</xs:restriction> |
</xs:simpleType> |
</xs:element> |
</xs:sequence> |
</xs:extension> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<xs:element name="terminating-identity-presentation" |
type="ss:simservType" substitutionGroup="ss:absService"> |
<xs:annotation> |
<xs:documentation>Terminating Identity Presentation |
</xs:documentation> |
</xs:annotation> |
</xs:element> |
</xs:schema> |
/trunk/xsd/common-policy.xsd |
---|
1,127 → 1,126 |
<?xml version="1.0"?> |
<xs:schema targetNamespace="urn:ietf:params:xml:ns:common-policy" |
xmlns:cp="urn:ietf:params:xml:ns:common-policy" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<!-- /ruleset --> |
<xs:element name="ruleset"> |
<xs:complexType> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:sequence> |
<xs:element name="rule" type="cp:ruleType" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<!-- /ruleset/rule --> |
<xs:complexType name="ruleType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:sequence> |
<xs:element name="conditions" |
type="cp:conditionsType" minOccurs="0"/> |
<xs:element name="actions" |
type="cp:extensibleType" minOccurs="0"/> |
<xs:element name="transformations" |
type="cp:extensibleType" minOccurs="0"/> |
</xs:sequence> |
<xs:attribute name="id" type="xs:ID" use="required"/> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //rule/conditions --> |
<xs:complexType name="conditionsType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:choice maxOccurs="unbounded"> |
<xs:element name="identity" |
type="cp:identityType" minOccurs="0"/> |
<xs:element name="sphere" |
type="cp:sphereType" minOccurs="0"/> |
<xs:element name="validity" |
type="cp:validityType" minOccurs="0"/> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:choice> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //conditions/identity --> |
<xs:complexType name="identityType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:choice minOccurs="1" maxOccurs="unbounded"> |
<xs:element name="one" type="cp:oneType"/> |
<xs:element name="many" type="cp:manyType"/> |
<xs:any namespace="##other" processContents="lax"/> |
</xs:choice> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //identity/one --> |
<xs:complexType name="oneType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:sequence> |
<xs:any namespace="##other" |
minOccurs="0" processContents="lax"/> |
</xs:sequence> |
<xs:attribute name="id" |
type="xs:anyURI" use="required"/> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //identity/many --> |
<xs:complexType name="manyType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:choice minOccurs="0" maxOccurs="unbounded"> |
<xs:element name="except" type="cp:exceptType"/> |
<xs:any namespace="##other" |
minOccurs="0" processContents="lax"/> |
</xs:choice> |
<xs:attribute name="domain" |
use="optional" type="xs:string"/> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //many/except --> |
<xs:complexType name="exceptType"> |
<xs:attribute name="domain" type="xs:string" use="optional"/> |
<xs:attribute name="id" type="xs:anyURI" use="optional"/> |
</xs:complexType> |
<!-- //conditions/sphere --> |
<xs:complexType name="sphereType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:attribute name="value" |
type="xs:string" use="required"/> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //conditions/validity --> |
<xs:complexType name="validityType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:sequence minOccurs="1" maxOccurs="unbounded"> |
<xs:element name="from" type="xs:dateTime"/> |
<xs:element name="until" type="xs:dateTime"/> |
</xs:sequence> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //rule/actions or //rule/transformations --> |
<xs:complexType name="extensibleType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:sequence> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
</xs:schema> |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema targetNamespace="urn:ietf:params:xml:ns:common-policy" |
xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<!-- /ruleset --> |
<xs:element name="ruleset"> |
<xs:complexType> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:sequence> |
<xs:element name="rule" type="cp:ruleType" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
<!-- /ruleset/rule --> |
<xs:complexType name="ruleType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:sequence> |
<xs:element name="conditions" type="cp:conditionsType" |
minOccurs="0" /> |
<xs:element name="actions" type="cp:extensibleType" |
minOccurs="0" /> |
<xs:element name="transformations" type="cp:extensibleType" |
minOccurs="0" /> |
</xs:sequence> |
<xs:attribute name="id" type="xs:ID" use="required" /> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //rule/conditions --> |
<xs:complexType name="conditionsType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:choice maxOccurs="unbounded"> |
<xs:element name="identity" type="cp:identityType" |
minOccurs="0" /> |
<xs:element name="sphere" type="cp:sphereType" |
minOccurs="0" /> |
<xs:element name="validity" type="cp:validityType" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:choice> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //conditions/identity --> |
<xs:complexType name="identityType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:choice minOccurs="1" maxOccurs="unbounded"> |
<xs:element name="one" type="cp:oneType" /> |
<xs:element name="many" type="cp:manyType" /> |
<xs:any namespace="##other" processContents="lax" /> |
</xs:choice> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //identity/one --> |
<xs:complexType name="oneType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:sequence> |
<xs:any namespace="##other" minOccurs="0" |
processContents="lax" /> |
</xs:sequence> |
<xs:attribute name="id" type="xs:anyURI" |
use="required" /> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //identity/many --> |
<xs:complexType name="manyType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:choice minOccurs="0" maxOccurs="unbounded"> |
<xs:element name="except" type="cp:exceptType" /> |
<xs:any namespace="##other" minOccurs="0" |
processContents="lax" /> |
</xs:choice> |
<xs:attribute name="domain" use="optional" |
type="xs:string" /> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //many/except --> |
<xs:complexType name="exceptType"> |
<xs:attribute name="domain" type="xs:string" use="optional" /> |
<xs:attribute name="id" type="xs:anyURI" use="optional" /> |
</xs:complexType> |
<!-- //conditions/sphere --> |
<xs:complexType name="sphereType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:attribute name="value" type="xs:string" |
use="required" /> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //conditions/validity --> |
<xs:complexType name="validityType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:sequence minOccurs="1" maxOccurs="unbounded"> |
<xs:element name="from" type="xs:dateTime" /> |
<xs:element name="until" type="xs:dateTime" /> |
</xs:sequence> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
<!-- //rule/actions or //rule/transformations --> |
<xs:complexType name="extensibleType"> |
<xs:complexContent> |
<xs:restriction base="xs:anyType"> |
<xs:sequence> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
</xs:restriction> |
</xs:complexContent> |
</xs:complexType> |
</xs:schema> |
/trunk/xsd/cug.xsd |
---|
1,54 → 1,64 |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<xs:annotation> |
<xs:documentation>XML Schema Definition for the closed user group |
parameter</xs:documentation> |
</xs:annotation> |
<!--Definition of simple types--> |
<xs:simpleType name="twobitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1]"/> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="networkIdentityType"> |
<xs:restriction base="xs:hexBinary"> |
<xs:length value="1"/> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="sixteenbitType"> |
<xs:restriction base="xs:hexBinary"> |
<xs:length value="2"/> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="cugIndexType"> |
<xs:restriction base="xs:integer"> |
<xs:minInclusive value="0"/> |
<xs:maxInclusive value="32767"/> |
</xs:restriction> |
</xs:simpleType> |
<!--Definition of complex types--> |
<xs:complexType name="cugRequestType"> |
<xs:sequence> |
<xs:element name="outgoingAccessRequest" type="xs:boolean"/> |
<xs:element name="cugIndex" type="cugIndexType"/> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of document structure--> |
<xs:element name="cug" substitutionGroup="ss:absService"> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="ss:simservType"> |
<xs:sequence> |
<xs:element name="cugCallOperation" type="cugRequestType" minOccurs="0"/> |
<xs:element name="networkIndicator" type="networkIdentityType" |
minOccurs="0"/> |
<xs:element name="cugInterlockBinaryCode" type="sixteenbitType" |
minOccurs="0"/> |
<xs:element name="cugCommunicationIndicator" type="twobitType" |
minOccurs="0"/> |
</xs:sequence> |
</xs:extension> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
</xs:schema> |
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" |
xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<xs:annotation> |
<xs:documentation>XML Schema Definition for the closed user |
group |
parameter |
</xs:documentation> |
</xs:annotation> |
<!-- Because of some XSD to TTCN-3 mapping limitations, xcap.xsd=simservs.xsd |
with modifications --> |
<!--xs:include schemaLocation="xcap.xsd"/ --> |
<!--Definition of simple types --> |
<xs:simpleType name="twobitType"> |
<xs:restriction base="xs:string"> |
<xs:pattern value="[0-1][0-1]" /> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="networkIdentityType"> |
<xs:restriction base="xs:hexBinary"> |
<xs:length value="1" /> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="sixteenbitType"> |
<xs:restriction base="xs:hexBinary"> |
<xs:length value="2" /> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="cugIndexType"> |
<xs:restriction base="xs:integer"> |
<xs:minInclusive value="0" /> |
<xs:maxInclusive value="32767" /> |
</xs:restriction> |
</xs:simpleType> |
<!--Definition of complex types --> |
<xs:complexType name="cugRequestType"> |
<xs:sequence> |
<xs:element name="outgoingAccessRequest" type="xs:boolean" /> |
<xs:element name="cugIndex" type="cugIndexType" |
minOccurs="0" /> |
</xs:sequence> |
</xs:complexType> |
<!--Definition of document structure --> |
<xs:element name="cug" substitutionGroup="ss:absService"> |
<xs:complexType> |
<xs:complexContent> |
<xs:extension base="ss:simservType"> |
<xs:sequence> |
<xs:element name="cugCallOperation" |
type="cugRequestType" minOccurs="0" /> |
<xs:element name="networkIndicator" |
type="networkIdentityType" minOccurs="0" /> |
<xs:element name="cugInterlockBinaryCode" |
type="sixteenbitType" minOccurs="0" /> |
<xs:element name="cugCommunicationIndicator" |
type="twobitType" minOccurs="0" /> |
</xs:sequence> |
</xs:extension> |
</xs:complexContent> |
</xs:complexType> |
</xs:element> |
</xs:schema> |
/trunk/xsd/cw.xsd |
---|
1,16 → 1,17 |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema targetNamespace="urn:3gpp:ns:cw:1.0" |
xmlns:cw10="urn:3gpp:ns:cw:1.0" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<xs:complexType name="tEmptyType"/> |
<xs:schema targetNamespace="urn:3gpp:ns:cw:1.0" xmlns:cw10="urn:3gpp:ns:cw:1.0" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<xs:complexType name="tEmptyType" /> |
<xs:complexType name="tCWtype"> |
<xs:sequence> |
<xs:element name="communication-waiting-indication" minOccurs="0" maxOccurs="1" |
type="cw10:tEmptyType"/> |
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> |
<xs:element name="communication-waiting-indication" |
minOccurs="0" maxOccurs="1" type="cw10:tEmptyType" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:anyAttribute namespace="##other" processContents="lax"/> |
<xs:anyAttribute namespace="##other" |
processContents="lax" /> |
</xs:complexType> |
<xs:element name="ims-cw" type="cw10:tCWtype"/> |
<xs:element name="ims-cw" type="cw10:tCWtype" /> |
</xs:schema> |
/trunk/xsd/geopriv10basic.xsd |
---|
1,34 → 1,34 |
<xs:schema |
targetNamespace="urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" |
xmlns:tns="urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema targetNamespace="urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" |
xmlns:tns="urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<!-- This import brings in the XML language attribute xml:lang--> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd"/> |
<!-- This import brings in the XML language attribute xml:lang --> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd" /> |
<xs:complexType name="locPolicyType"> |
<xs:sequence> |
<xs:element name="retransmission-allowed" type="xs:boolean" |
minOccurs="0" maxOccurs="1"/> |
<xs:element name="retention-expiry" type="xs:dateTime" |
minOccurs="0" maxOccurs="1"/> |
<xs:element name="external-ruleset" type="xs:anyURI" |
minOccurs="0" maxOccurs="1"/> |
<xs:element name="note-well" type="tns:notewell" |
minOccurs="0" maxOccurs="1"/> |
<xs:any namespace="##other" processContents="lax" minOccurs="0" |
maxOccurs="unbounded"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="locPolicyType"> |
<xs:sequence> |
<xs:element name="retransmission-allowed" type="xs:boolean" |
minOccurs="0" maxOccurs="1" /> |
<xs:element name="retention-expiry" type="xs:dateTime" |
minOccurs="0" maxOccurs="1" /> |
<xs:element name="external-ruleset" type="xs:anyURI" |
minOccurs="0" maxOccurs="1" /> |
<xs:element name="note-well" type="tns:notewell" |
minOccurs="0" maxOccurs="1" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="notewell"> |
<xs:simpleContent> |
<xs:extension base="xs:string"> |
<xs:attribute ref="xml:lang" /> |
</xs:extension> |
</xs:simpleContent> |
<xs:simpleContent> |
<xs:extension base="xs:string"> |
<xs:attribute ref="xml:lang" /> |
</xs:extension> |
</xs:simpleContent> |
</xs:complexType> |
</xs:schema> |
/trunk/xsd/pidf.xsd |
---|
1,92 → 1,92 |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema targetNamespace="urn:ietf:params:xml:ns:pidf" |
xmlns:tns="urn:ietf:params:xml:ns:pidf" xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<!-- RFC 3863 --> |
<xs:schema targetNamespace="urn:ietf:params:xml:ns:pidf" |
xmlns:tns="urn:ietf:params:xml:ns:pidf" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<!-- |
RFC 3863 |
--> |
<!-- This import brings in the XML language attribute xml:lang --> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd" /> |
<!-- This import brings in the XML language attribute xml:lang--> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd"/> |
<xs:element name="presence" type="tns:presence" /> |
<xs:element name="presence" type="tns:presence"/> |
<xs:complexType name="presence"> |
<xs:sequence> |
<xs:element name="tuple" type="tns:tuple" |
minOccurs="0" maxOccurs="unbounded" /> |
<xs:element name="note" type="tns:note" |
minOccurs="0" maxOccurs="unbounded" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="entity" type="xs:anyURI" use="required" /> |
</xs:complexType> |
<xs:complexType name="presence"> |
<xs:sequence> |
<xs:element name="tuple" type="tns:tuple" minOccurs="0" |
maxOccurs="unbounded"/> |
<xs:element name="note" type="tns:note" minOccurs="0" |
maxOccurs="unbounded"/> |
<xs:any namespace="##other" processContents="lax" minOccurs="0" |
maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="entity" type="xs:anyURI" use="required"/> |
</xs:complexType> |
<xs:complexType name="tuple"> |
<xs:sequence> |
<xs:element name="status" type="tns:status" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
<xs:element name="contact" type="tns:contact" |
minOccurs="0" /> |
<xs:element name="note" type="tns:note" |
minOccurs="0" maxOccurs="unbounded" /> |
<xs:element name="timestamp" type="xs:dateTime" |
minOccurs="0" /> |
</xs:sequence> |
<xs:attribute name="id" type="xs:ID" use="required" /> |
</xs:complexType> |
<xs:complexType name="tuple"> |
<xs:sequence> |
<xs:element name="status" type="tns:status"/> |
<xs:any namespace="##other" processContents="lax" minOccurs="0" |
maxOccurs="unbounded"/> |
<xs:element name="contact" type="tns:contact" minOccurs="0"/> |
<xs:element name="note" type="tns:note" minOccurs="0" |
maxOccurs="unbounded"/> |
<xs:element name="timestamp" type="xs:dateTime" minOccurs="0"/> |
</xs:sequence> |
<xs:attribute name="id" type="xs:ID" use="required"/> |
</xs:complexType> |
<xs:complexType name="status"> |
<xs:sequence> |
<xs:element name="basic" type="tns:basic" |
minOccurs="0" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
</xs:complexType> |
<xs:simpleType name="basic"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="open" /> |
<xs:enumeration value="closed" /> |
</xs:restriction> |
</xs:simpleType> |
<xs:complexType name="status"> |
<xs:sequence> |
<xs:element name="basic" type="tns:basic" minOccurs="0"/> |
<xs:any namespace="##other" processContents="lax" minOccurs="0" |
maxOccurs="unbounded"/> |
</xs:sequence> |
</xs:complexType> |
<xs:simpleType name="basic"> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="open"/> |
<xs:enumeration value="closed"/> |
</xs:restriction> |
</xs:simpleType> |
<xs:complexType name="contact"> |
<xs:simpleContent> |
<xs:extension base="xs:anyURI"> |
<xs:attribute name="priority" type="tns:qvalue" /> |
</xs:extension> |
</xs:simpleContent> |
</xs:complexType> |
<xs:complexType name="contact"> |
<xs:simpleContent> |
<xs:extension base="xs:anyURI"> |
<xs:attribute name="priority" type="tns:qvalue"/> |
</xs:extension> |
</xs:simpleContent> |
</xs:complexType> |
<xs:complexType name="note"> |
<xs:simpleContent> |
<xs:extension base="xs:string"> |
<xs:attribute ref="xml:lang" /> |
</xs:extension> |
</xs:simpleContent> |
</xs:complexType> |
<xs:complexType name="note"> |
<xs:simpleContent> |
<xs:extension base="xs:string"> |
<xs:attribute ref="xml:lang"/> |
</xs:extension> |
</xs:simpleContent> |
</xs:complexType> |
<xs:simpleType name="qvalue"> |
<xs:restriction base="xs:decimal"> |
<xs:pattern value="0(.[0-9]{0,3})?" /> |
<xs:pattern value="1(.0{0,3})?" /> |
</xs:restriction> |
</xs:simpleType> |
<xs:simpleType name="qvalue"> |
<xs:restriction base="xs:decimal"> |
<xs:pattern value="0(.[0-9]{0,3})?"/> |
<xs:pattern value="1(.0{0,3})?"/> |
</xs:restriction> |
</xs:simpleType> |
<!-- Global Attributes --> |
<xs:attribute name="mustUnderstand" type="xs:boolean" |
default="0"> |
<xs:annotation> |
<xs:documentation> |
This attribute may be used on any element within an optional |
PIDF extension to indicate that the corresponding element must |
be understood by the PIDF processor if the enclosing optional |
element is to be handled. |
</xs:documentation> |
</xs:annotation> |
</xs:attribute> |
</xs:schema> |
<!-- Global Attributes --> |
<xs:attribute name="mustUnderstand" type="xs:boolean" default="0"> |
<xs:annotation> |
<xs:documentation> |
This attribute may be used on any element within an optional |
PIDF extension to indicate that the corresponding element must |
be understood by the PIDF processor if the enclosing optional |
element is to be handled. |
</xs:documentation> |
</xs:annotation> |
</xs:attribute> |
</xs:schema> |
/trunk/xsd/pidf_lo.xsd |
---|
1,57 → 1,55 |
<xs:schema |
targetNamespace="urn:ietf:params:xml:ns:pidf:geopriv10" |
xmlns:tns="urn:ietf:params:xml:ns:pidf:geopriv10" |
xmlns:gbp="urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema targetNamespace="urn:ietf:params:xml:ns:pidf:geopriv10" |
xmlns:tns="urn:ietf:params:xml:ns:pidf:geopriv10" xmlns:gbp="urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<xs:import namespace= |
"urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" |
schemaLocation="geopriv10basic.xsd"/> |
<xs:import namespace="urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" |
schemaLocation="geopriv10basic.xsd" /> |
<!-- This import brings in the XML language attribute xml:lang--> |
<!-- This import brings in the XML language attribute xml:lang --> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd"/> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd" /> |
<xs:element name="geopriv" type="tns:geopriv"/> |
<xs:element name="geopriv" type="tns:geopriv" /> |
<xs:complexType name="geopriv"> |
<xs:sequence> |
<xs:element name="location-info" type="tns:locInfoType" |
minOccurs="1" maxOccurs="1"/> |
<xs:element name="usage-rules" type="gbp:locPolicyType" |
minOccurs="1" maxOccurs="1"/> |
<xs:element name="method" type="tns:locMethod" |
minOccurs="0" maxOccurs="1"/> |
<xs:element name="provided-by" type="tns:locProvidedBy" |
minOccurs="0" maxOccurs="1"/> |
<xs:any namespace="##other" processContents="lax" minOccurs="0" |
maxOccurs="unbounded"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="geopriv"> |
<xs:sequence> |
<xs:element name="location-info" type="tns:locInfoType" |
minOccurs="1" maxOccurs="1" /> |
<xs:element name="usage-rules" type="gbp:locPolicyType" |
minOccurs="1" maxOccurs="1" /> |
<xs:element name="method" type="tns:locMethod" |
minOccurs="0" maxOccurs="1" /> |
<xs:element name="provided-by" type="tns:locProvidedBy" |
minOccurs="0" maxOccurs="1" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="locInfoType"> |
<xs:sequence> |
<xs:any namespace="##other" processContents="lax" minOccurs="0" |
maxOccurs="unbounded"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="locInfoType"> |
<xs:sequence> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="locMethod"> |
<xs:simpleContent> |
<xs:extension base="xs:string"> |
<xs:attribute ref="xml:lang" /> |
</xs:extension> |
</xs:simpleContent> |
</xs:complexType> |
<xs:complexType name="locMethod"> |
<xs:simpleContent> |
<xs:extension base="xs:string"> |
<xs:attribute ref="xml:lang" /> |
</xs:extension> |
</xs:simpleContent> |
</xs:complexType> |
<xs:complexType name="locProvidedBy"> |
<xs:sequence> |
<xs:any namespace="##other" processContents="skip" |
minOccurs="1" maxOccurs="unbounded"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType name="locProvidedBy"> |
<xs:sequence> |
<xs:any namespace="##other" processContents="skip" |
minOccurs="1" maxOccurs="unbounded" /> |
</xs:sequence> |
</xs:complexType> |
</xs:schema> |
</xs:schema> |
/trunk/xsd/regInfo.xsd |
---|
1,111 → 1,111 |
<xs:schema targetNamespace="urn:ietf:params:xml:ns:reginfo" |
xmlns:tns="urn:ietf:params:xml:ns:reginfo" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<!-- |
RFC 3680 clause 5.4 |
--> |
<!-- This import brings in the XML language attribute xml:lang--> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd"/> |
<xs:element name="reginfo"> |
<xs:complexType> |
<xs:sequence> |
<xs:element ref="tns:registration" minOccurs="0" |
maxOccurs="unbounded"/> |
<xs:any namespace="##other" processContents="lax" minOccurs="0" |
maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="version" type="xs:nonNegativeInteger" |
use="required"/> |
<xs:attribute name="state" use="required"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="full"/> |
<xs:enumeration value="partial"/> |
</xs:restriction> |
</xs:simpleType> |
</xs:attribute> |
</xs:complexType> |
</xs:element> |
<xs:element name="registration"> |
<xs:complexType> |
<xs:sequence> |
<xs:element ref="tns:contact" minOccurs="0" maxOccurs="unbounded"/> |
<xs:any namespace="##other" processContents="lax" minOccurs="0" |
maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="aor" type="xs:anyURI" use="required"/> |
<xs:attribute name="id" type="xs:string" use="required"/> |
<xs:attribute name="state" use="required"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="init"/> |
<xs:enumeration value="active"/> |
<xs:enumeration value="terminated"/> |
</xs:restriction> |
</xs:simpleType> |
</xs:attribute> |
</xs:complexType> |
</xs:element> |
<xs:element name="contact"> |
<xs:complexType> |
<xs:sequence> |
<xs:element name="uri" type="xs:anyURI"/> |
<xs:element name="display-name" minOccurs="0"> |
<xs:complexType> |
<xs:simpleContent> |
<xs:extension base="xs:string"> |
<xs:attribute ref="xml:lang" use="optional"/> |
</xs:extension> |
</xs:simpleContent> |
</xs:complexType> |
</xs:element> |
<xs:element name="unknown-param" minOccurs="0" |
maxOccurs="unbounded"> |
<xs:complexType> |
<xs:simpleContent> |
<xs:extension base="xs:string"> |
<xs:attribute name="name" type="xs:string" use="required"/> |
</xs:extension> |
</xs:simpleContent> |
</xs:complexType> |
</xs:element> |
<xs:any namespace="##other" processContents="lax" minOccurs="0" |
maxOccurs="unbounded"/> |
</xs:sequence> |
<xs:attribute name="state" use="required"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="active"/> |
<xs:enumeration value="terminated"/> |
</xs:restriction> |
</xs:simpleType> |
</xs:attribute> |
<xs:attribute name="event" use="required"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="registered"/> |
<xs:enumeration value="created"/> |
<xs:enumeration value="refreshed"/> |
<xs:enumeration value="shortened"/> |
<xs:enumeration value="expired"/> |
<xs:enumeration value="deactivated"/> |
<xs:enumeration value="probation"/> |
<xs:enumeration value="unregistered"/> |
<xs:enumeration value="rejected"/> |
</xs:restriction> |
</xs:simpleType> |
</xs:attribute> |
<xs:attribute name="duration-registered" type="xs:unsignedLong"/> |
<xs:attribute name="expires" type="xs:unsignedLong"/> |
<xs:attribute name="retry-after" type="xs:unsignedLong"/> |
<xs:attribute name="id" type="xs:string" use="required"/> |
<xs:attribute name="q" type="xs:string"/> |
<xs:attribute name="callid" type="xs:string"/> |
<xs:attribute name="cseq" type="xs:unsignedLong"/> |
</xs:complexType> |
</xs:element> |
</xs:schema> |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema targetNamespace="urn:ietf:params:xml:ns:reginfo" |
xmlns:tns="urn:ietf:params:xml:ns:reginfo" xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<!-- RFC 3680 clause 5.4 --> |
<!-- This import brings in the XML language attribute xml:lang --> |
<xs:import namespace="http://www.w3.org/XML/1998/namespace" |
schemaLocation="xml.xsd" /> |
<xs:element name="reginfo"> |
<xs:complexType> |
<xs:sequence> |
<xs:element ref="tns:registration" minOccurs="0" |
maxOccurs="unbounded" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="version" type="xs:nonNegativeInteger" |
use="required" /> |
<xs:attribute name="state" use="required"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="full" /> |
<xs:enumeration value="partial" /> |
</xs:restriction> |
</xs:simpleType> |
</xs:attribute> |
</xs:complexType> |
</xs:element> |
<xs:element name="registration"> |
<xs:complexType> |
<xs:sequence> |
<xs:element ref="tns:contact" minOccurs="0" |
maxOccurs="unbounded" /> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="aor" type="xs:anyURI" use="required" /> |
<xs:attribute name="id" type="xs:string" use="required" /> |
<xs:attribute name="state" use="required"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="init" /> |
<xs:enumeration value="active" /> |
<xs:enumeration value="terminated" /> |
</xs:restriction> |
</xs:simpleType> |
</xs:attribute> |
</xs:complexType> |
</xs:element> |
<xs:element name="contact"> |
<xs:complexType> |
<xs:sequence> |
<xs:element name="uri" type="xs:anyURI" /> |
<xs:element name="display-name" minOccurs="0"> |
<xs:complexType> |
<xs:simpleContent> |
<xs:extension base="xs:string"> |
<xs:attribute ref="xml:lang" |
use="optional" /> |
</xs:extension> |
</xs:simpleContent> |
</xs:complexType> |
</xs:element> |
<xs:element name="unknown-param" minOccurs="0" |
maxOccurs="unbounded"> |
<xs:complexType> |
<xs:simpleContent> |
<xs:extension base="xs:string"> |
<xs:attribute name="name" |
type="xs:string" use="required" /> |
</xs:extension> |
</xs:simpleContent> |
</xs:complexType> |
</xs:element> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
<xs:attribute name="state" use="required"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="active" /> |
<xs:enumeration value="terminated" /> |
</xs:restriction> |
</xs:simpleType> |
</xs:attribute> |
<xs:attribute name="event" use="required"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="registered" /> |
<xs:enumeration value="created" /> |
<xs:enumeration value="refreshed" /> |
<xs:enumeration value="shortened" /> |
<xs:enumeration value="expired" /> |
<xs:enumeration value="deactivated" /> |
<xs:enumeration value="probation" /> |
<xs:enumeration value="unregistered" /> |
<xs:enumeration value="rejected" /> |
</xs:restriction> |
</xs:simpleType> |
</xs:attribute> |
<xs:attribute name="duration-registered" type="xs:unsignedLong" /> |
<xs:attribute name="expires" type="xs:unsignedLong" /> |
<xs:attribute name="retry-after" type="xs:unsignedLong" /> |
<xs:attribute name="id" type="xs:string" use="required" /> |
<xs:attribute name="q" type="xs:string" /> |
<xs:attribute name="callid" type="xs:string" /> |
<xs:attribute name="cseq" type="xs:unsignedLong" /> |
</xs:complexType> |
</xs:element> |
</xs:schema> |
/trunk/xsd/simservs.xsd |
---|
1,83 → 1,90 |
<?xml version="1.0" encoding="UTF-8"?> |
<!-- TS 27.173 / 183 023 --> |
<xs:schema targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<!-- The element "simservs" maps to the Common Parts of an NGN PSTN/ISDN Simulation services document --> |
<!-- The element "simservs" maps to the Common Parts of an NGN PSTN/ISDN |
Simulation services document --> |
<xs:element name="simservs"> |
<xs:annotation> |
<xs:documentation>XML Schema for data manipulation of ETSI |
NGN PSTN/ISDN Simulation Services |
</xs:documentation> |
</xs:annotation> |
<xs:complexType> |
<xs:sequence> |
<xs:group ref="ss:absServiceGroup" minOccurs="0" maxOccurs="unbounded" /> |
<xs:element name="extensions" minOccurs="0"> |
<xs:complexType> |
<xs:sequence> |
<xs:any namespace="##other" processContents="lax" |
minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
</xs:complexType> |
<xs:element name="simservs"> |
<xs:annotation> |
<xs:documentation>XML Schema for data manipulation of ETSI |
NGN PSTN/ISDN Simulation Services |
</xs:documentation> |
</xs:annotation> |
<xs:complexType> |
<xs:sequence> |
<xs:group ref="ss:absServiceGroup" minOccurs="0" |
maxOccurs="unbounded" /> |
<xs:element name="extensions" minOccurs="0"> |
<xs:complexType> |
<xs:sequence> |
<xs:any namespace="##other" |
processContents="lax" minOccurs="0" |
maxOccurs="unbounded" /> |
</xs:sequence> |
</xs:complexType> |
</xs:element> |
</xs:sequence> |
<xs:anyAttribute namespace="##any" |
processContents="lax" /> |
</xs:complexType> |
</xs:element> |
</xs:sequence> |
<xs:anyAttribute namespace="##any" processContents="lax"/> |
</xs:complexType> |
</xs:element> |
<xs:element name="absService" abstract="true" type="ss:simservType"/> |
<xs:element name="absService" abstract="true" type="ss:simservType" /> |
<xs:complexType name="simservType"> |
<xs:attribute name="active" type="xs:boolean" |
use="optional" default="true" /> |
<xs:anyAttribute namespace="##any" processContents="lax"/> |
</xs:complexType> |
<xs:attribute name="active" type="xs:boolean" use="optional" |
default="true" /> |
<xs:anyAttribute namespace="##any" |
processContents="lax" /> |
</xs:complexType> |
<!-- service specific IETF common policy condition elements--> |
<xs:element name="anonymous" type="ss:empty-element-type"/> |
<xs:element name="presence-status" type="ss:presence-status-activity-type"/> |
<xs:element name="media" type="ss:media-type1"/> |
<xs:element name="communication-diverted" type="ss:empty-element-type"/> |
<xs:element name="rule-deactivated" type="ss:empty-element-type"/> |
<xs:element name="not-registered" type="ss:empty-element-type"/> |
<xs:element name="busy" type="ss:empty-element-type"/> |
<xs:element name="no-answer" type="ss:empty-element-type"/> |
<xs:element name="not-reachable" type="ss:empty-element-type"/> |
<xs:element name="roaming" type="ss:empty-element-type"/> |
<!-- service specific IETF common policy condition elements --> |
<xs:element name="anonymous" type="ss:empty-element-type" /> |
<xs:element name="presence-status" type="ss:presence-status-activity-type" /> |
<xs:element name="media" type="ss:media-type1" /> |
<xs:element name="communication-diverted" type="ss:empty-element-type" /> |
<xs:element name="rule-deactivated" type="ss:empty-element-type" /> |
<xs:element name="not-registered" type="ss:empty-element-type" /> |
<xs:element name="busy" type="ss:empty-element-type" /> |
<xs:element name="no-answer" type="ss:empty-element-type" /> |
<xs:element name="not-reachable" type="ss:empty-element-type" /> |
<xs:element name="roaming" type="ss:empty-element-type" /> |
<!-- service specific type declarations --> |
<xs:simpleType name="media-type1"> |
<xs:restriction base="xs:string"/> |
</xs:simpleType> |
<xs:simpleType name="presence-status-activity-type"> |
<xs:restriction base="xs:string"/> |
</xs:simpleType> |
<xs:complexType name="empty-element-type"/> |
<!-- ETSI substitutionGroup workaround, because TTCN-3 does not support mapping of substitutionGroup --> |
<xs:group name="absServiceGroup"> |
<xs:choice> |
<!-- default --> |
<xs:element ref="ss:absService"/> |
<!-- TIP-TRI --> |
<xs:element ref="ss:terminating-identity-presentation-restriction"/> |
<xs:element ref="ss:terminating-identity-presentation"/> |
<!-- OIP-OIR --> |
<xs:element ref="ss:originating--identity--presentation--restriction"/> |
<xs:element ref="ss:originating--identity--presentation"/> |
<!-- CDIV --> |
<xs:element ref="ss:communication-diversion"/> |
<!-- ACR-CB --> |
<xs:element ref="ss:incoming-communication-barring"/> |
<xs:element ref="ss:outgoing-communication-barring"/> |
<!-- CUG --> |
<!-- <xs:element ref="cug"/> --> |
</xs:choice> |
</xs:group> |
<!-- service specific type declarations --> |
<xs:simpleType name="media-type1"> |
<xs:restriction base="xs:string" /> |
</xs:simpleType> |
<xs:simpleType name="presence-status-activity-type"> |
<xs:restriction base="xs:string" /> |
</xs:simpleType> |
<xs:complexType name="empty-element-type" /> |
<!-- ETSI substitutionGroup workaround, because TTCN-3 does not support |
mapping of substitutionGroup --> |
<xs:group name="absServiceGroup"> |
<xs:choice> |
<!-- default --> |
<xs:element ref="ss:absService" /> |
<!-- TIP-TRI --> |
<xs:element |
ref="ss:terminating-identity-presentation-restriction" /> |
<xs:element ref="ss:terminating-identity-presentation" /> |
<!-- OIP-OIR --> |
<xs:element |
ref="ss:originating--identity--presentation--restriction" /> |
<xs:element ref="ss:originating--identity--presentation" /> |
<!-- CDIV --> |
<xs:element ref="ss:communication-diversion" /> |
<!-- ACR-CB --> |
<xs:element ref="ss:incoming-communication-barring" /> |
<xs:element ref="ss:outgoing-communication-barring" /> |
<!-- CUG --> |
<!-- <xs:element ref="cug"/> --> |
</xs:choice> |
</xs:group> |
</xs:schema> |
/trunk/xsd/xdm_commonPolicy-v1_0.xsd |
---|
1,107 → 1,73 |
<?xml version="1.0" encoding="UTF-8"?> |
<!-- |
XDM - Common Policy |
version - 1.0 |
date - 27 Jun 2008 |
<!-- XDM - Common Policy version - 1.0 date - 27 Jun 2008 FILE INFORMATION |
OMA Permanent Document File: OMA-SUP-XSD_xdm_commonPolicy-V1_0_2-20080627-A |
Type: Text - Schema Description Public Reachable Information Path: http://www.openmobilealliance.org/tech/profiles |
Name: xdm_commonPolicy-v1_0.xsd NORMATIVE INFORMATION Information about this |
file can be found in the specification OMA-TS-XDM_Core-V1_1 available at |
http://www.openmobilealliance.org/ Send comments to technical-comments@mail.openmobilealliance.org |
LEGAL DISCLAIMER Use of this document is subject to all of the terms and |
conditions of the Use Agreement located at http://www.openmobilealliance.org/UseAgreement.html |
You may use this document or any part of the document for internal or educational |
purposes only, provided you do not modify, edit or take out of context the |
information in this document in any manner. Information contained in this |
document may be used, at your sole risk, for any purposes. You may not use |
this document in any other manner without the prior written permission of |
the Open Mobile Alliance. The Open Mobile Alliance authorizes you to copy |
this document, provided that you retain all copyright and other proprietary |
notices contained in the original materials on any copies of the materials |
and that you comply strictly with these terms. This copyright permission |
does not constitute an endorsement of the products or services. The Open |
Mobile Alliance assumes no responsibility for errors or omissions in this |
document. Each Open Mobile Alliance member has agreed to use reasonable endeavors |
to inform the Open Mobile Alliance in a timely manner of Essential IPR as |
it becomes aware that the Essential IPR is related to the prepared or published |
specification. However, the members do not have an obligation to conduct |
IPR searches. The declared Essential IPR is publicly available to members |
and non-members of the Open Mobile Alliance and may be found on the "OMA |
IPR Declarations" list at http://www.openmobilealliance.org/ipr.html. The |
Open Mobile Alliance has not conducted an independent IPR review of this |
document and the information contained herein, and makes no representations |
or warranties regarding third party IPR, including without limitation patents, |
copyrights or trade secret rights. This document may contain inventions for |
which you must obtain licenses from third parties before making, using or |
selling the inventions. Defined terms above are set forth in the schedule |
to the Open Mobile Alliance Application Form. NO REPRESENTATIONS OR WARRANTIES |
(WHETHER EXPRESS OR IMPLIED) ARE MADE BY THE OPEN MOBILE ALLIANCE OR ANY |
OPEN MOBILE ALLIANCE MEMBER OR ITS AFFILIATES REGARDING ANY OF THE IPR'S |
REPRESENTED ON THE "OMA IPR DECLARATIONS" LIST, INCLUDING, BUT NOT LIMITED |
TO THE ACCURACY, COMPLETENESS, VALIDITY OR RELEVANCE OF THE INFORMATION OR |
WHETHER OR NOT SUCH RIGHTS ARE ESSENTIAL OR NON-ESSENTIAL. THE OPEN MOBILE |
ALLIANCE IS NOT LIABLE FOR AND HEREBY DISCLAIMS ANY DIRECT, INDIRECT, PUNITIVE, |
SPECIAL, INCIDENTAL, CONSEQUENTIAL, OR EXEMPLARY DAMAGES ARISING OUT OF OR |
IN CONNECTION WITH THE USE OF DOCUMENTS AND THE INFORMATION CONTAINED IN |
THE DOCUMENTS. Copyright 2008 Open Mobile Alliance Ltd. All Rights Reserved. |
Used with the permission of the Open Mobile Alliance Ltd. under the terms |
set forth above. --> |
FILE INFORMATION |
OMA Permanent Document |
File: OMA-SUP-XSD_xdm_commonPolicy-V1_0_2-20080627-A |
Type: Text - Schema Description |
Public Reachable Information |
Path: http://www.openmobilealliance.org/tech/profiles |
Name: xdm_commonPolicy-v1_0.xsd |
NORMATIVE INFORMATION |
Information about this file can be found in the specification |
OMA-TS-XDM_Core-V1_1 |
available at http://www.openmobilealliance.org/ |
Send comments to technical-comments@mail.openmobilealliance.org |
LEGAL DISCLAIMER |
Use of this document is subject to all of the terms and conditions |
of the Use Agreement located at |
http://www.openmobilealliance.org/UseAgreement.html |
You may use this document or any part of the document for internal |
or educational purposes only, provided you do not modify, edit or |
take out of context the information in this document in any manner. |
Information contained in this document may be used, at your sole |
risk, for any purposes. |
You may not use this document in any other manner without the prior |
written permission of the Open Mobile Alliance. The Open Mobile |
Alliance authorizes you to copy this document, provided that you |
retain all copyright and other proprietary notices contained in the |
original materials on any copies of the materials and that you |
comply strictly with these terms. This copyright permission does |
not constitute an endorsement of the products or services. The |
Open Mobile Alliance assumes no responsibility for errors or |
omissions in this document. |
Each Open Mobile Alliance member has agreed to use reasonable |
endeavors to inform the Open Mobile Alliance in a timely manner of |
Essential IPR as it becomes aware that the Essential IPR is related |
to the prepared or published specification. However, the members |
do not have an obligation to conduct IPR searches. The declared |
Essential IPR is publicly available to members and non-members of |
the Open Mobile Alliance and may be found on the "OMA IPR |
Declarations" list at http://www.openmobilealliance.org/ipr.html. |
The Open Mobile Alliance has not conducted an independent IPR review |
of this document and the information contained herein, and makes no |
representations or warranties regarding third party IPR, including |
without limitation patents, copyrights or trade secret rights. This |
document may contain inventions for which you must obtain licenses |
from third parties before making, using or selling the inventions. |
Defined terms above are set forth in the schedule to the Open Mobile |
Alliance Application Form. |
NO REPRESENTATIONS OR WARRANTIES (WHETHER EXPRESS OR IMPLIED) ARE |
MADE BY THE OPEN MOBILE ALLIANCE OR ANY OPEN MOBILE ALLIANCE MEMBER |
OR ITS AFFILIATES REGARDING ANY OF THE IPR'S REPRESENTED ON THE "OMA |
IPR DECLARATIONS" LIST, INCLUDING, BUT NOT LIMITED TO THE ACCURACY, |
COMPLETENESS, VALIDITY OR RELEVANCE OF THE INFORMATION OR WHETHER OR |
NOT SUCH RIGHTS ARE ESSENTIAL OR NON-ESSENTIAL. |
THE OPEN MOBILE ALLIANCE IS NOT LIABLE FOR AND HEREBY DISCLAIMS ANY |
DIRECT, INDIRECT, PUNITIVE, SPECIAL, INCIDENTAL, CONSEQUENTIAL, OR |
EXEMPLARY DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE OF |
DOCUMENTS AND THE INFORMATION CONTAINED IN THE DOCUMENTS. |
Copyright 2008 Open Mobile Alliance Ltd. All Rights Reserved. |
Used with the permission of the Open Mobile Alliance Ltd. under the |
terms set forth above. |
--> |
<xs:schema targetNamespace="urn:oma:xml:xdm:common-policy" |
xmlns="urn:oma:xml:xdm:common-policy" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
xmlns="urn:oma:xml:xdm:common-policy" xmlns:xs="http://www.w3.org/2001/XMLSchema" |
elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<!-- OMA specific "conditions" child elements --> |
<xs:element name="other-identity" type="emptyType"/> |
<!-- OMA specific "conditions" child elements --> |
<xs:element name="other-identity" type="emptyType" /> |
<xs:element name="external-list"> |
<xs:complexType> |
<xs:sequence> |
<xs:element name="entry" type="anchorType" minOccurs="0" maxOccurs="unbounded"/> |
</xs:sequence> |
</xs:complexType> |
<xs:complexType> |
<xs:sequence> |
<xs:element name="entry" type="anchorType" |
minOccurs="0" maxOccurs="unbounded" /> |
</xs:sequence> |
</xs:complexType> |
</xs:element> |
<xs:element name="anonymous-request" type="emptyType"/> |
<xs:element name="anonymous-request" type="emptyType" /> |
<xs:complexType name="anchorType"> |
<xs:attribute name="anc" type="xs:anyURI"/> |
<xs:anyAttribute processContents="lax"/> |
</xs:complexType> |
<xs:complexType name="anchorType"> |
<xs:attribute name="anc" type="xs:anyURI" /> |
<xs:anyAttribute processContents="lax" /> |
</xs:complexType> |
<xs:complexType name="emptyType"/> |
<xs:complexType name="emptyType" /> |
</xs:schema> |
/trunk/xsd/xml.xsd |
---|
1,38 → 1,38 |
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
xml:lang="en"> |
<?xml version="1.0" encoding="UTF-8"?> |
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" |
xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en"> |
<xs:attribute name="lang"> |
<xs:simpleType> |
<xs:union memberTypes="xs:language"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration value=""/> |
</xs:restriction> |
</xs:simpleType> |
</xs:union> |
</xs:simpleType> |
</xs:attribute> |
<xs:attribute name="lang"> |
<xs:simpleType> |
<xs:union memberTypes="xs:language"> |
<xs:simpleType> |
<xs:restriction base="xs:string"> |
<xs:enumeration value="" /> |
</xs:restriction> |
</xs:simpleType> |
</xs:union> |
</xs:simpleType> |
</xs:attribute> |
<xs:attribute name="space"> |
<xs:simpleType> |
<xs:restriction base="xs:NCName"> |
<xs:enumeration value="default"/> |
<xs:enumeration value="preserve"/> |
</xs:restriction> |
</xs:simpleType> |
</xs:attribute> |
<xs:attribute name="base" type="xs:anyURI"> |
</xs:attribute> |
<xs:attribute name="id" type="xs:ID"> |
</xs:attribute> |
<xs:attribute name="space"> |
<xs:simpleType> |
<xs:restriction base="xs:NCName"> |
<xs:enumeration value="default" /> |
<xs:enumeration value="preserve" /> |
</xs:restriction> |
</xs:simpleType> |
</xs:attribute> |
<xs:attributeGroup name="specialAttrs"> |
<xs:attribute ref="xml:base"/> |
<xs:attribute ref="xml:lang"/> |
<xs:attribute ref="xml:space"/> |
<xs:attribute ref="xml:id"/> |
</xs:attributeGroup> |
<xs:attribute name="base" type="xs:anyURI"> |
</xs:attribute> |
<xs:attribute name="id" type="xs:ID"> |
</xs:attribute> |
<xs:attributeGroup name="specialAttrs"> |
<xs:attribute ref="xml:base" /> |
<xs:attribute ref="xml:lang" /> |
<xs:attribute ref="xml:space" /> |
<xs:attribute ref="xml:id" /> |
</xs:attributeGroup> |
</xs:schema> |
/trunk/xsd |
---|
Property changes: |
Added: svn:ignore |
## -0,0 +1 ## |
+ttcn3view |
Index: trunk |
=================================================================== |
--- trunk (revision 631) |
+++ trunk (revision 632) |
/trunk |
---|
Property changes: |
Added: svn:ignore |
## -0,0 +1 ## |
+XSDAUX.ttcn |
Added: svn:mergeinfo |
## -0,0 +0,1 ## |
Merged /branches/v3:r553-628 |